리눅스 커맨드 라인 모범 사례 및 팁?


112

Linux 명령 행 (CLI) 우수 사례와 팁을 축적 할 토론을 열고 싶습니다.

아래 설명을 공유하기 위해 그러한 토론을 검색했지만 찾지 못했습니다.이 게시물.

우리 모두가 이것으로부터 배울 수 있기를 바랍니다.

Bash 팁, grep, sed, AWK, / proc 및 기타 모든 관련 Linux / Unix 시스템 관리, 쉘 프로그래밍 모범 사례를 모두 공유 할 수 있습니다.


왜 리눅스 만? 유닉스의 거의 모든 종류에 유용한 팁이 많이 있습니다.
mouviciel

이 질문은 다소 광범위 할 수 있습니다. Linux / Unix 명령 행 모범 사례로 전체 책을 채울 수 있습니다 ...
Jonik

나는 리눅스에 적용될 수있는 유닉스 팁도 매우 환영한다는 것에 동의한다. 나는 A 때문에 리눅스를 썼다. 이것이 우리가 여기서 일하는 것입니다. B. 최근 몇 년간 유닉스보다 대중의 폭이 넓어지고 있기 때문입니다.
Maxim Veksler

사람들이 사용하는 가장 유용하고 흥미로운 명령 목록을 작성하는 것이 좋습니다.

이 중 관련이 있습니까? refspecs.freestandards.org

답변:


111

사용 화면 , 하나에 여러 개의 터미널을 가질 수 GNU 프로젝트에 의해 개발 된 무료 터미널 멀티플렉서.

세션을 시작하면 연결이 끊긴 경우에도 터미널이 저장되므로 나중에 또는 집에서 다시 시작할 수 있습니다.


2
내가 사용하는 가장 일반적인 스위치는 마지막 화면 세션을 분리하고 다시 시작하기위한 'screen -D -R'과 여러 화면에서 동일한 화면 세션을보기위한 'screen -x'입니다. 또한 dotfiles.org/.screenrc
Nick Devereaux

4
screen의 또 다른 좋은 점은 screen -x를 사용하여 무언가에 대해 협업하고 싶을 때 다른 사람들과 터미널을 공유 할 수 있다는 것입니다.
gareth_bowles

101

SSH!
SSH는 신의 명령입니다. 배우는 것이 가장 귀중한 명령이라고 생각합니다. 옵션은 꽤 어려울 수 있지만 SSH에 새로운 명령 줄 옵션을 사용하여 끊임없이 필요하다고 생각하는 것을 끊임없이 배우는 것처럼 보입니다. 나는이 시점에서 그것들을 모두 사용했을 것이다.

많이 사용할수록 더 많이 배울 수 있습니다. 그것을 사용하여 놀라운 일을 할 수 있습니다.

참고 : ssh 서버를 실행하는 것 외에는 서버에 설정이 없어도 이러한 모든 작업이 원격으로 수행 가능합니다.

인터넷을 통해 파일 시스템 마운트

SSHFS에 대한 인터넷 검색

앞으로 명령 .

SVN + SSH 프로토콜은 원격 클라이언트에서 실행중인 데몬이없는 서버로의 Subversion입니다! SVN 명령은 ssh 쉘을 통해 서버를 시작하고 기존 파이프를 통해 정보를 앞뒤로 전달합니다. rsync 프로그램은 SSH를 통해 자체적으로 시작하여 rsync 데몬이없는 서버에 대해 동일한 작업을 수행합니다. 비슷한 트릭을 수행하기 위해 자신의 bash 파일을 쉽게 작성할 수 있습니다.

방화벽을 통과하는 체인

나는 이것을 사용하여 리눅스 서버를 집에서 맥으로 옮긴다.

포워드 포트 :
홈 방화벽을 통해 반송하고 홈 네트워크 내에서 마치 마치 집에서 라우터를 구성 할 수 있다는 것을 알 때까지는 적당히 유용한 것 같습니다.

전달 X 요청 :

이것은 또 다른 놀라운 것입니다. 원격 시스템에서 X 서버를 실행하거나 사용하지 않고 x-windows 프로그램을 실행할 수 있으며 창이 로컬 화면에 나타납니다. 스위치 -X 만 사용하면됩니다.

원격 서버에서 X 서버를 실행할 필요가 없으므로 서버에 대한 CPU 영향이 최소화되므로 Windows 및 cygwin / X를 실행하는 강력한 게임 PC에 거대한 앱을 제공하는 TINY Linux 서버를 가질 수 있습니다.

물론 VI와 EMACS는 SSH를 통해 작동하지만 집에서 실행할 때 때로는 더 많은 것을 원합니다. ssh -X를 사용하여 Eclipse 사본을 시작합니다! 서버가 랩톱보다 강력하면 랩톱에 GUI가 있지만 컴파일은 서버에서 수행되므로 시스템로드에 대해 걱정하지 마십시오.

배치 파일로 실행

(다른 시스템에서 "작업을 수행하는"로컬 배치 파일을 실행한다는 의미) :

두 가지가 결합되어 하나를 시원하게 만듭니다. 하나는 (보다 안전한) 암호화 키를 사용하여 비밀번호 프롬프트를 제거 할 수 있다는 것입니다. 두 번째는 SSH CLI에서 명령을 지정할 수 있다는 것입니다. 원격 서버에서 컴파일이 실패 할 때처럼 SSH를 컴퓨터에 넣고 사운드 파일을 재생할 수 있습니다.)

원격 명령의 출력을 리디렉션하여 로컬 배치 파일 내에서 사용할 수 있으므로 서버에서 실행중인 컴파일을 로컬에서 수행 할 수도 있습니다.

Mac에 내장

서버와 클라이언트는 모두 맥과 리눅스에 내장되어 있습니다. Mac 및 Ubuntu의 경우 서버를 활성화하는 것은 올바른 확인란을 찾는 것만 큼 간단합니다.

cygwin 또는 cygwin / X 설치 PC (cygwin / X를 사용하면 x- 윈도우 출력을 Linux 시스템에서 Windows PC로 전달할 수 있음-X 서버를 설치 함)

중요 팁 / 구성 파일

방화벽에서 포트 22를 사용하지 마십시오. 많은 해킹 시도를 할 수 있지만 가치가 없습니다. 방화벽이 다른 포트를 서버로 전달하도록하십시오.

ssh 명령을 크게 단순화 할 수있는 광범위한 구성 옵션이 있습니다. 직장에서 내 예는 다음과 같습니다.

Host home
    hostname billshome.hopto.org
    Port=12345
    user=bill
    LocalForward=localhost:1025 mac:22

"ssh home"(아무것도 입력하지 않음)을 입력하면 마치 입력 한 것처럼 작동합니다.

ssh -p 12345 bill@billshome.hopto.org

그리고 로컬 포트 ​​1025를 집의 시스템 "mac"으로 전달합니다. 그 이유는 파일에 다른 항목이 있기 때문입니다.

Host mac
    hostname localhost
    port=1025

"ssh home"을 수행 한 후에도 여전히 창을 연 상태에서 "ssh mac"을 입력하면 여기에있는 컴퓨터가 실제로 "mac : 22 "는 다른 명령으로 시작되므로 방화벽을 통해 집에있는 Mac에 연결됩니다.

편집-멋진 스크립트!

나는 내가 좋아하는 오래된 스크립트를 파헤 쳤다. 다시 관심을 가질만한 누군가를 위해 그것을 다시 게시해야했다. 스크립트는 "authMe"라고합니다

#!/bin/bash
if [ ! -f ~/.ssh/id_dsa.pub ]
then
    echo 'id_dsa.pub does not exist, creating'
    ssh-keygen -tdsa
fi
ssh $1 'cat >>.ssh/authorized_keys' <~/.ssh/id_dsa.pub

홈 디렉토리에이 스크립트가 있고 ssh를 통해 연결할 수있는 호스트가있는 경우 "./authMe hostName"을 입력 할 수 있습니다.

필요한 경우 공개 / 개인 키 쌍을 생성하고 다른 컴퓨터로 ssh하고 공개 키를 복사합니다 (ssh 명령은 암호를 묻습니다 ...)

이 후 SSH 명령은 해당 원격 시스템에 연결할 때 더 이상 비밀번호를 요구하지 않아야하며 공개 / 개인 키 쌍을 사용합니다.

원격 컴퓨터가 항상 안전한 것은 아니라는 메시지가 표시되면 "암호 구문"설정을 고려해야합니다.

추가 보안을 위해 텍스트 비밀번호 (키만)를 허용하지 않도록 파 엔드에서 ssh 서버를 구성 할 수도 있습니다.


4
+1 아주 좋고 컴팩트 한 포스트
Karsten

2
포트 22를 통한 SSH에 대한 작은 참고 사항 : 좋은 루트 암호를 가지고 있고 사용자에게 끔찍한 암호가 없다면, fail2ban (또는 이와 유사한 것)을 실행하면 균열 시도를 피할 수 있습니다. SSH를 다른 포트에 유지하는 것이 정말 성가신 것으로 나타났습니다.
David Wolever

1
때때로 짜증날 수 있지만 연결의 양은 무서웠습니다. 나는 그들이 통과하지 않아야한다는 것을 알고 있지만, 누군가가 당신의 집까지 걸어 가고 매 순간 문 손잡이를 잡고있는 것처럼 보입니다.

요즘 대부분의 ssh 버전에는 마지막 명령의 기본 제공 버전이 있으며이라고 ssh-copy-id하며 다음과 같이 간단합니다ssh-copy-id user@someserver
JamesHannah

'ssh mac'트릭을 수행하는 다른 방법은 .ssh / config 파일에서 ProxyCommand 지시문을 사용하는 것입니다. 호스트 mac ProxyCommand ssh -q home "nc % h % p"이것은 가정에서 netcat (nc)를 실행하고 ssh 연결을 mac으로 바로 리디렉션합니다. . 나는 사슬에 그 쉬운 (예를 들어 당신이 '작업 웹 서버'에 도착하는 '작업 요새'에 도착하는 '집'에 연결해야하는 경우 찾기
toppledwagon

73

나는 사용하고 싶다

cd -

이전 디렉토리로 전환합니다. 매우 유용한!


6
나는 이것을 전혀 몰랐다! 감사! 관련 메모에서 push 및 popd는 dirs 스택을 작성하여 비슷한 작업을 수행합니다. 이러한 종류의 속임수는 dir dir 구조를 탐색 할 때 도움이됩니다.

이것은 깨달음입니다.
Manuel Ferreria

69

최근에 pv고양이와 비슷하지만 전송 세부 정보가 있는 명령 (파이프 뷰어)을 발견했습니다 .

그래서 대신

$ gzip -c access.log > access.log.gz

당신이 사용할 수있는

$ pv access.log | gzip > access.log.gz
611MB 0:00:11 [58.3MB/s] [=>      ] 15% ETA 0:00:59

따라서 작업이 언제 끝날지 모르는 대신 이제 알 수 있습니다!

Peteris Krumins의 의례


$ gzip -c access.log> access.log.gz 왜 그럴까요 : $ gzip access.log

오 작동합니다 :) 방금 Peteris의 웹 사이트에서 예제를 가져 왔습니다.
Nick Devereaux

오래 된 것 같습니다 tee(1).
Daniel C. Sobral

내가 항상 잊어 버리는 매우 유용한 유틸리티 :-(
Patrick


46

Ctrl-R을 누르고 명령 (또는 그 일부)을 입력하기 시작하면 명령 내역이 검색됩니다. Ctrl-R을 다시 누르면 다음 일치 항목으로 건너 뛰고 Enter는 현재 표시된 명령을 실행하며 오른쪽 화살표 (적어도)를 사용하여 먼저 편집 할 수 있습니다.

$ (reverse-i-search)`svn': svn status

나는 이것을 배우기 전에 주 OS로 7 년 동안 Linux를 사용했지만 지금은 그것을 알기 때문에 매우 편리합니다.


감사. 역 검색을 사용했지만 다음 경기로 넘어갈 수있는 방법을 찾지 못했습니다.
Adam

Ctrl-S는 다음 경기로 넘어갑니다. stty -ixon먼저 XON / XOFF 흐름 제어 의미를 해제 해야 할 수도 있습니다 (이는 또한 Ctrl-Q를 사용 가능하게합니다. 기본적으로 Ctrl-V 인용 삽입과 동일하게 맵핑되지만 다른 것으로 변경할 수 있습니다) ). 참조 man sttyman readline더 많은 정보를위한. stty명령은 추가 할 수 있습니다~/.bashrc
데니스 윌리엄슨

45

커맨드 라인은 재밌습니다. 커맨드 라인을 사용하여 다른 사람을 우연히 보면서 우연히 많은 것을 배울 수 있다고 생각합니다.

나는 수년 동안 손으로 디렉토리 이름을 힘들게 입력하면서 쉘을 사용하고 있었다. 어느 날 나는 친구가 시스템에서 엉망인 것을보고 있었고 그는 계속 키를 쳤다. "왜 탭을 치나요?"라고 물었습니다. 답 : 디렉토리 나 파일 이름을 완성하려고합니다. 누가 탭을 완성했을까요? 약간의 파일이나 디렉토리를 입력하고 탭을 누르면 입력 한 내용을 마무리하려고 시도합니다 (동작은 셸에 따라 다름).

어느 날 친구가 명령 줄에서 나를보고 있었고 다음과 같은 유형을 보았습니다.

coryking@cory ~/trunk/mozi $ pushd /etc
/etc ~/trunk/mozi
coryking@cory /etc $ popd
~/trunk/mozi
coryking@cory ~/trunk/mozi $

누가 추측 했을까!? 그는 popd/ 에 대해 전혀 몰랐다 pushd. 우리도 ...


1
나에게 탭 완성은 "명백한"것처럼 보이며 매우 기본적이지만 popd / pushd에 대해서는 전혀 알지 못했습니다. 정말 재밌어요. :)
Jonik

3
또한 할 수 있으려면이 답변을 참조 명령, 파일 및 디렉토리보다 훨씬 더 많은 탭을-완료 stackoverflow.com/questions/603696//603919#603919
Jonik

1
그것은 맞는 것 같아. 나는 누군가를 보면서 배쉬의 역 역사 검색 (ctrl-r)에 대해 배웠다. 나중에 그것은 readline 기능이라는 것을 깨달았으며 readline을 통합하는 다른 프로그램 (mysql, gdb, python -i, clisp 등)에서도 동일하게 작동했습니다.
sigjuice

2
몇 년 동안 "쉘"을 어떻게 사용할 수 있고 탭 완성에 대해 알지 못합니까?
prestomation 2009

pushd / popd를 다룰 때 dirs 명령을 언급하는 것을 잊지 마십시오 . 푸시 / 팝 스택에 무엇이 있는지 보여줍니다.
slm

41

Vim을 배우십시오.

(아마도) 최고의 편집자이지만 가장 확실한 편집자는 Linux 서버에서 사용 가능한 것입니다.


1
gvim을 또한 창문에 최선 파일 브라우저입니다)

vim을 알고 나면 대부분의 쉘을 vi 모드로 전환 할 수 있으며 탐색이 매우 쉽고 빠릅니다.
Patrick

38

로그 아웃 한 후에도 프로그램을 실행 상태로 두는 것이 유용한 경우가 있습니다. 그 목적으로 nohup 또는 화면을 사용하는 솔루션을 보았습니다. 내가 아는 가장 간단한 것은 :

$ your_command_here & disown

실행중인 프로그램을 분리 할 수도 있습니다.

$ your_command_here
# Press <Control-Z> to stop the program and bring it to background:
$ bg
$ disown

6
나중에 어디서나 해당 앱에 "다시 연결"할 수 있기 때문에 화면을 사용하는 것이 좋습니다.
prestomation

+1, 나는 불신을 듣지 못했습니다.
user18911 2016 년

ditto re disown, 내가 이미 screen과 동일하게했지만
Andy

38

별칭이 아닌 실제 명령을 사용하려면 백 슬래시를 사용합니다.

\rm -rf ~/tmp

"command rm -rf ~ / tmp"와 동일합니까?
Maxim Veksler

"명령"을 몰랐지만 동일하게 보입니다.
mouviciel

4
글쎄, "명령"이 별칭이 아닌 경우가 아니라면이 경우 \ command rm -rf ~ / tmp를 사용해야합니다. \ rm -rf ~ / tmp가 더 좋습니다
Jamol

@ presario 그리고 "/"의 별칭을 만들 수 있다고 생각하십니까? 나는 의견을지지 할 수없는 것이 얼마나 유감 스럽다 :)

유사한 명령 " builtin" 도 참조하십시오 .
Dennis Williamson

38

이 팁을 통해 CLI를보다 편안하게 만들 수 있습니다 (적어도 나를 위해).

다음 내용으로 ~ / .inputrc 파일을 만듭니다.

"\e[A": history-search-backward
"\e[B": history-search-forward

bash를 다시로드하십시오 (예 : "exec bash"를 입력하여). 명령의 접두사를 입력하고 위쪽 화살표를 누르면 접두사로 시작하는 명령을 찾아 볼 수 있습니다. 예를 들어 ssh를 입력하면 원격 쉘과의 이전 연결이 표시됩니다. 프롬프트가 비어 있으면 위쪽 화살표가 일반적인 방식으로 기록을 탐색합니다.


3
일반적으로 화살표를 리 바인딩하는 대신 \ e [5 ~ 및 \ e [6 ~ (일명 페이지 업 및 페이지 다운)에 바인딩하지만 Ctrl-R / Ctrl-S보다 편리합니다.)
ephemient

+1. cmd.exe를 모방하기 위해 F8과 Shift-F8에 바인딩되어 있지만 동일한 원칙이 적용됩니다.
user18911

4
exec bash
Dennis Williamson

또한 man readline기본 단축키 를 읽고 암기하는 것도 교육적입니다.
SaveTheRbtz

bind -f ~/.inputrc새로운 bash를 시작하지 않고 inputrc를 다시로드하고 현재 환경을 정리할 수도 있습니다.
Patrick

36

한 번에 여러 명령을 실행할 때 &&대신 사용하십시오 ;. 오류가 발생하면 중지되고 다른 명령을 실행하지 않습니다.

고전적인 예 :

./configure && make && make install

1
이 연습은 너무 과소 평가되었습니다! 쉘 스크립트의 각 행을 &&로 끝내고 "true"를 최종 명령으로 사용하는 것이 표준 관행이어야합니다.
user18911 2016 년

3
재미있는 점은 내가 ';'에 대해 몰랐다는 것입니다. 전에 명령-항상 '&&'를 사용했습니다.
Nick Klauer

4
"#! / bin / sh -e"로 쉘 스크립트를 시작할 수 있습니다. 회선이 실패하면 중지됩니다.
stribika

3
"else"절에 이중 파이프를 사용할 수 있습니다.dosomething && echo "success" || echo "teh fail"
Dennis Williamson

2
Planet Debian에는 최근 shebang 라인에서 -e를 사용하는 것이 좋지 않다는 메모가있었습니다. 대신 스크립트 본문에 set -e를 사용하십시오. 이런 식으로 누군가 sh $ filename을 사용하여 스크립트를 실행하면 스크립트가 다르게 작동하지 않습니다.
ptman

32

bash의 명령 줄에 루프를 작성할 때 종종 위험한 명령 앞에 'echo'명령을 붙입니다.

for item in items; do echo something-risky; done

이 방법으로 나는 그것을 실행하기 전에 '위험한 것'을 완전히 보게됩니다. 위험한 명령에 변수 확장 및 글롭이 포함 된 경우 도움이됩니다. 'set -x'는 bash 스크립트를 작성할 때 매우 유용합니다.

'set -x'는 디버깅을 가능하게합니다. bash 디버깅에 대한 정보는 http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html 을 참조하십시오 .


3
나도 이것도 매우 유용한 트릭입니다!
user18911 2016 년

1
+1 생명의 은인이 될 수 있습니다! 또는 데이터 세이버 ...
David Oneill

31

요구 사항

두 서버 사이의 최대 대역폭을 테스트해야합니다.


해결책

SERVER1 수행

nc -u -l 54321 > /dev/null

SERVER2 수행

dd if=/dev/zero bs=1MB | nc -u SERVER1 54321 &
pid=$(pidof dd)
while (( 1 )); do kill -USR1 $pid; sleep 2; done

다음과 같은 출력이 표시됩니다.

182682000000 bytes (183 GB) copied, 1555.74 seconds, 117 MB/s
182920+0 records in
182919+0 records out

여기서 실제 네트워크 전송 대역폭을 보여주는 117MB / s 가 흥미로운 요소입니다.

설명 :

패킷이 네트워크를 통해 흐르기 시작하면 SERVER2에서 대역폭 통계를 볼 수 있습니다. 이는 두 서버 간의 실제 최대 가능한 대역폭에 대한 추정치입니다.

UDP로 복사 (TCP 오버 헤드 방지).

로 복사 로부터 SERVER1에 메모리 (/ 디바이스 / 제로) SERVER2에 메모리 (/ 디바이스 / NULL), 따라서, 병목 디스크 I / O를 방지한다.


4
ssh가 .ssh / config에서 압축을 사용하도록 구성되어 있지 않은지 확인하십시오. 그렇지 않으면 당신은 진실과는 거리가 정말 좋은 숫자를 얻을 수 있습니다 ;-)
Joachim Sauer

롤, 네 그리고 SSH는 CPU 암호화 및 암호 해독을 두드리며 숫자도 버릴 것입니다.

대신 netcat 사용
bendin

netcat의 경우 +1 SSH의 오버 헤드로 인해 숫자가 왜곡 될 수 있습니다.
Mikeage

@saua, @Daniel Von Fange 및 @bendin의 제안을 수정하기 위해 리팩토링되었습니다. 제안 해 주셔서 감사합니다.
Maxim Veksler

23

컬러 디렉토리 구조를 보는 것이 더 쉽습니다.

alias ls="ls --color=tty"

편집하다

alias ls="ls --color=auto"

5
파일로 리디렉션되면 쓰레기 제어 문자를 보내지 않기 때문에 --color = auto를 선호합니다. 또한 grep = "grep --color = auto"별칭을 사용하여 일치하는 패턴을 강조 표시 할 수 있습니다.

--color = auto의 경우 +1; 누군가가 그 대답을 향상시킬 수 있습니까?
Jonik

나는 tty가 여기서 auto와 같은 일을한다고 생각합니다.
joshudson

color = auto를 반영하도록 업데이트되었습니다
Suroot

이상하게도, 채색은 물건을 읽기 어렵게 만듭니다. 예를 들어, 노랑-온-화이트는 좋은 채색 선택이 아닙니다.

20

로그보기에 관한 몇 가지 작은 포인터 :

  1. tail -F 를 사용 하여 로그가 잘린 후 로그를 계속 볼 수 있습니다 (예 : log4j).
  2. 덜 사용할 수 있습니다 : 덜 열고, Shift + F 를 클릭 하여 꼬리 동작을 에뮬레이트 하십시오 . 또한 줄 바꿈을 비활성화하는 유용한 조합은 -S 입니다. less를 사용하면 로그에서 검색 할 수 있습니다.

1
그리고 tail -f당신은 한 번에 여러 로그를 볼 수 있습니다! 예 :tail -f log1.txt -f log2.txt
Stu Thompson

@StuThompson : 감사합니다. 그것을 몰랐다. 또한, 당신은 체크 아웃 할 수 있습니다 vanheusden.com/multitail
맥심 Veksler에게

20

파일 확장명을 쉽게 변경하기 위해 오랫동안 친구 로부터 트릭을 배웠습니다 .

mv my_filename.{old,new}

쉘 확장은 이것을 다음으로 확장합니다 :

mv my_filename.old my_filename.new

다음과 같은 다른 방법으로 파일 이름을 바꾸는 데 사용할 수도 있습니다.

mv my_{,cool_}filename

6
와일드 카드 나 다른 패턴 표현을 같은 명령에 넣지 마십시오. 그렇지 않으면 glob가 2 개 이상의 인수로 확장 될 수 있습니다! mv *. {old, new}는 정말 놀라운 결과를 낳을 것입니다.

그렇습니다, 동의 – 이것은 중요한 경고입니다 :)

2
예를 들어, 입력 ls -l /bin/c한 다음 Alt-Shift- {를 누르면 원하는대로 완성됩니다 ls -l /bin/c{at,h{grp,mod,own,vt},p{,io},sh}.
Dennis Williamson

19

압축 된 아카이브를 추출하려면 "tar xf"를 사용하십시오. tar는 아카이브의 파일 유형을 감지하므로 bzip2의 경우 j 및 gzip의 경우 z는 필요하지 않습니다. 인수 앞에 '-'부호도 없습니다. 많은 시간을 절약 할 수 있습니다 (밀레니엄 ;-)).

unfoo 를 사용 하면 불필요한 인수없이 단일 명령으로 아카이브를 추출 할 수 있습니다.


그렇습니다 alias ut="tar xf". 아카이브 추출이 훨씬 쉬워졌습니다.
David Wolever

일부 RHEL 배포판을 사용하면 실패합니다.
pvsnp

새로운 타르 XZ에 (7zip과 기준) 아카이브를 압축 "J"스위치도 갖고
힐베르트 Kario

또는 unp : packages.debian.org/sid/unp를 설치 하십시오 . 나는 그것이 unfoo와 비슷하다고 생각합니다.
Zitrax

17

bash-completion 패키지를 설치하십시오. 쉘에 대해 미리 정의 된 여러 완료 규칙이 포함되어 있습니다. 배포판이 그렇게하지 않으면 "source / etc / bash_completion"을 입력하여 활성화하십시오. 예를 들어 kpdf 이후에 완료 할 때마다 디렉토리 및 PDF 파일 목록 만 표시됩니다. scp ssh : // server / XXX 이후에 원격 파일을 완성하는 것이 현명합니다 (암호없는 로그인을 활성화 한 경우).


17

나는 끊임없이 이것들을 사용한다

ALT-. (일부 터미널에서는 ESC +.) 마지막으로 사용한 인수를 복사합니다 (매우 유용한).

CTRL-W는 단어를 삭제합니다

CTRL-L 클리어 터미널 (클리어 명령과 같지만 더 빠름)

ALT-B (일부 터미널에서는 Esc + B)는 단어를 뒤로 이동합니다

ALT-F (일부 터미널의 경우 ES + F)는 단어를 앞으로 이동시킵니다.

CTRL-E가 EOL로 이동

CTRL-A가 BOL로 점프

역사에서 CTRL-R 검색


1
바로 가기를 공유해 주셔서 감사합니다! Mac에서 ALT-B / F를 사용할 수 없었습니다.
Léo Léopold Hertz 준영

멋진 남자 ..
Daud Ahmad Khokhar

16

bash에서는 ! $ 를 많이 사용합니다. 마지막 명령의 마지막 인수를 반복합니다.

ls /really/long/command/argument/that/you/dont/want/to/repeat.txt
vi !$

ls를 실행 한 다음 편집하려면 다시 입력 할 필요가 없으며! $를 사용하십시오. 긴 경로 / 파일 이름에 정말 유용합니다. 또한 ! * 는 이전 명령의 모든 인수를 반복합니다. 나는 그것을 많이 사용하지 않지만 유용하게 보입니다.

나는 그들이 언급되었다는 것을 알고 있지만 vim, screen 및 cd를 많이 사용합니다.

나는 noclobber를 잊었다.

set -o noclobber

에서 남자 bash는 :

설정된 경우 bash는>,> & 및 <> 리디렉션 연산자로 기존 파일을 덮어 쓰지 않습니다. 경로 재 지정 연산자> |를 사용하여 출력 파일을 작성할 때 이는 대체 될 수 있습니다. > 대신.


6
$!를 사용하지 않습니다. 손가락이 뚱뚱해지기는 쉽지만 ^ [-. (탈출 기간) 같은 효과를 얻을 수 있습니다.
David Wolever

7
키보드 등에 따라 수행 할 수도 Alt-.있습니다.
Dennis Williamson

세상에, 작은 오르가즘, 타이 데니스!
artifex

14

bash에서 zsh로 전환하고 생산성이 향상되는 것을 확인하십시오.

  • 매우 지능적이고 스크립트 가능한 탭 완성. 명령 행뿐만 아니라 모든 옵션, 매뉴얼 페이지 이름, 패키지 이름 (apt-get / emerge 등을위한), 그리고 무엇을 가지고 있는지를 완성합니다. 그리고 완료하는 동안 옵션에 대한 유용한 설명을 제공합니다. 명령이 실행 된 후 스크롤 백 공간을 사용하지 않고이 모든 것이 가능합니다.
  • 와일드 카드의 탭 완성; cat * .txt를 작성하고 tab을 누르고 표현식과 일치하는 파일 중에서 선택하십시오.
  • 이름을 입력하여 디렉토리를 전환하십시오.
  • 여러 줄 편집기 모드. 원하는 경우 vi 또는 emacs처럼 작동 할 수 있습니다.
  • 원하는대로 할 수있는 사용자 정의 가능한 키 바인딩.
  • 화면 오른쪽에 프롬프트 정보를 입력하고 긴 명령을 입력 할 때 자동 숨기기 기능을 포함한 테마 프롬프트

Google은 더 많은 혜택을 알려 드릴 것입니다.


1
더 많은 링크를 제공해야합니다. 흥미있는 것 같지만 나에게 팔아라!

유니 코드 지원을 포함 했습니까?

@ 코리 좋아, 난 그냥 표절하고 싶지 않았고 이미 다른 사람에 의해 너무 많은 좋은 물건이있을 때 내 자신을 작성하는 것이 중복 느꼈다 :)

@kyku 예, 아마도 1 년 전부터 적절한 유니 코드 지원이 있습니다.

좋아 보인다. 나는 그것을 줄 것이다!

13

구식 학교, 디렉토리 트리를 한 곳에서 다른 곳으로 옮기고 심볼릭 링크, 권한 및 모든 좋은 것들을 보존합니다.

tar cBf - . | (cd /destination; tar xvBpf -)

또는 네트워크를 통해

tar cBf - . | rsh foo.com "cd /destination; tar xvBpf -)

새로운 학교:

rsync -urltv . /destination

또는 네트워크를 통해

rsync -urltv -e ssh . foo.com:/destination

tar xvBpf - -C /destination== (cd /destination; tar xvBpf -) 타이핑이 적고 ssh보다 사용하기 쉽습니다.
ephemient

1
-a는 '-rlptgoD'와 동일합니다. 재귀, 심볼릭 링크로 심볼릭 링크 복사, 파마 유지, 타임 스탬프 유지, 그룹 유지, 소유자 유지, 장치 파일 및 특수 파일을 장치 및 특수 파일로 복사합니다. 또한 기계 사이에서 -z (전송 전 파일 압축, 수신 후 압축 해제)가 유용합니다. rsync -avz [-e ssh]는 당신의 친구입니다 :-)
dr-jan

-z는 ssh를 능가합니까? 나는 그렇게 생각하지 않을 것입니다.
Paul Tomblin

rsync -avh단일 컴퓨터에서 사용하는 것이 가장 좋습니다. h각 링크를 별도의 파일로 변환하지 않고도 하드 링크가 올바르게 전송되도록합니다. 파일 수가 많으면 많은 메모리를 사용할 수 있습니다. rsync -avzh . foo.com/destination는 네트워크와 동일하며 일반적 -e ssh으로 rsync가 ssh를 사용하기 때문에 알 필요가 없습니다 .
RichVel

실제로, 요즘 사용하고 있습니다rsync -aSHuvrx --delete / --link-dest=/backup/$PREV /backup/$HOUR
Paul Tomblin

13

요구 사항 : 삭제할 큰 파일 목록을 포함하는 디렉토리가 있습니다. rm -r이 실패합니다!

find /var/spool/mqueue/ | wc -l
191545
rm -f /var/spool/mqueue/*
-bash: /bin/rm: Argument list too long

해결책 :

find /var/spool/mqueue/ -xdev -exec command rm -f '{}' +

설명 :

편집 : @ephemient 주석 다음에 설명 수정.

find는 최대 허용 인수로 rm에 인수를 제공합니다. 이렇게하면 rm이 파일을 일괄 적으로 삭제할 수 있습니다. 이것은 find 자체의 -delete 작업을 사용하지 않고 내가 알고있는 가장 빠른 기술입니다. 그것은 동등하다

find /var/spool/mqueue -xdev -print0 | xargs -0 rm -f

find지원하지 않는 경우 유용 할 수 있습니다 -exec ... +.


5
Replace \;with +: findxargs기본적으로 수행하는 작업 을 수행하며, 인수 목록 제한을 초과하지 않고 가능한 한 많은 인수를 일괄 처리합니다. 또는 (두 가지 모두에 필요한 GNU Findutils)의 -deleteintead를 사용 하십시오-exec rm
ephemient

좋은 팁-나는 '+'를 몰랐다.
codeinthehole 2016 년

@ephemient : 좋은 의견, 게시물을 편집했습니다.
Maxim Veksler

2
흥미롭게도 '+'에 대해 들어 보지 못했습니다.
user18911 2016 년

또는 find ... -delete당신의 발견이 너무 부여 되었다면.
David Wolever

11

나는이 두 가지 팁을 너무 자주 사용하여 공유하는 것이 좋을 것이라고 생각했습니다.

!foo

히스토리 파일에서 "foo"로 시작하는 마지막 명령을 시작합니다 ( !gcc예를 들어 컴파일 할 때 자주 사용합니다 ).

다른 하나는 키보드 단축키 (Return 대신 Ctrl + O)이며 명령을 실행하고 내역 파일에 다음 명령을 표시합니다. 예를 들어 파일을 컴파일하고 테스트 할 때 항상 3 ~ 4 개의 명령을 수행하고 테스트의 디렉토리에 cd를 만들고 테스트를 실행하여 makefile의 디렉토리에 cd하십시오. Ctrl + O를 사용하면이 작업이 훨씬 쉬워집니다. :)

이 도움을 바랍니다!


1
Ctrl-O의 경우 +1
Dennis Williamson

10

사용할 수없는 멋진 그래픽 인터페이스를 사용하지 않고 Linux에서 서브 버전을 사용하는 방법.

svn co <repo-url> . # Checks out project into current folder

svn update # Get latest changes from server

svn status # Shows what files have changed locally

svn add <path/filename> # Add some file to the repo

svn commit # Commit your changes to the repo

이로 인해 많은 개발자들이 이상하게도 Linux를 사용하지 못하게됩니다.


rapidsvn은 리눅스에서 svn을위한 멋진 작은 GUI입니다.

많은 고급스럽고 강력한 GUI를 사용할 수 있지만 (IntelliJ IDEA에서와 같이), 나는 현재 상황에 더 잘 맞는 명령 줄 또는 명령 줄을 사용할 가능성을 좋아합니다.
Jonik

내가 가장 좋아하는 것은 NautilusSVN입니다 (TortoiseSVN과 유사) : code.google.com/p/nautilussvn
user7655

10

가장 간과 된 구식 사령부 : find

어제 총 권한 버그를 수정했습니다.

for u in nr dias simonpj; do
   sudo -u $u find . -type d -exec chmod g+s '{}' ';'
done

예! find 명령을 배우십시오. 파일 처리 juggernaut에 대한 xargs, sed 및 awk make와 혼합되어 있습니다!
Jonathon Watney

동의했다! 나는 sed와 awk에 대해 아무것도 기억하지 않지만 항상 그것을 다시 배울 필요가 있습니다! 치트 시트를 실제로 인쇄해야합니다.

예, 그러나 특이한 문자 (예 : 백 슬래시)를 포함하는 파일 이름과 관련된 까다로운 문제를 피하기 위해 xprint에 -print0 및 -0 옵션을 사용하는 것을 잊지 마십시오.
user18911

그렇습니다, 아마도 내가 사용하는 시간의 절반은 어리석은 허가 사항을 고치기위한 것입니다 : chmod 644 $(find . -type f),chmod 755 $(find . -type d)
David Wolever

1
권한이 특정 방식으로 설정된 파일을 찾는 -perm옵션을 잊지 마십시오 find.
Dennis Williamson

8

bashand 같은 쉘의 ksh경우 명령 행이 텍스트 편집기와 같은 탐색 명령에 응답하게 할 수 있습니다.

set -o emacs

또는

set -o vi

텍스트 파일에서 사용하는 방식으로 내역을 검색하고 명령 줄을 따라 이동할 수 있습니다 (예 : vi 모드에서을 누른 ESC다음 입력 /string하면 이전 명령에서 "문자열"을 검색합니다. 사용 nN이동 가능) 경기 사이)


사소한 오타 : "테스트 편집기"는 "텍스트 편집기"여야 함

8

grep은 내 친구입니다. 진심으로.

.rb텍스트가 포함 된 파일을 나열 하십시오 class foo.

grep -l "class foo" .rb

텍스트가 포함 되지 않은.rb 파일을 나열 하십시오 .class foo

grep -L "class foo" *.rb

foo 또는 bar를 포함 하지 않는.rb 파일을 나열 하십시오 (regexp를 -e와 함께 사용할 수 있지만 연산자를 이스케이프해야 함).

grep -L -e "foo\|bar" *.rb

grep과 동일한 기능을 수행하지만 소스 파일 만 재귀 적으로 스캔하는 "ack"도구에 관심이있을 수 있습니다. 그것을 시도해보십시오 (무료) : betterthangrep.com

8

쉘 대체는 다음과 ^같이 수행됩니다 .

/home/eugene $ ls foo.txt
foo.txt
/home/eugene $ ^ls^rm
rm foo.txt
/home/eugene $ ls foo.txt
ls: cannot access foo.txt: No such file or directory

2
사실 나는 "!! : gs / foo / bar"를 선호한다. 왜냐하면 이전 명령에서 foo가 두 번 이상 언급되어 있고 전역 대체 (예 : "mv foo.txt foo.bak")를 원하기 때문이다.
user18911 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.