Linux 셸 의 실 용적 인 팁

7141 단어 segmentfault
-----------
리 눅 스에 관 한 몇 편의 글 이 인기 가 많아 서 많은 독자 들 이 내 가 이 방면 의 글 을 많이 쓰 기 를 바란다.나 는 앞으로 정기 적 으로 리 눅 스 의 실 용적 인 기 교 를 공유 할 것 이다. 네가 습관 을 들 인 후에 나 처럼 윈도 우 를 사용 하면 머리 가 아 플 것 이다.
먼저 다른 이 야 기 를 하 자 면, 사람들 은 항상 더 블 시스템 을 설치 할 수 있 는 지, 어떤 리 눅 스 버 전 을 설치 하 는 것 이 좋 은 지 물 었 다.여기 서 통일 적 으로 대답 해 보 세 요. 더 블 시스템 을 설치 하 는 것 은 간단 하고 인터넷 에 많은 튜 토리 얼 이 있 습 니 다.발행 판 에 대해 서 는 우 분투 를 추천 합 니 다. 딱딱 해 보 이 는 소 규모 발행 판 에 미련 을 두 지 마 세 요. 우리 의 평가 기준 은 안정 적 인지, 완벽 한 지역 사회 지원 을 가지 고 있 는 지 여부 입 니 다. 이 두 가지 우 분투 데스크 톱 버 전이 가장 좋 습 니 다.제 가 블 루 투 스 키보드 의 어 울 리 는 문 제 를 만 났 는데 우 분투 커 뮤 니 티 에 큰 놈 이 직접 구동 을 써 서 완벽 하 게 해결 했다 니 정말 예상 치 못 했 습 니 다.
물론 시간 이 있 으 면 마음대로 하 세 요.아니면 돈 이 있 으 면 리 눅 스 발행 판 에 얽 매 이지 말고 맥 북 을 하 세 요. 그것 도 리 눅 스 기반 입 니 다.
주제 로 돌아 가면 리 눅 스 의 매력 적 인 점 은 완선 한 지역 사회 와 많은 작고 아름 다운 도구, 그리고 파이프 부적, 방향 전환 등 아름 다운 디자인 이념 으로 복잡 한 작업 을 자동화 할 수 있다 고 생각 합 니 다.본 고 는 기본 적 인 Linux 셸 기 교 를 소개 하고 생산력 을 향상 시 킬 수 있 을 것 이 라 고 믿 습 니 다!
비슷 한 파일 이름 을 입력 하 는 것 은 너무 번 거 롭 습 니 다.
괄호 로 묶 은 문자열 을 쉼표 로 연결 하면 자동 으로 확장 할 수 있 고 유용 합 니 다. 예 를 직접 보 세 요.
$ echo {one,two,three}file
onefile twofile threefile

$ echo {one,two,three}{1,2,3}
one1 one2 one3 two1 two2 two3 three1 three2 three3

보 세 요. 괄호 안의 모든 문 자 는 다음 (또는 이전) 문자열 과 조합 하여 연결 할 수 있 습 니 다. 괄호 와 그 중의 쉼표 는 빈 칸 으로 구분 할 수 없습니다. 그렇지 않 으 면 일반적인 문자열 로 여 겨 집 니 다.
이 기 교 는 어떤 실제 적 인 용도 가 있 습 니까?가장 간단 하고 유용 한 것 은 cp, mv, rm 등 명령 확장 파 라미 터 를 주 는 것 이다.
$ cp /very/long/path/file{,.bak}
# 给 file 复制一个叫做 file.bak 的副本

$ rm file{1,3,5}.txt
# 删除 file1.txt file3.txt file5.txt

$ mv *.{c,cpp} src/
# 将所有 .c 和 .cpp 为后缀的文件移入 src 文件夹

경로 이름 입력 이 너무 번 거 롭 습 니 다.cd - 로 방금 있 었 던 디 렉 터 리 를 되 돌려 주 고 예 를 들 어 보 세 요.
$ pwd
/very/long/path
$ cd # 回到家目录瞅瞅
$ pwd
/home/labuladong
$ cd - # 再返回刚才那个目录
$ pwd
/very/long/path

특수 명령 !$ 은 이전 명령 의 마지막 경로 로 대 체 됩 니 다. 예 를 들 어:
# 没有加可执行权限
$ /usr/bin/script.sh
zsh: permission denied: /usr/bin/script.sh

$ chmod +x !$
chmod +x /usr/bin/script.sh

특수 명령 !* 은 이전 명령 이 입력 한 모든 파일 경로 로 바 뀌 며, 예 를 직접 보십시오.
# 创建了三个脚本文件
$ file script1.sh script2.sh script3.sh

# 给它们全部加上可执行权限
$ chmod +x !*
chmod +x script1.sh script2.sh script3.sh

환경 변수 CDPATH 에 자주 사용 하 는 작업 디 렉 터 리 를 추가 할 수 있 습 니 다. cd 명령 이 현재 디 렉 터 리 에서 지정 한 파일/디 렉 터 리 를 찾 을 수 없 을 때 자동 으로 CDPATH 디 렉 터 리 에서 찾 습 니 다.
예 를 들 어 저 는 /var/log 디 렉 터 리 에 자주 가서 로 그 를 찾 습 니 다. 다음 명령 을 수행 할 수 있 습 니 다.
$ export CDPATH='~:/var/log'
# cd 命令将会在 ~ 目录和 /var/log 目录扩展搜索

$ pwd
/home/labuladong/musics
$ cd mysql
cd /var/log/mysql
$ pwd
/var/log/mysql
$ cd my_pictures
cd /home/labuladong/my_pictures

이 기 교 는 매우 쓰기 좋 은 것 이다. 이렇게 하면 자주 완전한 경로 이름 을 쓰 지 않 고 많은 시간 을 절약 할 수 있다.
주의해 야 할 것 은 상기 조작 은 bash 가 지원 하 는 것 입 니 다. 다른 주류 셸 해석 기 는 당연히 확장 cd 명령 의 검색 디 렉 터 리 를 지원 하지만 수정 CDPATH 변수 가 아 닐 수도 있 습 니 다. 구체 적 인 설정 방법 은 스스로 검색 할 수 있 습 니 다.
중복 명령 을 입력 하 는 것 은 너무 번거롭다.
특수 명령 !! 을 사용 하면 지난번 에 사용 한 명령 으로 자동 으로 바 꿀 수 있 습 니 다.
$ apt install net-tools
E: Could not open lock file - open (13: Permission denied)

$ sudo !!
sudo apt install net-tools
[sudo] password for fdl:

어떤 명령 은 매우 길 어서 한 시간 동안 구체 적 인 매개 변 수 를 기억 하지 못 하면 어떻게 합 니까?
bash 터미널 에 서 는 Ctrl+R 단축 키 를 사용 하여 과거 기록 명령 을 역방향 으로 검색 할 수 있 습 니 다. 역방향 검색 이 라 고 하 는 이 유 는 최근 입력 한 명령 을 검색 하 는 것 입 니 다.
예 를 들 어 Ctrl+R 를 누 르 고 sudo 를 입력 하면 bash 는 최근 에 sudo 을 포함 하 는 명령 을 검색 할 수 있 습 니 다. 차 로 돌아 가면 이 명령 을 실행 할 수 있 습 니 다.
(reverse-i-search)`sudo': sudo apt install git

그러나 이 방법 은 단점 이 있 습 니 다. 우선, 이 기능 은 bash 만 지원 하 는 것 같 습 니 다. 제 가 사용 하 는 zsh 는 셸 단말기 로 서 사용 할 수 없습니다.둘째, 하나의 명령 만 찾 을 수 있 습 니 다. 예전 의 어떤 명령 을 찾 고 싶다 면 어 쩔 수 없습니다.
이러한 상황 에 대해 우리 가 가장 자주 사용 하 는 방법 은 history 명령 을 사용 하여 파이프 문자 와 grep 명령 에 맞 춰 특정한 역사 명령 을 찾 는 것 이다.
# 过滤出所有包含 config 字段的历史命令
$ history | grep 'config'
 7352  ./configure
 7434  git config --global --unset https.proxy
 9609  ifconfig
 9985  clip -o | sed -z 's/
/,
/g' | clip 10433 cd ~/.config

사용 하 는 모든 셸 명령 이 기 록 됩 니 다. 앞의 숫자 는 몇 번 째 명령 임 을 표시 합 니 다. 중복 사용 하고 싶 은 명령 을 찾 은 후에 도 이 명령 을 복사 해서 붙 여 넣 을 필요 가 없습니다. ! + 다시 사용 하고 싶 은 명령 번 호 를 사용 하면 명령 을 실행 할 수 있 습 니 다.
위의 예 를 들 어 저 는 그 명령 을 다시 실행 하고 싶 습 니 다. 이렇게 할 수 있 습 니 다.
$ !7434
git config --global --unset https.proxy
# 运行完成

나 는 git config 파이프 플러스 history 라 는 글자 가 너무 많다 고 생각한다. 너의 셸 설정 파일 grep, .bashrc 등에 이런 함 수 를 쓸 수 있다.
his()
{
    history | grep "$@"
}

이렇게 하면 그렇게 많이 쓸 필요 가 없고 .zshrc 만 있 으 면 역사 명령 을 검색 할 수 있다.
저 는 보통 bash 를 터미널 로 사용 하지 않 습 니 다. 저 는 여러분 에 게 사용 하기 좋 은 셸 터미널 을 zsh 라 고 부 르 는 것 을 추천 합 니 다. 이것 도 제 가 사용 하 는 셸 입 니 다.이 단말 기 는 각종 플러그 인 을 확장 할 수 있어 서 매우 좋 으 며, 구체 적 인 설정 방법 은 스스로 검색 할 수 있 습 니 다.
기타 팁
1. his 'some_keyword' 명령 은 자동 으로 문자 yes 를 입력 하여 확인 합 니 다.
우리 가 어떤 소프트웨어 를 설치 할 때 상호작용 적 인 질문 이 있 을 수 있다.
$ sudo apt install XXX
...
XXX will use 996 MB disk space, continue? [y/n]

일반적인 상황 에서 우 리 는 모두 y 끝까지 가 고 있 지만 만약 에 우리 가 일부 소프트웨어 의 설 치 를 자동화 하려 면 매우 귀 찮 고 이런 대화 형 질문 을 받 으 면 멈 추고 수 동 으로 처리 해 야 한다.y 명령 은 우 리 를 도 울 수 있다.
$ yes | your_cmd

이렇게 하면 자동 yes 으로 내 려 가 우리 가 입력 하 는 것 을 멈 추 지 않 을 것 이다.
만약 당신 이 앞의 Linux 파일 설명 자 를 읽 은 적 이 있다 면, 그 원 리 는 매우 간단 하 다 는 것 을 알 수 있 습 니 다.
단독으로 y 명령 을 실행 해 보 세 요. 이것 은 바로 많은 문자 y 를 출력 하 는 것 입 니 다. 파 이 프 를 통 해 출력 과 yes 의 표준 입력 을 연결 합 니 다. your_cmd 또 지루 한 문 제 를 제기 하면 표준 입력 에서 데 이 터 를 읽 고 Y 와 줄 바 꿈 자 를 읽 을 수 있 습 니 다. 수 동 으로 Y 를 입력 하여 확인 하 는 것 이 효과 입 니 다.
2. 특수 변수 your_cmd 는 지난 명령 의 반환 값 을 기록 합 니 다.
리 눅 스 셸 에 서 는 C 언어의 습관 에 따라 반환 값 이 0 이면 프로그램 이 정상적으로 종료 되 고 0 값 이 아니면 이상 하 게 종료 된다.이전 명령 의 반환 값 을 읽 는 것 은 평소 명령 행 을 사용 할 때 소 용이 없 지만 셸 스 크 립 트 를 만 들 려 면 반환 값 이 매우 유용 하 다 는 것 을 알 고 있 습 니 다.
실제 적 인 예 를 들 어, 예 를 들 어 나의 Github 창고 fucking - algorithm, 나 는 그 중의 모든 markdown 파일 의 맨 아래 에 이전 편, 다음 편, 디 렉 터 리 세 개의 꼬 릿 말 링크 를 추가 해 야 한다. 어떤 글 은 이미 꼬 릿 말 이 있 고 대부분 없다.
중복 추 가 를 방지 하기 위해 서 md 파일 아래 에 추가 되 었 는 지 알 아야 합 니 다. 이 럴 때 $? 변수 배합 $? 명령 을 사용 할 수 있 습 니 다.
#!/bin/bash
filename=$1
# 查看文件尾部是否包含关键词
tail | grep '下一篇' $filename
# grep 查找到匹配会返回 0,找不到则返回非 0 值
[ $? -ne 0 ] && { 添加页脚; }

3. 특수 변수 grep 는 현재 프로 세 스 의 PID 를 기록 합 니 다.
이 기능 은 평소에 도 잘 사용 되 지 않 을 수 있 지만 셸 스 크 립 트 를 쓸 때 도 매우 유용 합 니 다. 예 를 들 어 $$ 에 임시 파일 을 만 들 려 면 파일 의 이름 을 짓 는 것 이 매우 신경 쓰 입 니 다. 이 럴 때 /tmp 변 수 를 사용 하여 현재 프로 세 스 의 PID 를 임시 파일 이름 으로 확장 할 수 있 습 니 다. PID 는 컴퓨터 에서 유일 합 니 다.그래서 절대 반복 되 지 않 고 임시 파일 의 이름 을 기억 할 필요 도 없다.
자, 오늘 은 이런 기 교 를 공유 합 시다. 여러분 이 리 눅 스에 관심 이 있다 면 공유 하고 있 습 니 다. 데이터 가 좋 으 면 다음 에 쓰 겠 습 니 다.

좋은 웹페이지 즐겨찾기