대화 UNIX, 7 부: 명령 행 관용어 - 메모

1.find
명령, 각종 파일, 심지어 전체 UNIX 를 스 캔 하고 처리 하 는 데 사용 할 수 있 습 니 다.
파일 시스템.
예 를 들 어 저 는 findgrep 또는 Perl 과 함께 사용 하여 대량의 파일 을 처리 할 수 있 습 니 다.큰 코드 에서 변수 나 상수 가 정의 되 어 있 는 곳 을 알 아야 합 니까?다음 명령 을 시도 할 수 있 습 니 다:
$ find /path/to/src 
 -type f | xargs grep -H -I -i -n 
string
            

 
이 명령 의 출력 은 줄 번호 와 일치 하 는 특정 텍스트 를 포함 하 는 파일 이름 목록 입 니 다.
  string 옵션.-H 옵션 은 대소 문 자 를 무시 합 니 다.-n (대문자 'I') 바 이 너 리 파일 건 너 뛰 기.
-H, --with-filename
              Print the filename for each match.
-I     Process a binary file as if it did not contain matching data; this is equivalent to the --binary-files=with-
              out-match option.
-i, --ignore-case
              Ignore case distinctions in both the PATTERN and the input files.
 -n, --line-number
              Prefix each line of output with the line number within its input file.
2. -i
이것 은 열 거 된 모든 옵션 을 사용 하여 지정 한 명령 을 실행 합 니 다. 이 예제 에 서 는 -I 입 니 다. 표준 입력 을 통 해 제 공 된 인 자 를 사용 할 때마다.만약 / path / to / src 디 렉 터 리 에 파일 a, b 와 c 가 포함 되 어 있다 고 가정 하고 xargsgrep 등 가 를 사용 합 니 다.
grep -H -I -i -n string a
grep -H -I -i -n string b
grep -H -I -i -n string c

 
사실 파일 집합 을 검색 하 는 것 은 흔히 볼 수 있 는 작업 이기 때문에 find 은 해당 하 는 옵션 을 가지 고 전체 파일 시스템 의 계층 구 조 를 재 귀적 으로 옮 겨 다 닌 다.xargs 또는 그 동의어 grep 또는 -d recurse 을 사용 할 수 있다.예 를 들 어 사용 할 수 있 습 니 다.
$ grep -H -I -i -n -R string
                /path/to/src
            

 
이 명령 은 -R 과 같은 임 무 를 완수 했다.
3. - R: 귀속 옵션
파일 과 관련 된 많은 유 닉 스 유 틸 리 티 도구 들 이 재 귀적 옵션 을 가지 고 있다.-r 은 계층 구조 중의 내용 을 재 귀적 으로 열거 할 수 있다.find/xargs ls -R chmod chgrp chown -R 을 사용 할 때 조심 하 세 요.디 렉 터 리 의 실행 위 치 를 삭제 하면 、 。 과 같은 디 렉 터 리 를 사용 할 수 없습니다.
4. 더욱 선택성 을 위해 chmod -R 을 사용 할 수 있다.
그렇다면 언제 chmod -R a-x / find . -type f | xargs chmod a-x 을 사용 해 야 합 니까? 언제 find 을 사용 해 야 합 니까?일정한 선택성 이 필요 할 때 xargs 을 사용 할 수 있다.grep 명령 은 여러 가지 옵션 을 가지 고 있어 서 특정한 요 구 를 만족 시 키 는 파일 을 선택 할 수 있 습 니 다. 예 를 들 어 '자정 후에 수 정 된 모든 일반적인 파일' 입 니 다.그렇지 않 으 면 find 을 사용 하면 된다.
5.find grep -R 명령 은 주기 적 으로 (약 매일 한 번, 시스템 관리자 가 설정) 시스템 의 모든 파일 로 디 렉 터 리 를 작성 하고 경로 와 파일 이름 으로 구 성 된 데이터 베 이 스 를 구축한다. 을 실행 할 때 개인 데이터 베 이 스 를 검색 하여 일치 시 키 려 고 합 니 다.(테스트 하지 않 음)locate 보다 사용 하기에 더욱 편리 하고 속도 가 빠르다.이름 에 따라 파일 을 찾 으 려 면 locate 대신 find 을 사용 해 보 세 요.
예 를 들 어 조회 locate 을 실행 하면 find -name 으로 끝 나 는 모든 파일 과 디 렉 터 리 를 얻 을 수 있 습 니 다.(앞의 별 번 호 는 모든 문자열 과 일치 합 니 다.) 편 의 를 위해 locate '*.1' 명령 을 실행 하 는 것 은 .1 을 실행 하 는 것 과 같 습 니 다.
6. 교체
1)'s//bdollar(s?)/buck/1/g'
파일 을 수정 할 수 있 는 유 닉 스 유 틸 리 티 도구 가 많다.대부분의 경우 수 정 된 내용 을 표준 출력 으로 보 낼 수 있 습 니 다. 재 설정 연산 자 를 사용 하여 진일보 한 처리 (파이프 "|" 사용) 또는 그 결 과 를 캡 처 할 수 있 습 니 다 (locate fish 또는 locate '*fish*' 연산 자 사용).
다른 유 틸 리 티 도구 (보통 한 번 에 많은 파일 을 처리 할 수 있 는 도구) 는 보안 을 위해 원본 파일 을 보존 하고 수 정 된 내용 을 위해 새로운 파일 을 만 들 수 있 습 니 다.예 를 들 어 명령 줄 에서 Perl 을 사용 하여 파일 을 처리 할 수 있 습 니 다.다음 명령:
$ perl -i.bak -pe 's//bdollar(s?)/buck/1/g' file.txt
       

 
'dollar' 를 'buck' 으로, 'dollars' 를' bucks' 로 각각 교체 했다.> 명령 은 제자리 에서 file. txt 를 수정 합 니 다.
한편, >> 은 원본 파일 에 사본 을 만 들 고 그 이름 뒤에 'bak' 를 추가 하여 새로운, 수 정 된 버 전과 구별 합 니 다.따라서 다음 명령:
perl -i.bak -pe 's//bdollar(s?)/buck/1/g' *

현재 디 렉 터 리 의 모든 파일 에 백업 을 만 듭 니 다.파일 file1. txt, file2. txt, file3. txt 가 있다 고 가정 하면 file1. txt. bak, file2. txt. bak 와 file3. txt. bak 를 얻 을 수 있 습 니 다.
2)mv
mv file1.txt.bak file1.txt

수백 개의 파일 이 이름 을 바 꿔 야 한다 면 다음 명령 을 입력 하 십시오.
foreach file in (*.txt)
do
  mv $file.bak $file
done

foreach 문법 에 대하 여 조 사 를 기다 리 고 있 습 니 다.
eg:
 
 @record = split(",", "$line");
   foreach $field (@record) {…}
또 다른 순환 for. in...
eg:
for dir in `find -mtime -1 `
    do
    echo $dir
   done
3)reame:
$ rename 's//.bak$//' *.bak

 
같은 임 무 를 수행 했다.정규 표현 식 perl -i 은 명령 행 에 열 거 된 모든 파일 이름 뒤의 bak 를 삭제 합 니 다. 이 예제 에 서 는 perl -i.bak 또는 모든 파일 이 며, 단 축 된 이름 을 대상 파일 이름 으로 사용 합 니 다.
파일 이름 이 규칙 적 이지 않 을 때 s//.bak$// 명령 이 특히 유용 하 다.예 를 들 어 아래 목록 의 내용 을 고려 해 보면 대학 1 학년 신입생 의 편지 집합 처럼 보인다.
$ ls 
RenT.txt  bEErMoNey.txt  gASmoNey.TXt

위의 * 스 크 립 트 는 이 문 제 를 처리 할 수 없습니다. 이 파일 들 의 이름 이 규칙 적 이지 않 기 때 문 입 니 다.그리고 rename 은 이 를 쉽게 처리 할 수 있다.
$ rename 'y/A-Z/a-z/' *

 
정규 표현 식 foreachrename 연산 자 는 변환 에 사 용 됩 니 다.작업 을 바 꾸 려 면 두 개의 목록 이 필요 합 니 다. 원본 문자 목록 과 바 꾸 는 문자 목록 입 니 다.이 두 목록 의 크기 가 같다 면 이 텍스트 에서 원본 목록 의 첫 번 째 문자 인 스 턴 스 를 교체 목록 의 첫 번 째 문자 로 바 꿉 니 다.다시 말 하면 이 예제 에서 대문자 'A' 의 인 스 턴 스 는 소문 자 'a', 'B' 를 'b' 로 대체 하 는 것 으로 유추 된다.텍스트 의 소문 자 는 변 하지 않 는 다.
7. 파일 보호
$ set -o noclobber

 
앞의 두 명령 은 각각 명령 행 에서 y/A-Z/a-z/y 으로, mvmv -i 으로 교체 했다.대화 식 모드 에서 작업 을 확인 하도록 강제 합 니 다.
세 번 째 명령 은 Shell 에서 일정한 안전성 을 제공 합 니 다.rm 을 사용 하면 rm -i 을 사용 하여 파일 을 덮어 쓰 지 않 습 니 다.
$ ls
        
secret.txt
        
$ cat > secret.txt
        
bash: secret.txt: cannot overwrite existing file
noclobber 을 사용 하지 않 으 려 면 입력 할 수 있 습 니 다:
set +o noclobber
       

。또한 > (작은 번호 에 세로 선 추가) 을 사용 하여 조작 자 를 강제로 덮어 쓸 수 있 습 니 다.
$ cat secret.txt
I love green eggs and ham. 
$ echo "No more secrets" >| secret.txt
$ cat secret.txt
No more secrets

8. 기타 특별한 명령
1)ls –R
2) cal -3
3) man -k cron      
$ man -k cron
cron (8)             - daemon to execute scheduled commands (Vixie Cron)
crontab (1)          - maintain crontab files for individual users (V3)
crontab (5)          - tables for driving cron
dh_installcron (1)   - install cron scripts into etc/cron.*

 
이 예제 에서 noclobber 은 실 용적 인 도구 의 man 페이지 를 찾 아 냈 는데 그 중에서 한 줄 의 설명 내용 에는 단어 cron 이 포함 되 어 있다.이 man 페이지 에 서 는 >| 을 어떻게 사용 하 는 지 설명 할 수 있 습 니 다. 이것 은 시스템 작업 스케줄 을 담당 하 는 데 몬 입 니 다.
그렇다면 그 수 치 는 어떤 의 미 를 의미 하 는 것 일 까?모든 수 치 는 온라인 UNIX 매 뉴 얼 의 일부분 을 표시 합 니 다.첫 번 째 부분 은 UNIX 사용자 가 Shell 에서 실행 할 수 있 는 모든 명령 을 보류 합 니 다.다섯 번 째 부분 에서 일부 파일 형식 을 묘사 했다.8 부 에 서 는 시스템 관리 명령 에 대해 목록 을 작성 했다.다른 부분 은 시스템 호출 (2), 라 이브 러 리 호출 (3) 등 을 묘사 했다.
4/dev/null 

보시 다시 피 대부분의 명령 은 출력 을 만 듭 니 다.대부분의 명령 행 명령 은 표준 을 사용 하여 결 과 를 표시 합 니 다.그러나 다른 명령 들 은 표준 출력 과 표준 오 류 를 사용 하고 처리 과정 과 오류 메 시 지 를 순서대로 표시 합 니 다.이러한 출력 을 무시 하려 면 (명령 행 에서 실행 되 는 동작 에 관여 할 수 있 기 때문에 매우 가치 가 있 습 니 다) 출력 을 UNIX bit bucket, / dev / null 로 다시 설정 할 수 있 습 니 다.이 자리 들 은 들 어 갈 수 밖 에 없고 나 갈 수 없다.
다음은 간단 한 예 이다.
$ ls
secret.txt
$ cat secret.txt
I am the Walrus.
$ cat secret.txt > /dev/null
        
$ cat socrates.txt > /dev/null
cat: socrates.txt: No such file or directory
$ cat socrates.txt >& /dev/null
        
$ echo Done.
Done.

  man 의 표준 출력 을 / dev / null 로 재 설정 하면 모든 위 치 를 가상 '영구 세로 파일' 로 보 냈 기 때문에 내용 이 표시 되 지 않 습 니 다.그러나 오류 가 발생 하면 표준 오류 로 보 내 는 오류 메 시 지 를 표시 합 니 다.모든 출력 을 무시 하려 면 cron 연산 자 를 사용 하여 cat>& 을 버 릴 수 있 습 니 다.상기 빨간색 은 '> &' 를 사 용 했 기 때문에 오류 가 없습니다. 그렇지 않 으 면 분홍색 과 같이 오류 가 발생 할 수 있 습 니 다.
기 존 파일 을 비우 거나 새 공백 파일 을 만 들 수 있 는 길이 가 0 인 파일 로 / dev / null 을 사용 할 수 있 습 니 다.
$ cat secret.txt
Anakin Skywalker is Darth Vader. 
$ cp /dev/null secret.txt
$ cat secret.txt
$ echo "The moon is made of cheese!" > secret.txt
$ cat secret.txt
The moon is made of cheese!
$ cat /dev/null > secret.txt
        
$ cat secret.txt
$ cp /dev/null newsecret.txt
$ cat newsecret.txt
$ echo Done.
Done.

  
    
  

 
 

좋은 웹페이지 즐겨찾기