Linux 명령어(1)

이수현·2025년 7월 8일

Linux

목록 보기
8/10
post-thumbnail

1. 파일 유형 출럭

1)file

리눅스에서 file 명령어는 지정한 파일이나 디렉터리가 어떤 유형인지(종류인지 판별해 주는 명령어

# file [파일명 또는 디렉터리 명]

📌 사용 목적

  • 이 파일이 텍스트 파일인지, 바이너리 파일인지, 실행 파일인지, 이미지인지, 디렉터리인지 등을 확인 할 수 있다.
  • 확장자와 관계 없이 실제 내부 구조를 분석해서 판별해주므로, 확장자가 .txt라도 내용이 바이너리이면 그걸 알려준다.

🧪 예시로 보는 결과

# file passwd

passwod: ASCII text
//passwd라는 파일은 ASCII 문자로 이루어진 일반 텍스트 파일이라는 뜻

📘 자주 나오는 판별 결과 종류

  • ASCII text : 일반 텍스트 파일
  • UTF-8 Unicode text : 유니코드 텍스트 파일
  • Bourne-Again shell script : 쉘 스크립트 파일
  • ELF 64-bit LSB executable : 실행 가능한 바이너리 파일(리눅스 프로그램)
  • JPEG image data : JPG dlalwl vkdlf
  • directory : 디렉터리(폴더)
  • empty : 비어 있는 파일

2. 문자 추출

1) grep

grep은 텍스트 파일에서 특정 문자열이나 패턴을 찾아 출력해주는 명령어

# grep [옵션] '찾을 문자열' [파일명]

🧪 예시

# grep 'linux' pse.txt
  • pes.txt 파일에서 'linux'라는 단어가 포함된 줄을 찾아 출력합니다
  • 대소문자 구분하며, 정확히 'linux'가 포함된 줄만 나온다.

🔢 줄 번호까지 보고 싶다면?

# grep -n 'linux' pse.txt
  • -n 옵션을 붙이면 해당 줄의 줄번호도 같이 출력됨

💡 자주 쓰는 grep 옵션들

  • -n : 해당 문자열이 있는 줄번호를 함께 출력
  • -i : 대수몬자 구분 없이 찾기
  • -v : 해당 문자열이 없는 줄만 출력
  • -r : 디렉터리 내부까지 재귀적으로 검색
  • -c : 몇줄에서 발견됐는지 개수만 출력
  • -l : 해당 문자열을 포함하는 파일 이름만 출력
  • ^root : 'root'로 시작하는 줄만 출력
  • root$ : 'root'로 끝나는 줄만 출력
  • --color : 검색된 문자열에 색상 강조

2) cut

cut 명령어는 파일에서 "문자열의 특정 위치(컬럼)"나 구분자를 기준으로 나눈 필드를 추출할 때 사용하는 명령어

# cut [옵션] [설정값] [파일명]

<옵션>

  • -c : 문자 위치(컬럼)로 자름
  • -f : 필드 번호로 자름(구분자가 있는 경우
  • -d : 필드를 구분하는 구분자 지정

💡 예제 파일 (pse1.txt)

kim,20,서울
lee,20,부산
park,30,대구

1️⃣ 컬럼 자르기: -c

# cut -c 1 pse1.txt // 각 줄의 첫번쨰 문자만 출력

//결과
k
l
p
# cut -c 2-3 pse1.txt // 각 줄의 2번째~3번째 문자만 출력

//결과
im
ee
ar

2️⃣ 필드 자르기: -f + -d

# cut -f 2 pse1.txt
  • 기본 구분자가 TAB이기 떄문에, 쉼표 구분이라면 안먹힘. TAB으로 구분된 파일이어야 동작함
  • 쉼표(,)로 구분 된 경우, 반드시 -d 옵션을 함께 써야 한다

3️⃣ 쉼표로 구분된 필드 자르기

# cut -f 3 -d , pse1.txt //쉼표를 기준으로 나눴을 떄 3번째 필드만 출력

//결과
서울
부산
대구

5️⃣ 여러 필드 추출

# cut -f 1,3 -d , pse1.txt // 1번째와 3번째 필드 출력

//결과
kim,서울
lee,부산
park,대구

3) sed

sed는 Stream EDitor(스트림 편집기)의 약자이며,
파일이나 표준 입력에서 텍스트를 행 단위로 읽어와서 가공하거나 필터링 하는 명령어

# sed [옵션] '동작' [파일명]

<옵션>

  • -n : 출력 억제
  • -e : 여러 동작 저장할 떄 사용
  • p : print
  • '2p' : 2번쨰 출력

🧪 예제 파일 (pse1.txt)

1. kim,20,서울
2. lee,25,부산
3. park,30,대구
4. choi,22,인천
5. jung,27,광주
6. han,35,대전
7. yoon,28,울산
8. jang,26,세종

1️⃣ 특정 행 출력

# sed -n 5p pse1.txt // 5번째 줄만 출력

//결과 
jung,27,광주

2️⃣ 여러 행 출력

# sed -n -e 3p -e 7p pse1.txt //3, 7번째 줄 출력

//결과
park,30,대구
yoon,28,울산

3️⃣ 연속된 줄 출력

# sed -n -e 2,4p pse1.txt // 2번째 줄부터 4번째 줄까지 출력

//결과
lee,25,부산
park,30,대구
choi,22,인천

4️⃣ 끝까지 출력

sed -n -e '2,$p' pse1.txt // $는 파일의 마지막 줄을 의미. 2번쨰부터 끝까지 출력

//결과
lee,25,부산
park,30,대구
choi,22,인천
jung,27,광주
han,35,대전
yoon,28,울산
jang,26,세종

💡 왜 -n을 쓰나요?

  • sed는 기본적으로 모든 줄을 처리해서 다 출력
  • -n으로 자동 출력은 꺼두고 p로 내가 지정한 줄만 출력하는 것

3) awk

awk는 행 단위로 파일을 읽어서, 필드를 기준으로 데이터 처리나 조건 검색, 집계 등을 할 수 있는 텍스트 처리용 언어

# awk [옵션] '조건 {처리}' [파일명]

📄 예시 파일 (pse1.txt)

kim,80,서울
lee,60,부산
park,70,대구
choi,90,서울
jung,50,부산

1️⃣ 특정 줄 출력 (줄 번호 기준)

# awk 'NR==5' pse1.txt //NR은 "현재 줄 번호"를 의미, 5번쨰 줄만 출력

//결과
jung,50,부산
# awk 'NR==3 || NR==5' pse1.txt //3번쨰 줄 또는 7번쨰 줄 출력

//결과
park,70,대구
jung,50,부산
# awk 'NR>=3 && NR<=7 pse1.txt //3번째 줄부터 7번쨰 줄까지 출력

//결과
lee,60,부산
park,70,대구
choi,90,서울
jung,50,부산

2️⃣ 필드(열) 출력: $1, $2, $3...

# awk -F , '{print $1}' pse1.txt //쉼표(,) 기준 필드로 자른 후, 첫번쨰 필드만 출력

//결과
kim
lee
park
choi
jung

3️⃣ 조건에 맞는 행만 출력

# awk -F , '$2 >= 70' pse1.txt // 두번쨰 행이 70 이상인 것만 출력

//결과
kim,80,서울
choi,90,서울

4️⃣ 문자열과 필드 결합 출력

# awk -F , '{print $1 "의 나이: " $2}' pse1.txt //1번째 필드와 2번쨰 필드를 조합하여 출력

//결과
kim의 나이: 80
lee의 나이: 60
park의 나이: 70
choi의 나이: 90
jung의 나이: 50

5️⃣ 합계와 평균 구하기

# awk -F , '{sum += $2} END {print "합계: ", sum, "평균: ", sum/NR}' pse1.txt // 각줄의 2번쨰 필드를 sum에 누적. END{} 블록에서 마지막줄에 도달하면 합계와 평균 출력

//결과
합계:  350 평균: 70 
//NR은 총 줄 수를 나타냄

4) sort

sort는 파일의 내용을 행 단위로 정렬해주는 명령어
기본적으로 사전 순(A~Z) 또는 숫자 순으로 정렬하며, 특정 열(필드)을 기준으로 정렬할 수도 있다.

# sort [옵션] -k [열번호] [파일명]
  • -k옵션은 "key"의 약자이며, 몇 번쨰 열을 기준으로 정렬할 지 지정
  • 구분자는 기본적으로 공백(스페이스/텝) 이지만, -t로 변경 가능
  • 파일이 쉼표로 구분 된 경우는 -t ',' 같이 정해야함

📄 예제 파일: pse2.txt

kim 80 서울
lee 70 부산
park 90 대구
choi 60 광주
jung 75 울산

1️⃣ 첫 번쨰 열(이름) 기준 정렬

# sort -t , -k 1 pse1.txt // 이름 순으로 정렬(첫번째 열, 사전 순)

//결과
choi,60,광주
jung,75,울산
kim,80,서울
lee,70,부산
park,90,대구

2️⃣ 두번쨰 열(숫자 점수) 기준 정렬

# sort -t , -k 2 pse1.txt //점수를 기준으로 정렬(두번쨰 열 기본은 문자열 기준 정렬)

//결과
choi,60,광주
lee,70,부산
jung,75,울산
kim,80,서울
park,90,대구

3️⃣ 정렬 후 줄번호 붙이기

# sort -t , -k 3 pse1.txt | nl // 도시 이름 기준 정렬 후 줄 번호 붙이기

//결과
     1	choi,60,광주
     2	park,90,대구
     3	lee,70,부산
     4	kim,80,서울
     5	jung,75,울산

4️⃣ 두번쨰 열을 역순(내림차순)으로 정렬 + 줄번호

# sort -t , -k 2 -r pse1.txt | nl

//결과
     1	park,90,대구
     2	kim,80,서울
     3	jung,75,울산
     4	lee,70,부산
     5	choi,60,광주

3. 텍스트 화면 출력

1) echo

echo는 터미널에 텍스트나 변수값을 출력하는 명령어

# echo [출력할 내용 또는 환경 변수]

1️⃣ echo $PWD

  • $PWD는 현재 작업 중인 디렉터리 경로가 저장된 환경 변수
# echo $PWD

//결과
/tmp/practice/korea

2️⃣ echo $HOSTNAME

  • $HOSTNAME은 컴퓨터(호스트)의 이름을 저장한 환경 변수
# echo $HOSTNAME

3️⃣ echo $HOME

  • $HOME은 현재 사용자의 홈 디렉터리 경로를 가리킴
# echo $HOME

//결과
/Users/suhyenlee

4️⃣ echo {A..Z}

  • {A..Z}는 A부터 Z까지의 알파벳 시퀀스를 생성하는 Bash의 중괄호 확장 기능
  • 실행하면 A부터 Z까지 알파벳이 공백으로 구분되어 출력됨
# echo {A..Z}

//결과
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

5️⃣ echo {A..Z} | tr -d ''

  • | 는 파이프(pipe)로, echo의 출력을 tr 명령어로 넘김
  • tr -d ''는 공백을 삭제하라는 명령어
# echo {A..Z} | tr -d ' '

//결과
ABCDEFGHIJKLMNOPQRSTUVWXYZ

4. 삭제 : rm

rm -rf [파일 또는 디렉터리명]

명령어별 의미

# rm -rf [b-d]* // 이름이 b,c,d로 시작하는 모든 파일/디렉터리 삭제

# rm -rf [bce]* // 이름이 b,c,e로 시작하는 모든 파일/디렉터리 삭제

# rm -rf [^b-d]* // 이름이 b-d 제외한 문자로 시작하는 모든 파일/디렉터리 삭제

# rm -rf [^ace]* // 이름이 a,c,e, 제외한 문자로 시작하는 모든 파일/디렉터리 삭제

5. 파일 이름 변경 : rename

# rename [바꿀 패턴] [바꿀 문자열] [파일들]
  • 저장한 패턴을 파일 이름에서 찾아서, 새 문자열로 바꿈

1) 단순 문자열 치환

# rename file file2 file2
  • file2라는 이름을 가진 파일들의 이름 안에서 "file을 찾아 "file2"로 바꿈

2)와일드카드와 rename의 조합

rename f file f*
  • f* : f로 시작하는 모든 파일 대상으로 실행
  • 파일 이름에 있는 "f"문자를 "file"로 바꿈
profile
신입개발자의 공부 기록

0개의 댓글