Linux命令行,是開發(fā)人員日常接觸的東西。但是栅组,有很多小技巧袱衷。我在這里做個(gè)總結(jié)(長期更新)。
在路徑間如魚得水
黑技術(shù)1:設(shè)立根目錄
如果笑窜,你經(jīng)常使用一個(gè)目錄作為你的根目錄,那么登疗,你可以通過CDPATH來指定你的cd根目錄排截。
例如,我經(jīng)常到/etc
目錄下,來対相應(yīng)的文件進(jìn)行配置辐益。比如我想從我的家目錄到/etc/nginx/
目錄下断傲,一般的方法是:
cd /etc/nginx/
有沒有可以偷懶的法子呢?當(dāng)然有智政,我們可以在.bashrc
(如果你是zsh的話认罩,就在.zshrc
下)加入export CDPATH=/etc
現(xiàn)在,你想打開的/etc/nginx/
目錄下续捂,只需要輸入:
cd nginx
懶人必備垦垂。
當(dāng)然,你可以輸入多個(gè)根路徑牙瓢,只要在每個(gè)路徑下用:
隔開劫拗。
export CDPATH=.:~:/etc:/var:
黑技術(shù)2:在兩個(gè)路徑相互切換
當(dāng)我們經(jīng)常需要在一個(gè)terminal下,在兩個(gè)路徑之間矾克,來回切換页慷。這個(gè)時(shí)候,我們可以使用cd -
,在兩個(gè)路徑之間“反復(fù)橫跳”胁附。
例如:第一個(gè)路徑是/etc/nginx/
酒繁,第二個(gè)路徑是~/project/
,我們先cd /etc/nginx/
下,然后控妻,再cd ~/project/
州袒。隨后,當(dāng)我們需要切換另一個(gè)路徑只需要cd -
就可以實(shí)現(xiàn)饼暑。
黑技術(shù)3:將路徑通過棧的方式訪問
如果稳析,遇到訪問路徑的過程像棧這種數(shù)據(jù)結(jié)構(gòu),那么我們可以用pushd
來解決弓叛。
實(shí)現(xiàn)過程:
- 導(dǎo)航到相應(yīng)的目錄例如
/tmp/push1
- 使用
pushd
命令壓入目錄棧 - 在其他路徑下彰居,使用
popd
命令,導(dǎo)航到棧頂目錄撰筷。
例子:
在/tmp/
目錄下創(chuàng)建來push1
,push2
,push3
三個(gè)目錄陈惰,需求是將這三個(gè)目錄分別壓入目錄棧,然后分別導(dǎo)航到相應(yīng)的目錄毕籽。下面將顯示整個(gè)過程:
# pcdack @ pcdack-sword in /tmp/push1 [18:58:01]
$ pwd
/tmp/push1
# pcdack @ pcdack-sword in /tmp/push1 [18:58:15]
$ pushd .
/tmp/push1 /tmp ~
# pcdack @ pcdack-sword in /tmp/push1 [18:58:22]
$ cd /tmp/push2
# pcdack @ pcdack-sword in /tmp/push2 [18:58:31]
$ pushd .
/tmp/push2 /tmp/push1 /tmp ~
# pcdack @ pcdack-sword in /tmp/push2 [18:58:37]
$ cd /tmp/push3
# pcdack @ pcdack-sword in /tmp/push3 [19:00:23]
$ pushd .
/tmp/push3 /tmp/push2 /tmp/push1 /tmp ~
# pcdack @ pcdack-sword in /tmp/push3 [19:00:28]
$ popd
/tmp/push2 /tmp/push1 /tmp ~
# pcdack @ pcdack-sword in /tmp/push2 [19:00:37]
$ popd
/tmp/push1 /tmp ~
整個(gè)過程非常簡(jiǎn)單抬闯,相信大家都能看得懂井辆。
腳本:
當(dāng)然我們可以將導(dǎo)航與壓棧操作結(jié)合起來,我們可以將下面的代碼寫到.bashrc
或者.zshrc
下來實(shí)現(xiàn)溶握。
function pushcd(){
cd "$@" && eval pushd .;
}
然后杯缺,壓棧和切換路徑一個(gè)命令解決。
黑技術(shù)4:“優(yōu)雅”的切換上級(jí)目錄
如果我們身處一個(gè)特別深的目錄下睡榆,例如:/dev/bus/usb/001
萍肆。那么,我們?nèi)绾吻袚Q到/dev/bus/
目錄下咧胀屿?一般的做法是cd ../..
,這里只有兩級(jí)目錄看似還是可以接受的塘揣,但是,如果宿崭,有一天亲铡,要回退五級(jí)目錄。那么一般的寫法就不優(yōu)雅了葡兑。所以奖蔓,在這里要介紹一個(gè)黑技術(shù)。使用alias
來解決問題铁孵。在我們的.bashrc
或者.zshrc
下輸入:
alias ..="cd .."
alias ..2="cd ../.."
alias ..3="cd ../../.."
alias ..4="cd ../../../.."
alias ..5="cd ../../../../.."
然后锭硼,我們回退兩級(jí)目錄將變成..2
,優(yōu)雅蜕劝,快樂檀头,美麗。
當(dāng)然岖沛,也可以用其他表示方法:例如:cd1
,cd2
...
黑技術(shù)5:mkdir與cd的結(jié)合
在日常的開發(fā)中暑始,我們經(jīng)常需要?jiǎng)?chuàng)建一個(gè)文件夾,并且婴削,導(dǎo)航到這個(gè)目錄廊镜。但是,為了優(yōu)(tou)雅(lan)唉俗。我們可以把兩個(gè)命令和在一起嗤朴。創(chuàng)建一個(gè)新的命令mkdircd
。把下面的代碼添加到.bashrc
或者.zshrc
下:
function mkdircd(){
mkdir -p "$@" && eval cd "\"\$$#\"";
}
這樣就OK了虫溜。
原來你是這樣的剪切板
我們經(jīng)常在terminal中雹姊,使用系統(tǒng)剪切板。比如衡楞,將一個(gè)命令的輸出復(fù)制到剪切板吱雏,然后,粘貼到瀏覽器或其他地方等等的用途。首先歧杏,我們需要一個(gè)軟件叫xsel
镰惦。在各大發(fā)行版本中的包管理中都有,比如在arch中pacman -S xsel
就可以安裝了犬绒。
使用
1.將命令輸出到剪切板,比如旺入,我想將ls
的結(jié)果復(fù)制到剪切板中,那么輸入下面的命令就可以了:
ls | xsel -i -b
為了更加方便調(diào)用凯力,我們可以.zshrc
或者.bashrc
填入如下代碼:
alias to_clipboard="sel -i -b"
那么眨业,剛剛的例子就變成了:
ls | to_clipboard
當(dāng)然,我們也可以集成查看剪切板內(nèi)容的命令,在.zshrc
或是.bashrc
中添加:
alias clipboard="xsel -b -o"
當(dāng)我們?cè)趖erminal中輸入clipboard
時(shí),就會(huì)將剪切板的內(nèi)容輸出沮协。
壓縮文件自如操作
黑技術(shù)1:萬能解壓命令
在Linux中,壓縮的格式有很多種類卓嫂,例如慷暂,常用的有.tar.gz
,zip
,tar.bz2
等等。解壓命令“又臭又長”晨雳,那么行瑞,我們能不能一個(gè)命令就可以把所有的壓縮格式的文件解壓出來咧?當(dāng)然是可以的餐禁,我們只需要將下面腳本添加到.zshrc
或者.bashrc
里血久,就可以做到一個(gè)命令解壓所有:
注意:你的機(jī)器里需要預(yù)先安裝了unrar,unzip命令
ex ()
{
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via ex()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
黑技術(shù)2:頭文字“Z”
有些時(shí)候帮非,我們需要直接查看壓縮包里的內(nèi)容氧吐,而不需要解壓這個(gè)壓縮包,那么我們可以使用z
字頭命令末盔。這個(gè)系列一共有:
- zgrep
- zcat
- zless
- zmore
- zdiff
這些命令其實(shí)和不帶"z"的功能類似筑舅,只不過作用的對(duì)象不一樣。"z"命令是專門用在壓縮文件下的陨舱。
例子:
#我先創(chuàng)建幾個(gè)文本文件
echo "this first line">first
gzip first
# 我們通過調(diào)用z命令來查看內(nèi)容
zcat first.gz
# 當(dāng)然同理我們可以通過zless翠拣,zmore來查看
# zgrep需要查找的字符用\-i參數(shù)指定,比如我想查找?guī)в衊line`字眼的內(nèi)容:
zgrep -i line first.gz
# zdiff用來對(duì)比兩個(gè)歸檔文件的不同,與diff類似
# 我們首先創(chuàng)建一個(gè)新的文本
echo "this second line">second
gzip second
# 然后進(jìn)行對(duì)比
zdiff first.gz second.gz
”智慧“的Grep命令
黑技術(shù):使grep具有與游盲,或误墓,非的邏輯
grep是我們經(jīng)常使用的文本搜索工具。那么益缎,我們?nèi)绾问刮覀兊膅rep具有與谜慌,或,非搜索條件链峭?
在介紹使用之前畦娄,我們先顯示我們要處理的數(shù)據(jù)(employee文件)
100 張三 CEO 薪水 100k
101 李四 android工程師 薪水 10k
102 王五 IOS工程師 薪水 10k
103 劉六 Web工程師 薪水 20k
104 馮七 大數(shù)據(jù)工程師 薪水 25k
與
grep并沒有直接的”與“命令,需要我們使用正則表達(dá)式來模擬與命令
grep -E "字符1.*字符2" filename
grep -E "字符1.*字符2|字符2.*字符1" filename
我們要匹配要姓張,并且是CEO兩個(gè)條件熙卡。那么杖刷,我們輸入的命令是:
grep -E "張.*CEO" employee
或
我們要找文檔中姓李與姓張的人:
方法1:
grep '字符1\|字符2' filename
grep '張\|李' employee
方法2:
grep -E '字符1|字符2' employee
grep -E '張|李' employee
非
除去所有姓李的人
grep -v '字符1' employee
grep -v '李' employee
(未完待續(xù))