1. 程式人生 > 實用技巧 >Linux 日常操作

Linux 日常操作

背景

質量團隊 Linux 日常操作培訓,提升團隊整體 Linux 水平。

注: 以下所有命令都是在 Centos 作業系統來進行演示。

幫助命令及工具

詳見: Linux 幫助命令及工具

使用者和使用者組

命令 說明
useradd 建立一個新使用者或更新預設新使用者資訊
usermod 修改一個使用者賬戶
userdel 刪除使用者賬戶和相關檔案
passwd 修改使用者密碼
chage 更改使用者密碼過期資訊
id 顯示真實和有效的 UID 和 GID
su 切換使用者
sudo 以系統管理者身份執行指令
w 顯示已經登入的使用者以及他們在做什麼
who 顯示已經登入的使用者
who am i 顯示實際使用者
whoami 顯示有效使用者
groupadd 建立一個新組
groupmod 修改組資訊
groupdel 刪除一個組
gpasswd 將使用者加入或刪除組
newgrp 切換使用者組
newusers 批量更新和建立新使用者
chpasswd 批量更新密碼

使用者和組常用命令

# 建立組
$ groupadd daodaotest2

# 修改組名
$ groupmod -n daodaotest daodaotest2

# 建立使用者
$ useradd daodaotest
# 指定引數建立使用者,-u uid;-g 使用者組名;-G 附加組;-d 主目錄;-c 使用者描述;-s shell 
$ useradd -u 550 -g daodaotest -G root -d /home/daodaotest -c "test user" -s /bin/bash daodaotest

# 修改使用者資訊
$ usermod -c "update test user" daodaotest 

# 檢視使用者和組資訊
$ id daodaotest
uid=550(daodaotest) gid=1009(daodaotest) 組=1009(daodaotest),0(root)

# 設定使用者密碼
$ passwd daodaotest

# 檢視使用者密碼
$ passwd -S daodaotest
或
$ chage -l daodaotest

# 僅切換使用者
$ su daodaotest

# 切換使用者,並同時切換環境變數
$ su - daodaotest

# 以 root 身份安裝軟體
$ sudo yum install jq -y

# 檢視當前有效使用者
$ whoami

# 檢視當前實際使用者
$ who am i

# 退出
$ exit

# 刪除使用者,強制刪除並刪除與使用者的相關檔案(home、郵件等)
$ userdel -rf daodaotest

# 刪除組
$ groupdel daodaotest

使用者和組相關檔案

# Linux 使用者檔案:
$ cat /etc/passwd
# 使用者名稱:口令:使用者標識號:組標識號:註釋性描述:主目錄:預設 Shell
pe:x:1001:1001::/home/pe:/bin/bash

# Linux 使用者影子檔案
$ cat /etc/shadow
# 使用者名稱:加密密碼:最後一次修改時間:最小修改時間間隔:密碼有效期:密碼需要變更前的警告天數:密碼過期後的寬限時間:賬號失效時間:保留欄位
pe:$6$rounds=656000$qX8tIa/2E34tao1V$6xKEJc9pGhY/lqLFKPuzqt0Kd8nROPy3RdGS4a7HyCN.upgPfYZ.eF453P6.Y4u0GifVui8KdMPW4NdjhW1cn0:18239:0:99999:7:::

# Linux 使用者組檔案
$ cat /etc/group
# 組名:口令:組標識號:組使用者列表
pe:x:1001:peftp,ruiftp,hx

# Linux 組影子檔案
$ cat /etc/gshadow
# 組名:加密密碼:組管理員:組附加使用者列表
pe:!::peftp,ruiftp,hx

檔案和目錄

檔案型別

檔案型別 說明
b 面向塊的裝置檔案(block-oriented device file)
c 面向字元的裝置檔案(charcter-oriented device file)
d 目錄(directroy)
f 檔案(regular file)
l 符號連結檔案(symbolic link)
p 管道檔案(pipe)或命名管道檔案(named pipe)

命令列表

命令 說明
ls 列目錄內容
cd 改變工作目錄
pwd 返回當前的工作目錄
mkdir 建立目錄
rmdir 刪除目錄
touch 建立新檔案、修改檔案許可權和時間屬性
file 檢視檔案型別
cp 複製檔案和目錄
md5sum 獲取 md5 值
diff 比較檔案
mv 移動 (改名) 檔案
rm 移除檔案或者目錄
tree 樹狀圖列出目錄
cat 從第一行開始檢視文字內容
tac 與 cat 相反,從最後一行開始檢視文字內容
more 按頁顯示文字內容
less 與 more 類似,功能跟搶到,提供翻頁、跳轉、查詢等命令
nl 新增行號顯示出內容
head 檢視檔案的前面 N 行,預設為 10 行
tail 檢視檔案的後面 N 行,預設為 10 行
wc 統計行
cut 擷取文字
split 切割檔案

檔案和目錄常用命令

# 長資料格式列出所有目錄,並按時間排序
$ ls -lat

# 長資料格式列出所有目錄,並按時間反序排序
$ ls -lart

# 長資料格式列出所有目錄,並按大小反序排序
$ ls -larS

# 進入 home 目錄
$ cd ~
或
$ cd 

# 進入上一次工作目錄
$ cd -

# 進入上層目錄
$ cd ..

# 顯示當前目錄 
$ pwd

# 檢視軟連結的實際路徑
$ pwd -P

# 遞迴建立目錄
$ mkdir -p daodaotest/test

# 遞迴刪除目錄
$ rmdir -p daodaotest/test

# 建立文字
$ touch 1.txt

# 檢視檔案型別
$ file 1.txt

# 複製檔案
$ cp 1.txt 2.txt

# 檢視檔案 md5
$ md5sum 1.txt 2.txt

# 比較文字
$ diff 1.txt 2.txt

# 遞迴複製目錄
$ cp -r daodaotest daodaotest2

# 修改檔名稱
$ mv daodaotest2 daodaotest22

# 移動檔案或目錄
$ mv 2.txt daodaotest22

# 刪除檔案
$ rm 2.txt

# 強制遞迴刪除 
$ rm -rf daodaotest

# 顯示樹狀目錄和檔案
$ tree .

# 僅顯示樹狀目錄
$ tree -d .

# 顯示指定層級目錄和問題
$ tree -L 2 .

# 檢視文字內容
$ cat /etc/passwd
$ more /etc/passwd
$ less /etc/passwd
$ nl /etc/passwd
# 與 cat 相反,從最後一行開始檢視文字內容
$ tac /etc/passwd 
 
# 統計行數
$ ls -l | wc -l
$ cat /etc/passwd | wc -l

# 檢視前幾行
$ head -5 /etc/passwd

# 動態檢視文字內容
$ tail -f /var/log/messages

顯示部分行內容

詳見:Linux 列印文字部分行內容(前幾行,指定行,中間幾行,跨行,奇偶行,後幾行,最後一行,匹配行)

查詢

命令 說明
which PATH 路徑中查詢命令位置
whereis 程式名查詢,只搜尋二進位制(-b),man 檔案(-m),原始碼檔案(-s),預設返回所有
locate 從資料庫中 /var/lib/mlocate/mlocate.db 查詢檔案,預設
find 從磁碟中查詢檔案
grep 查詢檔案中符合條件的字串

查詢常用命令

# 操作 grep 命令
$ which grep
alias grep='grep --color=auto'
	/usr/bin/grep
$ whereis grep
grep: /usr/bin/grep /usr/share/man/man1/grep.1.gz /usr/share/man/man1p/grep.1p.gz
$ locate /bin/grep
/usr/bin/grep

# 查詢所有 .sh 結尾的檔案
$ find . -name "*.sh"

# 查詢當前路徑下的所有目錄
$ find . -type d

# 查詢當前路徑下的所有檔案
$ find . -type f

# 查詢當前路徑下的所有檔案,並列出來
$ find . -type f -exec ls -l {} \

# 查詢7天前的以 .log 結果的檔案,確認之後刪除
$ find . -name "*.log" -mtime +7 -ok rm {} \;

# 查詢關鍵字
$ grep root /etc/passwd

# 正則表示式查詢
$ grep "/.*sh" /etc/passwd

# 遞迴(-r) 查詢目錄下的所有檔案
$ grep -r LANG /etc

# 遞迴(-r) 查詢目錄下的所有檔案,排除指定目錄和檔案
$  grep -r --exclude-dir={yum,ssh,profile.d,rc.d,ansible} --exclude=*.conf LANG /etc

# 查詢關鍵字,並列印前(-B),後(-A),前後(-C)各多少行
$ grep root -C 1 /etc/passwd

# 不區分大小寫(-i)查詢關鍵字,並列印行號(-n)
$ grep -i ROOT -n /etc/passwd

# 反向選擇,輸出沒有匹配的行
$ grep -v root /etc/passwd

許可權

許可權碼

許可權 二進位制 八進位制 描述
--- 000 0 無許可權
--x 001 1 只有執行許可權
-w- 010 2 只有寫入許可權
-wx 011 3 寫和執行許可權
r-- 100 4 讀許可權
r-x 101 5 讀取和執行的許可權
rw- 110 6 讀取的寫入的許可權
rwx 111 7 所有許可權

常見許可權表

許可權 說明
-rw------- (600) 只有擁有者有讀寫許可權
-rw-r--r-- (644) 只有擁有者有讀寫許可權;而屬組使用者和其他使用者只有讀許可權
-rwx------ (700) 只有擁有者有讀、寫、執行許可權
-rwxr-xr-x (755) 擁有者有讀、寫、執行許可權;而屬組使用者和其他使用者只有讀、執行許可權
-rwx--x--x (711) 擁有者有讀、寫、執行許可權;而屬組使用者和其他使用者只有執行許可權
-rw-rw-rw- (666) 所有使用者都有檔案讀、寫許可權
-rwxrwxrwx (777) 所有使用者都有讀、寫、執行許可權

命令列表

命令 說明
chmod 修改檔案許可權
chown 更改檔案屬主,也可以同時更改檔案屬組
chgrp 更改檔案屬組
umask 許可權掩碼

umask

詳見:linux知識點系列之 umask

許可權常用命令

# 修改檔案許可權
$ chmod 755 test.txt
$ chmod +rw test.txt

# 修改檔案許可權,遞迴(-R)修改
$ chmod -R 755 /tmp/daodaotest

# 修改檔案屬主使用者和屬組
$ chown jlh.jlh test.txt

# 修改檔案屬組使用者
$ chgrp jlh test.txt

程序

命令 說明
top 顯示當前系統正在執行的程序的相關資訊
ps 檢視程序瞬時狀態
kill 殺死程序
killall 殺死指定名稱的所有程序
# 顯示當前程序情況,輸入 h 檢視幫助
$ top

# 檢視 java 程序
$ ps -ef | grep java

# 強制 kill 掉程序
$ kill -9  <pid>

# kill 所有程序
$ killall -9 php-fpm

Linux 查詢應用程序號、埠、檔案(知道其中之一查詢其他)

詳見: Linux 查詢應用程序號、埠、檔案(知道其中之一查詢其他)

壓縮解壓

Linux 常見的壓縮包格式:tar、gz、tar.gz、bz2、tar.bz2、zip

壓縮率一般來說:

tar.bz2 > tar.gz > zip > tar
命令 說明
tar tar、tar.gz 壓縮解壓
zip zip 壓縮
unzip zip 解壓
gzip gz 壓縮
gunzip gz 解壓

tar

tar 是最常用的解壓縮命令。

引數說明:

-c 建立新的壓縮檔案
-r 新增檔案到已經壓縮的檔案
-u 新增改變了和現有的檔案到已經存在的壓縮檔案
-x 從壓縮的檔案中提取檔案
-t 顯示壓縮檔案的內容
-z 支援gzip解壓檔案
-j 支援bzip2解壓檔案
-v 顯示操作過程
-k 保留原始檔不覆蓋
-C 切換到指定目錄
-f 指定壓縮檔案

--delete            刪除包中檔案
--strip-components  去除目錄
--add-file          向包中新增檔案
# 歸檔 tar 包,不壓縮
$ tar -cvf test.tar test1.log test2.log
$ tar -

# 僅檢視包中檔案,不解壓
$ tar -tvf test.tar

# 歸檔並壓縮為 tar.gz、tar.bz2
$ tar -zcvf test.tar.gz test1.log test2.log
$ tar -jcvf test.tar.bz2 test1.log test2.log

# 解壓
$ tar -xvf test.tar
$ tar -zxvf test.tar.gz
$ tar -jxvf test.tar.bz2

# 解壓到指定目錄
$ tar -xvf test.tar -C dir

zip & unzip

引數說明:

# zip
-d 從壓縮檔案內刪除指定的檔案。
-f 此引數的效果和指定"-u"引數類似,但不僅更新既有檔案,如果某些檔案原本不存在於壓縮檔案內,使用本引數會一併將其加入壓縮檔案中。
-j 只儲存檔名稱及其內容,而不存放任何目錄名稱。
-r 遞迴處理,將指定目錄下的所有檔案和子目錄一併處理。
-u 更換較新的檔案到壓縮檔案內。
-v 顯示指令執行過程或顯示版本資訊。
-y 直接儲存符號連線,而非該連線所指向的檔案,本引數僅在UNIX之類的系統下有效。
- <壓縮效率> 壓縮效率是一個介於1-9的數值。

# unzip
-l 顯示壓縮檔案內所包含的檔案
-j 只儲存檔名稱及其內容,而不存放任何目錄名稱。
-o 以壓縮檔案內擁有最新更改時間的檔案為準,將壓縮檔案的更改時間設成和該
-v 顯示指令執行過程或顯示版本資訊。
-d 指定解壓目錄,目錄不存在會建立
# 打包 test 目錄下的檔案
$ zip -r test.zip test/ 

# 打包 test 目錄下檔案,且壓縮包不帶 test 目錄
$ zip -rj test.zip test/

# 指定壓縮比率,數值(1-9)越大,壓縮率越高,耗時越長
$ zip -r8 test.zip test/* 

# 解壓 zip 包
$ unzip test.zip -d dir

# 檢視壓縮包中的檔案
$ unzip -l test.zip 

# 檢視更多資訊,例如crc校驗資訊等
$ unzip -v test.zip 

# 解壓jar包
$ unzip -o java.jar -d dir

gzip & unzip

引數說明:

-k 保留原始檔
-d 解開壓縮檔案
-r 遞迴處理,將指定目錄下的所有檔案及子目錄一併處理
-v 顯示指令執行過程
# 壓縮
$ gzip test1.log

# 解壓
$ gunzip test1.log

磁碟

命令 說明
df 報告檔案系統磁碟空間的使用情況
du 報告磁碟空間使用情況
fdisk Linux分割槽表操作工具軟體

磁碟常用命令

# 檢視磁碟使用情況,易讀方式
$ df -h

# 檢視 inode 使用情況
$ df -i

# 檢視磁碟佔用空間,易讀方式
$ du -h

# 檢視本目錄磁碟佔用總大小
$ du -sh

# 檢視指定層級目錄的大小
$ du -h --max-depth=2 .
$ du -h -d 2 .

# 檢視系統硬碟
$ fdisk -l

json 解析命令 jq

詳見: linux 下強大的 JSON 解析命令 jq

微信公眾號:daodaotest