
아래 공부한 내용들은 머리새빠지게 공부했던, 내 방식대로의 Shell 공부했던 기록들이다. '왜 이렇게 써야해요?'라기보단 '이렇게 써야지 실행된다' 느낌으로 정리해보았었고, 나름 Shell 공부했던 명령어 습관들이 얼추? 살짝? 손에 익기 시작했던지라, 이제 mac등의 linux환경으로 넘어가본다 한들 편하게 잘 적응될 수 있을 법하다.
... 커맨드키가 컨트롤키를 대체하여 키보드 좌측 하단에 배치되어있는 짜치는(?) 레이아웃만 제외한다면....
아무튼, 비전공자 출신의 누군가가 라피신어쩌구에서 눈물콧물 쏙빠지게 헤메다가 정리한 흔적들로서, 다른 누군가에게도 도움이 되었으면 한다. 혹은 미래의 linux 환경을 다룰 나를 위해서...
Shell 기본 명령어
- mkdir : 폴더생성
- mkdir -p 폴더명/파일명 : 폴더 내부에 하위 파일 생성
- rmdir : 폴더삭제(1)
- touch : 파일 생성
- rm : 파일 삭제
- rm -r : 폴더 삭제(2) (리눅스 rm 명령어로 폴더를 제거 할 경우)
- rm -rf : 사용자에게 삭제 여부를 묻지 않고 바로 삭제
- find를 이용한 삭제
- find . -name "* 포함된단어 *" -delete
- cd ~ : 어디 위치든 root home으로 돌아감
- cd - : 이전위치로 돌아감
리눅스 단축키 alias 설정법
- 터미널상 반복 명령어를 입력할때, 단축어로 적용해서 적용이 가능하다.
- 적용방법
- vi ~/.zshrc 커맨드 입력
- 'i' 눌러서 insert 모드 돌입
- alias 단축키명='ls -l' 입력하면 해당 단축키로 명령어 사용 가능
- 해당 창을 나올때는 esc 누른 후 :wq (w:저장, q:나오기) 입력하면 나와짐
- source ~/.zshrc 로 너 알아들어라라고 명령해줘야 단축키가 적용이 됌. 이후로는 단축키대로 적용 가능
- 이 방법으로 만든 명령어로 git status, 혹은 cc 컴파일 옵션을 단축어로 줄여서 적용 가능.
파일 복사 Link
- 하드링크 : ln [원본대상 파일] [하드링크 만들 파일]
- 심볼릭링크 : ln -s [원본대상 파일] [심볼릭링크 만들 파일]
권한 수정
- chmod r=rw FILE명
- 소유자(U) / 그룹(G) / 그 외 사용자 (O)
- 위 UGO에 각각 읽기 (r, read) / 쓰기(w, write) / 파일실행 (x, execute)

- UGO는 7진수? 값으로도 변경이 가능하다. r은 4, w는 2, x는 1의 값을 가지고 이 값들의 number 값들을 더한 값으로 권한을 설정할 수 있다.
- ex) test.c 파일의 권한을 변경하려고 한다. 소유자는 읽기, 그룹에는 모든권한, 그 외 사용자는 쓰기랑 파일실행 권한만 사용한다고 치면,
- 소유자는 읽기만 사용하므로 4의 값을,
- 그룹은 읽기,쓰기,파일실행을 전부 다 수행하므로 4+2+1인 7의 값을,
- 그외 사용자는 쓰기랑 파일실행만 수행하므로 2 + 1인 3의 값을
- 이렇게 지정하게 된다면 커맨드로 chmod 473 test.c 를 입력하면 해당 권한으로 변경된다.
- ex) test.c 파일의 권한을 변경하려고 한다. 소유자는 읽기, 그룹에는 모든권한, 그 외 사용자는 쓰기랑 파일실행 권한만 사용한다고 치면,
파일 압축 (tar)
- tar : 파일 묶는 옵션. zip 파일정도로 생각하자
- 기본 명령어 : tar -cf [파일명.tar] *
- 끝에 *을 꼭 붙여야 함
더미파일 만들기 (파일크기 수정)
- truncate -s [000MB] [파일명]
- fallocate는 파일크기를 byte 단위로 지정해야해서 귀찮, truncate는 K M G T 단위로 지정가능
날짜 수정
- 기본명령어 : touch -t 202501010000 file.txt
- YYYYMMDDhhmm
- 심볼릭 링크 수정하려면 -h 명령어 추가
깃로그 심플 출력
- git log --pretty=oneline : oneline으로 출력
- git log --pretty=format:"%H" : H는 commit hash를 뜻함
이름변경
- 단순 변경 & 디렉토리명 변경
- mv [원본파일명 & 디렉토리명] [바꿀파일명 & 디렉토리명]
- 여러개 변경
- rename [변경전 파일명] [변경후 파일명] [대상파일]
- test1,2,3 을 test01,02,03으로 바꿀경우?
- rename test test0 test?
- .htm 확장자를 모두.html로 일괄 수정?
- rename .htm .html *.htm
DIFF
- patch의 -pNUM의 경우 앞의 경로를 몇개를 지우느냐에 따라 변경된다
- ex) 현재 경로가 a/b/c.txt이며 패치파일이 patchfile.patch인 경우
- patch -p1 < patchfile.patch : b/c.txt에 패치 적용
- patch -p2 < patchfile.patch : c.txt에 패치 적용
- 느낌상? 걍 diff A B > C.diff의 베이직한 형태를 제일 많이 쓰지 않을까 • diff a b : 'a에서 b가 된다면'의 의미로 이해해보기
diff a b > sw.diff
# (변경사항 뽑기) diff 명령어는 파일 a 와 파일 b 안에 있는 내용들의 차이점을 비교하고 합쳐 새로운 sw.diff라는 파일을 만듦
patch a < sw.diff
# (변경사항 적용) patch 명령어는 파일 sw.diff 안에 있는 내용 중 파일 a와 겹치는 내용을 빼내고 남아 있는 글 만을 파일 a에 적용
patch a sw.diff -o c
# (적용할 변경사항 사항을 외부로 파일로 출력) patch 명령어는 파일 sw.diff 안에 있는 내용 중 파일 a와 겹치는 내용을 빼내고 남아 있는 글 만을 파일 c에 적용
find [option...] [path] [expression...]
- 기본적으로 하위 디렉토리까지 모두 탐색
- option에 들어가는type list
- b : block special
- c : character special
- d : directory
- f : regular file
- l : symbolic link
- p : FIFO
- s : socket
참고참고
- find와 grep의 차이
- find : 파일을 찾는 기본적인 명령어. 특정 이름의 파일 및 확장자를 가진 파일을 찾는 명령어
- grep : 문자열을 찾는 기본적인 명령어. 텍스트 및 로그 파일에서 특정 문자열을 찾는 명령어
- exec와 | (파이프)의 차이
- 기본적으로 둘 다 명령어를 조합하는 방식이지만 차이가 있음
- exec
- find 명령어와 함께 사용되며 find검색결과에 대한 특정 명령어를 직접 실행할 수 있게 함
- exec 명령여 { 검색된 파일/디렉토리 } ; (혹은 +)
- ; : 한번에 하나의 파일을 명령에 전달
-
- : 가능한 여러 파일을 한번에 전달
- 예제
# 모든 .txt 파일을 검색한 후 각각 삭제 find . -name "*.txt" -exec rm {} \\; # .log 파일을 검색하고, 한 번에 gzip으로 압축 find . -name "*.log" -exec gzip {} + # 특정 확장자를 가진 파일을 찾고 각 파일의 줄 수 세기 find . -name "*.txt" -exec wc -l {} \\; # 결과: # 12 ./file1.txt # 34 ./file2.txt
- 파이프 ( | )
- 한 명령어의 출력을 다른 명령어의 입력으로 전달
- 두 명령어를 연결, 첫번째 명령의 출력을 두번째 명령의 입력으로 사용
- 예제
# 특정 확장자를 가진 파일을 찾고 각 파일의 줄 수 세기 find . -name "*.txt" | xargs wc -l # 결과: # 12 ./file1.txt # 34 ./file2.txt
- 차이점
- exec는 find의 결과를 하나씩 직접 전달. 파일 단위 작업을 간단히 처리할 때 유용하며, 파일 이름에 특수 문자가 있는 경우 안전.
- 파이프는 중간에 데이터를 텍스트 스트림 형태로 전달하며, 결과를 처리하기 위해 xargs와 같은 추가 명령어가 필요. 텍스트 데이터 흐름 기반 작업과 여러 명령을 조합하여 유연하게 처리할 때 적합.
git ls 용례
- git ls-files: git 에 의해 추적되는 모든 파일을 표시한다.
- git ls-files --stage: 스테이징 영역에 있는 모든 파일을 리스팅한다.
- git ls-files --deleted: 삭제된 파일을 리스팅한다.
- git ls-files --others: git 에 의해 추적되지 않는 모든 파일을 리스팅한다.
- git ls-files --ignored: 모든 ignored 파일을 리스팅한다. --others 옵션과 함께 사용하면 untracked & ignored 상태인 파일을 찾아볼 수 있다.
- git ls-files --exclude-standard: .gitignore, .git/info/exclude에 정의된 파일이나 디렉토리 패턴을 고려하여, 제외된 파일은 출력하지 않도록 함. 즉 git이 무시하도록 설정된 파일은 출력하지 않음
vi 에디터 단축키 (인서트 모드 나와야함)
- gg : 맨 위로
- G : 맨 아래로
- 숫자입력 + dd : 숫자입력한 줄만큼 삭제
- uu : 되돌리기
magic 파일
- file 명령어와 함께 사용되는 파일로서 파일의 내용을 분석해 파일의 종류를 결정하는데 사용
- file 명령어는 파일 이름 확장자에 의존 ㄴㄴ, 파일 내용 기반으로 파일 종류 판별. file 명령어는 magic file에 정의된 규칙을 참조함
- Magic 파일의 데이터 타입은 5가지가 있음
- byte : 단일 바이트 값
- short : 2바이트 정수
- long : 4바이트 정수
- string : 문자열
- regex : 정규표현식
- 명령어
- 파일종류 확인 : file [파일명]
- 사용자정의 Magic 파일 : file -m [사용자정의magic파일] [파일명]
- 0바이트 위치 : 0번째 위치를 뜻하는 것임.
- 일종의 큰 조건문 파일을 만드는 것.
- 0 string Hello Hello,World! 의미
- 0바이트 위치에 문자열 'Hello'가 있으면 'Hello,World!"라는 '타입'으로 출력하라