[Linux] 리눅스 기본 활용 - 리눅스 명령어 정리1

Hyunjun Kim·2025년 3월 17일
0

Data_Engineering

목록 보기
3/153

1. man, 파일 시스템 명령어

man (manual의 약자.)

man (알고 싶은 명령어)

텍스트로 된 명령어 설명이 나타남!

  • j : 스크롤 아래로
  • k : 스크롤 위로
  • h : help
  • q : quit

manual과 비슷한 기능을 하는 옵션:

(명령어) --help / (명령어) -help / (명령어) -h



파일 시스템 이용을 위한 명령어

1. 경로를 어떻게 표시하는지 알아보자.

EC2 우분투에 아무 설정 변경 없이 접속하면 아래와 같은 형식으로 나타날 것이다.

ubuntu@ip-172-31-33-106:~$
  • ubuntu : 접속한 유저의 이름
  • @ : 구분자
  • ip-172-31-33-106 : 머신의 이름 (= 호스트네임)
    • 모든 호스트네임이 IP 주소로 되어 있지는 않으며, AWS에서 서버의 호스트네임을 IPv4 주소로 지으면 편리하게 구성됨.
  • : : 구분자
  • ~ : 현재 위치한 디렉토리 경로. 물결표시는 홈 디렉토리를 의미.

2. cd

cd /

루트 디렉토리로 이동

cd -

이동했던 경로를 기억해서 마지막 위치로 돌아감.

cd ~

사용자의 홈 디렉토리로 이동.


3. ls

ls -in
  • ls -i : inode 번호 출력
  • ls -n : 파일의 소유자와 그룹을 UID/GID 숫자로 출력
  • ls -in : inode 번호 + UID/GID 숫자 출력

inode는 리눅스에서 파일이나 디렉토리의 고유 식별자로, 파일 관리 시 중요한 역할을 합니다.

llls -l의 별칭(alias)로, 파일과 디렉토리의 상세 정보를 목록 형태로 출력하는 명령어입니다.


4. rm / rmdir

rm -r test

rm 명령어는 파일을 삭제하는 명령으로, -r 옵션을 사용하여 디렉토리를 삭제할 수 있습니다.

rm -rf test

강제로 파일을 삭제할 때 사용 (묻지 않고 삭제).

rmdir은 디렉토리 삭제 명령어입니다.


5. df / du 명령어

  • df : 디스크 전체 사용량 및 여유 공간 확인
    • 디스크 공간을 사용량(used)과 여유공간(free)으로 확인 가능.
    • 디스크가 어떤 디렉토리와 연결되어 있는지(mount) 확인.
df -h
  • du : 특정 디렉토리 또는 파일의 사용량 확인
  • h : 보기 편한 용량크기로 출력한다. (1K, 20M, 2.0G)
du -sh
  • -s : 디렉토리 전체 크기만 출력
  • -h : 사람이 읽기 쉬운 단위로 출력
`du -h -d 2`
  • -d : 디렉토리 깊이를 설정

6. chmod

RWX - 421

echo $USER

현재 접속 유저 정보 출력. 같은 기능으로 whoami 명령어가 있다.

groups

리눅스에는 그룹이 있는데 여러 유저들을 묵어놓은 것. 해당 명령어로 확인 가능하다.

chmod +x (파일 이름) / -x (파일 이름)

소유자 상관 없이 모두 x Excute 권한 추가(제거)해줌

chmod u+x (파일이름)

소유자(u)에게 실행 권한을 추가.

  • + : 권한 추가
  • - : 권한 제거
  • r : 읽기 권한
  • w : 쓰기 권한
  • x : 실행 권한



2. 파일 관리를 위한 명령어

명령어 정리

1. touch

빈 파일을 생성. 파일을 만들기만 하고 내용을 채우지 않습니다.


2. cat

cat (concatenate)은 파일 내용을 출력하거나 여러 파일을 연결하는 데 사용됩니다.


3. head / tail

데이터 엔지니어로 일을 하게되면 실시간으로 쌓이는 파일들을 자주 보게 될 건데, 이런 로그파일 등을 볼 때는 tail f명령을 통해서 이렇게 로그를 보기도 한다.

head(tail) -n 3 find.txt

find.txt 파일의 마지막 3줄을 출력.

while sleep 1; do echo "hello world at $(date +%s)" >> example.log; done & ps -ef | grep sleep kill -9 $pid
위 예제는 example.log 파일에 매 초마다 Unix 타임스탬프를 기록하는 while 문입니다.

실행 후 PID가 출력되면:

[1] 87944

실행 중인 프로세스를 종료하려면:

kill -9 87944

PID를 찾기 어려운 경우:

ps -ef | grep sleep 

현재 실행 중인 sleep 프로세스를 찾아 PID를 확인 후 종료.


4. comm

두 파일을 비교하고 그 차이를 출력하는 명령어입니다.

echo "line 1" > line2.txt
echo "line 2" >> line2.txt

이렇게 line1, line2 라는 텍스트가 기록된 line2.txt 가 만들어졌을 것이다.

cp line2.txt line3.txt
echo "line 3" >> line3.txt
cat line3.txt

이렇게 line3.txt 를 만들고 line2.txt 만 가지는 line 0 을 추가했다.

echo "line 0" >> line2.txt
comm line2.txt line3.txt

결과 :

comm -12와 같은 옵션에서 -1, -2, -3은 출력에서 특정 열을 제외하려는 설정입니다. 숫자는 출력의 열을 나타내며, 각각의 의미는 다음과 같습니다:

-1: 첫 번째 열(첫 번째 파일에 만 있는 항목)을 출력하지 않습니다.
-2: 두 번째 열(두 번째 파일에만 있는 항목)을 출력하지 않습니다.
-3: 세 번째 열(두 파일에 공통으로 있는 항목)을 출력하지 않습니다


5. cmp (comm과 비슷한 명령어)

cmp는 두 파일을 바이트 단위로 비교하여 차이를 출력하는 명령어입니다.

cmp line2.txt line3.txt
출력 예시
line2.txt line3.txt differ: char 20, line 3
char 20 : 20번째 문자에서 차이가 발생
line 3 : 세 번째 줄에서 차이가 발생

6. diff (difference)

diff두 파일을 라인 단위로 비교하여 차이점을 출력합니다.

diff line2.txt line3.txt
출력 예시
3c3
< line 0
---
> line 3
  • 3c3 : 세 번째 줄에서 차이가 발생
  • < line 0 : line2.txt의 세 번째 줄 내용
  • --- : 차이를 구분하는 선
  • > line 3 : line3.txt의 세 번째 줄 내용

자주 사용되는 diff 기호

  • a : add - 첫 번째 파일에는 없고 두 번째 파일에 추가된 내용
  • d : delete - 첫 번째 파일에서 삭제된 내용
  • c : change - 두 파일에서 변경된 내용

7. less

less는 파일 내용을 터미널 화면에 출력하지 않고 확인할 수 있는 명령어입니다.

less find.txt

주요 기능

  • j, k : 스크롤 (아래, 위)
  • 9j : 한 번에 9줄 아래로 이동
  • q : 종료

cat과 비교

  • cat find.txt : 파일 전체를 터미널에 출력 → 화면이 꽉 찰 수 있음
  • less find.txt : 필요한 부분만 확인 가능 → 대용량 파일에 유리

8. alias

별명 붙여주는 거.

  • 다른 문자열에 대체하는 단어를 지정
  • 주로 복잡한 명령어의 약어를 지칭할 때 쓰임
  • 환경변수와는 다름
alias hellocmd="echo hello $@"

9. cp, move

cp -r targetdir copied-dir
  • copy 의 약어
  • 파일이나 디렉토리 복사
  • -r옵션으로 디렉토리 복사

mv

  • move 의 약어
  • 파일을 이동시키는데 이름을 바꾸면서 이동시킬 수 있다.(파일 이름 단순히 바꿀 때도 move 사용.)
  • 이름 바꾸지 않고 어떤 디렉토리를 지정하면 그 디렉토리 안에 원래 파일과 같은 이름으로 이동한다.

1.3. 검색에 사용하는 명령어

명령어 정리

1. find

파일을 검색할때 사용

find . -name "*[0-9]*"
  • . : 현재 디렉토리에서 검색
  • -name "target.txt" : "target.txt"라는 이름의 파일 찾기
find . -name "*[0-9]*" -mindepth 2

-mindepth 2 : 최소 2단계 하위 디렉토리에서 검색. (min, max depth 설정 가능 )

2. which(명령어 위치 확인)

  • $PATH 에 등록된 경로 중에서, 주어진 이름의 실행 파일 위치를 찾는다.
  • 사용하고 있는 명령어가 설치된 위치를 찾는데 유용

3. grep

  • 대량의 파일에서 주어진 텍스트 또는 정규 표현식 패턴에 일치하는 텍스트를 찾는 명령어
  • 파이프와 함께 다양한 명령어와 조합하여 사용

find 는 파일 자체만 찾았다면 grep은 파일 이름도 찾을 수 있지만 파일 안에 있는 내용까지 뒤져가면서 찾을 수 있다.

grep 'less' find.txt

find.txt에서 less 가 포함된 줄을 출력

grep -rn "less than" . 
  • -n : 해당 파일에 몇번째 줄에 이 표현이 있는지 라인넘버까지 표현
  • -r : 하위 디렉토리까지 검색 (재귀 검색)
grep -rl "keyword" .
  • '-l' : 파일명만 출력 (해당 단어가 포함된 파일 목록 확인)
grep -r "[1-9]0\{3\}"
  • 정규표현식 활용
    메타캐릭터 ?, + , {, | , ( and ) 들은 literal charaters 로 interpret(해석)돼서 백슬래쉬 (\) 를 써줘야 n000 형태의 숫자를 찾을 수 있다.
grep -r "[1-9]0\{2\}" . | grep find

| 이 파이프 표시는 이 앞에 거의 결과를 이 다음 명령어에 넘겨준다 라는 의미.

n00 숫자가 있는 결과들 사이에서 find를 가지고 있는 결과를 또 추릴 수 있음.



grep 'DESCRIPTION' find.txt

원래 결과가 DESCRIPTION 이 나와야 하는데 나오지 않는다.

문제는 OS환경의 차이 때문! - 현재 Mac os 사용 중!

man find > find.txt로 저장한 파일에서 grep "DESCRIPTION" find.txt가 제대로 작동하지 않는 이유는, 파일이 형식 코드(ANSI escape sequences, 백스페이스 문자 등)를 포함하고 있기 때문인데~

man 페이지는 터미널에서 가독성을 높이기 위해 텍스트 서식을 위한 제어 문자를 포함한다.
특히 ^H(백스페이스) 문자가 들어가 있어 DESCRIPTION 같은 단어가 D^HDE^HES^HSC^HCR^HRI^HIP^HPT^HTI^HIO^HON^HN 같은 형태로 저장됨. (mac os 기준)

grep은 정확한 문자열을 찾으므로, 서식 코드가 포함된 경우 매칭되지 않음.

해결 방법: col -b 명령어를 사용하여 백스페이스 등의 제어 문자를 제거한 후 검색해야 한다.

  1. col -b를 사용하여 정리한 후 검색
man find | col -b > find_clean.txt
grep "DESCRIPTION" find_clean.txt

col -b가 백스페이스 등 불필요한 제어 문자를 제거하여 grep이 정상 작동하게 함.

  1. man 출력에서 직접 검색
    파일로 저장하지 않고, 터미널에서 바로 검색할 수도 있음.
man find | col -b | grep "DESCRIPTION"


4. sed

sed는 파일을 직접 수정하지 않고 문자열을 치환할 수 있는 스트림 편집기

  • 텍스트를 필터링하거나 변환하는 스트림 에디터
  • target file 에서 old word 를 new_word 로 모두 교체한 결과를 출력
  • input.txt의 내용이 변경된 결과를 출력하지만, 파일 자체는 수정되지 않음
  • vi에서도 :%s/old_word/new_word/g 를 이용하여 string 을 교체할 수 있다.
sed 's/old_word/new_word/g' target_file.txt
  • /g 옵션 : 모든 항목 변경
    -e 옵션 : 결과를 출력. 하지만 vi.txt로 들어가면 find 라는 글짜가 바뀌지 않았다.
sed -i 's/find/where/g' find.txt

-i 옵션 : 파일 직접수정! i (inplace) 옵션 사용!


macOS의 sed는 -i 옵션 사용 시 백업 확장자를 지정해야 함.
sed -i '' 's/find/where/g' find.txt
sed -i .bak 's/find/where/g' find.txt

만약 백업 파일을 남기고 싶다면 이런 식으로 .bak을 지정할 수도 있음
-> 수정된 find.txt 와 백업 파일인 find.txt.bak 이 생성됨

vi에서는

:%s/find/where/

/g를 안 해도 find가 전부 where로 바뀐 모습을 볼 수 있다.

grep -r "[1-9]0\{2\}" . | xargs sed -i 's/IEEE Std 1003/wrong string/g'

이렇게 하면 오류가 나온다.
sed: 1: "./find_clean.txt:": invalid command code .
또는 sed: invalid option -- 'p'라고 나온다. 왜그러냐면

실제로 grep -r "[1-9]0{2}" . 의 결과는 텍스트로 나오는데

sed는 마지막에 파일 이름이 와야됨. 하지만 텍스트 자체는 파일 이름이 아니니까 오류가 남.
-> 아까입력한 것에 l 을 추가해서 grep -rl "[1-9]0{2}"를 입력하면 파일 이름만 나옴.

grep -rl "[1-9]0\{2\}" . | xargs sed -i 's/IEEE Std 1003/wrong string/g'

이렇게 정리 완료.

profile
Data Analytics Engineer 가 되

0개의 댓글