wc /etc/passwd
21 31 973 /etc/passwd : 행 수 단어 수 바이트 수 파일 이름
옵션을 지정하지 않은 경우에는 행, 단어, 바이트 수를 차례로 출력한다.
wc -l /etc/passwd : 행 수
47 /etc/passwd
wc -w /etc/passwd : 단어 수
82 /etc/passwd
wc -c /etc/passwd : 바이트 수
2778 /etc/passwd
ls-l / | wc -l : ls -l/ 로 출력되는 행 수를 세면 루트 디렉터리에 파일과 디렉터리가 몇 개 있는지 알 수 있다.
필터 명령어는 파일을 지정하지 않으면 표준 입력을 읽는다.
ls / | wc -l - : - 를 붙어 필터 사용 시 표준 입력을 사용하게 한다.ls/ | wc -l - : 마지막 - 는 표준 입력을 받았다는 표시이다.
행 단위로 정렬한다.
옵션을 지정하지 않으면 알파벳 순으로 정렬한다.
sort file1 : 파일 내용을 정렬해서 보여준다.
sort file1 > sorted1 : sort로 출력한 결과를 sorted1에 리다이렉션 한다.
한 행을 필드라고 한다.
ps x | sort -k 5 : 특정 필드를 기준으로 정렬하려면 -k 옵션을 사용한다.
커맨드 필드는 5번째 필드이므로 -k 5로 지정하면 된다.
아스키 코드로 정렬하므로 대문자가 다 나오고 난 후 소문자가 나온다.
알파벳보다 슬래시가 먼저 나온다.
sort -n : 숫자 값으로 정렬
그냥 sort로 하면 문자열로 인식하기 때문에 숫자상으로 정렬이 되지 않는다.
sort -r : 역순으로 정렬
기본으로 알파벳 오름차순으로 정렬하므로, 역순일 때는 알파벳 내림차순이다.
sort -nr : 숫자 값이 큰 순서대로 정렬
연속되지 않은 중복은 제거하지 않으므로 sort file1 명령어 후에 uniq file1 해야 파일 전체에서 중복을 제거할 수 있다.
sort file2 | uniq : sort 후에 uniq를 파이프로 연결하여 실행
sort -u file2 : 파일 전체에서 중복 제거하는 옵션
sort file2 | uniq -c : 중복을 전체에서 제거한 후, 해당 데이터의 개수를 표시한다.
sort file2 | uniq -c | sort -rn : 중복이 가장 많은 순서대로 정렬.
sort file2 | uniq -c | sort -n : 역순이 아닌 적은 순서대로 출력.
사용법 : cut -d<구분자> -f<필드번호> 파일명
cut -d : -f 7 /etc/passwd : 구분자는 /etc/passwd의 결과에서 : 7번 필드만 추출한다. 7번 필드는 로그인 셸이다.
-d : 구분자를 지정하는 옵션이다. 기본값은 tab이다.
cut -d , -f 1,6,7 /etc/passwd : -f는 추출할 필드를 의미한다.
/etc/passwd/의 각 필드의 의미
사용자 이름
암호
uid
gid
주석
홈 디렉토리
로그인 셸
사용법 : tr <치환 전 문자> <치환 후 문자>
cat /etc/passwd | tr abc ABC : abc를 ABC 로 치환한다.
각각 a→A b→B c→C로 바꾼다. 문자열을 바꾸는 것이 아니다.
cat /etc/passwd | tr a-z A-Z : 소문자를 모두 대문자로 치환한다. 하이픈을 사용한다.
문자열 단위로 치환할 때는 sed나 awk를 사용한다.
표준 입력만 받아들이고, 파일을 인자로 받을 수 없다.
텍스트 파일을 읽게 하려면 cat의 결과를 파이프로 전달하거나 < 로 리다이렉션 해야 한다.
tr : , /etc/passwd : 실행 불가
tr -d <삭제할 문자> : 문자를 삭제한다.
주로 개행문자를 지울 때 사용한다. 줄바꿈을 없앤다.
cat /etc/passwd | tr -d bac : bac문자를 삭제한다.cat /etc/passwd | tr -d “\n” : 개행문자를 삭제한다.파일 모니터링 시 주로 사용한다.
로그처럼 파일 내용이 계속 추가되는 경우 tail -f를 사용한다.
추가될 때마다 실시간으로 내용을 출력하여 파일을 모니터링 할 수 있다.
tail -f output.log : 실행 시 커서가 멈춘다. 모니터링 상태가 된다.
echo hello >> output.log : log파일에 hello 문자열 추가하면 모니터링 중인 터미널에 hello가 출력된다.
ctrl+c로 빠져나온다.
diff 편집전 편집후 : 두 파일의 차이점을 출력한다.
diff .bashrc.org .bashrc
12c12 : 비교 파일에서 어떤 변화가 있는지 나타낸다. 12행 부분이 12행으로 변경됨.
<범위 1>a<범위 2> : 첫 파일의 범위 1에 두번째 파일의 범위 2 의 내용이 추가됨. add<범위 1>c<범위 2> : 첫 파일의 범위 1 부분이 두 번째 파일의 범위 2 의 내용으로 변경됨. change<범위 1>d<범위 2> : 첫 파일의 범위 1 부분이 삭제. deletejisu@comui-MacBookPro ch12 % diff .zshrc.orgg .zshrc
1c1,2
< alias python=/usr/bin/python3
---
> alias PYTHON=/USR/BIN/PYTHON
> jisu3
jisu@comui-MacBookPro ch12 %
첫 파일의 1행이 두 번째 파일의 1행, 2행 내용으로 변경됨.
< : 지워진 행. 첫 번째 파일에만 있는 행
> : 추가된 행. 두 번째 파일에만 있는 행
5c5 : 파일1의 5번째 행이 파일2의 5번째 행으로 변경
20,21d19 : 파일1의 20번째 행과 21번째 행이 삭제됨. 파일2 19행과 다르다.
40a39,41 : 파일1의 40번째 행에 파일2의 39~41의 내용이 추가됨.
diff -u : 통일 포맷. 차이를 출력하는 형식 통일. 더 자세히 보여준다.jisu@comui-MacBookPro ch12 % diff -u .zshrc.orgg .zshrc
--- .zshrc.orgg 2023-10-26 11:25:25
+++ .zshrc 2023-10-26 11:28:01
@@ -1 +1 @@
-alias python=/usr/bin/python3
+alias PYTHON=/USR/BIN/PYTHON
--- : 비교 파일 이름과 변경 시각. 파일에 대한 정보를 나타낸다.
+++ : 비교 파일 이름과 변경 시각.
@@ : @@ - 파일1의 변경이 시작된 행, 변경된 행수 + 파일2의 변경 시작 행, 변경된 행수@@
헝크 : 바뀐 범위. @@ @@로 시작된다.
-17, 8 +17,6 : 헝크의 헤더. 첫 번째 파일의 17번째 행부터 8행,
두 번째 파일의 17행부터 6행
diff -u .bashorg .bashrc > patchfile : 패치 파일 생성
patch .bashrcorg patchfile : .bashrc.org의 내용이 수정된 .bashrc와 동일하게 된다.
크기가 큰 파일을 변경했을 때 굳이 파일 전체를 전달하지 않아도 된다.
패치 : 변경된 내용만 담은 파일
patch 명령어로 적용할 수 있다.
패치 적용 시 원본이 변경되어 행 번호가 변경되었다면 에러가 발생할 수 있다.
통일 포맷을 사용하면 변경 앞뒤의 내용이 포함되어 있어 변경되어도 어느정도 성공한다.
통일 포맷을 git에서도 사용되고 있다.