
本文記錄一些在Linux系統下比較常用的指令。
首先介紹下Linux下指令生效的順序:
- 第一順位:執行絕對路徑或者相對路徑的指令
- 第二順位:執行别名
- 第三順位:執行Bash的内部指令
- 第四順位:執行按照
環境變量設定定義的目錄順序的第一個指令$PATH
cp
該指令用于複制檔案,copy之意,它還可以把多個檔案一次性地複制到一個目錄下,它的常用參數如下:
- -a:将檔案的特性一起複制
- -p:連同檔案的屬性一起複制,而非使用預設方式,與-a相似,常用于備份
- -i:若目标檔案已經存在時,在覆寫時會先詢問操作的進行
- -r:遞歸持續複制,用于目錄的複制行為
- -u:目标檔案與源檔案有差異時才會複制
例:
-
複制檔案cp source dest
-
遞歸複制整個檔案夾cp -r sourceFolder targetFolder
mv
該指令用于移動檔案、目錄或更名,move之意,它的常用參數如下:
- -f:force強制的意思,如果目标檔案已經存在,不會詢問而直接覆寫
- -i:若目标檔案已經存在,就會詢問是否覆寫
- -u:若目标檔案已經存在,且比目标檔案新,才會更新
注:該指令可以把一個檔案或多個檔案一次移動一個檔案夾中,但是最後一個目标檔案一定要是“目錄”。
-
把檔案file1、file2、file3移動到目錄dir中mv file1 file2 file3 dir
-
把檔案file1重命名為file2mv file1 file2
rm
該指令用于删除檔案或目錄,remove之間,它的常用參數如下:
- -f :就是force的意思,忽略不存在的檔案,不會出現警告消息
- -i :互動模式,在删除前會詢問使用者是否操作
- -r :遞歸删除,最常用于目錄删除,它是一個非常危險的參數
例如:
-
删除檔案file,在删除之前會詢問是否進行該操作rm -i file
-
強制删除目錄dir中的所有檔案rm -fr dir
tar
tar是linux上常用的打包、壓縮、解壓縮工具,它的參數很多,這裡列舉常用的壓縮與解壓縮參數。
參數:
-
: 建立壓縮檔案的參數-c
-
: 解壓縮壓縮檔案的參數-x
-
: 用-z
壓縮gzip
-
-j
解壓檔案bzip2
-
-Z
compress
-
: 壓縮的過程中顯示檔案-v
-
: 置頂文檔名,在-f
後面立即接檔案名,不能再加參數-f
打包與解包
- 将整個/home/www/images 目錄下的檔案全部打包
tar -cvf images.tar images ← 僅打包,不壓縮
- 解包到指定的目錄
tar -xvf filename.tar -C 指定目錄
壓縮與解壓縮
gzip壓縮
- 打包後,以gzip壓縮,在參數f後面的壓縮檔案名是自己取的,習慣上用tar來做,如果加z參數,則以tar.gz 或tgz來代表gzip壓縮過的tar檔案
tar -zcvf images.tar.gz images
- 将 images.tar.gz 解壓
tar -zxvf images.tar.gz
- 解壓縮到指定的目錄
tar -zxvf images.tar.gz -C 指定的目錄
bzip2壓縮
- 打包後,以bzip2壓縮
tar -jcvf images.tar.bz2 images
- 将 images.tar.bz2 解壓
tar -jxvf images.tar.bz2
-
tar -jxvf images.tar.bz2 -C 指定的目錄
不同壓縮方式的壓縮率比較
-
tar -zcvf test.tar.gz test
-
tar -jcvf test.tar.bz2 test
-
zip指令要加上兩個選項zip -ry test.zip test
-
:表示遞歸目錄,不然隻壓出來一個空目錄。-r
-
:表示保持符号連結,而不用把符号連結指向的檔案也壓進來。-y
-
結果比較:
ll -h test.*
-rw-r--r-- 1 liwenhao staff 45M 8 6 20:12 test.tar.bz2
-rw-r--r-- 1 liwenhao staff 47M 8 6 20:12 test.tar.gz
-rw-r--r-- 1 liwenhao staff 50M 8 6 20:13 test.zip
可以看到:
壓縮率:bzip2 > gzip > zip
tar打包絕對路徑
備份mysql時,想把之前的檔案壓縮,但是用
tar czvf /data/backup/test.tar.gz /data/a/b/directory
打開一看,裡面的内容是把整個絕對路徑都放進去了。
如果想實作相對路徑,這樣寫就可以解決了
tar czvf /data/backup/test.tar.gz /data/a/b/directory
改成
tar czvf /data/backup/test.tar.gz -C /data/a/b directory
C是臨時切換工作目錄,-P是絕對路徑,在這裡隻用到-C參數就行了。
ps
該指令用于将某個時間點的程序運作情況選取下來并輸出,process之意,它的常用參數如下:
- -A :所有的程序均顯示出來
- -a :顯示 同一終端下 的所有程式
- -u :有效使用者的相關程序
- -x :一般與a參數一起使用,可列出較完整的資訊
- -l :較長,較詳細地将PID的資訊列出
- -e :等于
"-A"
- -f :顯示程式間的關系
其實我們隻要記住ps一般使用的指令參數搭配即可,它們并不多,如下:
-
檢視系統所有的程序資料ps aux
-
檢視不與terminal有關的所有程序ps ax
-
ps -lA
-
檢視連同一部分程序樹狀态ps axjf
檢視某個程序:
-
檢視所有有關tomcat的程序ps –ef|grep tomcat
-
高亮要查詢的關鍵字ps -ef|grep --color java
kill
該指令用于向某個工作(jobnumber)或者是某個PID(數字)傳送一個信号,它通常與ps和jobs指令一起使用,它的基本文法如下:
kill -signal PID
signal的常用參數(最前面的數字為信号的代号,使用時可以用代号代替相應的信号)如下:
- 1:SIGHUP,啟動被終止的程序
- 2:SIGINT,相當于輸入ctrl+c,中斷一個程式的進行
- 9:SIGKILL,強制中斷一個程序的進行
- 15:SIGTERM,以正常的結束程序方式來終止程序
- 17:SIGSTOP,相當于輸入ctrl+z,暫停一個程序的進行
- 以正常的結束程序方式來終于第一個背景工作,可用jobs指令檢視背景中的第一個工作程序
或者kill -SIGTERM %1
kill -15 %1
- 重新改動程序ID為PID的程序,PID可用ps指令通過管道指令加上grep指令進行篩選獲得
kill -SIGHUP PID
kill -1 PID
- 終止線程号位19979的程序
kill -9 19979
killall
該指令用于向一個指令啟動的程序發送一個信号,它的一般文法如下:
killall [-iIe] [command name]
它的參數如下:
- -i :互動式的意思,若需要删除時,會詢問使用者
- -e :表示後面接的command name要一緻,但command name不能超過15個字元
- -I :指令名稱忽略大小寫
killall -SIGHUP syslogd
重新啟動syslogd
file
該指令用于判斷接在file指令後的檔案的基本資料,因為在Linux下檔案的類型并不是以字尾為分的,是以這個指令對我們來說就很有用了,它的用法非常簡單,基本文法如下:
file filename
file ./test
ln
ln是linux中又一個非常重要指令,它的功能是為某一個檔案在另外一個位置建立一個同步的連結.當我們需要在不同的目錄,用到相同的檔案時,我們不需要在每一個需要的目錄下都放一個必須相同的檔案,我們隻要在某個固定的目錄,放上該檔案,然後在 其它的目錄下用ln指令連結(link)它就可以,不必重複的占用磁盤空間。
指令格式:
ln [參數][源檔案或目錄][目标檔案或目錄]
指令功能:
Linux檔案系統中,有所謂的連結(link),我們可以将其視為檔案的别名,而連結又可分為兩種 : 硬連結(hard link)與軟連結(symbolic link),硬連結的意思是一個檔案可以有多個名稱,而軟連結的方式則是産生一個特殊的檔案,該檔案的内容是指向另一個檔案的位置。硬連結是存在同一個檔案系統中,而軟連結卻可以跨越不同的檔案系統。
- 軟連結:
- 軟連結,以路徑的形式存在。類似于Windows作業系統中的快捷方式
- 軟連結可以 跨檔案系統 ,硬連結不可以
- 軟連結可以對一個不存在的檔案名進行連結
- 軟連結可以對目錄進行連結
- 硬連結:
- 硬連結,以檔案副本的形式存在。但不占用實際空間。
- 不允許給目錄建立硬連結
- 硬連結隻有在同一個檔案系統中才能建立
這裡有兩點要注意:
- ln指令會保持每一處連結檔案的同步性,也就是說,不論你改動了哪一處,其它的檔案都會發生相同的變化;
-
ln的連結又分軟連結和硬連結兩種,軟連結就是ln –s 源檔案 目标檔案,它隻會在你標明的位置上生成一個檔案的鏡像,不會占用磁盤空間,硬連結 ln 源檔案 目标檔案,沒有參數-s, 它會在你標明的位置上生成一個和源檔案大小相同的檔案,無論是軟連結還是硬連結,檔案都保持同步變化。
ln指令用在連結檔案或目錄,如同時指定兩個以上的檔案或目錄,且最後的目的地是一個已經存在的目錄,則會把前面指定的所有檔案或目錄複制到該目錄中。若同時指定多個檔案或目錄,且最後的目的地并非是一個已存在的目錄,則會出現錯誤資訊。
- 指令參數:
必要參數: -b 删除,覆寫以前建立的連結 -d 允許超級使用者制作目錄的硬連結 -f 強制執行 -i 互動模式,檔案存在則提示使用者是否覆寫 -n 把符号連結視為一般目錄 -s 軟連結(符号連結) -v 顯示詳細的處理過程 選擇參數: -S "-S<字尾備份字元串> "或 "--suffix=<字尾備份字元串>” -V "-V<備份方式>"或"--version-control=<備份方式>" --help 顯示幫助資訊 --version 顯示版本資訊
使用執行個體
執行個體1:給檔案建立軟連結
指令:
ln -s log2013.log link2013
輸出:
[root@localhost test]# ll
-rw-r--r-- 1 root bin 61 11-13 06:03 log2013.log
[root@localhost test]# ln -s log2013.log link2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 1 root bin 61 11-13 06:03 log2013.log
說明:
為log2013.log檔案建立軟連結link2013,如果log2013.log丢失,link2013将失效
執行個體2:給檔案建立硬連結
ln log2013.log ln2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 1 root bin 61 11-13 06:03 log2013.log
[root@localhost test]# ln log2013.log ln2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 2 root bin 61 11-13 06:03 ln2013
-rw-r--r-- 2 root bin 61 11-13 06:03 log2013.log
為log2013.log建立硬連結ln2013,log2013.log與ln2013的各項屬性相同
删除軟連接配接
目錄的軟連接配接要謹慎删除,有可能把原檔案目錄下的檔案給删除了。
- 先建立一個軟連接配接
[[email protected] test]# ls -il 總計 0 1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1 1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2 1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand #建立file1和file1soft軟連接配接 [[email protected] test]# ln -s file1 file1soft [[email protected] test]# ls -il 總計 0 1491138 -rw-r–r– 1 root root 48 07-14 14:17 file1 1491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft -> file1 1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2 1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
- 删除上面建立的軟連接配接
[[email protected] test]# ls -il 總計 0 1491138 -rw-r–r– 1 root root 0 07-14 14:17 file1 1491140 lrwxrwxrwx 1 root root 5 07-14 14:24 file1soft -> file1 1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2 1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand #删除軟連接配接 [[email protected] test]# rm -rf file1soft [[email protected] test]# ls -il 總計 0 1491138 -rw-r–r– 1 root root 0 07-14 14:17 file1 1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2 1491139 -rw-r–r– 2 root root 0 07-14 14:17 file2hand
删除軟連結 确實是用rm 但是!!!
rm -fr xxxx/ 加了個/ 這個是删除檔案夾
rm -fr xxxx 沒有/ 這個是删除軟連結
cat指令
該指令用于檢視文本檔案的内容,後接要檢視的檔案名,通常可用管道與more和less一起使用,進而可以一頁頁地檢視資料。例如:
cat text | less
檢視text檔案中的内容
注:這條指令也可以使用less text來代替
chgrp指令
該指令用于改變檔案所屬使用者組,它的使用非常簡單,它的基本用法如下:
chgrp [選項] [組] [檔案]
-
:處理指定目錄以及其子目錄下的所有檔案-R
-
:運作時顯示詳細的處理資訊-v
-
:作用于符号連結的指向,而不是符号連結本身--dereference
-
:作用于符号連結本身--no-dereference
chgrp -vR users ./dir
遞歸地把dir目錄下中的所有檔案和子目錄下所有檔案的使用者組修改為users
chown指令
該指令用于改變檔案的所有者,與chgrp指令的使用方法相同,隻是修改的檔案屬性不同。
chmod指令
該指令用于改變檔案的權限,一般的用法如下:
chmod [-R] xyz 檔案或目錄
-R:進行遞歸的持續更改,即連同子目錄下的所有檔案都會更改
同時,chmod還可以使用u(user)、g(group)、o(other)、a(all)和+(加入)、-(删除)、=(設定)跟rwx搭配來對檔案的權限進行更改。
chmod 755 file
把file的檔案權限改變為-rxwr-xr-x,r表示讀、w表示寫、x表示可執行。
chmod g+w file
向file的檔案權限中加入使用者組可寫權限。
chmod +x file
讓檔案可執行。
權限代号:
- r:讀權限,用數字4表示
- w:寫權限,用數字2表示
- x:執行權限,用數字1表示
關于搜尋的指令
1 find
- find是最常見和最強大的查找指令,你可以用它找到任何你想找的檔案。(避免大範圍的搜尋,會非常浪費系統資源,建議不在直接在"/"目錄下搜尋)
- 格式:find [搜尋範圍] [搜尋條件]
-
- find /home -name 檔案名
- find /home -iname 檔案名 (不區分大小寫)
- find /home -user 檔案名 (所有者檔案)
- find /home -nouser 檔案名(沒有所屬者的檔案,liunx中,每個檔案都有所屬者,如果沒有,那麼一般都是垃圾檔案,但還是有特例的,比如核心産生的檔案,就沒有所屬者,一般在proc和sys目錄下;還有外來檔案,也就是U盤拷入的檔案也會忽略所有者。)
- find . -type f -mmin -10 搜尋目前目錄中,所有過去10分鐘中更新過的普通檔案。如果不加-type f參數,則搜尋普通檔案+特殊檔案+目錄。
- find 目錄 -size 檔案大小 (注意:檔案大小用小寫k和大寫M。)
如果什麼參數也不加,find預設搜尋目前目錄及其子目錄,并且不過濾任何結果(也就是傳回所有檔案),将它們全都顯示在螢幕上。
2 locate
locate指令其實是"find -name"的另一種寫法,但是要比後者快得多,原因在于它不搜尋具體目錄,而是搜尋一個資料庫(/var/lib/locatedb),這個資料庫中含有本地所有檔案資訊。Linux系統自動建立這個資料庫,并且每天自動更新一次,是以使用locate指令查不到最新變動過的檔案。為了避免這種情況,可以在使用locate之前,先使用updatedb指令,手動更新資料庫。 locate指令的使用執行個體:
-
,搜尋etc目錄下所有以sh開頭的檔案。locate /etc/sh
-
,搜尋使用者主目錄下,所有以m開頭的檔案。locate ~/m
-
,搜尋使用者主目錄下,所有以m開頭的檔案,并且忽略大小寫。locate -i ~/m
3 whereis
whereis指令隻能用于程式名的搜尋,而且隻搜尋二進制檔案(參數-b)、man說明檔案(參數-m)和源代碼檔案(參數-s)。如果省略參數,則傳回所有資訊。 whereis指令的使用執行個體:
whereis grep
4 which
which指令的作用是,在PATH變量指定的路徑中,搜尋某個系統指令的位置,并且傳回第一個搜尋結果。也就是說,使用which指令,就可以看到某個系統指令是否存在,以及執行的到底是哪一個位置的指令。 which指令的使用執行個體:
which grep
grep
搜尋檔案中的資訊,一般為字元串,與正規表達式結合使用 grep [選項] 字元串 檔案名 (字元串使用 "" 包圍,結果為行記錄) -i 忽略大小寫 -v 排除指定字元串
find與grep的差別:
- find:在 系統 中搜尋符合條件的 檔案名,使用 通配符(完全)比對
- grep:在 檔案 當中搜尋符合條件的 字元串,使用 正規表達式 (包含)比對
time
time 可以統計指令執行的時間,包括程式的實際運作時間(real time),以及程式運作在使用者态的時間(user time)和核心态的時間(sys time)。
time git pull
則是統計更新代碼花費多長時間
alias
alias指令用來設定指令的别名。我們可以使用該指令可以将一些較長的指令進行簡化。使用alias時,使用者必須使用單引号''将原來的指令引起來,防止特殊字元導緻錯誤。
alias指令的作用隻局限于該次登入的操作。若要每次登入都能夠使用這些指令别名,則可将相應的alias指令存放到bash的初始化檔案
/etc/bashrc
中。
alias 的基本使用方法為:
alias 新的指令='原指令 -選項/參數'
alias l=‘ls -lsh'
将重新定義ls指令,現在隻需輸入l就可以列目錄了。直接輸入 alias 指令會列出目前系統中所有已經定義的指令别名。
要删除一個别名,可以使用 unalias 指令,如 unalias l。
檢視系統已經設定的别名:
alias egrep='egrep --color'
alias fgrep='fgrep --color'
alias grep='grep --color'
alias hpush='bash /Users/liwenhao/Desktop/github/hpush.sh'
alias ll='ls -l'
alias ls='ls -F --show-control-chars --color=auto'
alias vi='vim'
tail
tail
指令從指定點開始将檔案寫到标準輸出。使用tail指令的-f選項可以友善的查閱正在改變的日志檔案,
tail -f filename
會把filename裡最尾部的内容顯示在螢幕上,并且不但重新整理,使你看到最新的檔案内容.
- 指令格式;
tail[必要參數][選擇參數][檔案]
- 指令功能:用于顯示指定檔案末尾内容,不指定檔案時,作為輸入資訊進行處理。常用檢視日志檔案。
-
-f 循環讀取 -q 不顯示處理資訊 -v 顯示詳細的處理資訊 -c <數目> 顯示的位元組數 -n <行數> 顯示行數 --pid=PID 與-f合用,表示在程序ID,PID死掉之後結束. -q, --quiet, --silent 從不輸出給出檔案名的首部 -s, --sleep-interval=S 與-f合用,表示在每次反複的間隔休眠S秒
- 舉例
# 寫到1.log,且背景運作 ping www.baidu.com > 1.log 2>&1 & # 循環檢視尾部日志 tail -f 1.log # 殺死 ping程序 killall ping
執行多個指令
- 後一個指令依賴于前一個指令的輸出,可以是用管道(|)
:目前目錄檔案個數ls | wc -l
- 後一個指令必須等前一個指令運作成功後在運作,可以使用雙與号(&&)
:隻運作aa,ls不運作aa && ls
- 後一個指令必須等前一個指令運作完,不關心是否成功,使用單與号(&)
:aa和ls都運作,但是ls必須等aa運作完。aa & ls
- 并行執行多個指令,使用兩個豎号(||)
:aa和ls并行執行,互不影響。aa || ls
執行shell腳本
當我們寫完一個腳本的時候,它是不可以被直接運作的。我們可以通過:
- 通過Bash調用執行腳本 :
bash hello.sh
- 首先賦予執行權限:
,然後就可以通過相對路徑chmod 755 hello.sh
或者通過絕對路徑./hello.sh
來執行。/root/hello.sh
Shell特殊變量: $0
, $#
$*
$@
$?
$$
和指令行參數
$0
$#
$*
$@
$?
$$
變量名隻能包含數字、字母和下劃線,因為某些包含其他字元的變量有特殊含義,這樣的變量被稱為特殊變量。
例如,
$$
表示目前Shell程序的ID,即pid,看下面的代碼:
$echo $$
運作結果
29949
特殊變量清單:
變量 | 含義 |
---|---|
| 目前腳本的檔案名 |
| 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。 |
| 傳遞給腳本或函數的參數個數。 |
| 傳遞給腳本或函數的所有參數。 |
| 傳遞給腳本或函數的所有參數。被雙引号(" ")包含時,與 $* 稍有不同,下面将會講到。 |
| 上個指令的退出狀态,或函數的傳回值。 |
| 目前Shell程序ID。對于 Shell 腳本,就是這些腳本所在的程序ID。 |
指令行參數
運作腳本時傳遞給腳本的參數稱為指令行參數。指令行參數用
$n
表示,例如,
$1
表示第一個參數,
$2
表示第二個參數,依次類推。
請看下面的腳本:
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
運作結果:
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$*
和 $@
的差別
$*
$@
$*
$@
都表示傳遞給函數或腳本的所有參數,不被雙引号(" ")包含時,都以
"$1"
"$2"
…
"$n"
的形式輸出所有參數。
但是當它們被雙引号(" ")包含時,
"$*"
會将所有的參數作為一個整體,以"
$1
$2
$n
"的形式輸出所有參數;
"$@"
會将各個參數分開,以
"$1"
"$2"
"$n"
下面的例子可以清楚的看到
$*
$@
的差別:
#!/bin/bash
echo "\$*=" $*
echo "\"\$*\"=" "$*"
echo "\$@=" $@
echo "\"\$@\"=" "$@"
echo "print each param from \$*"
for var in $*
do
echo "$var"
done
echo "print each param from \$@"
for var in $@
do
echo "$var"
done
echo "print each param from \"\$*\""
for var in "$*"
do
echo "$var"
done
echo "print each param from \"\$@\""
for var in "$@"
do
echo "$var"
done
執行 ./test.sh "a" "b" "c" "d",看到下面的結果:
$*= a b c d
"$*"= a b c d
$@= a b c d
"$@"= a b c d
print each param from $*
a
b
c
d
print each param from $@
a
b
c
d
print each param from "$*"
a b c d
print each param from "$@"
a
b
c
d
退出狀态
$?
可以擷取上一個指令的退出狀态。所謂退出狀态,就是上一個指令執行後的傳回結果。
退出狀态是一個數字,一般情況下,大部分指令執行成功會傳回 0,失敗傳回 1。
不過,也有一些指令傳回其他值,表示不同類型的錯誤。
下面例子中,指令
$./test.sh Zara Ali
成功執行輸出:
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
$
$?
也可以表示函數的傳回值。
PATH環境變量
下面的第一種方式關機後會失效,相當于臨時環境變量,後面兩種都是寫進了系統配置,是以會永久生效。
- 直接用export指令
export PATH=$PATH:/usr/local/src/node-v0.10.24/node_modules/node-sass/bin
- 修改profile檔案:
-
vi /etc/profile
- 然後在檔案裡面加入
export PATH=$PATH:/usr/local/src/node-v0.10.24/node_modules/node-sass/bin
- 執行指令
生效source /etc/profile
-
- 修改.bashrc檔案
-
vi /root/.bashrc
- 在裡面加入
export PATH=$PATH:/usr/local/src/node-v0.10.24/node_modules/node-sass/bin
-
source /root/.bashrc
-
如果修改了
/etc/profile
,那麼編輯結束後執行
source profile
(
source /etc/profile
) 或 執行點指令
. ./profile
,PATH的值才會立即生效,不然就隻有等下一次開機。
這個方法的原理就是再執行一次/etc/profile shell腳本,注意如果用sh /etc/profile是不行的,因為sh是在子shell程序中執行的,即使PATH改變了也不會反應到目前環境中,但是source是在目前 shell程序中執行的,是以我們能看到PATH的改變。
有時我們可能不小心将PATH環境變量設定錯誤導緻指令失效,可以參考下面兩種方式解決。
- 如果是通過指令行設定的,可以通過重新開機或者離開本次登入(退出本次shell)
- 如果是因為修改配置檔案導緻無法使用,可以執行
指令暫時使用這些目錄下的指令,如export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin
vi
ls
,從新修改配置檔案。cd
指令行快捷鍵
- 光标移動
- Ctrl + f – 向右移動一個字元,當然多數人用→
- Ctrl + b – 向左移動一個字元, 多數人用←
- ESC + f – 向右移動一個單詞,MAC下建議用ALT + →
- ESC + b – 向左移動一個單詞,MAC下建議用ALT + ←
- Ctrl + a – 跳到行首
- Ctrl + e – 跳到行尾
- 删除
- Ctrl + d – 向右删除一個字元
- Ctrl + h – 向左删除一個字元
- Ctrl + u – 删除目前位置字元至行首(輸入密碼錯誤的時候多用下這個)
- Ctrl + k – 删除目前位置字元至行尾
- Ctrl + w – 删除從光标到目前單詞開頭
- 指令切換
- Ctrl + p – 上一個指令,也可以用↑
- Ctrl + n – 下一個指令,也可以用↓
- 其他快捷鍵
- Ctrl + y – 插入最近删除的單詞
- Ctrl + c – 終止操作
- Ctrl + d – 目前操作轉到背景
- Ctrl + l – 清屏 (有時候為了好看)
- ctrl + z - 把指令放入背景,這個指令謹慎使用
- ctrl + r - 曆史指令搜尋
- Alt + f - 光标向前(Forward)移動到下一個單詞
- Alt + b - 光标往回(Backward)移動到前一個單詞
- Ctrl + w - 删除從光标位置前到目前所處單詞(Word)的開頭
- Alt + d - 删除從光标位置到目前所處單詞的末尾
- Ctrl + y - 粘貼最後一次被删除的單詞
參考文檔:
- Linux的五個查找指令
- 初窺Linux 之 我最常用的20條指令