Linux常用命令歸類總結
檔案相關
建立檔案
- touch:
touch README.md
- ">"重定向:
echo 'study and share' > README.md
- vi && vim:
vim README.md
, vim是vi的升級版,直接用它吧,有些系統裝好後只有vi,這裡提一下。
刪除檔案
刪除檔案
rm README.md
,如果是多個檔案你就往後面補檔名。自信地強制刪除:
rm -rf README.md
, 資料無價,慎用。
linux最佳文字編輯器vim
# vim file: 有則開啟檔案,沒則建立檔案
# 三種模式: 插入模式(按i進入,或者o下一行)、可視模式(CTRL + V)、命令模式(預設)
# 關於儲存: :q 退出、 :q! 退出不儲存、 :wq 退出並儲存
資料夾的相關操作
建立資料夾:
mkdir app
-p
建立多層巢狀資料夾,例子mkdir -p a/b/c
刪除資料夾:
rmdir app
, 多層巢狀的話rm -rf app
檢視資料夾相關資訊:
ls app
-a
: 列舉所有檔案(包含隱藏的)-l
列表形式展示
檢視資料夾樹結構:
tree app
[email protected] ? ~/linux ? mkdir -p a/b/c/d/e/f/g/h
[email protected] ? ~/linux ? tree a
a
`-- b
`-- c
`-- d
`-- e
`-- f
`-- h 7 directories, 0 files
[email protected] ? ~/linux ?
進入資料夾:
cd app
,.
表示當前目錄,那麼返回上一級就是cd ..
複製、修改、移動、檔案(夾)
- 複製檔案(夾):
cp file1 file2
-r
: 複製巢狀資料夾,例如cp -r a b
, 其中a的結構是a/b/c
,即多層時。
- 修改和移動:
mv app ppa
, mv這個命令承載了重新命名檔案(夾)和拷貝的重任。
硬連結和軟連結
- 硬連結:
ln ataola zjt
- 軟連結:
ln -s ataola zjt
, 相當與快捷方式,不佔空間
壓縮與解壓縮
tar
- 將ataola檔案壓縮稱ataola.tar.gz:
tar -czvf ataola.tar.gz ataola
- 將ataola.tar.gz檔案解壓縮到當前目錄:
tar -zxvf ataola.tar.gz
- -c 建立
- -z gzip壓縮
- -v顯示細節
- -f 檔案
- -x 解壓縮
zip
- 壓縮:
zip ataola.zip ataola
- 解壓:
unzip ataola.zip ataola
- 加密壓縮:
zip -re ataola.zip ataola
網路相關
檢視網路資訊
- 檢視本機網路資訊:
ip addr
- 檢視本機網路資訊:
ifconfig
網路通訊
- 檢測與外界通訊是否正常:
ping xxx
, 例如:ping zhengjiangtao.cn
- 檢視本機相關埠暴露情況:
netstat
, 推薦使用netstat -tlunp
,顯示正在監聽的tcp和udp資訊,清爽一點。-u (udp)
: 僅顯示udp相關選項-n
: 顯示全名。-l
: 僅列出有在 Listen 的服務狀態-p
: 顯示建立相關連結的程式名
- 檢視TCP UDP相關服務
lsof -i
防火牆
安裝:
yum install iptables iptables-services -y
開啟:
service iptables start
關閉:
service iptables stop
儲存:
service iptables save
檢視狀態:
service iptables status
開啟某個埠(80為例):
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
,iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT
關閉某個埠(80為例):
iptables -I INPUT -p tcp --dport 80 -j DROP
,iptables -I OUTPUT -p tcp --sport 80 -j DROP
-I
: 將在指定鏈的指定編號位置插入一個規則-F
:清除預設的所有規則-A
: 將一個規則新增到鏈末尾-p tcp
: 指定協議為tcp-s
: 指定源地址或地址段-j ACCEPT
: 允許-j DROP
: 拒絕-d
: 指定目標地址或地址段-m limit
: 限制單位時間訪問頻率--dport port
: 指定目標TCP/IP埠, 如 –dport 80--sport port
: 指定來源TCP/IP埠, 如 –dport 80-L -n
: 檢視防火牆配置資訊-L -n --line-number
: 顯示規則和相應編號-t nat -L
: 列出所有NAT鏈中所有規則INPUT
: 處理資料輸入包OUTPUT
: 處理資料輸出包
✘ [email protected] ~/tmp iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80
[email protected] ~/tmp
- 遮蔽某IP: 例如:
ptables -A INPUT -p tcp -m tcp -s 218.109.192.109 -j DROP
- 阻止window蠕蟲攻擊:
iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"
- 防止SYN洪水攻擊:
iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT
使用者相關
組
- 組資訊存放位置:
/etc/group
, 格式:使用者組名:密碼:使用者組ID:組內使用者名稱
- 新增使用者組:
groupadd usergroup
-g
: 自定義組ID, 例如groupadd -g 613 sanguo
- 修改使用者組:
groupmod usergroup
-g
: 修改使用者組ID-n
: 修改使用者組名
- 刪除使用者組:
groupdel usergroup
使用者
使用者資訊存放位置:
/etc/password
,格式:使用者名稱:密碼:使用者ID:使用者組ID:註釋:家目錄:直譯器shell
使用者密碼存放位置:
/etc/shadow
新增使用者:
useradd user
-m
: 自動建立家目錄-g
: 指定使用者主組-G
: 指定使用者附加組-u
: 指定使用者預設uid-c
: 新增註釋-s
: 指定登入後的shell-d
: 指定使用者登入時的啟動目錄-n
: 取消建立使用者同名稱組修改使用者密碼:
passwd user
, root使用者可以重置其他使用者密碼[[email protected] nginx]$ passwd caocao
passwd: Only root can specify a user name.
[[email protected] nginx]$ passwd
Changing password for user caocao.
Changing password for caocao.
(current) UNIX password:
New password:
Retype new password:
Sorry, passwords do not match.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[[email protected] nginx]$
-l
: 鎖定口令,即禁用賬號。-u
: 口令解鎖。-d
: 使賬號無口令。-f
: 強迫使用者下次登入時修改口令
我們來實踐下,在三國組下建立使用者曹操,指定使用者uid為1997,登入的shell為
/bin/bash
[email protected] ~/tmp useradd -m -g sanguo -s /bin/bash -u 1997 caocao
[email protected] ~/tmp cat /etc/passwd | grep caocao
caocao:x:1997:613::/home/caocao:/bin/bash
[email protected] ~/tmp
刪除使用者:
userdel user
-r
: 連家目錄一起刪除
切換使用者:
su user
✘ [email protected] ~/docker/nginx su caocao
[[email protected] nginx]$ pwd
/root/docker/nginx
[[email protected] nginx]$
許可權問題
這個地方我糾結了一下,到底時放在檔案相關還是使用者相關講,最後我選擇這裡。對於使用者而言,其操作一個檔案,有可讀可寫可執行否這麼多種可能對吧,那麼我們接下來討論下。
對於一個檔案而言,其與使用者的關係,不外乎所有者(建立者)、組內成員、其他組或者使用者,這裡root使用者時linux最高許可權的使用者,簡言之,沒有它幹不了的事。
u | g | o | a |
---|---|---|---|
所有者 | 同組使用者 | 其他組 | 所有 |
字母表示
我們來看這樣一個例子
[email protected] ~ ls -l /home/caocao
total 4
-rw-r--r-- 1 caocao sanguo 0 Jul 18 18:16 a
drwxr-xr-x 3 caocao sanguo 4096 Jul 18 18:17 b
[email protected] ~
單獨把b前面的這一坨東西拎出來講:drwxr-xr-x
,
- 第一個字母
d
,表示它是一個資料夾,而a第一個字母是-
,表示它是一個檔案 - 第一組
rwx
, 表示其建立者caocao擁有可讀可寫可執行的許可權 - 第二組
r-x
: 表示其所在sanguo組其他使用者有可讀可執行的許可權 - 第三組
r-x
: 表示其他組或者使用者有可讀可執行的許可權
實踐一下
對於a檔案給同組使用者增加可寫可執行許可權,
chmod g+wx a
[[email protected] ~]$ ls -l
total 4
-rwxr--r-- 1 caocao sanguo 0 Jul 18 18:16 a
drwxr-xr-x 3 caocao sanguo 4096 Jul 18 18:17 b
[[email protected] ~]$ chmod g+wx a
[[email protected] ~]$ ls -l
total 4
-rwxrwxr-- 1 caocao sanguo 0 Jul 18 18:16 a
drwxr-xr-x 3 caocao sanguo 4096 Jul 18 18:17 b
[[email protected] ~]$
之後曹操有點小情緒,決定移除同組的可執許可權
chmod u-x a
[[email protected] ~]$ chmod g-x a
[[email protected] ~]$ ls -l
total 4
-rwxrw-r-- 1 caocao sanguo 0 Jul 18 18:16 a
drwxr-xr-x 3 caocao sanguo 4096 Jul 18 18:17 b
[[email protected] ~]$
再之後,曹操他瘋了,他決定移除自己的可寫可執行許可權
chmod u-wx a
[[email protected] ~]$ chmod u-wx a
[[email protected] ~]$ ls -l
total 4
-r--rw-r-- 1 caocao sanguo 0 Jul 18 18:16 a
drwxr-xr-x 3 caocao sanguo 4096 Jul 18 18:17 b
[[email protected] ~]$
數字表示
除了樓上的字母表示,也是可以用數字進行相關許可權設定
字母與數字的對應關係如下:
r | w | x |
---|---|---|
4 | 2 | 1 |
那我們接著實踐。
曹操後來又自己給自己治好了,決定收回撤銷的a檔案的可寫可執行的許可權,並設定其他人都只可讀
chmod 744 a
[[email protected] ~]$ chmod 744 a
[[email protected] ~]$ ls -l
total 4
-rwxr--r-- 1 caocao sanguo 0 Jul 18 18:16 a
drwxr-xr-x 3 caocao sanguo 4096 Jul 18 18:17 b
[[email protected] ~]$
這裡的744, 第一個代表所有者,4 + 2 + 1 = 7。 第二個代表所屬組 ,第三個代表其他選手。
更改檔案使用者組
這裡我們建立一個魏國的group,然後將曹操家目錄下的b資料夾歸屬與魏國這個組chgrp weiguo b
, 這裡如果加個引數-R
的話,其內部的所有檔案都會跟著變成魏國這個組,而不是三國,執行這個命令的是root使用者。
[email protected] /home/caocao ls -l
total 4
-rwxr--r-- 1 caocao sanguo 0 Jul 18 18:16 a
drwxr-xr-x 3 caocao sanguo 4096 Jul 18 18:17 b
[email protected] /home/caocao chgrp weiguo b
[email protected] /home/caocao ls -l
total 4
-rwxr--r-- 1 caocao sanguo 0 Jul 18 18:16 a
drwxr-xr-x 3 caocao weiguo 4096 Jul 18 18:17 b
[email protected] /home/caocao
更改檔案所屬使用者
之後root使用者,決定幹掉曹操,自己掌管b檔案,那麼可以這麼做chown root b
, 相關引數同樓上的chgrp
[email protected] /home/caocao chown root b
[email protected] /home/caocao ls -l
total 4
-rwxr--r-- 1 caocao sanguo 0 Jul 18 18:16 a
drwxr-xr-x 3 root weiguo 4096 Jul 18 18:17 b
[email protected] /home/caocao ls -l b
total 4
drwxr-xr-x 2 caocao sanguo 4096 Jul 18 18:17 c
[email protected] /home/caocao
root使用者想了想,狠人做到底,回收了其他人的可讀可執行許可權chmod o-rx b
[email protected] /home/caocao chmod o-rx b
[email protected] /home/caocao ls -l
total 4
-rwxr--r-- 1 caocao sanguo 0 Jul 18 18:16 a
drwxr-x--- 3 root weiguo 4096 Jul 18 18:17 b
[email protected] /home/caocao
此時曹操登入後想進入b目錄,哈哈,是不可能的了。
[[email protected] ~]$ cd b
bash: cd: b: Permission denied
[[email protected] ~]$ ls -l
total 4
-rwxr--r-- 1 caocao sanguo 0 Jul 18 18:16 a
drwxr-x--- 3 root weiguo 4096 Jul 18 18:17 b
[[email protected] ~]$
程式相關
檢視程式(ps)
- a 顯示所有程式
- -a 顯示同一終端下的所有程式
- -A 顯示所有程式
- c 顯示程式的真實名稱
- -N 反向選擇
- -e 等於“-A”
- e 顯示環境變數
- f 顯示程式間的關係
- -H 顯示樹狀結構
- r 顯示當前終端的程式
- T 顯示當前終端的所有程式
- u 指定使用者的所有程式
- -au 顯示較詳細的資訊
- -aux 顯示所有包含其他使用者的行程
- -C<命令> 列出指定命令的狀況
- –lines<行數> 每頁顯示的行數
- –width<字元數> 每頁顯示的字元數
- –help 顯示幫助資訊
- –version 顯示版本顯示
例如說我要檢視docker的相關資訊,你可以這樣寫ps -aux | grep docker | tail
, 因為資料量很大,tail就是隻看檔案尾部。
[[email protected] ~]$ ps -aux | grep docker | tail
root 16970 0.0 0.0 264800 428 ? Sl May31 0:03 /usr/bin/docker-containerd-shim-current 0e4ef69c19b981163067ec8af0c38b6fa84c380855c22309a884f0a0ed691912 /var/run/docker/libcontainerd/0e4ef69c19b981163067ec8af0c38b6fa84c380855c22309a884f0a0ed691912 /usr/libexec/docker/docker-runc-current
root 19417 0.0 0.0 188476 1636 ? Sl May31 0:04 /usr/libexec/docker/docker-proxy-current -proto tcp -host-ip 0.0.0.0 -host-port 3307 -container-ip 172.19.0.3 -container-port 3306
root 19422 0.0 0.0 272996 488 ? Sl May31 0:04 /usr/bin/docker-containerd-shim-current 6de60216270a3b6f5bfbe5d94d40fa2449e443eb77b67d4bf005061dd4ff412e /var/run/docker/libcontainerd/6de60216270a3b6f5bfbe5d94d40fa2449e443eb77b67d4bf005061dd4ff412e /usr/libexec/docker/docker-runc-current
root 22621 0.0 0.1 111092 2000 ? Sl Jul14 0:00 /usr/libexec/docker/docker-proxy-current -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.18.0.3 -container-port 80
root 22626 0.0 0.0 272996 1732 ? Sl Jul14 0:00 /usr/bin/docker-containerd-shim-current 52fca7d70916037e865da9ad1dfbf330e39be4a1a72c3a05ba1d862dff8cb563 /var/run/docker/libcontainerd/52fca7d70916037e865da9ad1dfbf330e39be4a1a72c3a05ba1d862dff8cb563 /usr/libexec/docker/docker-runc-current
root 29722 0.0 0.0 110036 1108 ? Sl May30 0:03 /usr/libexec/docker/docker-proxy-current -proto tcp -host-ip 0.0.0.0 -host-port 6379 -container-ip 172.20.0.2 -container-port 6379
root 29727 0.0 0.0 264800 340 ? Sl May30 0:03 /usr/bin/docker-containerd-shim-current 5c8daf272042ad0396924e6cd1f3d936e4c5f0280401861983316707c5ab9e75 /var/run/docker/libcontainerd/5c8daf272042ad0396924e6cd1f3d936e4c5f0280401861983316707c5ab9e75 /usr/libexec/docker/docker-runc-current
root 30185 0.0 0.0 264800 324 ? Sl May30 0:03 /usr/bin/docker-containerd-shim-current 5c8daf272042ad0396924e6cd1f3d936e4c5f0280401861983316707c5ab9e75 /var/run/docker/libcontainerd/5c8daf272042ad0396924e6cd1f3d936e4c5f0280401861983316707c5ab9e75 /usr/libexec/docker/docker-runc-current
root 30607 0.2 1.4 763120 26556 ? Ssl May30 186:57 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json --selinux-enabled --log-driver=journald --signature-verification=false --storage-driver overlay2
root 30612 0.0 0.2 501356 4432 ? Ssl May30 41:51 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc --runtime-args --systemd-cgroup=true
[[email protected] ~]$
當然啦,根據上面的命令引數,你也可以ps -ef | grep mysql
,打出mysql的相關資訊
[[email protected] ~]$ ps -ef | grep mysql
1001 3471 3455 0 May30 ? 03:38:23 mysqld --wsrep_start_position=52a382bb-a27b-11ea-867f-c364b5a6fb0a:18
caocao 5928 16797 0 19:05 pts/0 00:00:00 grep --color=auto mysql
1001 6247 6231 0 May30 ? 03:38:57 mysqld
1001 7553 7537 0 May30 ? 03:38:59 mysqld
1001 8697 8679 0 May30 ? 03:38:07 mysqld
1001 19439 19422 0 May31 ? 03:33:23 mysqld --wsrep_start_position=52a382bb-a27b-11ea-867f-c364b5a6fb0a:23
[[email protected] ~]$
殺掉程式(kill)
根據檢視程式得到的最前面的pid,殺掉一個程式是kill xxx
, 例如殺掉mysqld的pid為1001的程式kill 1001
, 可能運氣不好會有殺不掉的情況,kill -9 xxx
,強制殺掉,慎用。
記憶體CPU和硬碟相關
記憶體
粗略
free
[[email protected] ~]$ free
total used free shared buff/cache available
Mem: 1882192 454268 69256 2212 1358668 1238236
Swap: 4194300 1242368 2951932
[[email protected] ~]$
詳細
/proc/meminfo
這個檔案裡面,太長了,這裡就顯示最後十行意思下[[email protected] ~]$ tail -10 /proc/meminfo
AnonHugePages: 4096 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 88056 kB
DirectMap2M: 2009088 kB
[[email protected] ~]$
CPU
檢視cpu詳細資訊:
cat /proc/cpuinfo
[[email protected] ~]$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) CPU E5-26xx v4
stepping : 1
microcode : 0x1
cpu MHz : 2394.454
cache size : 4096 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch bmi1 avx2 bmi2 rdseed adx xsaveopt
bogomips : 4788.90
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management: [[email protected] ~]$
硬碟
檢視硬碟使用情況df
[[email protected] ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 930176 0 930176 0% /dev
tmpfs 941096 24 941072 1% /dev/shm
tmpfs 941096 2224 938872 1% /run
tmpfs 941096 0 941096 0% /sys/fs/cgroup
/dev/vda1 51473868 14918560 34358064 31% /
tmpfs 188220 0 188220 0% /run/user/0
[[email protected] ~]$
綜合檢視(vmstat)
[[email protected] ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 1242368 85884 103628 1240960 0 0 13 42 5 6 2 3 95 0 0
[[email protected] ~]$
實時檢視(top)
top - 19:16:16 up 52 days, 18:17, 3 users, load average: 0.58, 0.23, 0.25
Tasks: 149 total, 1 running, 148 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.0 us, 3.0 sy, 0.0 ni, 93.6 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 1882192 total, 82052 free, 454844 used, 1345296 buff/cache
KiB Swap: 4194300 total, 2951932 free, 1242368 used. 1237660 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6247 1001 20 0 1385620 37224 1844 S 0.7 2.0 218:59.15 mysqld
7553 1001 20 0 1385644 38936 1860 S 0.7 2.1 219:01.83 mysqld
16104 polkitd 20 0 1583856 72124 4756 S 0.7 3.8 28:45.69 mongod
3471 1001 20 0 1414336 28812 2684 S 0.3 1.5 218:25.69 mysqld
7924 root 20 0 35632 3088 720 S 0.3 0.2 116:41.86 redis-server
8249 root 20 0 33464 2096 748 S 0.3 0.1 113:38.97 redis-server
8631 root 20 0 33464 1616 708 S 0.3 0.1 111:53.89 redis-server
10370 root 20 0 160080 8448 1384 S 0.3 0.4 60:37.62 barad_agent
10371 root 20 0 677032 8004 1492 S 0.3 0.4 344:28.10 barad_agent
19439 1001 20 0 1394932 22712 2656 S 0.3 1.2 213:25.65 mysqld
環境變數相關
臨時
直接命令列裡敲export xxx
, 例如
[[email protected] ~]$ export NODE_ENV=production
[[email protected] ~]$ echo $NODE_ENV
production
[[email protected] ~]$
set
和unset
也是可以的。
永久
/etc/profile
: 對所有使用者生效.bashrc | .zshrc | .bash.profile
: 對當前使用者生效
問題思考
如果我把一個組刪了,但是這個組裡面有使用者,是不是意味著他們將成為殭屍使用者?
怎麼可能。。。它會提示你先清使用者,有使用者就刪不掉
[email protected] /home/caocao groupdel sanguo
groupdel: cannot remove the primary group of user 'caocao'
✘ [email protected] /home/caocao ls /
建立使用者不指定組,預設行為是什麼?
如果不指定,預設建立一個和使用者相同名字的組
使用useradd 命令,使用者有哪些可以解析器shell(-s 後面可以跟哪些選擇)?
/bin/zsh
/bin/bash
/sbin/nologin
這裡/sbin/nologin
就是不讓其登入,沒有登入許可權
參考文獻
iptables命令:https://wangchujiang.com/linux-command/c/iptables.html
ps 程式檢視器: https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/ps.html
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。