Linux常用命令2
1、進程相關
1.1、查看進程(ps命令)
Linux ps (英文全拼:process status)命令用于顯示當前進程的狀態(tài),類似于 windows 的任務管理器。
ps [options]
ps命令是最基本同時也是非常強大的進程查看命令,使用該命令可以確定有哪些進程正在運行和運行的狀態(tài)、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等,總之大部分信息都是可以通過執(zhí)行該命令得到的。
選項如下:
-a:顯示所有終端機下執(zhí)行的程序,除了階段作業(yè)領導者之外。 a:顯示現(xiàn)行終端機下的所有程序,包括其他用戶的程序。 -A:顯示所有程序。 -c:顯示CLS和PRI欄位。 c:列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,選項或常駐服務的標示。 -C<指令名稱>:指定執(zhí)行指令的名稱,并列出該指令的程序的狀況。 -d:顯示所有程序,但不包括階段作業(yè)領導者的程序。 -e:此選項的效果和指定"A"選項相同。 e:列出程序時,顯示每個程序所使用的環(huán)境變量。 -f:顯示UID,PPIP,C與STIME欄位。 f:用ASCII字符顯示樹狀結構,表達程序間的相互關系。 -g<群組名稱>:此選項的效果和指定"-G"選項相同,當亦能使用階段作業(yè)領導者的名稱來指定。 g:顯示現(xiàn)行終端機下的所有程序,包括群組領導者的程序。 -G<群組識別碼>:列出屬于該群組的程序的狀況,也可使用群組名稱來指定。 h:不顯示標題列。 -H:顯示樹狀結構,表示程序間的相互關系。 -j或j:采用工作控制的格式顯示程序狀況。 -l或l:采用詳細的格式來顯示程序狀況。 L:列出欄位的相關信息。 -m或m:顯示所有的執(zhí)行緒。 n:以數(shù)字來表示USER和WCHAN欄位。 -N:顯示所有的程序,除了執(zhí)行ps指令終端機下的程序之外。 -p<程序識別碼>:指定程序識別碼,并列出該程序的狀況。 p<程序識別碼>:此選項的效果和指定"-p"選項相同,只在列表格式方面稍有差異。 r:只列出現(xiàn)行終端機正在執(zhí)行中的程序。 -s<階段作業(yè)>:指定階段作業(yè)的程序識別碼,并列出隸屬該階段作業(yè)的程序的狀況。 s:采用程序信號的格式顯示程序狀況。 S:列出程序時,包括已中斷的子程序資料。 -t<終端機編號>:指定終端機編號,并列出屬于該終端機的程序的狀況。 t<終端機編號>:此選項的效果和指定"-t"選項相同,只在列表格式方面稍有差異。 -T:顯示現(xiàn)行終端機下的所有程序。 -u<用戶識別碼>:此選項的效果和指定"-U"選項相同。 u:以用戶為主的格式來顯示程序狀況。 -U<用戶識別碼>:列出屬于該用戶的程序的狀況,也可使用用戶名稱來指定。 U<用戶名稱>:列出屬于該用戶的程序的狀況。 v:采用虛擬內(nèi)存的格式顯示程序狀況。 -V或V:顯示版本信息。 -w或w:采用寬闊的格式來顯示程序狀況。 x:顯示所有程序,不以終端機來區(qū)分。 X:采用舊式的Linux i386登陸格式顯示程序狀況。 -y:配合選項"-l"使用時,不顯示F(flag)欄位,并以RSS欄位取代ADDR欄位 。 -<程序識別碼>:此選項的效果和指定"p"選項相同。 --cols<每列字符數(shù)>:設置每列的最大字符數(shù)。 --columns<每列字符數(shù)>:此選項的效果和指定"--cols"選項相同。 --cumulative:此選項的效果和指定"S"選項相同。 --deselect:此選項的效果和指定"-N"選項相同。 --forest:此選項的效果和指定"f"選項相同。 --headers:重復顯示標題列。 --help:在線幫助。 --info:顯示排錯信息。 --lines<顯示列數(shù)>:設置顯示畫面的列數(shù)。 --no-headers:此選項的效果和指定"h"選項相同,只在列表格式方面稍有差異。 --group<群組名稱>:此選項的效果和指定"-G"選項相同。 --Group<群組識別碼>:此選項的效果和指定"-G"選項相同。 --pid<程序識別碼>:此選項的效果和指定"-p"選項相同。 --rows<顯示列數(shù)>:此選項的效果和指定"--lines"選項相同。 --sid<階段作業(yè)>:此選項的效果和指定"-s"選項相同。 --tty<終端機編號>:此選項的效果和指定"-t"選項相同。 --user<用戶名稱>:此選項的效果和指定"-U"選項相同。 --User<用戶識別碼>:此選項的效果和指定"-U"選項相同。 --version:此選項的效果和指定"-V"選項相同。 --widty<每列字符數(shù)>:此選項的效果和指定"-cols"選項相同。
1.1.1、ps -ef
-e:顯示所有程序,-f:顯示UID、PPIP、C與STIME欄位。
示例:

ps -ef 是用標準的格式來顯示進程,顯示的項目有:UID PID PPID C STIME TTY TIME CMD
具體的字段含義如下:
- UID:用戶ID,指的是程序被該UID所擁有,但輸出的是用戶名,比如上述輸出的是root 用戶
- PID:進程的ID,該程序的ID
- PPID:父進程ID,上級父程序的ID
- C:CPU占用率
- STIME:進程啟動到現(xiàn)在的時間
- TTY:登入者的終端機位置,該進程在哪個終端上運行,若與終端無關,則顯示? 若為pts/0等,則表示由網(wǎng)絡連接主機進程。
- TIME:此進程運行的總時間
- CMD:啟動進程的命令和參數(shù)
1.1.2、ps -ef | grep 查找信息
|:管道命名,指的是 ps 命令和 grep 命令同時執(zhí)行(可以把它看做是一個連接的作用)
grep:(Global Regular Expression Print)查找的意思,使用的權限是所有的用戶,它是一種強大的文本搜索工具,能使用正則表達式搜索文本,并把匹配的行打印出來

通常在使用 ps命令后用管道連接查詢特定進程時也會同時顯示 grep進程本身,后綴一般是:grep --color=auto XXX,比如上面截圖中的第三行。
有時候查詢結果其實 都是沒有對應這個進程。但是會顯示了 grep進程的本身,有的人會認為這就是自己想要的 進程,結果用 kill -9 PID 時提示進程號不存在.......

如何判斷該進程是否是 grep進程本身? 進程號一直的變的那個進程是 grep進程本身,正常進程號的PID如果沒有重啟是不會變的。
1.2、結束進程(kill)
當一個服務無法用命令結束時,可以用 kill 命令殺進程
# 殺死該pid的進程 kill pid # 強制殺死該進程 kill -9 pid
3、端口相關命令
3.1、查看系統(tǒng)的ip地址(ifconfig)
通過 ifconfig 命令可以查看 ip 地址:

3.2、查看開放的端口號
可以通過以下命令來查看 Linux 系統(tǒng)中已開放的端口號:
firewall-cmd --list-all
實例:

在 Linux 中安裝 Nginx 后,我們可以通過 Linux 系統(tǒng)的 ip 來直接訪問 Nginx,但有可能訪問失敗,此時有可能是因為 Linux 系統(tǒng)的 80 端口未開啟。可以通過上述命令來查看 Linux 的端口號的開啟情況。
3.3、對外開放指定端口
在 Linux 系統(tǒng)中安裝 Nginx 后,如果 Linux 沒有對外開放端口,則其他服務器無法訪問該服務器。此時需要手動將端口號開啟。
開啟 80 端口:
firewall-cmd --add-port=80/tcp --permanent
重啟防火墻
systemctl restart firewalld
3.4、關閉防火墻
systemctl stop firewalld
使用命令systemctl stop firewalld 可暫時關閉防火墻,系統(tǒng)重啟后防火墻還會打開。
#永久性關閉防火墻(重啟將不會恢復到原來的狀態(tài),并且需要重啟后(reboot 命令)才能生效)
systemctl disable firewalld
6、Linux上目錄權限
6.1、查看權限
通過 ls -l 命令可以查看目錄權限,得到結果類似如下:


d 表示是否為目錄,每個 rwx 分別表示不同用戶的權限,如果沒有該權限,則用 - 表示。
對于文件和目錄來說,r,w,x有著不同的作用和含義。
針對文件:
r:讀取文件內(nèi)容
w:修改文件內(nèi)容
x:執(zhí)行權限對除二進制程序以外的文件沒什么意義
針對目錄:目錄本質(zhì)可看做是存放文件列表、節(jié)點號等內(nèi)容的文件
r:查看目錄下的文件列表
w:刪除和創(chuàng)建目錄下的文件
x:可以cd進入目錄,能查看目錄中文件的詳細屬性,能訪問目錄下文件內(nèi)容(基礎權限)
用戶獲取文件權限的順序: 先看是否為所有者,如果是,則后面權限不看;再看是否為所屬組,如果是,則后面權限不看。
參考:https://blog.csdn.net/lv8549510/article/details/85406215、https://www.linuxprobe.com/linux-properties-permissions.html
6.2、修改權限
修改某個目錄下的所有文件的權限,包括子目錄中的文件,例子如下:
# chmod 777 /home/user 注:僅把/home/user目錄的權限設置為rwxrwxrwx # chmod -R 777 /home/user 注:表示將整個/home/user目錄與其中的文件和子目錄的權限都設置為rwxrwxrwx
其中,參數(shù)-R表示啟動遞歸處理。

幾種常用權限實例:
- -rw------- (600) 只有所有者才有讀和寫的權限
- -rw-r--r-- (644) 只有所有者才有讀和寫的權限,組群和其他人只有讀的權限
- -rwx------ (700) 只有所有者才有讀,寫,執(zhí)行的權限
- -rwxr-xr-x (755) 只有所有者才有讀,寫,執(zhí)行的權限,組群和其他人只有讀和執(zhí)行的權限
- -rwx--x--x (711) 只有所有者才有讀,寫,執(zhí)行的權限,組群和其他人只有執(zhí)行的權限
- -rw-rw-rw- (666) 每個人都有讀寫的權限
- -rwxrwxrwx (777) 每個人都有讀寫和執(zhí)行的權限
參考:http://blog.itpub.net/31397003/viewspace-2645294/
6.3、默認權限
在linux中,同一個用戶在創(chuàng)建文件和目錄時,這些文件和目錄所默認的權限都是一樣的,如需更改,需要chmod命令做相應的更改。權限掩碼的作用就是規(guī)范初創(chuàng)文件和目錄時候的權限設置,免去了創(chuàng)建后再次修改權限的問題。我們可以通過設置權限掩碼來設置文件和目錄初始化的默認權限。
查看用戶的權限掩碼:
umask //假設輸出為0002。初創(chuàng)文件的最大權限是666,減去掩碼0002,表示初創(chuàng)文件的權限是664。初創(chuàng)目錄的最大權限是777,減去掩碼,則為775
示例:
dyp930@ubuntu:~/work$ touch a.txt dyp930@ubuntu:~/work$ mkdir a dyp930@ubuntu:~/work$ ls -lrt -rw-rw-r-- 1 dyp930 dyp930 0 Jun 28 06:02 a.txt //權限為664 drwxrwxr-x 2 dyp930 dyp930 4096 Jun 28 06:02 a //權限為775
6.3.1、臨時修改默認權限
臨時修改權限掩碼:
命令:umask abc
設置默認掩碼為abc后,如下公式即為文件的初創(chuàng)權限:
備注:對于文件,掩碼abc的實際值為偶數(shù)值,需要向下減1.
① 新創(chuàng)建的文件的權限為:(7-a)(7-b)(7-c) ,如果a/b/c中該位為0,則相減之后的該位仍要減1,即文件的權限最大只能為6
② 新創(chuàng)建的目錄的權限為:(7-a)(7-b)(7-c)
示例:
dyp930@ubuntu:~/work$ umask 005 dyp930@ubuntu:~/work$ umask 0005 dyp930@ubuntu:~/work$ touch b.txt dyp930@ubuntu:~/work$ mkdir b dyp930@ubuntu:~/work$ ls -lrt total 8 -rw-rw--w- 1 dyp930 dyp930 0 Jun 28 06:05 b.txt //權限為662 drwxrwx-w- 2 dyp930 dyp930 4096 Jun 28 06:05 b //權限為772
6.3.2、永久修改默認權限
編輯文件/etc/bashrc,在當前的shell環(huán)境中生效
1、如果用su - user1 來切換用戶,表示換了shell環(huán)境,該配置文件不會生效
2、如果用su user1 來切換用戶,表示沒有換shell環(huán)境,該配置文件會生效
編輯文件/etc/profile,可以在整個系統(tǒng)中生效。
[root@localhost tmp]# vim /etc/bashrc [root@localhost tmp]# vim /etc/profile 兩個文件的內(nèi)容是一樣的 搜索umask,找到如下代碼,不算第一位的特殊權限 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 //表示uid大于等于199的默認umask值,表示普通用戶 else umask 022 //表示uid小于199的默認umask值,表示root fi 修改后需要重新讀取一下/etc/bashrc或/etc/profile [root@lewis ~]# source /etc/profile [root@lewis ~]# source /etc/bashrc
7、df(查看磁盤容量和掛載情況)
df 命令可查看磁盤的使用情況以及文件系統(tǒng)被掛載的位置,僅以K顯示),df -h 以可讀的方式展示(會根據(jù)文件大小以K、M、G直觀顯示)

8、用戶和組
8.1、查看用戶和用戶組
Linux系統(tǒng)一個組可以包含多個用戶成員,反過來,一個用戶也可以隸屬于多個組。
whoami #查看當前登錄用戶名 cat /etc/passwd #可以查看所有用戶的列表 cat /etc/group #查看所有用戶組 groups #查看當前登錄用戶的組內(nèi)成員 groups testuser #查看指定用戶即testuser用戶所在的組以及組內(nèi)成員 id testuser #查看testuser用戶的userid、groupid還有所隸屬的所有組

每一行最前邊的就是用戶名,關于uid:0 表示管理員(root),1 - 500 表示系統(tǒng)用戶,501 - 65535 表示普通用戶
8.1.1、查看用戶的家目錄
#查看當前登錄用戶的家目錄 cd ~ #先切換目錄~ pwd #然后查看當前路徑,即可看到用戶主目錄的位置 #或是使用下面顯示環(huán)境變量命令 echo $HOME #或者是 echo $home
8.2、創(chuàng)建用戶和用戶組
添加指定gid的組:
groupadd -g 1001 upload # 添加了一個指定gid為1001的upload用戶組
添加指定uid的用戶,并加入到指定組
useradd -u 1001 -g upload claim # 添加了一個uid為1001的用戶,并加入到upload的組中
日常運維我們使用useradd命令來創(chuàng)建用戶,常用的命令如下:
- 不加任何參數(shù),僅創(chuàng)建用戶,示例:useradd myuser,此時用戶的家目錄是/home/myuser
- -d 目錄 指定用戶主(家)目錄,如果此目錄不存在,則同時使用-m選項,可以創(chuàng)建主目錄。示例:useradd -d /opt/myuser -m myuser
- -g 用戶組 指定用戶所屬的用戶組。 我們創(chuàng)建用戶的時候會默認創(chuàng)建一個和用戶名相同的用戶組,但是有時有需求需要指定用戶組,可以使用-g命令來完成用戶創(chuàng)建,前提條件是指定的用戶組已存在,示例:useradd -g mygroup myuser
- -u UID:指定 UID,這個 UID 必須是大于等于500,并沒有其他用戶占用的 UID
- -G GROUPS:指定額外組
- -c COMMENT:指定用戶的注釋信息
8.3、刪除用戶和用戶組
刪除用戶使用命令userdel,示例:userdel myuser,使用這個命令的話只會刪除用戶,用戶的主目錄不會被刪除,如果需要刪除用戶的時候也將用戶主目錄刪除則可以使用-r,示例:userdel -r myuser
刪除用戶組使用命令groupdel,示例:groupdel mygroup,注意,被刪除的用戶組不可以是任何用戶的主用戶組,否則刪除失敗。用戶組刪除完成后可以到/etc/group文件中去查看被刪除則用戶組名稱已經(jīng)不存在了。
8.4、修改用戶的信息
Linux修改用戶所在組方法:
#強行設置某個用戶所在組 usermod -g 新的用戶組 用戶名 #把某個用戶改為 group(s) usermod -G 新的用戶組 用戶名 #把用戶添加進入某個組(s) usermod -a -G 用戶組 用戶名
usermod 使用說明:
功能說明:修改用戶帳號。補充說明:usermod可用來修改用戶帳號的各項設定。
語 法:usermod [-LU][-c <備注>][-d <登入目錄>][-e <有效期限>][-f <緩沖天數(shù)>][-g <群組>][-G <群組>][-l <帳號名稱>][-s <shell>][-u <uid>][用戶帳號]
參 數(shù):
- -c<備注> 修改用戶帳號的備注文字。
- -d登入目錄> 修改用戶登入時的目錄。
- -e<有效期限> 修改帳號的有效期限。
- -f<緩沖天數(shù)> 修改在密碼過期后多少天即關閉該帳號。
- -g<群組> 修改用戶所屬的群組。
- -G<群組> 修改用戶所屬的附加群組。
- -l<帳號名稱> 修改用戶帳號名稱。
- -L 鎖定用戶密碼,使密碼無效。
- -s<shell> 修改用戶登入后所使用的shell。
- -u<uid> 修改用戶ID。
- -U 解除密碼鎖定。
9、Linux系統(tǒng)的SSH密鑰
9.1、SSH的基本介紹
什么是SSH:Secure Shell (SSH) 是一個允許兩臺電腦之間通過安全的連接進行數(shù)據(jù)交換的網(wǎng)絡協(xié)議。 通過加密保證了數(shù)據(jù)的保密性和完整性。SSH采用公鑰加密技術來驗證遠程主機,以及(必要時)允許遠程主機驗證用戶。
SSH的好處:1)傳統(tǒng)的FTP、Telnet是再網(wǎng)絡中明文傳送數(shù)據(jù)、用戶帳號和密碼,很容易受到中間人攻擊。而通過使用SSH, 你可以把所有傳輸?shù)臄?shù)據(jù)進行加密,這樣“中間人”這種攻擊方式就不可能實現(xiàn)了, 而且也能夠防止DNS和IP欺騙。 2)第二個好處是:傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,所以可以加快傳輸?shù)乃俣取?/span>
如何實現(xiàn)SSH:SSH利用SSH Key來進行前面提到的基于密鑰的安全驗證。
9.2、SSH KEY的基本介紹
SSH-Key 就是一對密鑰對。【一個是公鑰,一個是私鑰】。公鑰是給別人用的,比如 GitLab服務器。私鑰是給自己用的,比如本地機器。SSH-Key的密鑰類型:有數(shù)字簽名RSA和DSA兩種認證密鑰。
舉個例子:本地想要使用git從gitHub/gitlab上拉取代碼。先給GitHub/GitLab配置公鑰,公鑰就可以作為一個加密的箱子,將代碼放在箱子里。 被本地拉取到后,使用私鑰將加密的箱子打開。就能拿到代碼了。整個過程中,都沒有用戶名/密碼在網(wǎng)絡中傳輸,所以不會給他人攔截到,破解你的數(shù)據(jù)。
所以,SSH-Key的直觀作用,就是【讓你方便的登錄到 SSH 服務器,而無需輸入密碼】
9.2.1、兩臺機器通過 SSH 免密通信
假設 A (192.168.20.59)為客戶機器,B(192.168.20.60)為目標機。要達到的目的:A機器ssh登錄B機器無需輸入密碼。加密方式選 rsa|dsa均可以,默認dsa。
操作過程:
- 登錄A機器
- 生成密鑰:ssh-keygen -t [rsa|dsa]。將會生成公鑰文件和私鑰文件:id_rsa 和 id_rsa.pub 或者是 id_dsa 和 id_dsa.pub
- 將 .pub 公鑰文件復制到 B 機器的 .ssh 目錄,并將公鑰文件內(nèi)的內(nèi)容添加至 ~/.ssh/authorized_keys 文件內(nèi),命令: cat id_dsa.pub >> ~/.ssh/authorized_keys
- 這樣從A機器登錄B機器的目標賬戶就不再需要密碼了,直接運行 ssh 192.168.20.60 來訪問 B 機器
9.3、查看 ssh key
ssh key默認存放在用戶的家目錄下的 .ssh 隱藏目錄下,比如當前登錄用戶的家目錄為 /home/testuser,則 SSH KEY 存放在 /home/testuser/.ssh 目錄下
# 查看是否已經(jīng)存在SSH-Key,實際上就是查看用戶的家目錄下是否存在隱藏目錄 .ssh ls -al ~/.ssh
9.4、新建SSH KEY
如果當前已有 SSH KEY,我們可以先刪除再新建,也可以不用刪除直接覆蓋即可。
# 刪除 ssh key cd ~ rm -rf .ssh # 新生成SSH-key。-C 和后面可以不寫,這里是注釋 ssh-keygen -t rsa -C "demo@qq.com"
如果之前已經(jīng)生成過會提示你是否覆蓋,你可以回車直接覆蓋掉。生成過程會讓你輸入密碼,可以不輸入,直接回車直到生成成功。
生成后,會在用戶的家目錄下生成一個.ssh隱藏目錄,目錄中會有【id_rsa】和【id_rsa.pub】兩個文件,id_rsa 是私鑰,id_rsa.pub 是公鑰。
9.5、查看生成的密鑰
#查看公鑰。一般來說會把公鑰提供給第三方使用 cat ~/.ssh/id_rsa.pub #查看私鑰 cat ~/.ssh/id_rsa

浙公網(wǎng)安備 33010602011771號