대화 UNIX, 7 부: 명령 행 관용어 - 메모
1.find
명령, 각종 파일, 심지어 전체 UNIX 를 스 캔 하고 처리 하 는 데 사용 할 수 있 습 니 다.
파일 시스템.
예 를 들 어 저 는
find
을 grep
또는 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 가 포함 되 어 있다 고 가정 하고 xargs
과 grep
등 가 를 사용 합 니 다.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/' *
정규 표현 식
foreach
의 rename
연산 자 는 변환 에 사 용 됩 니 다.작업 을 바 꾸 려 면 두 개의 목록 이 필요 합 니 다. 원본 문자 목록 과 바 꾸 는 문자 목록 입 니 다.이 두 목록 의 크기 가 같다 면 이 텍스트 에서 원본 목록 의 첫 번 째 문자 인 스 턴 스 를 교체 목록 의 첫 번 째 문자 로 바 꿉 니 다.다시 말 하면 이 예제 에서 대문자 'A' 의 인 스 턴 스 는 소문 자 'a', 'B' 를 'b' 로 대체 하 는 것 으로 유추 된다.텍스트 의 소문 자 는 변 하지 않 는 다.7. 파일 보호
$ set -o noclobber
앞의 두 명령 은 각각 명령 행 에서
y/A-Z/a-z/
을 y
으로, mv
을 mv -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.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LINUX 시리즈(1부)UNIX는 1969년 AT&T에서 개발한 운영 체제입니다. UNIX는 다중 사용자, 다중 프로세스 운영 체제입니다. 기본적으로 사용 가능한 두 가지 기본 UNIX 버전이 있습니다. 대부분의 UNIX 버전은 이러한 버...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.