명령행 완성 기능 또는 auto-completion이라고 한다. 명령어의 일부분을 가지고 명령어를 완성시켜주거나 가능한 명령들을 알려주는 역할을 수행한다.
internationalization ⇒ i18n은 i~n 사이의 alphabet 개수에 기인한다. 또한 UTF8이 기본문자 세트로 사용하는 시스템들을 의미한다. Linux/UNIX command는 i18n에 맞춰서 만들어져 있다. 때문에 LANG 환경변수에 영향을 받는다.
file mode는 눈에 보이는 9bit와 눈에 보이지 않는 3bit를 포함해서 총 12bit로 구성된다. 9bit는 파일의 owner, group, others의 접근 권한을 의미하며, 나머지 3bit는 SetUID, SetGID, Sticky bit는 깊은 허가와 같이 보안과 관련된 요소들을 의미한다.
e.g. 디렉터리는 777 - 022 = 755, 파일은 666 - 022 = 644가 된다.
현재 디렉토리의 위치를 알려준다.
경로에는 absolute path(절대 경로)와 relative path(상대 경로)가 있다.
디렉토리에 존재하는 파일들의 정보를 표시한다.
디렉터리를 생성하는 명령어이다.
디렉터리를 삭제하는 명령이다.
다만, 디렉터리 안이 비워져 있어야 실행된다.
디렉터리 혹은 파일을 삭제하는 명령이다. 디렉터리의 경우 -r
옵션을 사용하면 디렉터리 안에 파일이 있어도 삭제가 가능하다.
r(recursively), -f(force)
파일 혹은 디렉터리의 권한을 수정하는 명령이다.
u+x, g=rx, o=: user에 실행권한 추가, group에 읽기, 실행권한만 추가, other은 모든 권한 제거
디렉터리의 경우 파일들의 정보를 담고 있는 파일과 같다. 때문에 읽기 권한만 있는 경우에 안에있는 파일들의 목록은 볼 수 있지만, 디렉터리 안에있는 파일에는 접근하지 못한다.
반대로, 실행 권한만 있는 경우에 디렉터리 안의 파일들의 목록을 확인할 순 없지만, 디렉터리 안에있는 파일의 내용을 확인할 수 있다.
파일 혹은 디렉터리를 복사하는 명령이다.
파일 혹은 디렉터리를 이동하는 명령이다.
파일 혹은 디렉터리를 삭제하는 명령이다.
파일 혹은 디렉터리의 권한을 수정하는 명령이다.
root 권한이 필요하다.
파일 혹은 디렉터리의 그룹 정보를 수정하는 명령이다.
root 권한이 필요하다.
terminal 앞에 $는 일반유저, #는 root 권한을 가진 계정을 의미한다.
파일의 타입을 확인하는 명령이다.
파일은 고유 표식을 가지고 있고 이를 통해 파일의 종류를 분류할 수 있다.
이런 이유에서 UNIX 계열에서 파일의 확장자는 중요하진 않다.
magic 데이터는 /usr/share/file/magic에 존재한다.
file의 meta data를 출력하는 명령이다.
meta data: 파일의 이름을 비롯한 생성 시간, 권한 등등
파일의 메타 정보를 업데이트하는 명령어이다. 주로 시간과 관련된 정보를 업데이트 한다. 만약 file이 없다면, 새로운 파일을 생성한다.
alt + . ⇒ 마지막에 입력된 parameter를 의미하며, ! find . -name ‘[89]k.dat’ ⇒ [89] 괄호 안에는 옵션을 의미한다. 8또는 9가 존재하는 데이터를 찾는다는 의미이다.
$ find -name ‘.dat’ -a -size 1M ⇒ -a(and), -o(or)
$ find -name ‘*.dat’ -size 1M ⇒ and는 생략이 가능하다.
-size 옵션은 +와 -를 통해서 이상, 이하에 관한 설정이 가능하다.
-mtime -1 은 24시간 이전에 변경된 파일들을 검색한다. size와 마찬가지로 +, - 지정이 가능하다.
-maxdepth < number >: 최대 파일의 깊이를 설정하는 옵션으로 옵션들 중에 가장 처음에 와야한다.
- 검색 후 작업지시 ⭐️
- find …. -exec 명령어 \;
- find …. -exec 명령어 +
$ find . -name “.tmp” -exec rm {} \;
⇒ rm 명령이 검색된 파일 개수만큼 수행된다. {}에는 find의 결과가 들어온다.
$ find . -name “.tmp” -exec rm {} + ⇒ rm 명령이 한번만 수행된다.
파일을 입출력하기 위한 통로를 의미한다. 하드웨어에 직접 접근하지 않고, 표준화된 입출력 방식을 통하도록 하는 가상화 레이어의 일종이다. 때문에 하드웨어를 몰라도 접근이 가능하다. C언어의 I/O 인터페이스의 심플함을 가능하게 한다. 파일 입출력을 위한 메타 정보를 가지를 객체로 프로세스가 끝나면 사라진다.
파일 채널에게 붙여지는 유일한 식별자(idenrifier), 숫자로 명명하며 숫자 0부터 시작한다. 예약된 파일서술자 3가지가 존재한다. 0: stdin (standard input, 표준입력), 1: stdout(standard output, 표준출력), 2: stderr(standard error, 표준에러)
#pipe를 이용한 명령 수행, find 명령의 출력이 fd1 이라면, wc의 입력은 fd0이 될 수 있다.
$ find ~ | wc -l
# pipe를 사용하지 않고 위 명령을 수행하는 경우
$ find ~ > tmp.txt; wc -l < tmp.txt; rm tmp.txt
채널의 방향을 다른 곳으로 연결
ls 명령의 출력 filelist.txt 파일로 저정한다.
$ ls > filelist.txt
# 예약 파일 서술자인 stderr을 통해서 파일로 저장하라는 의미이다. >은 1>과 같다.
$ strace ls 2> strace.txt
tar(tape archive) [ctxv] [f archive-file] files
c(create), t(test), x(extract), v(verbose): 디버깅이나 확인 용도로만 권장
$ tar c *.c > arc_c.tar
# f 옵션을 통해 방향재지정 없이 명령을 수행할 수 있다.
$ tar cf arc_c.tar *.c
gzip [-cdflrv] <file>
-d: 압축해제, -c: 표준 출력(stdout)으로 결과를 출력, -1 ~ 9 (fase, better): 압축 레벨 지정
# 압축
$ tar c /etc/*.conf | gzip -c > etc.tar.gz
# 해제
$ gzip -cd etc.tar.gz | tar x
bzip [-cdfv] <file>
gzip과 옵션은 비슷하며 멀티스레스 사용에 관한 옵션이 추가적으로 사용된다(-T0은 자동판단 , 개수를 입력하면 개수만큼 스레드 사용).
zstd [options] [-| input-file] [-o output-file]
# 모던 명령어, a 옵션을 넣어주면 파일 확장자를 통해 압축 방식을 자동으로 결정한다.
$ tar cfa bak_data.tar.xz ./data ./exp
$ tar cfa bak_data.tar.zst ./data ./exp
# 하지만, 위 방법은 멀티스레드를 사용할 수 없다. 그래서 다음과 같은 명령을 통해 해결한다.
$ tar c ./data ./exp | xz -T0 > bab_data.tar.xz
$ tar c ./data ./exp | zstd -T0 > bak_data.tar.zst
파일당 하나있 존재하며, 실제 물리 데이터에 접근할 수 있도록 도와주는 역할을 수행한다. i-node number를 통해 관리되며, disk partition(or volume) 내에서 유일한 식별자이기 때문에 식별자가 같더라도 디스크가 다르면 다른 파일을 가르킨다. 그 외 시간 관련 정보, 사이즈, 소유권, 권한 등의 meta 정보를 가지고 있다.
# hard link 만들기
$ ln <target file> <link file>
# i-node 번호 확인
$ ls -li
# symbolic link 만들기
$ ln -s <target file> <link file>
# i-node 번호 확인
$ ls -li
# symbolic 링크를 만드는 경우 상대 경로로 지정하면 링크가 깨질 수 있다.
$ ln -s testfile.txt ../symbolic.txt
# 따라서 다음과 같이 r 옵션을 붙여주면 자동으로 상대 경로를 계산해준다.
$ ln -sr testfile.txt ../symbolic.txt
# 가장 좋은 방법은 링크를 만들 디렉토리로 이동해서 링크를 생성하는것이 좋다.
canonicalization이란?
옆집 주소와 같은 상대적인 개념은 ~의 옆집 이라는 ~가 정의되지 않으면 어디를 가르키고 있는지 정확하게 알 수 없다. symlink 또한 실체를 가르키고 있는 개념이 아니기 때문에 실제로 링크를 따라가면서 실체를 확인해야 한다. 이때 여러 링크에 걸쳐 연결된 경우 이를 확인하는 과정을 canonicalize 라고 한다.
시그널을 전달하는 명령, 프로세스 중단 외에도 다양한 기능을 포함하고 있다.
$ kill <PID>
$ kill -QUIT <PID>
$ kill -9 <PID>
deamon이란?
Orphan process 혹은 Session leader로써 stdio를 모두 /dev/null로서 출력이 없으며, 제어 터미널을 소유하지 않는 프로세스를 의미한다. 주로 back-ground에서 동작하는 프로세스의 형태를 갖는다.