Infra & Security Eng/Linux Fundamentals

리눅스 명령어 총 정리

엔지니어 E 2025. 12. 23. 18:39
반응형

📌 리눅스 명령어 형식

기본 형식 command [옵션] 명령어 뒤에 옵션을 붙여 사용 # ls [옵션]
단일 문자 옵션 - 문자 한 글자 옵션, 여러 개 결합 가능 # ls -l -h / ls -lh
다중 문자 옵션 -- 단어 두 글자 이상 옵션, 의미가 명확 # ls --all
단일 문자 옵션 결합 - 문자문자 단일 문자 옵션을 한 번에 사용 # ls -lh

 

📌주요 명령어 총 정리 

📂 디렉토리 관련

cd 디렉토리 이동 cd [이동할 디렉토리]
pwd 현재 디렉토리 확인 -
mkdir 디렉토리 생성 -p, --parents: 상위 디렉토리 없으면 생성
mkdir -p /aa/a
rmdir 디렉토리 삭제 잘 사용하지 않음
tree 디렉토리 구조 출력 -d: 디렉토리만 출력

 

📁 디렉토리 개념

  • 파일을 담고 있는 일종의 방(=폴더)
  • 대소문자 구별
  • 디렉토리 구조는 / 기준 트리 구조

🌐 디렉토리 경로 표현


/ 최상위 root 디렉토리
./ 현재 디렉토리 (생략 가능)
../ 상위 디렉토리
~/ 각 사용자의 홈 디렉토리
절대경로 /부터 시작하는 경로
상대경로 ./ 또는 현재 위치 기준 경로

 

📄 파일/목록 관련

ls 현재 디렉토리 목록 출력 -a, --all: 숨김 파일 포함
* 숨겨진 파일 이름: .으로 시작함 ex) .config
- al: 숨겨진 파일 포함해서 상세 정보까지 함께 출력
-l: 파일 날짜, 용량 등 상세 정보를 보여줌
-r: 하위 디렉토리 내용 포함
-h: 사람이 읽기 쉬운 크기
-k: KB 단위 출력
-i: inode 번호 출력
- li: 파일의 아이덴티티 값을 확인 
  ex) ls -al | grep conf (나오는 라인중에 conf 라는 문자열이 들어있는 행만 출력 해줌)

실습
1. putty 로그인
2. mkdir a 입력
3. cd a 입력
4. cd .. 입력
5. cd a/ 입력  (원래 ./a/ 라고 쓰는데 생략된 것)
* a 라는 디렉토리라면 반드시 a 뒤에 "/" 를 입력
cat 파일 내용 출력 -n: 행 단위 번호
★ 많이 사용 → 프로그램 소스 코드 볼때 유용
-b: 공백 라인 제외 행 번호
→ 잘 사용하지는 않음

 

ls -l 명령어 출력 예시

-rw--------. 1 root root 1518 12월 17 15:05 anaconda-ks.cfg

출력 항목 설명

파일 권한 -rw--------. 소유자, 그룹, 기타 사용자의 읽기/쓰기/실행 권한
링크 수 1 하드 링크 수
소유자 root 파일 소유자
그룹 root 파일이 속한 그룹
파일 크기 1518 파일 크기(바이트 단위)
수정 날짜 12월 17 15:05 마지막 수정 또는 생성 날짜
파일 이름 anaconda-ks.cfg 파일 이름

 

📌 입출력 제어 (리다이렉트)

> 표준 출력 → 파일 덮어쓰기 command > 파일
>> 표준 출력 → 파일 이어쓰기 command >> 파일
< 표준 입력 ← 파일 command < 파일
<<EOF Here Document bash\ncat <<EOF > ./abc.txt\n내용 입력\nEOF\n

 

📄 파일 입출력 예시

1️⃣ 파일 내용을 다른 파일로 복사

 
cat < a.txt > b.txt
  • a.txt의 내용을 b.txt로 복사
  • 기존 b.txt 내용은 덮어쓰기

💡 TIP: 명령 프롬프트에서 텍스트 복사

  • 복사 방법: 드래그 → 마우스 휠 중앙 클릭

 

2️⃣ 파일 초기화 (내용 삭제)

 
cat < /dev/null > a.txt (회사 업무 시 null 파일 만드는 작업이 많음)
  • a.txt의 내용을 모두 지우고 빈 파일로 초기화

 

3️⃣ 내용 입력 후 저장

 
cat > b.txt
  • 명령어 실행 후 키보드로 입력한 내용이 b.txt에 저장 ("< 입력파일" 은 입력하지 않았으므로 입력은 키보드로부터 받음, 그래서 입력하라고 명령 프롬프트가 대기 하고 있음
  • 입력 완료 후 Ctrl+D 혹은 Ctrl+C 누르면 저장 종료
 

📌출력 관련 명령어

echo 문자열 또는 환경 변수 출력 echo "Hello"
echo $HOME
echo 1 > a.txt: 1 a.txt로 저장함
  * 변수: 자주 사용하는 값을 메모리 안에 저장 해놓는데 그 공간을 변수라고 부름
* 환경변수: 리눅스가 사용자 컴퓨터에 미리 지정 해놓은 변수로 1, '1' 이런 것들이 저장되어 있는 것 
* $: 변수를 지정함
*값(=리터럴): 문자 리터럴('1'), 숫자 리터럴(1) 
 
env 모든 환경 변수 출력 env
  ex)
#env | grep HOME: 환경 변수 목록 중에서 HOME 관련된 것만 출력해줘
cat 파일 내용 출력 -n: 행 단위 번호 
★ 많이 사용 → 프로그램 소스 코드 볼때 유용 
-b: 공백 라인 제외 행 번호 → 잘 사용하지는 않음
  ex)
cat file.txt
cat -n file.txt (행번호)
  ex)
# cat a.txt > b.txt: a.txt 입력 받아 b.txt 로 출력
# cat -n /etc/passwd | grep ftp: etc 밑에 passwd 라는 파일의 내용을 행 번호 붙여서(-n) 화면에 출력해줘 근데 출력되는 행 중에 ftp 라는 문자열이 들어간 행만 출력해줘
more/less 텍스트 파일이나 명령 출력 결과를 한 화면씩 보고, 위/아래로 이동할 수 있는 명령어  more file.txt
less /var/log/messages
  * more나 less 는 똑같다고 보면 됨
* 요새는 less를 더 많이 사용하고 있음
실습

1. 메모장에 a 적기
2. a.txt 제목으로 저장하기
3. cmd에 type a.txt 입력하면 a 라는 내용을 보여준다

 

📌 파일/디렉토리 복사·이동·삭제

cp 파일/디렉토리 복사
cp -arpf 원본(파일 혹은 디렉토리) 복사본(파일 혹은 디렉토리)
-r: 하위 디렉토리 포함
-p: 속성 유지
-f: 강제 실행
 
* cp의 옵션은 굳이 외울 필요 없이 한꺼번에 붙여서 쓰면 됨 cp -arpf

실습
cp aa ./a/bb 두가지 해석
1) aa 라는 파일을 ./ 아래 a 디렉토리 아래 bb 디렉토리 밑으로 복사하세요
2) aa 라는 파일을 ./ 아래 a 디렉토리 밑에 bb 라는 파일로 복사하세요
* 디렉토리를 가지고 작업할 시 반드시 파일명 뒤에 /를 넣어야 함
mv 파일/디렉토리 이동 -f: 강제 실행
-b: 덮어쓰기 시 백업
-i: 삭제 전 확인
  ex) mv c.txt a/: c.txt를 a 라는 디렉토리로 옮겨줘
  * mv 명령어는 이동 명령어 이기 때문에 원본이 없어짐
* 같은 파티션 내에서는 파일 간 이동이 빠름
rm 파일/디렉토리 삭제 -r: 디렉토리 삭제
-f: 강제 실행
  * rmdir 명령어보다 rm을 쓰는 일이 많음 

💡 TIP: 디렉토리를 강제로 삭제할 때는 rm -rf 디렉토리명

 

📌 링크

ln 원본 파일에 대해서 바로가기 파일을 만드는 것
ln [옵션] 원본파일 링크파일
→  링크파일을 열면 원본파일이 열림
-s: 심볼릭(소프트) 링크
→  [옵션]에 반드시 -s 옵션을 줘야 함(옵션을 안 준다면 hard 파일이 만들어지기 때문에)
  * 바로가기 파일이 있는데 원본 파일을 지우면? 
바로가기 파일은 쓸모 없어짐 (쓰레기 파일이 됨)
링크 파일은 리눅스 화면에서 빨간색으로 바뀌는데 실체가 없는 파일(쓰레기 파일)이 되었기 때문
★ 이런 빨간 파일들이 보이면 지워주는 작업을 하는 게 좋음
★ 요새는 보안상의 이유로 소프트링크를 잘 사용 안함


*  심볼릭 링크 파일은 디렉토리도 만들 수 있음

실습
1. putty에서 프롬프트에 cd /dev 입력
2. pwd
3. ls 
4. 하늘색으로 나오는 애들 => 
* 파일 각자 자세히 보고 싶다면 ls -al cdrom (해당파일 입력)
5. sr0는 링크 파일 / cdrom은 원본 파일
(쓰기 편하면 만들고, 쓰기 불편하면 안 만들어도 됨)
심볼릭 링크 원본 파일 위치 정보 저장, 다른 파일시스템 가능, inode 별도 원본 삭제 시 링크는 깨짐
하드 링크 원본과 동일 inode, 같은 파일시스템에서만 가능 원본 삭제 후에도 사용 가능

 

📌 파일 일부 출력


head 파일 앞부분 출력(오래됨) -n N: N줄 출력
-c N: N바이트 출력
tail 파일 뒷부분 출력(최근) -n N, -f: 실시간 추가 내용 출력

ex) tail -n 20 /var/log/nginx/error.log
  ★ tail:로그파일 볼때 많이 사용
★ 유닉스에서는 파일의 뒷부분 보는게 많음

 

📌 파일 크기/조작


truncate 파일 크기 변경 -s N: N 바이트로 설정
-r file: 기준 파일 크기 사용
  * 작동하고 있는 프로그램에 파일을 지우기 위해 사용
* 공간 확보 가능함
* 실제로 옵션을 사용하지 않음

설정파일이나 로그파일 내용 지울 때 사용 
ex) truncate -s 0  a.xtxt
touch 파일 시간 갱신, 빈 파일을 만들기도 함 -t: 특정 시간 지정 

ex)
touch -t 202405151330.45 filename.txt
(YYYYMMDDhhmm.ss 형식)

-a: 접근 시간 변경(마지막으로 접근한 시간만 변경)

-m: 수정 시간 변경
-r : 지정한 다른 파일의 시간과 똑같이 맞춤

 

📌 파일 검색


find 파일 시스템에서 조건 만족 파일 검색 -name: 이름
-perm: 권한
-type: 파일 종류 (f, d, l)
-mtime/-atime/-ctime: 시간 기준
-user/-group: 소유자 기준
-empty: 빈 파일
  ex) #find /etc/ /var/ -name ???.conf
etc 에서도 찾고 var 에서도 찾아줘
그리고 ???(3글자) 이면서.conf 로 끝나는 것들만 찾아줘
  * find 는 검색경로나 검색조건 등 여러 개 줄 수 있음

 

📌 압축/압축 해제


tar 파일 묶기/압축

압축하기: - cvzf
압출풀기: - xvzf
목록보기: - tvf
파일추가: - rvf
고효율압축: -J
-c: 압축
-x: 압축 해제
-v: 작업 내용 출력
-f: 파일 지정
-z: gzip 압축
-j: bzip2 압축
gzip gzip 압축 gzip a.txt
gzip -d a.txt.gz
bzip2 bzip2 압축 bzip2 a.txt
bunzip2 a.txt.bz2
compress compress 압축 compress a.txt
uncompress a.txt.Z
cpio 아카이브 생성/압축 해제 cpio -idmv < archive.cpio
  gzip, bzip2, compress, cpio 은 잘 사용하지 않음

 

📌 파일 정보 확인


stat 파일의 타임스탬프 출력

ex) stat test.txt

size 20 Blocks:8 IO Block: 4096 ...
atime (access) 마지막 접근 시간

ex) stat -c %y filename.txt
2024-05-15 11:30:00.000000000 +0900
ctime (change) 속성 변경 시간
mtime (modify)  내용 수정 시간

 

💡 Tip:

  • >: 덮어쓰기, >>: 이어쓰기
  • |(파이프): 명령어 연결, grep: 문자열 필터링 (내가 원하는 문자열에 들어있는 행만 보여주는것임)
  • ls -al | more 앞의 입력값을 받아서(al) 뒤에 넘겨줌 (more로)