一個小時學會所有Linux核心命令
文件相關命令
文件屬性操作
文件屬性組成
Linux上的一個文件屬性組成如上,需要注意的是第二部分,格式如下
文件類型
當爲[ d]則是目錄
當爲[ -]則是普通文件;
若是[ l]則表示爲鏈接文檔(link file);
若是[ b]則表示爲裝置文件裏面的可供儲存的接口設備(可隨機存取裝置);
若是[ c]則表示爲裝置文件裏面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置);
若是[s ]則表示爲套接接口文件;
若是[ p]則表示爲管道。
文件權限
包括
文件所有者權限
文件所屬羣組權限
其他用戶權限
chgrp
功能
chgrp命令用來改變指定文件所屬的用戶組。
如果用戶不是該文件的文件主或超級用戶(root),則不能改變該文件的組。
輸入
chgrp [-cfhRv][所屬羣組][文件或目錄]
-c或——changes:效果類似“-v”參數,但僅回報更改的部分;
-f或--quiet或——silent:不顯示錯誤信息;
-h或--no-dereference:只對符號連接的文件作修改,而不是該其他任何相關文件;
-R或——recursive:遞歸處理,將指令目錄下的所有文件及子目錄一併處理;
-v或——verbose:顯示指令執行過程;
其中,組名可以是用戶組的id,也可以是用戶組的組名。
文件名可以 是由空格分開的要改變屬組的文件列表,也可以是由通配符描述的文件集合。
實例
將文件a的用戶組從root改爲mcc
sudo chgrp mcc a
chown
功能
chown將指定文件的擁有者改爲指定的用戶或組,
普通用戶不能將自己的文件改變成其他的擁有者。
其操作權限一般爲管理員root。
輸入
chown [-cfhvR] user[:group] file.
文件是以空格分開的要改變權限的文件列表,支持通配符。
user : 用戶可以是用戶名或者用戶ID;
group : 組可以是組名或者組ID;
-c : 顯示更改的部分的信息
-f : 忽略錯誤信息
-h :修復符號鏈接
-v : 顯示詳細的處理信息
-R : 處理指定目錄以及其子目錄下的所有文件
實例
改變擁有者和羣組
chown mail:mail log2012.log
改變文件擁有者
chown root: log2012.log
改變文件羣組
chown :mail log2012.log
改變指定目錄以及其子目錄下的所有文件的擁有者和羣組
chown -R -v root:mail test6
chmod
功能
改變文件的權限
輸入
chmod [-cfvR] [--help] [--version] mode file...
參數說明
mode : 權限設定字串,格式如下 :
[ugoa...][[+-=][rwxX]...][,...]
其中:
u 表示該文件的擁有者,g 表示與該文件的擁有者屬於同一個羣體(group)者,o 表示其他以外的人,a 表示這三者皆是。
+ 表示增加權限、- 表示取消權限、= 表示唯一設定權限。
r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該文件是個子目錄或者該文件已經被設定過爲可執行。
其他參數說明:
-c : 若該文件權限確實已經更改,才顯示其更改動作
-f : 若該文件權限無法被更改也不要顯示錯誤訊息
-v : 顯示權限變更的詳細資料
-R : 對目前目錄下的所有文件與子目錄進行相同的權限變更(即以遞迴的方式逐個變更)
--help : 顯示輔助說明
--version : 顯示版本
實例
將文件 file1.txt 設爲所有人皆可讀取 :
chmod ugo+r file1.txt
將文件 file1.txt 設爲所有人皆可讀取 :
chmod a+r file1.txt
將文件 file1.txt 與 file2.txt 設爲該文件擁有者,與其所屬同一個羣體者可寫入,但其他以外的人則不可寫入 :
chmod ug+w,o-w file1.txt file2.txt
將 ex1.py 設定爲只有該文件擁有者可以執行 :
chmod u+x ex1.py
將目前目錄下的所有文件與子目錄皆設爲任何人可讀取 :
chmod -R a+r *
此外chmod也可以用數字來表示權限如 :
chmod 777 file
語法爲:
chmod abc file
其中a,b,c各爲一個數字,分別表示User、Group、及Other的權限。
r=4,w=2,x=1
若要rwx屬性則4+2+1=7;
若要rw-屬性則4+2=6;
若要r-x屬性則4+1=5。
chmod a=rwx file
和
chmod 777 file
效果相同
chmod ug=rwx,o=x file
和
chmod 771 file
umask
功能
Linux umask命令指定在建立文件時預設的權限掩碼。
umask可用來設定[權限掩碼]。[權限掩碼]是由3個八進制的數字所組成,
將現有的存取權限減掉權限掩碼後,即可產生建立文件時預設的權限。
輸入
umask [-S][權限掩碼]
實例
查看文件掩碼
kylechen@kyle:~$ umask
0022
以非數字的形式查看文件掩碼
kylechen@kyle:~$ umask -S
u=rwx,g=rx,o=rx
更改文件掩碼
kylechen@kyle:~$ umask 002
kylechen@kyle:~$ umask
0002
test
功能
測試文件的某項屬性
輸入
test [參數][文件]
實例
實例一:測試文件 /dmtsai 是否存在
文件目錄操作
cd
功能
變換目錄
pwd
功能
顯示當前目錄
mkdir
功能
建立一個新的目錄
rmdir
功能
刪除一個空的目錄
tree
功能
樹狀列出目錄內容
文件整體操作
ls
功能
ls命令用於顯示指定工作目錄下之內容
輸入
ls [-alrtAFR] [name]
參數 :
-a 顯示所有文件及目錄 (ls內定將文件名或目錄名稱開頭爲"."的視爲隱藏檔,不會列出)
-l 除文件名稱外,亦將文件型態、權限、擁有者、文件大小等資訊詳細列出
-r 將文件以相反次序顯示(原定依英文字母次序)
-t 將文件依建立時間之先後次序列出
-A 同 -a ,但不列出 "." (目前目錄) 及 ".." (父目錄)
-F 在列出的文件名稱後加一符號;例如可執行檔則加 "*", 目錄則加 "/"
-R 若目錄下有文件,則以下之文件亦皆依序列出
實例
列出根目錄(\)下的所有目錄:
ls /
bin dev lib media net root srv upload www
boot etc lib64 misc opt sbin sys usr
home lost+found mnt proc selinux tmp var
列出目前工作目錄下所有名稱是 s 開頭的文件,越新的排越後面 :
ls -ltr s*
將 /bin 目錄以下所有目錄及文件詳細資料列出 :
ls -lR /bin
列出目前工作目錄下所有文件及目錄;目錄於名稱後加 "/", 可執行檔於名稱後加 "*" :
ls -AF
ll
功能
ll並不是linux下一個基本的命令,它實際上是ls -l的一個別名。
Ubuntu默認不支持命令ll,必須用 ls -l,這樣使用起來不是很方便。
如果要使用此命令,可以作如下修改:
打開 ~/.bashrc
找到 #alias ll=’ls -l’,去掉前面的#就可以了。
cp
功能
主要用於複製文件或目錄
輸入
cp [options] source dest
-a:此選項通常在複製目錄時使用,它保留鏈接、文件屬性,並複製目錄下的所有內容。其作用等於dpR參數組合。
-d:複製時保留鏈接。這裏所說的鏈接相當於Windows系統中的快捷方式。
-f:覆蓋已經存在的目標文件而不給出提示。
-i:與-f選項相反,在覆蓋目標文件之前給出提示,要求用戶確認是否覆蓋,回答"y"時目標文件將被覆蓋。
-p:除複製文件的內容外,還把修改時間和訪問權限也複製到新文件中。
-r:若給出的源文件是一個目錄文件,此時將複製該目錄下所有的子目錄和文件。
-l:不復制文件,只是生成鏈接文件。
實例
使用指令"cp"將當前目錄"test/"下的所有文件複製到新目錄"newtest"下,輸入如下命令:
$ cp –r test/ newtest
rm
功能
rm命令用於刪除一個文件或者目錄
輸入
rm [options] name...
參數:
-i 刪除前逐一詢問確認。
-f 即使原檔案屬性設爲唯讀,亦直接刪除,無需逐一確認。
-r 將目錄及以下之檔案亦逐一刪除。
實例
刪除文件可以直接使用rm命令,若刪除目錄則必須配合選項"-r",例如:
# rm test.txt
rm:是否刪除 一般文件 "test.txt"? y
# rm homework
rm: 無法刪除目錄"homework": 是一個目錄
# rm -r homework
rm:是否刪除 目錄 "homework"? y
刪除當前目錄下的所有文件及目錄,命令行爲:
rm -r *
文件一旦通過rm命令刪除,則無法恢復,所以必須格外小心地使用該命令。
mv
功能
用來爲文件或目錄改名、或將文件或目錄移入其它位置
輸入
實例
將文件 aaa 更名爲 bbb :
mv aaa bbb
將info目錄放入logs目錄中。注意,如果logs目錄不存在,則該命令將info改名爲logs。
mv info/ logs
再如將/usr/student下的所有文件和目錄移到當前目錄下,命令行爲:
$ mv /usr/student/* .
touch
功能
touch命令用於修改文件或者目錄的時間屬性,包括存取時間和更改時間。若文件不存在,系統會建立一個新的文件。
輸入
touch [-acfm][-d<日期時間>][-r<參考文件或目錄>] [-t<日期時間>][--help][--version][文件或目錄…]
參數說明:
a 改變檔案的讀取時間記錄。
m 改變檔案的修改時間記錄。
c 假如目的檔案不存在,不會建立新的檔案。與 --no-create 的效果一樣。
f 不使用,是爲了與其他 unix 系統的相容性而保留。
r 使用參考檔的時間記錄,與 --file 的效果一樣。
d 設定時間與日期,可以使用各種不同的格式。
t 設定檔案的時間記錄,格式與 date 指令相同。
--no-create 不會建立新檔案。
--help 列出指令格式。
--version 列出版本訊息。
實例
使用指令"touch"修改文件"testfile"的時間屬性爲當前系統時間,輸入如下命令:
$ touch testfile #修改文件的時間屬性
首先,使用ls命令查看testfile文件的屬性,如下所示:
$ ls -l testfile #查看文件的時間屬性
#原來文件的修改時間爲16:09
-rw-r--r-- 1 hdd hdd 55 2011-08-22 16:09 testfile
執行指令"touch"修改文件屬性以後,並再次查看該文件的時間屬性,如下所示:
$ touch testfile #修改文件時間屬性爲當前系統時間
$ ls -l testfile #查看文件的時間屬性
#修改後文件的時間屬性爲當前系統時間
-rw-r--r-- 1 hdd hdd 55 2011-08-22 19:53 testfile
使用指令"touch"時,如果指定的文件不存在,則將創建一個新的空白文件。例如,在當前目錄下,使用該指令創建一個空白文件"file",輸入如下命令:
$ touch file #創建一個名爲“file”的新的空白文件
file
功能
file命令用於辨識文件類型。
輸入
file [-bcLvz][-f <名稱文件>][-m <魔法數字文件>...][文件或目錄...]
參數:
-b 列出辨識結果時,不顯示文件名稱。
-c 詳細顯示指令執行過程,便於排錯或分析程序執行的情形。
-f<名稱文件> 指定名稱文件,其內容有一個或多個文件名稱時,讓file依序辨識這些文件,格式爲每列一個文件名稱。
-L 直接顯示符號連接所指向的文件的類別。
-m<魔法數字文件> 指定魔法數字文件。
-v 顯示版本信息。
-z 嘗試去解讀壓縮文件的內容。
[文件或目錄...] 要確定類型的文件列表,多個文件之間使用空格分開,可以使用shell通配符匹配多個文件。
實例
顯示文件類型:
[root@localhost ~]# file install.log
install.log: UTF-8 Unicode text
[root@localhost ~]# file -b install.log <== 不顯示文件名稱
UTF-8 Unicode text
[root@localhost ~]# file -i install.log <== 顯示MIME類別。
install.log: text/plain; charset=utf-8
[root@localhost ~]# file -b -i install.log
text/plain; charset=utf-8
which
功能
which指令會在環境變量$PATH設置的目錄裏查找符合條件的文件。並顯示它所在的絕對路徑
輸入
which [文件…]
實例
使用指令"which"查看指令"bash"的絕對路徑,輸入如下命令:
$ which bash
上面的指令執行後,輸出信息如下所示:
/bin/bash #bash可執行程序的絕對路徑
type
功能
查找是否是系統所屬的命令
實例
kylechen@kyle:~$ type ls
ls 是 `ls --color=auto' 的別名
kylechen@kyle:~$ type if
if 是 shell 關鍵字
kylechen@kyle:~$ type cd
cd 是 shell 內建
whereis
功能
該指令只能用於查找二進制文件、源代碼文件和man手冊頁,一般文件的定位需使用locate命令。
輸入
whereis [-bfmsu][-B <目錄>...][-M <目錄>...][-S <目錄>...][文件...]
參數:
-b 只查找二進制文件。
-B<目錄> 只在設置的目錄下查找二進制文件。
-f 不顯示文件名前的路徑名稱。
-m 只查找說明文件。
-M<目錄> 只在設置的目錄下查找說明文件。
-s 只查找原始代碼文件。
-S<目錄> 只在設置的目錄下查找原始代碼文件。
-u 查找不包含指定類型的文件。
實例
使用指令"whereis"查看指令"bash"的位置,輸入如下命令:
$ whereis bash
上面的指令執行後,輸出信息如下所示:
bash:/bin/bash/etc/bash.bashrc/usr/share/man/man1/bash.1.gz
注意:以上輸出信息從左至右分別爲查詢的程序名、bash路徑、bash的man 手冊頁路徑。
如果用戶需要單獨查詢二進制文件或幫助文件,可使用如下命令:
$ whereis -b bash
$ whereis -m bash
輸出信息如下:
$ whereis -b bash #顯示bash 命令的二進制程序
bash: /bin/bash /etc/bash.bashrc /usr/share/bash # bash命令的二進制程序的地址
$ whereis -m bash #顯示bash 命令的幫助文件
bash: /usr/share/man/man1/bash.1.gz #bash命令的幫助文件地址
locate
功能
Linux locate命令用於查找符合條件的文檔,
他會去保存文檔和目錄名稱的數據庫內,查找合乎範本樣式條件的文檔或目錄。
一般情況我們只需要輸入 locate your_file_name 即可查找指定文件。
附加說明
locate與find 不同: find 是去硬盤找,locate 只在/var/lib/slocate資料庫中找。
locate的速度比find快,它並不是真的查找,而是查數據庫,一般文件數據庫在/var/lib/slocate/slocate.db中,所以locate的查找並不是實時的,而是以數據庫的更新爲準,一般是系統自己維護,也可以手工升級數據庫 ,命令爲:
locate -u
輸入
locate [-d ][--help][--version][範本樣式...]
參數:
-d或--database= 配置locate指令使用的數據庫。
locate指令預設的數據庫位於/var/lib/slocate目錄裏,文檔名爲slocate.db,您可使用 這個參數另行指定。
--help 在線幫助。
--version 顯示版本信息。
實例
查找passwd文件,輸入以下命令:
locate passwd
find
功能
查找文件
實例
find -name april* 在當前目錄下查找以april開始的文件
find -name april* fprint file 在當前目錄下查找以april開始的文件,並把結果輸出到file中
find -name ap* -o -name may* 查找以ap或may開頭的文件
find /mnt -name tom.txt -ftype vfat 在/mnt下查找名稱爲tom.txt且文件系統類型爲vfat的文件
find /mnt -name t.txt ! -ftype vfat 在/mnt下查找名稱爲tom.txt且文件系統類型不爲vfat的文件
find /tmp -name wa* -type l 在/tmp下查找名爲wa開頭且類型爲符號鏈接的文件
find /home -mtime -2 在/home下查最近兩天內改動過的文件
find /home -atime -1 查1天之內被存取過的文件
find /home -mmin +60 在/home下查60分鐘前改動過的文件
find /home -amin +30 查最近30分鐘前被存取過的文件
find /home -newer tmp.txt 在/home下查更新時間比tmp.txt近的文件或目錄
find /home -anewer tmp.txt 在/home下查存取時間比tmp.txt近的文件或目錄
find /home -used -2 列出文件或目錄被改動過之後,在2日內被存取過的文件或目錄
find /home -user cnscn 列出/home目錄內屬於用戶cnscn的文件或目錄
find /home -uid +501 列出/home目錄內用戶的識別碼大於501的文件或目錄
find /home -group cnscn 列出/home內組爲cnscn的文件或目錄
find /home -gid 501 列出/home內組id爲501的文件或目錄
find /home -nouser 列出/home內不屬於本地用戶的文件或目錄
find /home -nogroup 列出/home內不屬於本地組的文件或目錄
find /home -name tmp.txt -maxdepth 4 列出/home內的tmp.txt 查時深度最多爲3層
find /home -name tmp.txt -mindepth 3 從第2層開始查
find /home -empty 查找大小爲0的文件或空目錄
find /home -size +512k 查大於512k的文件
find /home -size -512k 查小於512k的文件
find /home -links +2 查硬連接數大於2的文件或目錄
find /home -perm 0700 查權限爲700的文件或目錄
find /tmp -name tmp.txt -exec cat {} \;
find /tmp -name tmp.txt -ok rm {} \;
find / -amin -10 # 查找在系統中最後10分鐘訪問的文件
find / -atime -2 # 查找在系統中最後48小時訪問的文件
find / -empty # 查找在系統中爲空的文件或者文件夾
find / -group cat # 查找在系統中屬於 groupcat的文件
find / -mmin -5 # 查找在系統中最後5分鐘裏修改過的文件
find / -mtime -1 #查找在系統中最後24小時裏修改過的文件
find / -nouser #查找在系統中屬於作廢用戶的文件
find / -user fred #查找在系統中屬於FRED這個用戶的文件
文件內容操作
cat
功能
由第一行開始顯示文件內容
用於連接文件並打印到標準輸出設備上
輸入
cat [-AbeEnstTuv] [--help] [--version] fileName
參數說明:
-n 或 --number:由 1 開始對所有輸出的行數編號。
-b 或 --number-nonblank:和 -n 相似,只不過對於空白行不編號。
-s 或 --squeeze-blank:當遇到有連續兩行以上的空白行,就代換爲一行的空白行。
-v 或 --show-nonprinting:使用 ^ 和 M- 符號,除了 LFD 和 TAB 之外。
-E 或 --show-ends : 在每行結束處顯示 $。
-T 或 --show-tabs: 將 TAB 字符顯示爲 ^I。
-A, --show-all:等價於 -vET。
-e:等價於"-vE"選項;
-t:等價於"-vT"選項;
實例
把 textfile1 的文檔內容加上行號後輸入 textfile2 這個文檔裏:
cat -n textfile1 > textfile2
把 textfile1 和 textfile2 的文檔內容加上行號(空白行不加)之後將內容附加到 textfile3 文檔裏:
cat -b textfile1 textfile2 >> textfile3
清空 /etc/test.txt 文檔內容:
cat /dev/null > /etc/test.txt
cat 也可以用來製作鏡像文件。例如要製作軟盤的鏡像文件,將軟盤放好後輸入:
cat /dev/fd0 > OUTFILE
相反的,如果想把 image file 寫到軟盤,輸入:
cat IMG_FILE > /dev/fd0
tac
功能
從最後一行開始顯示,
可以看出 tac 是 cat 的倒着寫!
將文件全部內容從尾到頭反向連續輸出到標準輸出(屏幕)上
nl
功能
顯示的時候,順道輸出行號
其默認的結果與 cat -n 有點不太一樣, nl 可以將行號做比較多的顯示設計,包括位數與是否自動補齊 0 等等的功能。
輸入
1.命令格式:
nl [選項][文件]
2.命令參數:
-b :指定行號指定的方式,主要有兩種:
-b a :表示不論是否爲空行,也同樣列出行號(類似 cat -n);
-b t :如果有空行,空的那一行不要列出行號(默認值);
-n :列出行號表示的方法,主要有三種:
-n ln :行號在螢幕的最左方顯示;
-n rn :行號在自己欄位的最右方顯示,且不加 0 ;
-n rz :行號在自己欄位的最右方顯示,且加 0 ;
-w :行號欄位的佔用的位數。
-p 在邏輯定界符處不重新開始計算。
實例
實例一:用 nl 列出 log2012.log 的內容
命令:
nl log2012.log
輸出:
[root@localhost test]# nl log2012.log
1 2012-01
2 2012-02
3 ======[root@localhost test]#
說明:
文件中的空白行,nl 不會加上行號
實例二:用 nl 列出 log2012.log 的內容,空本行也加上行號
命令:
nl -b a log2012.log
輸出:
[root@localhost test]# nl -b a log2012.log
1 2012-01
2 2012-02
3
4
5 ======[root@localhost test]#
實例3:讓行號前面自動補上0,統一輸出格式
命令:
輸出:
[root@localhost test]# nl -b a -n rz log2014.log
000001 2014-01
000002 2014-02
000003 2014-03
000004 2014-04
000005 2014-05
000006 2014-06
000007 2014-07
000008 2014-08
000009 2014-09
000010 2014-10
000011 2014-11
000012 2014-12
000013 =======
[root@localhost test]# nl -b a -n rz -w 3 log2014.log
001 2014-01
002 2014-02
003 2014-03
004 2014-04
005 2014-05
006 2014-06
007 2014-07
008 2014-08
009 2014-09
010 2014-10
011 2014-11
012 2014-12
013 =======
more
功能
一頁一頁的顯示文件內容
輸入
more [filename]
常用操作命令
Enter 向下n行,需要定義。默認爲1行
Ctrl+F 向下滾動一屏
空格鍵 向下滾動一屏
Ctrl+B 返回上一屏
= 輸出當前行的行號
:f 輸出文件名和當前行的行號
V 調用vi編輯器
!命令 調用Shell,並執行命令
q 退出more
less
功能
less 與 more 類似,
但是比 more 更好的是,他可以往前翻頁!
實例
1、查看文件
less log2013.log
2、ps查看進程信息並通過less分頁顯示
ps -ef |less
3、查看命令歷史使用記錄並通過less分頁顯示
[root@localhost test]# history | less
22 scp -r tomcat6.0.32 [email protected]:/opt/soft
23 cd ..
24 scp -r web [email protected]:/opt/
25 cd soft
26 ls
……省略……
4、瀏覽多個文件
less log2013.log log2014.log
說明:
輸入 :n後,切換到 log2014.log
輸入 :p 後,切換到log2013.log
1.全屏導航
ctrl + F - 向前移動一屏
ctrl + B - 向後移動一屏
ctrl + D - 向前移動半屏
ctrl + U - 向後移動半屏
2.單行導航
j - 向前移動一行
k - 向後移動一行
3.其它導航
G - 移動到最後一行
g - 移動到第一行
q / ZZ - 退出 less 命令
head
功能
只看頭幾行
輸入
1、用法
head [選項] [文件..]
2、命令選項
-c, --bytes=[-]K k,顯示文檔開始的前k個字節,-k,不顯示文檔結尾的最後 k 個字節
-n, --lines=[-]K k,顯示文檔開始的前k行,-k,不顯示文檔結尾的最後 k 行
實例
1)顯示 a.txt 前 5 行內容
複製代碼
[root@mini ~]# cat a.txt
01
02
03
04
05
06
07
08
09
10
11
12
[root@mini ~]# head -5 a.txt
01
02
03
04
05
[root@mini ~]# head -n 5 a.txt
01
02
03
04
05
複製代碼
2)顯示除了 a.txt 最後 10 行的內容
[root@mini ~]# head -n -10 a.txt
01
02
[root@mini ~]#
tail
功能
只看尾巴幾行
輸入
tail [參數] [文件]
參數:
-f 循環讀取
-q 不顯示處理信息
-v 顯示詳細的處理信息
-c<數目> 顯示的字節數
-n<行數> 顯示文件的尾部 n 行內容
--pid=PID 與-f合用,表示在進程ID,PID死掉之後結束
-q, --quiet, --silent 從不輸出給出文件名的首部
-s, --sleep-interval=S 與-f合用,表示在每次反覆的間隔休眠S秒
有一個常用的參數 -f 常用於查閱正在改變的日誌文件。
tail -f filename 會把 filename 文件裏的最尾部的內容顯示在屏幕上,
並且不斷刷新,只要 filename 更新就可以看到最新的文件內容。
實例
要顯示 notes.log 文件的最後 10 行,請輸入以下命令:
tail notes.log
要跟蹤名爲 notes.log 的文件的增長情況,請輸入以下命令:
tail -f notes.log
此命令顯示 notes.log 文件的最後 10 行。當將某些行添加至 notes.log 文件時,tail 命令會繼續顯示這些行。 顯示一直繼續,直到您按下(Ctrl-C)組合鍵停止顯示。
顯示文件 notes.log 的內容,從第 20 行至文件末尾:
tail +20 notes.log
顯示文件 notes.log 的最後 10 個字符:
tail -c 10 notes.log
tar
功能
linux下的壓縮文件類型如上
現在 compress zip指令幾乎不用了
一般用的是gzip bzip2 xz的壓縮指令
但是用這三個指定每次只能壓縮/解壓縮一個文件
故引入了tar指令 先將要壓縮的多個文件打包 然後再壓縮 解壓縮同理
tar指令提供了很多的參數 可以同時提供打包和壓縮功能 (解打包和解壓縮)
輸入
awk
功能
數據處理
相較於 sed 常常作用於一整個行的處理,
awk 則比較傾向於一行當中分成數個『字段』來處理。
因此,awk 相當的適合處理小型的數據數據處理
實例
待補充
sed
功能
數據處理
輸入
實例
diff
功能
diff 就是用在比對兩個文件之間的差異的,
並且是以行爲單位來比對的!
一般是用在 ASCII 純文本
檔的比對上。 由於是以行爲比對的單位,
因此 diff 通常是用在同一的文件(或軟件)的新舊版本差異上!
輸入
實例
實例一:比較兩文件的不同
實例二:比較兩目錄的不同
vim
功能
vim編輯器的常用指令
實例
性能檢測相關命令
mpstat
功能:
顯示CPU的狀態信息
這些信息存放在/proc/stat文件中。
在多CPUs系統裏,
其不但能查看所有CPU的平均狀況信息,
而且能夠查看特定CPU的信息。
輸入語法:
mpstat(選項)(參數)
選項
-A : 此選項等效於# mpstat -I ALL -u -P ALL
-I {SUM | CPU | ALL} : 報告中斷統計信息。 使用SUM關鍵字,mpstat命令報告每個處理器的中斷總數。使用CPU關鍵字,顯示CPU或CPU每秒接收的每個中斷的數量。ALL關鍵字等效於指定上面的所有關鍵字,因此顯示所有中斷統計信息。
-P {cpu [,...] | ON | ALL} : 指示要報告統計信息的處理器編號。cpu是處理器號。注意,處理器0是第一個處理器。 ON關鍵字表示將爲每個在線處理器報告統計信息,而ALL關鍵字指示要爲所有處理器報告統計信息。
參數
間隔時間:每次報告的間隔時間(秒);
次數:顯示報告的次數。
輸出信息:
user 在internal時間段裏,用戶態的CPU時間(%),不包含 nice值爲負 進程 (usr/total)*100
nice 在internal時間段裏,nice值爲負進程的CPU時間(%) (nice/total)*100
system 在internal時間段裏,內核態的CPU時間(%) (system/total)*100
iowait 在internal時間段裏,硬盤IO等待時間(%) (iowait/total)*100
irq 在internal時間段裏,硬中斷時間(%) (irq/total)*100
soft 在internal時間段裏,軟中斷時間(%) (softirq/total)*100
idle 在internal時間段裏,CPU除去等待磁盤IO操作外的因爲任何原因而空閒的時間閒置時間(%)(idle/total)*100
實例:
mpstat
顯示開機到現在以來cpu的平均狀態信息
Linux 4.15.0-88-generic (kyle) 2020年02月25日 _x86_64_ (4 CPU)
20時12分09秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
20時12分09秒 all 27.16 0.55 9.85 0.34 0.00 0.43 0.00 0.00 0.00 61.66
mpstat -P ALL 2 3
每隔2秒顯示一次 所有cpu的狀態信息
一共產生3個間隔的信息
最後給出這3次間隔的平均信息
kylechen@kyle:~$ mpstat -P ALL 2 3
Linux 4.15.0-88-generic (kyle) 2020年02月25日 _x86_64_ (4 CPU)
20時12分43秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
20時12分45秒 all 9.96 0.00 3.57 0.00 0.00 0.12 0.00 0.00 0.00 86.35
20時12分45秒 0 8.96 0.00 2.99 0.00 0.00 0.00 0.00 0.00 0.00 88.06
20時12分45秒 1 8.87 0.00 3.45 0.49 0.00 0.49 0.00 0.00 0.00 86.70
20時12分45秒 2 9.76 0.00 2.44 0.00 0.00 0.00 0.00 0.00 0.00 87.80
20時12分45秒 3 12.32 0.00 4.43 0.00 0.00 0.00 0.00 0.00 0.00 83.25
20時12分45秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
20時12分47秒 all 13.43 0.00 4.68 0.00 0.00 0.12 0.00 0.00 0.00 81.77
20時12分47秒 0 16.59 0.00 5.69 0.00 0.00 0.47 0.00 0.00 0.00 77.25
20時12分47秒 1 12.08 0.00 3.86 0.00 0.00 0.00 0.00 0.00 0.00 84.06
20時12分47秒 2 12.80 0.00 4.74 0.00 0.00 0.00 0.00 0.00 0.00 82.46
20時12分47秒 3 12.44 0.00 5.26 0.00 0.00 0.00 0.00 0.00 0.00 82.30
20時12分47秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
20時12分49秒 all 8.44 0.00 2.02 0.00 0.00 0.13 0.00 0.00 0.00 89.42
20時12分49秒 0 7.69 0.00 1.54 0.00 0.00 0.51 0.00 0.00 0.00 90.26
20時12分49秒 1 6.47 0.00 2.99 0.00 0.00 0.50 0.00 0.00 0.00 90.05
20時12分49秒 2 10.66 0.00 1.02 0.00 0.00 0.00 0.00 0.00 0.00 88.32
20時12分49秒 3 8.46 0.00 2.49 0.00 0.00 0.00 0.00 0.00 0.00 89.05
平均時間: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
平均時間: all 10.65 0.00 3.44 0.00 0.00 0.12 0.00 0.00 0.00 85.78
平均時間: 0 11.20 0.00 3.46 0.00 0.00 0.33 0.00 0.00 0.00 85.01
平均時間: 1 9.17 0.00 3.44 0.16 0.00 0.33 0.00 0.00 0.00 86.91
平均時間: 2 11.09 0.00 2.77 0.00 0.00 0.00 0.00 0.00 0.00 86.13
平均時間: 3 11.09 0.00 4.08 0.00 0.00 0.00 0.00 0.00 0.00 84.83
mpstat -P ALL -I SUM
查看cpu中斷的統計(各個cpu分開顯示)
inux 4.15.0-88-generic (kyle) 2020年02月25日 _x86_64_ (4 CPU)
20時13分24秒 CPU intr/s
20時13分24秒 all 2057.27
20時13分24秒 0 473.14
20時13分24秒 1 591.17
20時13分24秒 2 687.38
20時13分24秒 3 493.70
mpstat -I SUM
查看cpu中斷的統計(各個cpu合併顯示)
kylechen@kyle:~$ mpstat -I SUM
Linux 4.15.0-88-generic (kyle) 2020年02月25日 _x86_64_ (4 CPU)
20時13分47秒 CPU intr/s
20時13分47秒 all 2036.32
free
功能
free指令會顯示內存的使用情況,
包括實體內存,
虛擬的交換文件內存,
共享內存區段,
以及系統核心使用的緩衝區等。
輸入語法
free [-bkmotV][-s <間隔秒數>]
參數說明:
-b 以Byte爲單位顯示內存使用情況。
-k 以KB爲單位顯示內存使用情況。
-m 以MB爲單位顯示內存使用情況。
-h 以合適的單位顯示內存使用情況,最大爲三位數,自動計算對應的單位值。單位如下:
B = bytes
K = kilos
M = megas
G = gigas
T = teras
-t 顯示內存總和列。
-V 顯示版本信息。
-o 不顯示緩衝區調節列。
-s<間隔秒數>持續觀察內存使用狀況。
輸出信息
total 列顯示系統總的可用物理內存和交換空間大小。
used 列顯示已經被使用的物理內存和交換空間。
free 列顯示還有多少物理內存和交換空間可用使用。
shared 列顯示被共享使用的物理內存大小。(進程間的共享內存)
buff/cache 列顯示被 磁盤緩存 使用的物理內存大小。(buffer表示寫緩衝 cache表示讀緩衝)
available 列顯示還可以被應用程序使用的物理內存大小
注意點
1.當應用程序需要內存時,如果沒有足夠的 free 內存可以用
,內核就會從 buffer 和 cache 中回收內存來滿足應用程序的請
求。所以從應用程序的角度來說,available = free + buffer + cache。
請注意,這只是一個很理想的計算方式,實際中的數據往往有較大的誤差。
2.swap space 是磁盤上的一塊區域,可以是一個分區,也可以是一個文件
。所以具體的實現可以是 swap 分區也可以是 swap 文件
。當系統物理內存喫緊時,Linux 會將內存中不常訪問的數據保存到 swap 上,
這樣系統就有更多的物理內存爲各個進程服務,而當系統需要訪問 swap 上存儲的內容時
,再將 swap 上的數據加載到內存中,這就是常說的換出和換入。
交換空間可以在一定程度上緩解內存不足的情況,
但是它需要讀寫磁盤數據,所以性能不是很高。
實例
free 不指定單位顯示內存使用情況
總計 已用 空閒 共享 緩衝/緩存 可用
內存: 3920116 2680416 179976 596300 1059724 408108
交換: 999420 519916 479504
free -h以合適的單位顯示內存使用情況
kylechen@kyle:~$ free -h
總計 已用 空閒 共享 緩衝/緩存 可用
內存: 3.7G 2.6G 178M 573M 1.0G 401M
交換: 975M 507M 468M
free -th以合適的單位顯示內存使用情 況,同時顯示總量列
kylechen@kyle:~$ free -th
總計 已用 空閒 共享 緩衝/緩存 可用
內存: 3.7G 2.5G 200M 570M 1.0G 424M
交換: 975M 507M 468M
總量: 4.7G 3.0G 668M
free -h -s 1 以1秒爲間隔顯示內存使用情況
kylechen@kyle:~$ free -h -s 1
總計 已用 空閒 共享 緩衝/緩存 可用
內存: 3.7G 2.5G 198M 569M 1.0G 421M
交換: 975M 507M 468M
總計 已用 空閒 共享 緩衝/緩存 可用
內存: 3.7G 2.5G 196M 571M 1.0G 419M
交換: 975M 507M 468M
總計 已用 空閒 共享 緩衝/緩存 可用
內存: 3.7G 2.5G 195M 571M 1.0G 419M
交換: 975M 507M 468M
總計 已用 空閒 共享 緩衝/緩存 可用
內存: 3.7G 2.5G 196M 571M 1.0G 420M
交換: 975M 507M 468M
總計 已用 空閒 共享 緩衝/緩存 可用
內存: 3.7G 2.5G 199M 568M 1.0G 423M
交換: 975M 507M 468M
top
功能
top是系統管理員最重要的工具之一。被廣泛用於監視服務器的負載。
它可以動態的查看系統當前正在運行的進程情況 , 內存使用情況, cpu使用情況
也就是說上面mpstate 和free能實現的功能 它都內在的包含了
輸入語法
很簡單 直接輸入top
輸出信息
任務: 298 total, 1 running, 246 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.7 us, 1.6 sy, 0.0 ni, 92.6 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3920116 total, 301948 free, 2514912 used, 1103256 buff/cache
KiB Swap: 999420 total, 480272 free, 519148 used. 618380 avail Mem
進程id USER PR NI VIRT RES SHR � %CPU %MEM TIME+ COMMAND
1590 kylechen 20 0 3974220 265424 72628 S 7.3 6.8 5:33.19 gnome-shell
1446 kylechen 20 0 521960 38412 19292 S 6.3 1.0 3:28.27 Xorg
3008 kylechen 20 0 780520 50972 32452 S 4.6 1.3 0:17.32 gnome-term+
2779 kylechen 20 0 1201196 318344 79024 S 1.3 8.1 11:48.81 chrome
1955 kylechen 20 0 1505112 399200 243564 S 1.0 10.2 5:32.38 chrome
1 root 20 0 225908 4064 1584 S 0.7 0.1 0:08.15 systemd
1036 gdm 20 0 3492528 89676 62056 S 0.7 2.3 0:11.70 gnome-shell
1993 kylechen 20 0 556488 55780 24440 S 0.7 1.4 0:34.27 chrome
8 root 20 0 0 0 0 I 0.3 0.0 0:08.76 rcu_sched
983 mysql 20 0 1358648 0 0 S 0.3 0.0 0:03.85 mysqld
1571 kylechen 20 0 220792 156 0 S 0.3 0.0 0:03.21 at-spi2-re+
2192 kylechen 20 0 486420 5828 0 S 0.3 0.1 0:01.88 sogou-qimp+
5330 kylechen 20 0 2621992 450080 80948 S 0.3 11.5 1:13.24 XMind
5708 root 20 0 0 0 0 I 0.3 0.0 0:01.65 kworker/u8+
6974 kylechen 20 0 880400 185648 107616 S 0.3 4.7 0:45.80 chrome
7245 root 20 0 0 0 0 I 0.3 0.0 0:00.22 kworker/2:0
7760 kylechen 20 0 51360 4004 3332 R 0.3 0.1 0:00.19 top
輸出信息如上所示 一大坨 很繁瑣 咱們一行一行來分析
第一行表示 當前的進程狀態 總共有298個進程 1個處理runing 246個處於sleeping 0個處於stopped狀態
任務: 298 total, 1 running, 246 sleeping, 0 stopped
第二行表示 當前的cpu狀態 這裏顯示的狀態參數其實和mpstat那裏說的是一樣的 具體可以看上面的mpstat命令講解
%Cpu(s): 5.7 us, 1.6 sy, 0.0 ni, 92.6 id, 0.1 wa, 0.0 hi,
**第三四行表示 **當前的內存狀態 這裏顯示的狀態參數其實和free那裏說的是一樣的 具體可以看上面的free命令講解
KiB Mem : 3920116 total, 301948 free, 2514912 used, 1103256 buff/cache
KiB Swap: 999420 total, 480272 free, 519148 used. 6183800.1 wa, 0.0 hi,
後面幾行其實 表示的就是每個進程具體佔用的系統資源 會隨着時間動態變化
PID
進程ID,進程的唯一標識符
USER
進程所有者的實際用戶名。
PR
進程的調度優先級。這個字段的一些值是’rt’。這意味這這些進程運行在實時態。
NI
進程的nice值(優先級)。越小的值意味着越高的優先級。
VIRT
進程使用的虛擬內存。
RES
駐留內存大小。駐留內存是任務使用的非交換物理內存大小。
SHR
SHR是進程使用的共享內存。
S
這個是進程的狀態。它有以下不同的值:
D – 不可中斷的睡眠態。
R – 運行態
S – 睡眠態
T – 被跟蹤或已停止
Z – 殭屍態
I - 空閒狀態(idle)
%CPU
自從上一次更新時到現在任務所使用的CPU時間百分比。
%MEM
進程使用的可用物理內存百分比。
TIME+
任務啓動後到現在所使用的全部CPU時間,精確到百分之一秒。
COMMAND
運行進程所使用的命令。
還有許多在默認情況下不會顯示的輸出,它們可以顯示進程的頁錯誤、有效組和組ID和其他更多的信息。
進程id USER PR NI VIRT RES SHR � %CPU %MEM TIME+ COMMAND
1590 kylechen 20 0 3974220 265424 72628 S 7.3 6.8 5:33.19 gnome-shell
1446 kylechen 20 0 521960 38412 19292 S 6.3 1.0 3:28.27 Xorg
3008 kylechen 20 0 780520 50972 32452 S 4.6 1.3 0:17.32 gnome-term+
2779 kylechen 20 0 1201196 318344 79024 S 1.3 8.1 11:48.81 chrome
.......
實例
實例1:top
top - 21:25:55 up 1:27, 1 user, load average: 1.51, 1.87, 1.49
任務: 305 total, 2 running, 250 sleeping, 0 stopped, 0 zombie
%Cpu(s): 22.7 us, 1.8 sy, 0.0 ni, 75.1 id, 0.1 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 3920116 total, 121880 free, 2859016 used, 939220 buff/cache
KiB Swap: 999420 total, 333328 free, 666092 used. 182088 avail Mem
PID USER PR NI VIRT RES SHR � %CPU %MEM TIME+ COMMAND
2779 kylechen 20 0 1191.7m 314.5m 59.2m S 17.1 8.2 20:45.14 chrome
1590 kylechen 20 0 3881.1m 242.1m 70.3m R 4.8 6.3 7:19.67 gnome-shell
1446 kylechen 20 0 444.6m 31.1m 11.8m S 1.3 0.8 4:42.48 Xorg
8711 kylechen 20 0 622.0m 17.4m 5.6m S 0.7 0.5 0:02.43 gnome-termi+
1955 kylechen 20 0 1458.6m 348.2m 189.5m S 0.5 9.1 7:31.10 chrome
1989 kylechen 20 0 653.0m 112.1m 47.2m S 0.5 2.9 7:06.33 chrome
8736 kylechen 20 0 50.2m 1.5m 0.8m R 0.2 0.0 0:05.51 top
1036 gdm 20 0 3410.7m 82.2m 55.3m S 0.1 2.1 0:15.10 gnome-shell
1484 kylechen 20 0 442.8m 48.0m 8.9m S 0.1 1.3 0:40.19 fcitx
1993 kylechen 20 0 551.4m 48.9m 17.8m S 0.1 1.3 0:45.63 chrome
3299 kylechen 20 0 633.0m 20.9m 5.1m S 0.1 0.5 0:17.90 chrome
1 root 20 0 220.6m 3.0m 0.6m S 0.0 0.1 0:10.02 systemd
2 root 20 0 0.0m 0.0m 0.0m S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0.0m 0.0m 0.0m I 0.0 0.0 0:00.00 kworker/0:0H
6 root 0 -20 0.0m 0.0m 0.0m I 0.0 0.0 0:00.00 mm_percpu_wq
7 root 20 0 0.0m 0.0m 0.0m S 0.0 0.0 0:00.22 ksoftirqd/0
8 root 20 0 0.0m 0.0m 0.0m I 0.0 0.0 0:11.86 rcu_sched
實例2: 交互式命令
top是一個交互式的命令
所以用top調出動態顯示的進程狀態以後
在界面上繼續用鍵盤輸入指令
會繼續在界面上執行對應的操作
交互命令1: 回車/空格
top命令默認在一個特定間隔(3秒)後刷新顯示。
要手動刷新,用戶可以輸入回車或者空格。
交互命令2: B
一些重要信息會以加粗字體顯示。
這個命令可以切換粗體顯示。
交互命令3: d 或s
當按下’d’或’s’時,你
將被提示輸入一個值(以秒爲單位),
它會以設置的值作爲刷新間隔。
如果你這裏輸入了1,top將會每秒刷新。
交互命令4 :‘R’
切換反向/常規排序。
交互命令5 :‘V’
切換樹視圖。
交互命令6: ‘k’
top命令中最重要的一個命令之一。
用於發送信號給任務(通常是結束任務)。
交互命令7: ‘e’
切換顯示的單位
依次以k ->m->g->t->p單位選擇
進程相關命令
ps
功能
ps 用來查看進程狀態
不過這種查看是靜態的 也就是隻會顯示 你輸入命令那一刻的進程狀態
不會像top那樣是動態變化的
ps命令支持三種使用的語法格式:
UNIX 風格,選項可以組合在一起,並且選項前必須有“-”連字符
BSD 風格,選項可以組合在一起,但是選項前不能有“-”連字符
GNU 風格的長選項,選項前有兩個“-”連字符
這幾種風格可以混用,但是可能會發生衝突。
輸入語法
ps[參數]
參數如下
ps 沒有屬性參數的時候顯示的是同一終端terminal下所有的進程
ps T 顯示同一個終端terminal下的所有進程 輸出信息更豐富了一些
ps a 顯示同一控制終端tty下的所有進程 結果按照進程id來排序 輸出的關鍵屬性有 進程狀態 進程控制終端
ps c 顯示進程的名稱 不顯示路徑
ps -A 顯示所有用戶的所有進程 包括沒有控制終端的進程 結果按照進程id排序 輸出的關鍵屬性有進程的控制終端 和ps -aux 相比 它輸出的信息沒有那麼全面 比如 沒有cpu和mem列
ps -e 等於“ps -A”
ps f 顯示同一個控制終端tty下的進程 同時用樹狀結構的顯示程序間的關係
ps -a 顯示所有用戶進程 不包括沒有控制終端的進程 結果按照進程id排序
ps -u 顯示本用戶下所有進程 不包括沒有控制終端的進程 結果按照進程id排序 而且顯示的進程信息很全面
ps -u [用戶名] 顯示指定用戶名下的所有進程 不包括沒有控制終端的進程 結果按照進程id排序 而且顯示的進程信息很全面 比如 ps -u root
ps -x 顯示本用戶所有進程 包括沒有控制終端的進程 結果按照進程id排序
ps -au 顯示當前用戶下所有的進程 不包括沒有控制終端的進程
ps -ax 顯示所有用戶的進程 包括沒有控制終端的進程 輸出信息裏面沒有USER用戶列
ps -ux 顯示當前用戶下所有進程 包括沒有控制終端的進程
ps -aux 顯示所有用戶的所有進程 包括沒有控制終端的進程
ps -aux --sort -pcpu 顯示所有的進程 並且按照cpu使用率排序
ps -aux --sort -pmem 顯示所有的進程 並且按照cpu使用率排序
ps -auxf 顯示所有用戶的所有進程 包括沒有控制終端的進程 同時以樹形結構顯示進程間的關係
ps -e f (注意e和f中間有空格)顯示所有進程 包括沒有控制終端的進程 同時會用樹狀結構的顯示程序間的關係
輸出信息
USER - 運行該過程的用戶
PID 就是這個程序的 ID
PPID 則是其上級父程序的ID
%CPU- 進程 cpu 利用率。
%MEM - 進程駐留集大小佔計算機物理內存的百分比。
VSZ - 進程的虛擬內存大小 KiB。
RSS- 進程正在使用的物理內存的大小。
PRI 這個是 Priority (優先執行序) 的縮寫
NI 這個是 Nice 值
ADDR 這個是 kernel function,指出該程序在內存的那個部分。如果是個 running的程序,一般就是 "-"
TTY 登入者的終端機位置
TIME 使用掉的 CPU 時間。
CMD 所下達的指令爲何
STAT 代表這個程序的狀態
ps工具標識進程的5種狀態碼:
D 不可中斷
R 運行
S 中斷
T 停止
Z 僵死
在上面這些狀態嗎後面還會有下面這些後綴
< 優先級高的進程
N 優先級較低的進程
L 有些頁被鎖進內存;
s 進程的領導者(在它之下有子進程);
l 多進程的(使用 CLONE_THREAD, 類似 NPTL pthreads);
+ 位於後臺的進程組;
實例
實例1
kylechen@kyle:~$ ps
PID TTY TIME CMD
17796 pts/0 00:00:00 bash
24667 pts/0 00:00:00 ps
實例2
kylechen@kyle:~$ ps -T
PID SPID TTY TIME CMD
17796 17796 pts/0 00:00:00 bash
24673 24673 pts/0 00:00:00 ps
實例3
kylechen@kyle:~$ ps a
PID TTY STAT TIME COMMAND
1444 tty2 Ssl+ 0:00 /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SH
1446 tty2 Sl+ 19:57 /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1
1457 tty2 Sl+ 0:00 /usr/lib/gnome-session/gnome-session-binary --session
1590 tty2 Sl+ 31:32 /usr/bin/gnome-shell
1628 tty2 Sl 0:00 ibus-daemon --xim --panel disable
1632 tty2 Sl 0:00 /usr/lib/ibus/ibus-dconf
1636 tty2 Sl 0:00 /usr/lib/ibus/ibus-x11 --kill-daemon
1708 tty2 Sl+ 0:01 /usr/lib/gnome-settings-daemon/gsd-power
1710 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-print-notification
1711 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-rfkill
1714 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-screensaver-proxy
1717 tty2 Sl+ 0:03 /usr/lib/gnome-settings-daemon/gsd-sharing
1720 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-smartcard
後面的篇幅太長 ...略掉
實例4
kylechen@kyle:~$ ps a
PID TTY STAT TIME COMMAND
1444 tty2 Ssl+ 0:00 /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SH
1446 tty2 Sl+ 19:57 /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1
1457 tty2 Sl+ 0:00 /usr/lib/gnome-session/gnome-session-binary --session
1590 tty2 Sl+ 31:32 /usr/bin/gnome-shell
1628 tty2 Sl 0:00 ibus-daemon --xim --panel disable
1632 tty2 Sl 0:00 /usr/lib/ibus/ibus-dconf
1636 tty2 Sl 0:00 /usr/lib/ibus/ibus-x11 --kill-daemon
1708 tty2 Sl+ 0:01 /usr/lib/gnome-settings-daemon/gsd-power
1710 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-print-notification
1711 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-rfkill
1714 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-screensaver-proxy
1717 tty2 Sl+ 0:03 /usr/lib/gnome-settings-daemon/gsd-sharing
1720 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-smartcard
後面的篇幅太長 ...略掉
實例5
kylechen@kyle:~$ ps a
PID TTY STAT TIME COMMAND
1444 tty2 Ssl+ 0:00 /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SH
1446 tty2 Sl+ 19:57 /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1
1457 tty2 Sl+ 0:00 /usr/lib/gnome-session/gnome-session-binary --session
1590 tty2 Sl+ 31:32 /usr/bin/gnome-shell
1628 tty2 Sl 0:00 ibus-daemon --xim --panel disable
1632 tty2 Sl 0:00 /usr/lib/ibus/ibus-dconf
1636 tty2 Sl 0:00 /usr/lib/ibus/ibus-x11 --kill-daemon
1708 tty2 Sl+ 0:01 /usr/lib/gnome-settings-daemon/gsd-power
1710 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-print-notification
1711 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-rfkill
1714 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-screensaver-proxy
1717 tty2 Sl+ 0:03 /usr/lib/gnome-settings-daemon/gsd-sharing
1720 tty2 Sl+ 0:00 /usr/lib/gnome-settings-daemon/gsd-smartcard
後面的篇幅太長 ...略掉
實例6
kylechen@kyle:~$ ps c
PID TTY STAT TIME COMMAND
1444 tty2 Ssl+ 0:00 gdm-x-session
1446 tty2 Sl+ 20:05 Xorg
1457 tty2 Sl+ 0:00 gnome-session-b
1590 tty2 Sl+ 31:46 gnome-shell
1628 tty2 Sl 0:00 ibus-daemon
1632 tty2 Sl 0:00 ibus-dconf
1636 tty2 Sl 0:00 ibus-x11
1708 tty2 Sl+ 0:01 gsd-power
1710 tty2 Sl+ 0:00 gsd-print-notif
1711 tty2 Sl+ 0:00 gsd-rfkill
1714 tty2 Sl+ 0:00 gsd-screensaver
1717 tty2 Sl+ 0:03 gsd-sharing
1720 tty2 Sl+ 0:00 gsd-smartcard
1725 tty2 Sl+ 0:00 gsd-xsettings
1728 tty2 Sl+ 0:00 gsd-wacom
1735 tty2 Sl+ 0:00 gsd-sound
1746 tty2 Sl+ 0:00 gsd-a11y-settin
1747 tty2 Sl+ 0:00 gsd-clipboard
1751 tty2 Sl+ 0:04 gsd-color
1754 tty2 Sl+ 0:00 gsd-datetime
1755 tty2 Sl+ 0:02 gsd-housekeepin
1756 tty2 Sl+ 0:00 gsd-keyboard
1759 tty2 Sl+ 0:01 gsd-media-keys
1763 tty2 Sl+ 0:00 gsd-mouse
1787 tty2 Sl+ 0:00 gsd-printer
1807 tty2 Sl+ 0:00 gsd-disk-utilit
1955 tty2 SLl+ 38:57 chrome
後面的篇幅太長 ...略掉
kylechen@kyle:~$ ps -aux --sort -pmem
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
kylechen 5330 0.4 9.6 2675660 377160 tty2 Sl+ 2月25 4:39 /opt/XMind ZEN/XMind --type=renderer --no-sandbox --primordial-pipe-token=AE1FEBFB388740D8B17A50EFC55AA15A
kylechen 1955 3.7 9.5 1592304 373052 tty2 SLl+ 2月25 39:07 /opt/google/chrome/chrome
kylechen 14282 4.0 7.9 1240340 312420 tty2 Sl+ 2月25 35:06 /opt/google/chrome/chrome --type=renderer --disable-webrtc-apm-in-audio-service --field-trial-handle=131391
kylechen 19242 0.4 6.9 1008672 273388 tty2 Sl+ 00:25 3:11 /opt/google/chrome/chrome --type=renderer --disable-webrtc-apm-in-audio-service --field-trial-handle=1313919
kylechen 24091 3.2 5.3 916448 209380 tty2 Sl+ 12:50 0:38 /opt/google/chrome/chrome --type=renderer --disable-webrtc-apm-in-audio-service --field-trial-handle=1313919
kylechen 1590 3.1 5.3 3998928 208124 tty2 Sl+ 2月25 32:04 /usr/bin/gnome-shell
kylechen 23859 0.6 5.3 899524 207904 tty2 Sl+ 12:46 0:08 /opt/google/chrome/chrome --type=renderer --disable-webrtc-apm-in-audio-service --field-trial-handle=1313919
kylechen 19254 0.1 4.9 866404 194272 tty2 Sl+ 00:25 0:50 /opt/google/chrome/chrome --type=renderer --disable-webrtc-apm-in-audio-service --field-trial-handle=1313919
kylechen 2439 0.0 3.5 1497400 140056 tty2 SLl+ 2月25 0:20 /usr/bin/gnome-software --gapplication-service
kylechen 19681 1.3 2.9 640148 114188 tty2 Sl+ 00:32 10:14 /proc/self/exe --type=gpu-process --field-trial-handle=13139199688567382976,8847439337573611818,131072 --gpu
kylechen 19231 0.1 2.8 835928 110572 tty2 Sl+ 00:25 0:59 /opt/google/chrome/chrome --type=renderer --disable-webrtc-apm-in-audio-service --field-trial-handle=1313919
kylechen 5263 0.2 2.1 2234672 84160 tty2 Sl+ 2月25 2:06 /opt/XMind ZEN/XMind
後面篇幅過長 略掉
kylechen@kyle:~$ ps -e f
PID TTY STAT TIME COMMAND
2 ? S 0:00 [kthreadd]
4 ? I< 0:00 \_ [kworker/0:0H]
6 ? I< 0:00 \_ [mm_percpu_wq]
7 ? S 0:00 \_ [ksoftirqd/0]
8 ? I 0:54 \_ [rcu_sched]
9 ? I 0:00 \_ [rcu_bh]
10 ? S 0:00 \_ [migration/0]
11 ? S 0:00 \_ [watchdog/0]
12 ? S 0:00 \_ [cpuhp/0]
13 ? S 0:00 \_ [cpuhp/1]
14 ? S 0:00 \_ [watchdog/1]
15 ? S 0:00 \_ [migration/1]
16 ? S 0:02 \_ [ksoftirqd/1]
18 ? I< 0:00 \_ [kworker/1:0H]
19 ? S 0:00 \_ [cpuhp/2]
20 ? S 0:00 \_ [watchdog/2]
21 ? S 0:00 \_ [migration/2]
22 ? S 0:01 \_ [ksoftirqd/2]
24 ? I< 0:00 \_ [kworker/2:0H]
25 ? S 0:00 \_ [cpuhp/3]
26 ? S 0:00 \_ [watchdog/3]
27 ? S 0:00 \_ [migration/3]
28 ? S 0:00 \_ [ksoftirqd/3]
30 ? I< 0:00 \_ [kworker/3:0H]
31 ? S 0:00 \_ [kdevtmpfs]
32 ? I< 0:00 \_ [netns]
33 ? S 0:00 \_ [rcu_tasks_kthre]
34 ? S 0:00 \_ [kauditd]
後面略掉
pstree
功能
清晰明瞭的用樹形圖顯示所有進程的層次關係
輸入語法
pstree
輸出信息
systemd─┬─Main───4*[{Main}]
├─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─acpid
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─boltd───2*[{boltd}]
├─chrome─┬─2*[cat]
│ ├─chrome─┬─chrome─┬─14*[chrome───10*[{chrome}]]
│ │ │ ├─chrome───19*[{chrome}]
│ │ │ ├─chrome───11*[{chrome}]
│ │ │ └─chrome───7*[{chrome}]
│ │ └─nacl_helper
│ ├─chrome───8*[{chrome}]
│ ├─chrome───6*[{chrome}]
│ ├─chrome───7*[{chrome}]
│ └─32*[{chrome}]
├─colord───2*[{colord}]
├─cron
├─cups-browsed───2*[{cups-browsed}]
├─cupsd───dbus
├─2*[dbus-daemon]
├─fcitx───{fcitx}
├─fcitx-dbus-watc
├─fwupd───4*[{fwupd}]
├─gdm3─┬─gdm-session-wor─┬─gdm-x-session─┬─Xorg───3*[{Xorg}]
│ │ │ ├─gnome-session-b─┬─gnome-shell─┬─XMind─┬─XMind─┬─XMind───13*[{XMind}]
│ │ │ │ │ │ │ └─XMind───14*[{XMind}]
│ │ │ │ │ │ ├─XMind───4*[{XMind}]
│ │ │ │ │ │ └─41*[{XMind}]
│ │ │ │ │ ├─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
│ │ │ │ │ │ ├─ibus-engine-lib───3*[{ibus-engine-lib}]
│ │ │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engine-sim}]
│ │ │ │ │ │ └─2*[{ibus-daemon}]
│ │ │ │ │ └─13*[{gnome-shell}]
│ │ │ │ ├─gnome-software───3*[{gnome-software}]
│ │ │ │ ├─gsd-a11y-settin───3*[{gsd-a11y-settin}]
│ │ │ │ ├─gsd-clipboard───2*[{gsd-clipboard}]
│ │ │ │ ├─gsd-color───3*[{gsd-color}]
│ │ │ │ ├─gsd-datetime───3*[{gsd-datetime}]
│ │ │ │ ├─gsd-disk-utilit───2*[{gsd-disk-utilit}]
│ │ │ │ ├─gsd-housekeepin───3*[{gsd-housekeepin}]
│ │ │ │ ├─gsd-keyboard───3*[{gsd-keyboard}]
│ │ │ │ ├─gsd-media-keys───4*[{gsd-media-keys}]
│ │ │ │ ├─gsd-mouse───3*[{gsd-mouse}]
│ │ │ │ ├─gsd-power───4*[{gsd-power}]
│ │ │ │ ├─gsd-print-notif───2*[{gsd-print-notif}]
│ │ │ │ ├─gsd-rfkill───2*[{gsd-rfkill}]
│ │ │ │ ├─gsd-screensaver───2*[{gsd-screensaver}]
│ │ │ │ ├─gsd-sharing───3*[{gsd-sharing}]
│ │ │ │ ├─gsd-smartcard───4*[{gsd-smartcard}]
│ │ │ │ ├─gsd-sound───3*[{gsd-sound}]
│ │ │ │ ├─gsd-wacom───2*[{gsd-wacom}]
│ │ │ │ ├─gsd-xsettings───3*[{gsd-xsettings}]
│ │ │ │ ├─ssh-agent
│ │ │ │ ├─update-notifier───3*[{update-notifier}]
│ │ │ │ └─3*[{gnome-session-b}]
│ │ │ └─2*[{gdm-x-session}]
│ │ └─2*[{gdm-session-wor}]
│ └─2*[{gdm3}]
├─gnome-keyring-d───3*[{gnome-keyring-d}]
├─gsd-printer───2*[{gsd-printer}]
├─ibus-x11───2*[{ibus-x11}]
├─irqbalance───{irqbalance}
├─2*[kerneloops]
├─login───bash
├─lvmetad
├─mysqld───26*[{mysqld}]
├─networkd-dispat───{networkd-dispat}
├─packagekitd───2*[{packagekitd}]
├─polkitd───2*[{polkitd}]
├─pulseaudio───2*[{pulseaudio}]
├─rsyslogd───3*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─snapd───21*[{snapd}]
├─sogou-qimpanel───10*[{sogou-qimpanel}]
├─sogou-qimpanel-
├─sshd
├─systemd─┬─(sd-pam)
│ ├─at-spi-bus-laun─┬─dbus-daemon
│ │ └─3*[{at-spi-bus-laun}]
│ ├─at-spi2-registr───2*[{at-spi2-registr}]
│ ├─dbus-daemon
│ ├─dconf-service───2*[{dconf-service}]
│ ├─evolution-addre─┬─evolution-addre───5*[{evolution-addre}]
│ │ └─4*[{evolution-addre}]
│ ├─evolution-calen─┬─evolution-calen───8*[{evolution-calen}]
│ │ └─4*[{evolution-calen}]
│ ├─evolution-sourc───3*[{evolution-sourc}]
│ ├─gconfd-2
│ ├─gnome-shell-cal───5*[{gnome-shell-cal}]
│ ├─gnome-terminal-─┬─bash───pstree
│ │ └─3*[{gnome-terminal-}]
│ ├─goa-daemon───3*[{goa-daemon}]
│ ├─goa-identity-se───3*[{goa-identity-se}]
│ ├─gvfs-afc-volume───3*[{gvfs-afc-volume}]
│ ├─gvfs-goa-volume───2*[{gvfs-goa-volume}]
│ ├─gvfs-gphoto2-vo───2*[{gvfs-gphoto2-vo}]
│ ├─gvfs-mtp-volume───2*[{gvfs-mtp-volume}]
│ ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]
│ ├─gvfsd─┬─gvfsd-dnssd───2*[{gvfsd-dnssd}]
│ │ ├─gvfsd-network───3*[{gvfsd-network}]
│ │ ├─gvfsd-smb-brows───3*[{gvfsd-smb-brows}]
│ │ ├─gvfsd-trash───2*[{gvfsd-trash}]
│ │ └─2*[{gvfsd}]
│ ├─gvfsd-fuse───5*[{gvfsd-fuse}]
│ ├─gvfsd-metadata───2*[{gvfsd-metadata}]
│ ├─ibus-portal───2*[{ibus-portal}]
│ ├─xdg-document-po───5*[{xdg-document-po}]
│ └─xdg-permission-───2*[{xdg-permission-}]
├─systemd-journal
├─systemd-logind
├─systemd-resolve
├─systemd-timesyn───{systemd-timesyn}
├─systemd-udevd
├─thermald───{thermald}
├─udisksd───4*[{udisksd}]
├─unattended-upgr───{unattended-upgr}
├─upowerd───2*[{upowerd}]
├─whoopsie───2*[{whoopsie}]
└─wpa_supplicant
kill
功能
發送信號到指定進程
輸入語法
有兩種方式
1.kill [命令參數]
2.kill [信號參數] [指定進程]
kill [命令參數]
-l 後面加信號名稱 顯示指定信號對應的編號 如果後面不加信號名稱 則顯示所有信號對應編號
-u 後面加用戶名稱 表示殺死指定用戶的所用進程 即給指定用戶的所有進程發送SIGTERM信號
kill [信號參數] [指定進程]
信號參數--就是你要給指定進程發送的信號值 可以是名稱的形式比如-SIGKILL ,-SIGHUP 也可以是編號的形式 比如-9 ,-1 分別對應SIGKILL ,SIGHUP.
指定進程--就是你想要給其發送信號的進程pid 可以通過一些手段比如ps/pstree/top等獲取
注意點:
1.也可以不指定信號參數 這樣默認發送的就是編號爲15的SIGTERM信號
2.當用kill向這些進程發送信號時,必須是這些進程的主人。
如果試圖給一個沒有權限或者不存在的進程發送信號,就會得到一個錯誤信息。
3.只有第9種信號(SIGKILL)纔可以無條件終止進程,其他信號進程都有權利忽略。
下面是常用的信號:
SIGHUP 1 終端斷線
SIGINT 2 中斷(同 Ctrl + C)
SIGQUIT 3 退出(同 Ctrl + \)
SIGTERM 15 終止
SIGKILL 9 強制終止
SIGCONT 18 繼續(與STOP相反, fg/bg命令)
SIGSTOP 19 暫停(同 Ctrl + Z)
4.init進程是不可殺的
實例
實例1 : 顯示所有信號及其編號
kylechen@kyle:~$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
實例2 : 顯示SIGHIP的編號
kylechen@kyle:~$ kill -l SIGHUP
1
實例3: 給用戶kylechen的所有進程發送默認信號SIGTERM
kylechen@kyle:~$ kill -u kylechen
實例4 給進程26467發送默認信號 SIGTERM
kylechen@kyle:~$ kill 26467
實例5 給進程26467發送編號爲9的信號 SIGKILL
kylechen@kyle:~$ kill -9 26467
實例5 給進程26467發送名稱爲SIGHUP的信號
kylechen@kyle:~$ kill -SIGHUP 26467
ulimit
功能
限制用戶使用系統的某些資源 包括可以開啓的文件數量, 可以使用的 CPU 時間,可以使用的內存總量等等。
輸入
配額可以使unlimited 這樣就設定爲無限制
磁盤相關命令
du
功能
顯示指定的目錄或文件所佔用的磁盤空間。
輸入語法
du [參數][目錄路徑或文件路徑]
常用參數:
-a 顯示指定目錄下所有單獨的文件大小 後面不加文件或者目錄路徑則表示本目錄
-b 以byte爲單位顯示
-c 除了顯示單獨的目錄或者文件的大小外,同時也顯示所有目錄或文件的總和。
-h 以K,M,G爲單位顯示,提高信息的可讀性。
如果不加參數則顯示當前目錄下總的大小
實例
kylechen@kyle:~/test$ du
20 .
ylechen@kyle:~/test$ du -a
16 ./test.jpg
0 ./readme.txt
20 .
kylechen@kyle:~/test$ du -ab
14491 ./test.jpg
0 ./readme.txt
18587 .
kylechen@kyle:~/test$ du -abc
14491 ./test.jpg
0 ./readme.txt
18587 .
18587 總用量
df
功能
顯示目前在Linux系統上的文件系統的磁盤使用情況統計。
輸入語法
df [參數]
df 不加參數 顯示整個磁盤空間中文件系統的使用情況
df -h 以人類友好格式顯示文件系統硬盤空間使用情況 這樣就會在顯示合適的單位 比如 K M G
df -T 顯示文件系統類型
df -t ext4 僅列出某些文件系統 比如這裏是限制只列出ext4系統的文件系統
df -x ext4 排除指定類型的文件系統 比如這裏是列出了除 ext4 類型以外的全部文件系統
輸出信息
Filesystem – Linux 系統中的文件系統
1K-blocks – 文件系統的大小,用 1K 大小的塊來表示。
Used – 以 1K 大小的塊所表示的已使用數量。
Available – 以 1K 大小的塊所表示的可用空間的數量。
Use% – 文件系統中已使用的百分比。
Mounted on – 已掛載的文件系統的掛載點。
實例
kylechen@kyle:~/test$ df
文件系統 1K-塊 已用 可用 已用% 掛載點
udev 1936656 0 1936656 0% /dev
tmpfs 392016 2068 389948 1% /run
/dev/mapper/ubuntu--vg-root 243559804 181980468 49137532 79% /
tmpfs 1960060 311900 1648160 16% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 1960060 0 1960060 0% /sys/fs/cgroup
/dev/loop0 1024 1024 0 100% /snap/gnome-logs/81
/dev/loop1 127360 127360 0 100% /snap/vscode/93
/dev/loop2 4352 4352 0 100% /snap/gnome-calculator/544
/dev/loop3 144128 144128 0 100% /snap/gnome-3-26-1604/98
/dev/loop4 1024 1024 0 100% /snap/gnome-logs/73
/dev/loop5 256 256 0 100% /snap/gtk2-common-themes/9
/dev/loop6 126976 126976 0 100% /snap/vscode/89
/dev/loop7 164096 164096 0 100% /snap/gnome-3-28-1804/116
/dev/loop8 93568 93568 0 100% /snap/core/8689
/dev/loop9 56064 56064 0 100% /snap/core18/1668
/dev/loop11 56064 56064 0 100% /snap/core18/1650
/dev/loop10 4352 4352 0 100% /snap/gnome-calculator/536
/dev/loop12 15232 15232 0 100% /snap/remmina/3995
/dev/loop13 267008 267008 0 100% /snap/kde-frameworks-5-core18/32
/dev/loop14 256 256 0 100% /snap/gtk2-common-themes/5
/dev/loop15 15232 15232 0 100% /snap/remmina/3968
/dev/loop16 15104 15104 0 100% /snap/gnome-characters/399
/dev/sda1 523248 2284 520964 1% /boot/efi
/dev/loop17 160512 160512 0 100% /snap/gnome-3-28-1804/110
/dev/loop18 127872 127872 0 100% /snap/vscode/87
/dev/loop19 15104 15104 0 100% /snap/gnome-characters/375
/dev/loop20 98688 98688 0 100% /snap/typora-alanzanattadev/2
/dev/loop21 3840 3840 0 100% /snap/gnome-system-monitor/123
/dev/loop22 98176 98176 0 100% /snap/kdenlive/22
/dev/loop23 98304 98304 0 100% /snap/kdenlive/13
/dev/loop24 46080 46080 0 100% /snap/gtk-common-themes/1440
/dev/loop25 144128 144128 0 100% /snap/gnome-3-26-1604/97
/dev/loop26 45312 45312 0 100% /snap/gtk-common-themes/1353
/dev/loop27 259584 259584 0 100% /snap/electronic-wechat/7
/dev/loop28 93568 93568 0 100% /snap/core/8592
/dev/loop29 3840 3840 0 100% /snap/gnome-system-monitor/127
tmpfs 392012 16 391996 1% /run/user/121
tmpfs 392012 36 391976 1% /run/user/1000
kylechen@kyle:~/test$ df -h
文件系統 容量 已用 可用 已用% 掛載點
udev 1.9G 0 1.9G 0% /dev
tmpfs 383M 2.1M 381M 1% /run
/dev/mapper/ubuntu--vg-root 233G 174G 47G 79% /
tmpfs 1.9G 307M 1.6G 17% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop0 1.0M 1.0M 0 100% /snap/gnome-logs/81
/dev/loop1 125M 125M 0 100% /snap/vscode/93
/dev/loop2 4.3M 4.3M 0 100% /snap/gnome-calculator/544
/dev/loop3 141M 141M 0 100% /snap/gnome-3-26-1604/98
/dev/loop4 1.0M 1.0M 0 100% /snap/gnome-logs/73
/dev/loop5 256K 256K 0 100% /snap/gtk2-common-themes/9
/dev/loop6 124M 124M 0 100% /snap/vscode/89
/dev/loop7 161M 161M 0 100% /snap/gnome-3-28-1804/116
/dev/loop8 92M 92M 0 100% /snap/core/8689
/dev/loop9 55M 55M 0 100% /snap/core18/1668
/dev/loop11 55M 55M 0 100% /snap/core18/1650
/dev/loop10 4.3M 4.3M 0 100% /snap/gnome-calculator/536
/dev/loop12 15M 15M 0 100% /snap/remmina/3995
/dev/loop13 261M 261M 0 100% /snap/kde-frameworks-5-core18/32
/dev/loop14 256K 256K 0 100% /snap/gtk2-common-themes/5
/dev/loop15 15M 15M 0 100% /snap/remmina/3968
/dev/loop16 15M 15M 0 100% /snap/gnome-characters/399
/dev/sda1 511M 2.3M 509M 1% /boot/efi
/dev/loop17 157M 157M 0 100% /snap/gnome-3-28-1804/110
/dev/loop18 125M 125M 0 100% /snap/vscode/87
/dev/loop19 15M 15M 0 100% /snap/gnome-characters/375
/dev/loop20 97M 97M 0 100% /snap/typora-alanzanattadev/2
/dev/loop21 3.8M 3.8M 0 100% /snap/gnome-system-monitor/123
/dev/loop22 96M 96M 0 100% /snap/kdenlive/22
/dev/loop23 96M 96M 0 100% /snap/kdenlive/13
/dev/loop24 45M 45M 0 100% /snap/gtk-common-themes/1440
/dev/loop25 141M 141M 0 100% /snap/gnome-3-26-1604/97
/dev/loop26 45M 45M 0 100% /snap/gtk-common-themes/1353
/dev/loop27 254M 254M 0 100% /snap/electronic-wechat/7
/dev/loop28 92M 92M 0 100% /snap/core/8592
/dev/loop29 3.8M 3.8M 0 100% /snap/gnome-system-monitor/127
tmpfs 383M 16K 383M 1% /run/user/121
tmpfs 383M 36K 383M 1% /run/user/1000
kylechen@kyle:~/test$ df -T
文件系統 類型 1K-塊 已用 可用 已用% 掛載點
udev devtmpfs 1936656 0 1936656 0% /dev
tmpfs tmpfs 392016 2068 389948 1% /run
/dev/mapper/ubuntu--vg-root ext4 243559804 181980572 49137428 79% /
tmpfs tmpfs 1960060 302084 1657976 16% /dev/shm
tmpfs tmpfs 5120 4 5116 1% /run/lock
tmpfs tmpfs 1960060 0 1960060 0% /sys/fs/cgroup
/dev/loop0 squashfs 1024 1024 0 100% /snap/gnome-logs/81
/dev/loop1 squashfs 127360 127360 0 100% /snap/vscode/93
/dev/loop2 squashfs 4352 4352 0 100% /snap/gnome-calculator/544
/dev/loop3 squashfs 144128 144128 0 100% /snap/gnome-3-26-1604/98
/dev/loop4 squashfs 1024 1024 0 100% /snap/gnome-logs/73
/dev/loop5 squashfs 256 256 0 100% /snap/gtk2-common-themes/9
/dev/loop6 squashfs 126976 126976 0 100% /snap/vscode/89
/dev/loop7 squashfs 164096 164096 0 100% /snap/gnome-3-28-1804/116
/dev/loop8 squashfs 93568 93568 0 100% /snap/core/8689
/dev/loop9 squashfs 56064 56064 0 100% /snap/core18/1668
/dev/loop11 squashfs 56064 56064 0 100% /snap/core18/1650
/dev/loop10 squashfs 4352 4352 0 100% /snap/gnome-calculator/536
/dev/loop12 squashfs 15232 15232 0 100% /snap/remmina/3995
/dev/loop13 squashfs 267008 267008 0 100% /snap/kde-frameworks-5-core18/32
/dev/loop14 squashfs 256 256 0 100% /snap/gtk2-common-themes/5
/dev/loop15 squashfs 15232 15232 0 100% /snap/remmina/3968
/dev/loop16 squashfs 15104 15104 0 100% /snap/gnome-characters/399
/dev/sda1 vfat 523248 2284 520964 1% /boot/efi
/dev/loop17 squashfs 160512 160512 0 100% /snap/gnome-3-28-1804/110
/dev/loop18 squashfs 127872 127872 0 100% /snap/vscode/87
/dev/loop19 squashfs 15104 15104 0 100% /snap/gnome-characters/375
/dev/loop20 squashfs 98688 98688 0 100% /snap/typora-alanzanattadev/2
/dev/loop21 squashfs 3840 3840 0 100% /snap/gnome-system-monitor/123
/dev/loop22 squashfs 98176 98176 0 100% /snap/kdenlive/22
/dev/loop23 squashfs 98304 98304 0 100% /snap/kdenlive/13
/dev/loop24 squashfs 46080 46080 0 100% /snap/gtk-common-themes/1440
/dev/loop25 squashfs 144128 144128 0 100% /snap/gnome-3-26-1604/97
/dev/loop26 squashfs 45312 45312 0 100% /snap/gtk-common-themes/1353
/dev/loop27 squashfs 259584 259584 0 100% /snap/electronic-wechat/7
/dev/loop28 squashfs 93568 93568 0 100% /snap/core/8592
/dev/loop29 squashfs 3840 3840 0 100% /snap/gnome-system-monitor/127
tmpfs tmpfs 392012 16 391996 1% /run/user/121
tmpfs tmpfs 392012 36 391976 1% /run/user/1000
kylechen@kyle:~/test$ df -t ext4
文件系統 1K-塊 已用 可用 已用% 掛載點
/dev/mapper/ubuntu--vg-root 243559804 181980664 49137336 79% /
kylechen@kyle:~/test$ df -x ext4
文件系統 1K-塊 已用 可用 已用% 掛載點
udev 1936656 0 1936656 0% /dev
tmpfs 392016 2068 389948 1% /run
tmpfs 1960060 299520 1660540 16% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 1960060 0 1960060 0% /sys/fs/cgroup
/dev/loop0 1024 1024 0 100% /snap/gnome-logs/81
/dev/loop1 127360 127360 0 100% /snap/vscode/93
/dev/loop2 4352 4352 0 100% /snap/gnome-calculator/544
/dev/loop3 144128 144128 0 100% /snap/gnome-3-26-1604/98
/dev/loop4 1024 1024 0 100% /snap/gnome-logs/73
/dev/loop5 256 256 0 100% /snap/gtk2-common-themes/9
/dev/loop6 126976 126976 0 100% /snap/vscode/89
/dev/loop7 164096 164096 0 100% /snap/gnome-3-28-1804/116
/dev/loop8 93568 93568 0 100% /snap/core/8689
/dev/loop9 56064 56064 0 100% /snap/core18/1668
/dev/loop11 56064 56064 0 100% /snap/core18/1650
/dev/loop10 4352 4352 0 100% /snap/gnome-calculator/536
/dev/loop12 15232 15232 0 100% /snap/remmina/3995
/dev/loop13 267008 267008 0 100% /snap/kde-frameworks-5-core18/32
/dev/loop14 256 256 0 100% /snap/gtk2-common-themes/5
/dev/loop15 15232 15232 0 100% /snap/remmina/3968
/dev/loop16 15104 15104 0 100% /snap/gnome-characters/399
/dev/sda1 523248 2284 520964 1% /boot/efi
/dev/loop17 160512 160512 0 100% /snap/gnome-3-28-1804/110
/dev/loop18 127872 127872 0 100% /snap/vscode/87
/dev/loop19 15104 15104 0 100% /snap/gnome-characters/375
/dev/loop20 98688 98688 0 100% /snap/typora-alanzanattadev/2
/dev/loop21 3840 3840 0 100% /snap/gnome-system-monitor/123
/dev/loop22 98176 98176 0 100% /snap/kdenlive/22
/dev/loop23 98304 98304 0 100% /snap/kdenlive/13
/dev/loop24 46080 46080 0 100% /snap/gtk-common-themes/1440
/dev/loop25 144128 144128 0 100% /snap/gnome-3-26-1604/97
/dev/loop26 45312 45312 0 100% /snap/gtk-common-themes/1353
/dev/loop27 259584 259584 0 100% /snap/electronic-wechat/7
/dev/loop28 93568 93568 0 100% /snap/core/8592
/dev/loop29 3840 3840 0 100% /snap/gnome-system-monitor/127
tmpfs 392012 16 391996 1% /run/user/121
tmpfs 392012 36 391976 1% /run/user/1000
網絡相關命令
netstat
功能
顯示網絡狀態。
輸入
netstat [參數]
-a-顯示所有socket
-l 顯示所有處於監聽狀態的socket
-t 顯示所有使用tcp協議的socket
-u-顯示UDP傳輸協議的連線狀況。
-s 顯示所有網絡協議的統計信息。
輸出
1. 列出所有端口 (包括監聽和未監聽的)
列出所有端口: netstat -a
列出所有tcp端口: netstat -at
列出所有udp端口: netstat -au
2. 列出所有處於監聽狀態的 Sockets
只顯示監聽端口: netstat -l
只列出所有監聽tcp端口: netstat -lt
只列出所有監聽udp端口: netstat -lu
只列出所有監聽UNIX端口: netstat -lx
3. 顯示每個協議的統計信息
顯示所有端口的統計信息 netstat -s
ifconfig
功能
用於顯示或設置網絡設備
輸入
語法
ifconfig [網絡設備][down up ][add<地址>][del<地址>][<hw<網絡設備類型><硬件地址>][mtu<字節>][netmask<子網掩碼>][IP地址]
參數說明:
add<地址> 設置網絡設備IPv6的IP地址。
del<地址> 刪除網絡設備IPv6的IP地址。
down 關閉指定的網絡設備。
up 啓動指定的網絡設備。
<hw<網絡設備類型><硬件地址> 設置網絡設備的類型與硬件MAC地址。
mtu<字節> 設置網絡設備的MTU。
netmask<子網掩碼> 設置網絡設備的子網掩碼。
[IP地址] 指定網絡設備的IP地址。
實例
顯示網絡設備信息
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:172220 errors:0 dropped:0 overruns:0 frame:0
TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB)
Interrupt:185 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2022 errors:0 dropped:0 overruns:0 frame:0
TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2459063 (2.3 MiB) TX bytes:2459063 (2.3 MiB)
啓動關閉指定網卡
# ifconfig eth0 down
# ifconfig eth0 up
爲網卡配置和刪除IPv6地址
# ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //爲網卡誒之IPv6地址
# ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //爲網卡刪除IPv6地址
用ifconfig修改MAC地址
# ifconfig eth0 down //關閉網卡
# ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
# ifconfig eth0 up //啓動網卡
# ifconfig eth1 hw ether 00:1D:1C:1D:1E //關閉網卡並修改MAC地址
# ifconfig eth1 up //啓動網卡
配置IP地址
# ifconfig eth0 192.168.1.56
//給eth0網卡配置IP地址
# ifconfig eth0 192.168.1.56 netmask 255.255.255.0
// 給eth0網卡配置IP地址,並加上子掩碼
# ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255
// 給eth0網卡配置IP地址,加上子掩碼,加上個廣播地址
啓用和關閉ARP協議
# ifconfig eth0 arp //開啓
# ifconfig eth0 -arp //關閉
設置最大傳輸單元
# ifconfig eth0 mtu 1500
//設置能通過的最大數據包大小爲 1500 bytes
bash相關操作
數據流重導向
功能
將命令在終端的標準輸出 標準出錯 重定向到別的地方比如文件中
或者讀取文件的內容來取代標準輸入
輸入語法
1. 標準輸入 (stdin) :代碼爲 0 ,使用 < 或 << ; 一般和cat配合使用將一個文件的內容輸出到另外一個文件
2. 標準輸出 (stdout):代碼爲 1 ,使用 > 或 >> ; 將命令的標準輸出重定向到另外一個位置 比如文件中
3. 標準錯誤輸出(stderr):代碼爲 2 ,使用 2> 或 2>> 將命令的標註出錯重定向到另外一個位置比如文件中
實例
實例1:
將命令"ll / "的標準輸出存到 ~/rootfile這個文件中 (也可以用1>)
如果原本沒有這個文件 則這個文件將被創建
如果原本有這個文件 則這個文件的內容將會被全部替換
[dmtsai@study ~]$ ll / > ~/rootfile
實例2:
將命令"ll / "的標準輸出存到 ~/rootfile這個文件中(也可以用1>>)
如果原本沒有這個文件 則這個文件將被創建
如果原本有這個文件 則會將標準輸出的內容添加到這個文件原有內容的末尾
[dmtsai@study ~]$ ll / >> ~/rootfile
實例3:
將命令"ll / "的標準錯誤存到 ~/rootfile這個文件中
如果原本沒有這個文件 則這個文件將被創建
如果原本有這個文件 則這個文件的內容將會被全部替換
[dmtsai@study ~]$ ll / 2> ~/rootfile
實例4:
將命令"ll / "的標準錯誤存到 ~/rootfile這個文件中
如果原本沒有這個文件 則這個文件將被創建
如果原本有這個文件 則會將標準錯誤的內容添加到這個文件原有內容的末尾
[dmtsai@study ~]$ ll / 2>>~/rootfile
實例5:
將命令"ll / "的標準輸出存到 stdoutput.txt 將標準錯誤輸出到stderr.txt
如果原本沒有這個文件 則這個文件將被創建
如果原本有這個文件 則這個文件的內容將會被全部替換
[dmtsai@study ~]$ ll / 1>stdoutput.txt 2>~/stderr.txt
實例6:
將命令"ll / "的標準輸出和標準錯誤都存到 stdoutput.txt
如果原本沒有這個文件 則這個文件將被創建
如果原本有這個文件 則這個文件的內容將會被全部替換
[dmtsai@study ~]$ ll / 1>stdoutput.txt 2>&1 正確寫法
[dmtsai@study ~]$ ll / 1>stdoutput.txt 2>~/stdoutput.txt 錯誤寫法 會導致文件中兩種輸出是亂序的
實例7:
將命令"ll / "的標準輸出存到 stdoutput.txt 標準錯誤存到垃圾桶(/dev/null)
標準錯誤不會顯示 標準輸出存到文件stdoutput.txt中
[dmtsai@study ~]$ ll / 1>~/stdoutput.txt 2>/dev/null
實例8:
利用 cat 指令來建立一個文件的簡單流程
[dmtsai@study ~]$ cat > catfile
testing
cat file test
<==這裏按下 [ctrl]+d 來離開
實例9:
用 標準輸入 取代鍵盤的輸入以建立新文件的簡單流程
也就是將/.bashrc的內容傳到catfile裏面 (<是覆蓋 <<是補充到文件末尾)
[dmtsai@study ~]$ cat > catfile < ~/.bashrc
[dmtsai@study ~]$ ll catfile ~/.bashrc
-rw-r--r--. 1 dmtsai dmtsai 231 Mar 6 06:06 /home/dmtsai/.bashrc
-rw-rw-r--. 1 dmtsai dmtsai 231 Jul 9 18:58 catfile
# 注意看,這兩個文件的大小會一模一樣!幾乎像是使用 cp 來複制一般!
實例10:
鍵盤的輸入以建立新文件 以指定的字符作爲結束符
[dmtsai@study ~]$ cat > catfile << "eof"
> This is a test.
> OK now stop
> > eof <==輸入這關鍵詞,立刻就結束而不需要輸入 [ctrl]+d
[dmtsai@study ~]$ cat catfile
This is a test.
OK now stop <==只有這兩行,不會存在關鍵詞那一行
多個命令同時執行
功能
某些情況下,很多指令我想要一次輸入去執行,而不想要分次執行時
輸入語法
方法一:用分號連接 命令之間沒有關聯
sync; sync; shutdown -h now
方法二:用&&連接
cmd1 && cmd2
1. 若 cmd1 執行完畢且正確執行($?=0),則開始執行 cmd2。
2. 若 cmd1 執行完畢且爲錯誤 ($?≠0),則 cmd2 不執行。
方法三:用||連接
cmd1 || cmd2
3. 若 cmd1 執行完畢且正確執行($?=0),則 cmd2 不執行。
4. 2. 若 cmd1 執行完畢且爲錯誤 ($?≠0),則開始執行 cmd
命令的多行顯示
功能
如果命令太長可以用多行顯示
輸入
用\符號分割
實例
[dmtsai@study ~]$ cp /var/spool/mail/root /etc/crontab \
> /etc/fstab /root
上面這個指令用途是將三個文件複製到 /root 這個目錄下而已。
命令的通配符
功能
對命令進行模糊匹配
輸入
實例
範例一:找出 /etc/ 底下以 cron 爲開頭的檔名
[dmtsai@study ~]$ ll -d /etc/cron*
<==加上 -d 是爲了僅顯示目錄而已
範例二:找出 /etc/ 底下文件名『剛好是五個字母』的文件名
[dmtsai@study ~]$ ll -d /etc/?????
範例三:找出 /etc/ 底下文件名含有數字的文件名
[dmtsai@study ~]$ ll -d /etc/*[0-9]*
<==記得中括號左右兩邊均需 *
範例四:找出 /etc/ 底下,檔名開頭非爲小寫字母的文件名:
[dmtsai@study ~]$ ll -d /etc/[^a-z]*
<==注意中括號左邊沒有 *
範例五:將範例四找到的文件複製到 /tmp/upper 中
[dmtsai@study ~]$ mkdir /tmp/upper; cp -a /etc/[^a-z]* /tmp/upper
命令的定時執行
功能
即crontab命令 ,設定某個命令的週期性執行
輸入
首先要介紹一下 crond,因爲 crontab 命令需要 crond服務支持。
cron 是 Linux 下用來週期地執行某種任務或等待處理某些事件的一個守護進程,
和 Windows 中的計劃任務有些類似。 所以要先打開cron服務
crontab
命令的執行歷史
功能
即history命令 ,獲取你在終端輸入的命令歷史
[dmtsai@study ~]$ history [n]
[dmtsai@study ~]$ history [-c]
n :數字,意思是『要列出最近輸入的 n條命令 』
-c :將目前的 shell 中的所有 history 內容全部消除
命令的別名
功能
即 給命令指定一個別名 主要用在命令比較長的時候
alias lm='ls -al | more' 比如這個把ls -al | more重命名爲lm
unalias lm 撤銷剛纔的重命名
命令的解釋
功能
即獲取命令的manpage 用man命令
變量相關命令
變量的聲明賦值
功能
相當於是聲明一個變量 同時給變量賦值
輸入
聲明方法1: 通過 賦值符號 =
聲明方法2: 通過read
用read以後 變量賦值是通過終端等待用戶的鍵盤輸入 來執行
[dmtsai@study ~]$ read [-pt] variable
選項與參數:
-p :後面可以接提示字符!
-t :後面可以接等待的『秒數!』
實例
變量的普通賦值形式
[dmtsai@study ~]$ CHENWEIJIE=0820
讓用戶由鍵盤輸入一內容,將該內容變成名爲 atest 的變量
[dmtsai@study ~]$ read ates
This is a test <==此時光標會等待你輸入!請輸入左側文字看看
[dmtsai@study ~]$ echo ${atest}
This is a test <==你剛剛輸入的數據已經變成一個變量內
讓用戶由鍵盤輸入一內容, 會有提示的字符串提示你輸入 , 然後將該內容變成名爲 name 的變量
kylechen@kyle:~$ read -p"請輸入你的姓名:" -t 5 name
請輸入你的姓名:
kylechen@kyle:~$ echo $name
chenweijie
變量的查看轉換
功能
查看或轉化指定的變量
輸入
echo 查看指定單個變量的值 可以用用**echo PATH** 或者 **echo ${PATH}** 格式
env 查看所有環境變量
set 查看所有變量(包括用戶設定的變量和環境變量,其他bash接口變量)
export 變量名=變量值 將自定義變量轉化成環境變量
關於環境變量:
1. 環境變量是用來定義系統運行環境的一些參數,比如每個用戶不同的家目錄(HOME)、郵件存放位置(MAIL)等。
2. 環境變量所有終端下所有程序都可直接取用的 可以理解爲 環境變量=全局變量 自定義變量=局部變量
3. 可以通過export將自定義變量設定爲當前終端下的環境變量 但是也就是隻能當前終端下的父子進程可以取用 其他終端不行
4. 可以通過自定義變量的export語句添加到個人目錄下的.bashrc文件中 這樣當前用戶的所有程序都可以使用這個環境變量
5. 可以通過將自定義變量的export語句添加到/etc/profile文件下 這樣所有用戶的所有程序都可以使用這個環境變量
實例
輸出自定義變量myname
[dmtsai@study ~]$ echo ${myname}
<==這裏並沒有任何數據~因爲這個變量尚未被設定!是空的[
dmtsai@study ~]$ myname=VBird
[dmtsai@study ~]$ echo ${myname}
VBird <==出現了!因爲這個變量已經被設定
輸出變量PATH
[dmtsai@study ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/b
輸出變量PATH
[dmtsai@study ~]$ echo ${PATH}
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/b
列出目前的 shell 環境下的所有環境變量與其內容。
[dmtsai@study ~]$ env
列出目前的 shell 環境下的所有變量。
[dmtsai@study ~]$ set
將自定義的變量CHENWEIJIE轉換成環境變量
export CHENWEIJIE=0820
變量的類型指定
功能
變量聲明的時候指定類型
輸入
$ declare [-aixr] variable
選項與參數:
-a :將後面名爲 variable 的變量定義成爲數組 (array) 類型
-i :將後面名爲 variable 的變量定義成爲整數數字 (integer) 類型
-x :用法與 export 一樣,就是將後面的 variable 變成環境變量;
-r :將變量設定成爲 readonly 類型,該變量不可被更改內容,也不能 unset
實例
範例一:讓變量 sum 進行 100+300+50 的加總結果
[dmtsai@study ~]$ sum=100+300+5
[dmtsai@study ~]$ echo ${sum}100+300+50 <==咦!怎麼沒有幫我計算加總?因爲這是文字型態的變量屬性啊![dmtsai@study ~]$ declare -i sum=100+300+50
[dmtsai@study ~]$ echo ${sum}
450
範例二:將 sum 變成環境變量
[dmtsai@study ~]$ declare -x sum
[dmtsai@study ~]$ export | grep sum
declare -ix sum="450" <==果然出現了!包括有 i 與 x 的宣告!
範例三:讓 sum 變成只讀屬性,不可更動![dmtsai@study ~]$ declare -r sum
[dmtsai@study ~]$ sum=tesgtin-bash: sum: readonly variable <==老天爺~不能改這個變數了!
範例四:讓 sum 變成非環境變量的自定義變量吧
[dmtsai@study ~]$ declare +x sum <== 將 - 變成 + 可以進行『取消』動作
[dmtsai@study ~]$ declare -p sum <== -p 可以單獨列出變量的類型
declare -ir sum="450" <== 看吧!只剩下 i, r 的類型,不具有 x
變量的比較判斷
功能
類似test命令
利用中括號等運算符判斷裏面的變量是否爲空
裏面的變量比較是否爲真等任務
輸入
[ "$HOME" == "$MAIL"] 判斷變量HOME和MAIL是否相同
[ -z "${HOME}" ] 判斷變量HOME是否爲空
如上所示 中括號的使用方法與 test 幾乎一模一樣啊
只不過需要有以下注意點
使用注意點:
1.在中括號內的變量,最好都以雙引號括號起來; 因爲可能出現以下問題
2/在中括號內的常數,最好都以單或雙引號括號
3.在中括號 [] 內的每個組件都需要有空格鍵來分隔;
使用中括號必須要特別注意,因爲中括號用在很多地方,
包括通配符與正規表示法等等,
所以如果要在 bash 的語法當中使用中括號作爲 shell 的判斷式時,
必須要注意中括號的兩端需要有空格符來分隔
假設我空格鍵使用『□』符號來表示,那麼,在這些地方你都需要有空格鍵:
管道相關命令
cut
功能
主要的用途在於將『同一行裏面的數據進行分解!』 處理的訊息是以『行』爲單位
以某些字符當作分割的參數,然後來將數據加以切割,
以取得我們所需要的數據。
輸入
cut[參數]
實例
grep
功能
剛剛的 cut 是將一行訊息當中,取出某部分我們想要的,
而 grep 則是分析一行訊息, 若當中有我
們所需要的信息,就將該行拿出來~
輸入
實例
sort
功能
把輸出的結果進行排序
輸入
實例
uniq
功能
將重複的資料僅列出一個顯示
輸入
實例
wc
功能
統計有多少字符 多少行
輸入
實例
Shell腳本相關命令
介紹
一句話說明shell腳本是個啥
shell腳本就是將多個shell指令彙集到一起去完成一個複雜的功能
類似windows下的批處理文件 一般以sh爲文件後綴
語法
程序結構
一張圖說明shell腳本的結構是怎樣的
如上圖所示
右邊就是最簡單的一個shell腳本 , 功能是打印出"Hello World
左邊就是它對應的一個程序結構 ,依次是 shell版本聲明 註釋部分聲明 環境變量聲明 程序主體 退出返回
下面依次講解
shell版本聲明
第一行 #!/bin/bash 聲明這個 腳本 使用的shell版本:
因爲shell有很多種類型 比如sh,bash,csh,tcsh
如果不指定版本 系統會不知道用哪一個版本的shell去處理這個腳本
所以會報錯
一般linux發行版默認內置的是bash 所以一般是寫#!/bin/bash
註釋部分聲明
說明程序的作者 功能 編輯時間等等信息
環境變量聲明
環境變量是用來定義系統運行環境的一些參數的變量
比如每個用戶不同的家目錄(HOME)、郵件存放位置(MAIL)等。
具體可以看後端開發必須掌握的Linux命令[變量篇]中的講解
其中比較重要的一個環境變量是PATH
它代表的是一系列路徑的字符串集合
它默認存放了下面的路徑地址 如
usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin等等
比如當你在shell腳本中調用命令echo的時候
本質上系統就會從PATH存放的路徑集合中
去尋找這些路徑中是不是包含了命令echo對應的可執行文件
如果找的到 就執行 如果找不到的話你調用echo就會報錯
這樣就有一個問題
假如你調用的一個比較陌生的命令
它所對應的文件路徑
不在PATH默認的路徑集合中中
你就需要把它加入PATH (用冒號 等於號)
然後在對它重新聲明爲環境變量(用export)
這樣纔可以 否則還是會報錯的
一般常用的命令比如ls echo 等等
是默認已經包含在PATH變量的路徑集合中了 所以開頭不需要聲明
這裏只是爲了講解程序的標準結構故引出來了
程序主體
普通語句
就是用普通的命令組成的語句
條件語句
簡單的if …then
實例:
複雜的if …then
實例:
case…esac
實例:
循環語句
while do done
當while中的條件爲真的時候就繼續執行
實例:
until do done
當until中的條件爲真的時候就結束執行
實例:
for…do…done
實例:
for…do…done的數值處理結構
實例:
退出返回
在我們這個例子當中,使用 exit 0 ,
這代表離開 script 並且回傳一個 0 給系統,
所以執行完這個 script 後,若接着下達 echo $? 則可得到0 值!
利用這個 exit n (n 是數字) 的功能,我們還可以自定義錯誤返回值 從而使程序更聰明
執行
假設我們編寫好的shell腳本的文件名爲hello.sh,文件位置在/data/shell目錄中並已有執行權限
執行方法一:通過路徑
1、相對路徑
cd /data/shell
./hello.sh
2、絕對路徑
/data/shell/hello.sh
執行方法二:通過sh或bash
sh
cd /data/shell
sh hello.sh
bash
cd /data/shell
bash hello.sh
執行方法三:通過 source 或.(點號)
source
cd /data/shell
source hello.sh
.
cd /data/shell
. hello.sh
區別:
1.絕對路徑和相對路徑沒有什麼區別,兩種方式都需要提前賦予腳本以執行權限。
2.sh或者bash方式是把腳本當做bash的調用來處理,所以,腳本不需要有執行權限就可以執行。
前兩種方式都是在當前shell中打開一個子shell來執行腳本內容,當腳本內容結束,則子shell關閉,回到父shell中。
3.source或者.方式是使腳本內容在當前shell裏執行,而不是單獨開子shell執行。
4.開子shell與不開子shell的區別就在於,環境變量的繼承關係,如在子shell中設置的當前變量,
不做特殊通道處理的話,父shell是不可見的。
而在當前shell中執行的話,則所有設置的環境變量都是直接生效可用的。