find ~ | wc -l # find의 출력(stdout)이 wc의 입력(stdin)과 연결됨
find ~ > tmp.txt; wc -l < tmp.txt; rm tmp.txt # anonymous pipe를 사용하지 않을 경우 이렇게 길어짐
|
(vertical bar)를 사용한다.mkfifo
명령(or POSIX C API)를 사용하여 생성한다.ls > filelistl.txt
sort < names.txt
strace ls 2> strace.txt # fd2인 stderr를 파일로 저장한다.
A > B
: 명령어 A의 실행 결과(stdout)를 화면에 출력하지 않고 파일 B로 보낸다.A < B
: B를 A의 stdin으로 연결한다.A >> B
: 방향은 >
과 같고, 추가(append)하는 모드cat ~/.bashrc
cat > hello.txt
'Hello World'
^D
tar
, cpio
tar [ctxv] [f archive-file] files...
c
(create): 아카이브를 생성t
(test): 테스트(내부를 확인)x
(extract): 파일을 풀어냄v
(verbose): 상세 정보 출력(실무에서 사용되지 않음)f archive-file
: 입출력할 아카이브 파일명. 아래 두 코드는 같은 결과를 얻는다.tar c *.c > arc_c.tar # redirection을 이용
tar cf arc_c.tar *.c # f를 이용
--exclude file
: 특정 파일을 제외프로그램 | 확장자 | 설명 |
---|---|---|
compress | Z | 현재는 거의 사용되지 않는다. |
gzip | gz | GNU에서 만든 zip (과거에 많이 사용) |
bzip2 | bz2 | 텍스트 압축에 유리했었다. |
xz | xz | 텍스트에 강하지만, 느리다. |
lz4 | lz4 | 빠르고 무난한 성능 |
zstd | zst | 빠르고 좋은 압축률을 가졌다. 멀티스레드 지원 |
zstd [OPTIONS] [-|input-file] [-o output-file]
-d
: decompress
-c
: 표준 출력(stdout)으로 결과물을 보낸다.
-T#
: 멀티스레드 사용(#
: 개수, 0
: 자동)
-#
: compression level [1-19] (default: 3), 변화가 크지는 않다.
압축
tar c ./data ./exp | xz -T0 > bak_data.tar.xz
tar c ./data ./exp | zstd -T0 > bak_data.tar.zst
# 최신 방식: a로 확장자를 자동으로 판단함 / 단점: 멀티스레드를 사용하지 못함
tar cfa bak_data.tar.xz ./data ./exp
tar cfa bak_data.tar.zst ./data ./exp
풀기
xz -dcT0 bak_data.tar.xz | tar x
zstd -dcT0 bak_data.tar.zst | tar x
# 최신 방식: a로 확장자를 자동으로 판단함 / 단점: 멀티스레드를 사용하지 못함
tar xfa bak_data.tar.xz
tar xfa bak_data.tar.zst
mkdir ~/work
cd !$
touch hello.txt
ls -l
ln hello.txt ../hardlink.txt
ls -li
ls -li ..
ln -s ../hardlink.txt symlink.txt # symlink를 만들 때에는 만들려는 그 위치로 가서 만들기를 권장한다.
ls -l
ln -s /exp/disc/chet_atkins_1/02_sails.mp3 /exp/melon/rec100/2.mp3
ls -l /usr/lib
ln -s /usr/lib/libflamegraph.so.0.5.0 /usr/lib/libflamegraph.so
PATH에 존재하는 파일을 검색
which find
>>> /usr/bin/find
which bash
>>> /bin/bash
readlink -f <symlink>
: canonical path를 따라가며 마지막 링크를 제외한 모든 링크가 존재할 때 성공readlink -e <symlink>
: canonical path를 따라가며 모든 링크가 존재할 때 성공touch hardlink
ln -s hardlink sym1
ln -s sym1 sym2
ln -s sym{2,3} # brace expansion, == ln -s sym2 sym3
ls -l sym* hardlink
readlink -f sym2
readlink -e sym2
rm hardlink
readlink -f sym3
readlink -e sym3
모든 링크가 존재하는 것은 아니기 때문에 faillocate
는 symlink이다.which locate
ll /usr/bin/locate
readlink -e /usr/bin/locate
📙강의 - 코인즈월렛 기술이사 김선영