man (알고 싶은 명령어)
텍스트로 된 명령어 설명이 나타남!
j
: 스크롤 아래로k
: 스크롤 위로h
: helpq
: quitmanual과 비슷한 기능을 하는 옵션:
(명령어) --help / (명령어) -help / (명령어) -h
EC2 우분투에 아무 설정 변경 없이 접속하면 아래와 같은 형식으로 나타날 것이다.
ubuntu@ip-172-31-33-106:~$
ubuntu
: 접속한 유저의 이름@
: 구분자ip-172-31-33-106
: 머신의 이름 (= 호스트네임):
: 구분자~
: 현재 위치한 디렉토리 경로. 물결표시는 홈 디렉토리를 의미.cd
cd /
루트 디렉토리로 이동
cd -
이동했던 경로를 기억해서 마지막 위치로 돌아감.
cd ~
사용자의 홈 디렉토리로 이동.
ls
ls -in
ls -i
: inode 번호 출력ls -n
: 파일의 소유자와 그룹을 UID/GID 숫자로 출력ls -in
: inode
번호 + UID/GID 숫자 출력inode
는 리눅스에서 파일이나 디렉토리의 고유 식별자로, 파일 관리 시 중요한 역할을 합니다.
ll
은 ls -l
의 별칭(alias)로, 파일과 디렉토리의 상세 정보를 목록 형태로 출력하는 명령어입니다.
rm
/ rmdir
rm -r test
rm
명령어는 파일을 삭제하는 명령으로, -r
옵션을 사용하여 디렉토리를 삭제할 수 있습니다.
rm -rf test
강제로 파일을 삭제할 때 사용 (묻지 않고 삭제).
rmdir
은 디렉토리 삭제 명령어입니다.
df
/ du
명령어df
: 디스크 전체 사용량 및 여유 공간 확인used
)과 여유공간(free
)으로 확인 가능.mount
) 확인.df -h
du
: 특정 디렉토리 또는 파일의 사용량 확인h
: 보기 편한 용량크기로 출력한다. (1K, 20M, 2.0G)du -sh
-s
: 디렉토리 전체 크기만 출력-h
: 사람이 읽기 쉬운 단위로 출력`du -h -d 2`
-d
: 디렉토리 깊이를 설정chmod
RWX
- 421
echo $USER
현재 접속 유저 정보 출력. 같은 기능으로 whoami 명령어가 있다.
groups
리눅스에는 그룹이 있는데 여러 유저들을 묵어놓은 것. 해당 명령어로 확인 가능하다.
chmod +x (파일 이름) / -x (파일 이름)
소유자 상관 없이 모두 x Excute 권한 추가(제거)해줌
chmod u+x (파일이름)
소유자(u
)에게 실행 권한을 추가.
+
: 권한 추가-
: 권한 제거r
: 읽기 권한w
: 쓰기 권한x
: 실행 권한touch
빈 파일을 생성. 파일을 만들기만 하고 내용을 채우지 않습니다.
cat
cat
(concatenate)은 파일 내용을 출력하거나 여러 파일을 연결하는 데 사용됩니다.
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를 확인 후 종료.
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
: 세 번째 열(두 파일에 공통으로 있는 항목)을 출력하지 않습니다
cmp
(comm
과 비슷한 명령어)cmp
는 두 파일을 바이트 단위로 비교하여 차이를 출력하는 명령어입니다.
cmp line2.txt line3.txt
출력 예시
line2.txt line3.txt differ: char 20, line 3
char 20 : 20번째 문자에서 차이가 발생
line 3 : 세 번째 줄에서 차이가 발생
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 - 두 파일에서 변경된 내용less
less
는 파일 내용을 터미널 화면에 출력하지 않고 확인할 수 있는 명령어입니다.
less find.txt
주요 기능
j
, k
: 스크롤 (아래, 위) 9j
: 한 번에 9줄 아래로 이동 q
: 종료 cat
과 비교
cat find.txt
: 파일 전체를 터미널에 출력 → 화면이 꽉 찰 수 있음 less find.txt
: 필요한 부분만 확인 가능 → 대용량 파일에 유리별명 붙여주는 거.
alias hellocmd="echo hello $@"
cp -r targetdir copied-dir
mv
파일을 검색할때 사용
find . -name "*[0-9]*"
.
: 현재 디렉토리에서 검색-name "target.txt"
: "target.txt"라는 이름의 파일 찾기find . -name "*[0-9]*" -mindepth 2
-mindepth 2
: 최소 2단계 하위 디렉토리에서 검색. (min, max depth 설정 가능 )
find 는 파일 자체만 찾았다면 grep은 파일 이름도 찾을 수 있지만 파일 안에 있는 내용까지 뒤져가면서 찾을 수 있다.
grep 'less' find.txt
find.txt
에서 less
가 포함된 줄을 출력
grep -rn "less than" .
-n
: 해당 파일에 몇번째 줄에 이 표현이 있는지 라인넘버까지 표현 -r
: 하위 디렉토리까지 검색 (재귀 검색)grep -rl "keyword" .
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 명령어를 사용하여 백스페이스 등의 제어 문자를 제거한 후 검색해야 한다.
man find | col -b > find_clean.txt
grep "DESCRIPTION" find_clean.txt
col -b가 백스페이스 등 불필요한 제어 문자를 제거하여 grep이 정상 작동하게 함.
man find | col -b | grep "DESCRIPTION"
sed는 파일을 직접 수정하지 않고 문자열을 치환할 수 있는 스트림 편집기
sed 's/old_word/new_word/g' target_file.txt
sed -i 's/find/where/g' find.txt
-i 옵션 : 파일 직접수정! i (inplace) 옵션 사용!
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'
이렇게 정리 완료.