- 前言
- alias / unalias 命令別名
- cd 切換目錄
- cp 復制文件或目錄
- cat 查看文件內容
- chage 設置密碼有效期
- chown 更改文件所屬
- chmod 設置文件rwx權限
- chattr / lsattr 隱藏屬性
- crontab 定時任務
- df 磁盤使用情況
- date 系統時間 / hwclock 硬件時鍾
- diff 文件比較
- echo 標准輸出
- find / locate 文件搜索
- free 查看內存使用
- head 查看文件前面的內容
- history 命令歷史
- ip 網絡配置管理
- kill 結束進程
- ln 創建鏈接(快捷方式)
- ls 查看目錄中的內容
- less 分頁查看文件
- mv 剪切 / 重命名 文件或目錄
- mkdir 創建目錄
- ps 查看進程
- pwd 顯示當前目錄
- passwd 修改密碼
- rm 刪除文件或目錄
- su 切換用戶
- stat 查看文件詳細信息
- sort 排序 / uniq 去重
- split 分割文件
- tar 打包
- top 動態查看進程
- tail 查看文件末尾內容
- touch 修改文件的時間屬性或創建空文件
- useradd / groupadd 用戶和組管理
- vi / vim 文本編輯器
- wc 統計字數行數
- xargs 參數傳遞
- yum 紅帽系列包管理工具
- zip / unzip 壓縮與解壓
前言
- 以下命令測試環境為
CentOS7.8
- 使用的
shell
為系統默認的bash
- Linux下是區分大小寫的,這點和Windows不同
- Linux大部分命令語法為
命令 [選項] [參數]
,我所介紹的選項為常用選項並不包含全部
alias / unalias 命令別名
alias
命令用於給指令設置一個別名,unalias
命令用於取消設置
-
可以給長命令起一個簡單的別名便於使用,如:
alias ens33="vi /etc/sysconfig/network-scripts/ifcfg-ens33"
-
取消已設置的別名命令
unalias ens33
-
可以避免危險操作,如系統默認的命令
rm
mv
cp
等,都是通過alias
加了-i
參數的# 查看所有的使用別名的命令 [root@God ~]# alias alias cp='cp -i' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i'
-
在命令前加
\
或者使用命令全路徑可忽略使用別名# 不進行詢問直接刪除mail.log文件 \rm /var/log/mail.log 或 /usr/bin/rm /var/log/mail.log
-
在命令行通過
alias
和unalias
設置或取消的別名都是暫時性的,僅作用於當前登錄的會話。如果想要永久生效,可以在~/.bashrc
文件添加別名設置
cd 切換目錄
cd
命令用於切換工作目錄至指定的目錄,可用相對路徑和絕對路徑
-
選項
/
表示根目錄.
表示當前目錄..
表示上一級目錄-
表示上次所在的目錄~
表示當前用戶的家目錄
# 進入用戶家目錄 cd ~ # 進入指定目錄 cd /etc # 進入上兩級目錄 cd ../..
cp 復制文件或目錄
cp
用來復制文件或目錄到指定位置
-
語法
cp [選項] 源 目標
-
選項
-a
相當於同時指定-dpr
-d
復制時保留鏈接(相當於Windows系統中的快捷方式)-p
保留源文件或目錄的屬性-r|R
對目錄進行遞歸處理,復制目錄時必須加上它才能復制-f
覆蓋已存在的目標而不給出提示-i
與-f
相反,如果目標文件存在,則提示是否覆蓋
# 復制文件/etc/hosts到目錄/local下 cp /etc/hosts /local # 復制文件/etc/hosts到目錄/local下並命名為hosts.bak cp /etc/hosts /local/hosts.bak # 復制目錄/etc到目錄/local下,如果/local/etc已存在直接覆蓋 cp -af /etc /local # 復制目錄/etc到目錄/local下並重命名為etc.bak cp -a /etc /local/etc.bak
cat 查看文件內容
cat
命令適合查看少量內容,並可將多個文件連接到一起進行標准輸出,當文本數據內容量過大時,推薦使用less
或 more
進行查看
-
語法
cat [選項] 文件1 [文件2 文件N]
-
選項
-n
輸出時顯示行號-s
當遇到有連續兩行以上的空白行,就替換成一個空白行
# 查看resolv.conf的內容 cat /etc/resolv.conf # 將/etc/resolv.conf和/etc/hosts兩個文件連接到一起進行標准輸出,並顯示行號 cat -n /etc/resolv.conf /etc/hosts
-
cat
還可以配合重定向將標准輸入寫到文件中[root@God ~]# cat > demo.txt << EOF > 我在命令行打上 cat > demo.txt << EOF > 在 > 后面寫的東西都能寫入到文件中 > 寫完了所有內容后,在最后單獨寫個EOF就可以了 > EOF [root@God ~]# cat -n demo.txt 1 我在命令行打上 cat > demo.txt << EOF 2 在 > 后面寫的東西都能寫入到文件中 3 寫完了所有內容后,在最后單獨寫個EOF就可以了
chage 設置密碼有效期
chage
命令本質是修改通過/etc/shadow
文件中的內容來設置賬號密碼有效期限的
-
語法
chage [選項] 用戶
-
選項
-l
列出用戶的當前設置-d DATE
DATE為日期,格式YYYY-MM-DD
,即設置上次修改密碼的時間,設置為0
則下次登錄時必須改密碼,設置為-1
則密碼永不過期,密碼是否過期就是根據這個時間計算的-E DATE
DATE為日期,格式YYYY-MM-DD,設置賬號失效日期(對root慎用),設置為0
則立即失效,設置為-1
則永不失效-M N
N為天數,密碼有效期,即每過N天不修改密碼的話密碼就會過期-m N
N為天數,即距離上次修改日期N天后,才可以更改密碼,設置為0
表示隨時可更改-W N
N為天數,即距離密碼過期日N天前開始發出警告信息-I N
N為天數,即如果一個密碼已過期N天,那么該賬號將失效
# 列出 jet 用戶的賬號密碼有效日期詳細信息 chage -l jet # 使 jet 用戶下次登陸時必須修改密碼 chage -d 0 jet # 設置 jet 用戶2020年8月8日賬號失效 chage -E '2020-8-8' jet # 設置用戶至少每90天就需要改一次密碼,並在15天之前提醒 chage -M 90 -W 15 jet
chown 更改文件所屬
chown
命令可以更改Linux下文件或目錄的所屬用戶、所屬組,Linux下一切皆文件,而文件必須有所屬
-
語法
chown [用戶][:用戶組] 文件或目錄
-
選項
-R
遞歸處理,將指定目錄下所有文件及子目錄一並處理-v
顯示執行過程
# 更改/local/myfile.txt的擁有者為root用戶 chown root /local/myfile.txt # 更改/local/myfile.txt的群組的使用者為root組 chown :root /local/myfile.txt # 更改/local/myfile.txt的擁有者為root用戶,群組的使用者為root組 chown root:root /local/myfile.txt # 更改目錄/local的擁有者為root用戶 chown -R root /local
chmod 設置文件rwx權限
chmod
命令可用於更改文件的r
讀、w
寫、x
執行權限, 通過ls -l
或stat
命令可查看文件的權限-rw-r--r--
第一位表示文件類型,后9位每三位為一組,分別表示所屬用戶、所屬組、其他用戶的權限。
-
語法
chmod [選項] rwx的權限分值 文件或目錄
- 權限分值 r=4, w=2, x=1
chmod [選項] 身份標識(+|-)(r|w|x) 文件或目錄
- 身份標識 u=user所屬用戶 , g=group所屬組, o=other其他用戶, a=all(u+g+o)所有用戶
-
選項
-R
遞歸處理,將指定目錄下所有文件及子目錄一並處理
# 更改文件/local/myscript.sh的權限 # 文件擁有者權限=7(r+w+x) 同組用戶權限=5(r+x) 其他用戶權限=5(r+x) chmod 755 /local/myscript.sh # 去掉其他用戶對文件/local/myscript.sh的寫權限 chmod o-w /local/myscript.sh # 去掉其他用戶對文件/local/myscript.sh的寫權限,給同組用戶加上執行權限 chmod o-w,g+x /local/myscript.sh # 更改目錄/local的權限 chmod -R 754 /local
chattr / lsattr 隱藏屬性
chattr
命令可以用來修改文件或目錄的隱藏屬性,只有root用戶可以使用
-
語法
chattr [選項] (+|-|=)屬性 文件或目錄
+
表示增加該屬性-
表示去掉該屬性=
表示去掉其他屬性,只保留該屬性
-
選項
-R
遞歸處理,將指定目錄下所有文件及子目錄一並處理
-
屬性
a
設置后只能增加數據,而不能刪除或修改數據i
設置后不能被刪除、改名、設定鏈接也無法新增,相當於鎖定s
徹底刪除的屬性,即有該屬性的文件刪除后無法恢復u
當一個應用程序請求刪除這個文件,系統會保留其數據塊以便以后能夠恢復,預防意外刪除
# 給test.txt文件添加a屬性,使其只能增加數據 chattr +a /local/test.txt # 去掉改屬性 chattr -a /local/test.txt
lsattr
命令可以查看隱藏屬性
-
語法
lsattr [選項] [文件或目錄]
-
選項
-a
顯示隱藏文件-d
顯示目錄的屬性,而不是目錄中內容
# 查看test.txt文件的隱藏屬性 lsattr /local/test.txt # 查看/local目錄的隱藏屬性 lsattr -d /local # 查看當前目錄下的文件或目錄的隱藏屬性,包含吟唱文件 lsattr -a
crontab 定時任務
crontab
命令用來管理需要周期性執行的任務,與Windows下的計划任務類似,依賴於crond
服務執行,定時任務的配置文件一般以用戶為單位,放在/var/spool/cron
目錄中,執行日志是/var/log/cron
。crontab
通過cron 表達式
來進行定時任務的配置
- 避免資源分配不均勻,即多個定時任務在同一時間點執行時,盡量錯開
- 取消不要的輸出選項,將執行結果
>> /dev/null
中,避免一直發郵件 - 一般情況下周與日、月不可同時共存
anacron
是可喚醒關機期間的工作任務的配置,有檢測機制,針對不24小時開機的服務器,需要的自行百度
# cron表達式 分時日月周:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
# * 代表任何時刻
# , 代表分隔時段
# - 代表時間范圍
# /N N為數字,表示執行幾次
-
crontab
常用命令# 顯示當前用戶crontab配置 crontab -l # 編輯當前用戶crontab配置 crontab -e # root用戶可以幫其他用戶新建/刪除crontab配置 crontab -u guest
-
crontab
配置示例# 每1分鍾執行一次 * * * * * echo $(date) >> /dev/null # 每5分鍾執行一次后面的命令 */5 * * * * echo $(date) >> /local/my_crontab.txt # 每2小時執行一次后面的命令 * */2 * * * echo $(date) >> /local/my_crontab.txt # 在3:00與10:00的時候執行一次 * 3,10 * * * echo $(date) >> /local/my_crontab.txt # 在10:00到22:00之間每2小時執行一次 * 10-22/2 * * * echo $(date) >> /local/my_crontab.txt # 在21:00到21:30之間每5分鍾執行一次 0-30/5 21 * * * echo $(date) >> /local/my_crontab.txt # 每周一0點執行一次 0 0 * * 1 echo $(date) >> /local/my_crontab.txt # 每年的5月20日00:00分都會給rose發一封情書郵件 0 0 20 5 * mail rose < /home/jack/lover.txt
df 磁盤使用情況
df
命令用於顯示文件系統的磁盤使用信息
-
語法
df [選項]
-
選項
-h
以人類可讀的格式顯示(K|M|G)-i
顯示inode文件的數量和使用量-T
顯示磁盤的文件系統類型
# 顯示磁盤使用情況 df -h # 顯示inode信息 df -hi
date 系統時間 / hwclock 硬件時鍾
linux系統有兩個時鍾:一個是由主板電池驅動的硬件時鍾(Real Time Clock),也叫做RTC或者叫CMOS時鍾。當操作系統關機的時候,用這個來記錄時間,但是對於運行的系統是不用這個時間的;另一個時間是系統時鍾(System clock)也叫內核時鍾或者軟件時鍾,是由軟件根據時間中斷來進行計數的,內核時鍾在系統關機的情況下是不存在的,所以,當操作系統啟動的時候,內核時鍾是要讀取RTC時間來進行時間同步。並且在系統關機的時候將系統時間寫回RTC中進行同步。
date
命令比較常用,可以用來顯示和設定系統的日期和時間,在顯示方面還可以自定義格式
-
語法
date [+格式] [選項]
-
格式
%Y
年 {0000..9999}%m
月 {1..12}%d
日 {01..31}%H
時 {00..23}%M
分 {00..59}%S
秒 {00..59}%N
納秒 {000000000..999999999}%u
星期 {1..7}%j
一年的第多少天 {001..366}%F
完整的日期,相當於%Y-%m-%d
%T
完整的時間,相當於%H:%M:%S
%R
鍾表上顯示的時間, 相當於%H:%M
%s
從1970-01-01 00:00:00 UTC 到現在的秒數
# 格式化顯示當前系統時間 [root@God ~]# date "+%F %T.%N" 2020-06-22 20:34:36.179451922 # 顯示今天是今年的第多少天 [root@God ~]# date "+%j" 174 # 設置系統時間為2012-12-12 12:12:12 [root@God ~]# date -s "2012-12-12 12:12:12" Wed Dec 12 12:12:12 CST 2012 [root@God ~]# date Wed Dec 12 12:12:12 CST 2012
-
選項
-d DATESTR
該選項非常強大,可以根據DATESTR的描述顯示時間-s DATESTR
根據DATESTR的描述,設置系統時間,把-d
換成-s
即可
# 年year 月month 日day 時hour 分min 秒seconds # 顯示1天前的時間 date -d "-1day" # 顯示100天后的時間 date "+%F %T" -d "+100day" # 顯示新中國成立100周年是哪天 date "+%F" -d "1949-10-01 +100year" # 設置日期為新中國成立100周年那天 date "+%F" -s "1949-10-01 +100year"
-
硬件時鍾
hwclock
的常用命令# 顯示硬件時鍾時間 hwclock # 將當前系統時間寫入硬件時鍾 hwclock -w # 以系統時鍾為准,同步硬件時鍾 hwclock --systohc # 以硬件時鍾為准,同步系統時鍾 hwclock --hctosys # 將硬件時鍾設置成指定的時間 hwclock --set --date="2008-08-08 08:08:08"
-
使用
ntpdate
命令將本機時間與時間服務器的時間進行同步,沒有這個命令使用yum install ntpdate
安裝# 將本機時間與阿里雲時間服務器時間進行同步 ntp[1-7].aliyun.com ntpdate ntp7.aliyun.com
diff 文件比較
diff
命令可以快速比較兩個文件或目錄是否有不同
-
語法
# 比較文件 diff [選項] 文件1 文件2 # 比較目錄 diff [選項] 目錄1 目錄2
-
選項
-b
忽略一行當中僅有多個空白的區別(例如"about me"與"about me"視為相同)-B
忽略空白行的區別-i
忽略大小寫的區別
# 比較兩個文件 diff /etc/hosts /etc/hosts.bak
echo 標准輸出
echo
命令用於打印字符串或變量的值,在shell腳本中極為常用,可以做出進度條效果,也可以打印彩色文字,詳情自行百度
-
選項
-e
開啟轉義字符
# 轉義:開啟與不開啟的區別 [root@God test]# echo "Hello \n World" Hello \n World [root@God test]# echo -e "Hello \n World" Hello World # echo 單引號與雙引號的區別 [root@God test]# echo "$PATH" /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@God test]# echo '$PATH' $PATH [root@God test]# echo "Hello,World!" -bash: !": event not found [root@God test]# echo 'Hello,World!' Hello,World!
find / locate 文件搜索
find
支持各種姿勢的查找方式,提供了相當多的查找條件,功能很強大。也正因如此它的選項也很多,有時使用起來也是比較耗費系統資源的,特別是直接從 /
下查找的時候,在實際使用中應盡量縮小查找目錄范圍,把/
替換成你指定的查找路徑即可
-
語法
find [選項] 查找路徑 查找條件 動作
-
選項
-L
跟隨符號鏈接,加上此選項意味着會搜索鏈接指向的目錄
-
條件
-name NAME
根據名稱進行查找,支持通配符-mtime +-DAY
根據修改時間按天查找。如+7
代表7天(不含)前,-7
代表7天(含)內-mmin +-MIN
根據修改時間按分鍾查找。-type TYPE
根據文件類型查找 TYPE的值有d
目錄,f
普通文件,l
符號鏈接等-size +-SIZE
根據文件大小查找。如+100M
代表大於100MB的文件,-50M
代表小於50MB的文件-perm MODE
根據文件權限查找-maxdepth N
N為數字,表示查找深度-user USER
根據用戶名查找-uid UID
根據用戶ID查找-gid GID
根據組ID查找-empty
查找空文件或空目錄,即大小為0bytes
-
動作
-delete
刪除查找出來的文件,目錄只能刪除空目錄-ok CMD {} \;
交互式執行命令,每次執行前會詢問-exec CMD {} \;
直接執行命令,不詢問- 說明
{}
表示的是查找出來的結果;
表示的是結束命令,因為;
在各個系統中會有不同的意義,所以在前面的\
是轉義字符,為了防止系統出錯。如果你不願意\
,使用';'
結束也是可以的
# 查找下1層的目錄 find / -maxdepth 1 -type d # 查找下2層的目錄 find / -maxdepth 2 -type d # 根據名稱精確查找 find / -name "restart_tomcat.sh" # 根據名稱模糊查找 find / -name "*.log" # 根據修改時間查找 find / -name "*.log" -mtime +7 # 查找是否有權限為777的文件 find / -type f -perm 777 | xargs ls -l # 找到7天前的日志文件,直接將其刪除 find / -type f -name '*.log' -mtime +7 -delete # 找到7天前的日志文件,並詢問是否將其刪除 find / -type f -name '*.log' -mtime +7 -ok rm -rf {} \; # 找到7天前的日志文件,直接將其刪除 find / -type f -name '*.log' -mtime +7 -exec rm -rf {} \; # 使用 xrags 命令實現刪除 find / -type f -name '*.log' -mtime +7 | xargs rm -rf
locate
命令用來查找文件或目錄,要比find
命令快很多,原因在於它不搜索具體目錄,而是通過/var/lib/mlocate/mlocate.db
自身創建的數據庫進行搜索,這個數據庫含有本地所有文件信息。每天自動更新一次庫中的數據,有時剛創建的文件使用locate
搜索不到時就是因為庫中的數據沒有及時更新,為了避免這種情況,在使用locate
命令之前可以使用updatedb
命令手動更新。如果沒有locate
命令,則需要安裝一下yum -y install mlocate
-
語法
locate [選項] 查找條件 # 查找條件支持通配符和正則表達式
-
選項
-c
只顯示找到的數量-i
忽略大小寫-r
使用基礎正則表達式--regex
使用擴展正則表達式
# 使用前最好先更新一下數據庫 updatedb # 查找包含 myfile 的文件和目錄 locate myfile # 查找以myfile開頭的文件和目錄 locate myfile* # 查找以myfile結尾的文件和目錄 locate *myfile # 查找文件名為 1.txt 的文件 locate -r "/1.txt$"
free 查看內存使用
free
命令可以顯示系統內存的使用情況,包括物理內存、交換內存(swap)和內核緩沖區內存
-
語法
free [選項]
-
選項
-k
以KB為單位進行顯示-m
以MB為單位進行顯示-g
以GB為單位進行顯示-h
以人類可讀的格式顯示(K|M|G)-s N
N為數字,表示間隔描述,用於持續觀察內存使用狀況
# 3秒一刷新,顯示內存使用情況 free -h -s 3
head 查看文件前面的內容
head
命令用於查看文件頭部或行內頭部的內容
-
語法
head [選項] 文件
-
選項
-n N
N為數字,表示前N行-c N
N為數字,表示行內的前N個字節。UTF-8編碼中一個字母占1字節,一個漢字占3字節
# 顯示前100行內容
head -n 100 /local/
# 顯示前5個字節的內容
echo "Hello,World" | head -c 5
history 命令歷史
history
命令用於記錄和顯示你在命令行敲過的每一條命令,相鄰的重復命令默認會合並成一個。命令歷史記錄太多會讓系統變得不安全,可以根據自己的需求自定義以下環境變量進行限制
# 記錄命令歷史的文件
HISTFILE=/root/.bash_history
# 記錄命令歷史的文件最大記錄條數
HISTFILESIZE=1000
# 內存中命令歷史的最大記錄條數
HISTSIZE=1000
# 可以通過添加HISTTIMEFORMAT環境變量,記錄命令執行時間
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
-
語法
history [選項]
-
選項
N
N為數字,顯示最近執行過的N條命令-c
清空內存中的歷史命令-r
將HISTFILE
設置的文件中的內容讀取到內存-w
與-r
相反,把內存中的命令歷史寫入到文件中
# 查看命令歷史 history # 執行第66條命令 !66 # 執行上一條命令 !!
ip 網絡配置管理
ip
命令作為iproute2
工具包的核心命令,它是linux下管理網絡和流量控制的工具包,旨在替代老牌的工具鏈net-tools
,即ifconfig, arp, route, netstat
等命令。net-tools
通過procfs(/proc)
和ioctl
系統調用去訪問和改變內核網絡配置,而iproute2
則通過netlink
套接字接口與內核通訊。拋開性能而言,net-tools
的用法給人的感覺是比較亂,而iproute2
的用戶接口相對net-tools
來說相對來說,更加直觀。比如,各種網絡資源(如link、IP地址、路由和隧道等)均使用合適的對象抽象去定義,使得用戶可使用一致的語法去管理不同的對象。如今很多系統管理員依然通過net-tools
配置管理網絡,但自2001年起,Linux社區已經對齊停止維護。同時,一些Linux發行版比如Arch Linux和CentOS/RHEL 7則已經完全拋棄了net-tools
,只支持iproute2
。如果你仍在使用net-tools
,而且尤其需要跟上新版Linux內核中的最新最重要的網絡特性的話,那么是時候轉到iproute2
的陣營了。原因就在於使用iproute2
可以做很多net-tools
無法做到的事情。ip
命令非常強大,如果要完全運用的話估計能寫一本書了。這里就隨用隨加了,需要深入自行查閱官方文檔。
-
語法
ip [選項] 對象 {命令}
ip
命令的選項不支持連着寫,每個都要加-
並用空格分隔
-
選項
-c
加上顏色顯示-s
顯示更多的信息
-
對象
address
IP協議設備link
網絡設備route
路由表- 所有對象的名稱均支持完整寫法和縮寫,如
address
可寫成addr add a
# 查看IP地址 ip -c addr
kill 結束進程
kill
命令可以發送一個信號SIGTERM
默認為15給進程,可將指定程序終止。程序或工作的編號可以利用ps
命令和jobs
命令查看
-
語法
kill -信號 進程ID|工作ID
-
信號
1
啟動被終止的進程,可讓該PID重新讀取自己的配置文件,類似重新啟動2
相當於用鍵盤Ctrl+c來中斷一個進程的進行9
強制中斷一個進程的執行,如果該進程進行到一半,那么尚未完成的部分可能會有"半產品"產生,比如vim
會有.filename.swp
保留下來15
以正常的進程結束方式來結束進程17
相當於用鍵盤Ctrl+z來暫停一個進程的進行
# 強制結束PID為8886的進程 kill -9 8886 # 強制結束JOBNUMBER為2的進程 kill -9 %2 # 強制結束所有的以httpd啟動的進程 killall -9 httpd
ln 創建鏈接(快捷方式)
ln
命令可以為文件或目錄創建一個鏈接(link),鏈接可分為兩種:硬鏈接和軟鏈接。軟鏈接相當於windows下的快捷方式
-
語法
ln [選項] 源 目標
-
選項
-s
創建為軟鏈接
# 在家目錄下創建一軟連接 ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 ~/ifcfg-ens33
ls 查看目錄中的內容
ls
命令用於顯示指定工作目錄下之內容(列出目前工作目錄所含之文件及子目錄)。ll
命令是系統自帶的一個別名命令,主要用於進行長列表顯示內容
-
語法
ls [選項] [文件或目錄]
-
選項
-a
顯示所有內容,包括隱藏文件-d
顯示目錄本身,而不是目錄中的內容-t
按照時間進行排序,最新的在最上面-r
對排序進行翻轉-l
使用長列表顯示內容-h
以人類可讀的格式顯示(K|M|G)--full-time
顯示精確時間
# 顯示目錄下的所有內容 ls -a # 快速找到修改時間最新的文件,最下面那個就是 ls -lrth
less 分頁查看文件
less
是對文件或其他輸出進行分頁顯示的工具,功能十分強大,而且不會一開始就加載整個文件,在性能和用法上比more
更加的有彈性。使用less
命令打開的內容可以使用各種功能按鍵來操作,個人感覺完全可以替代more
,所以有人說less is more
,相比於more
,我更喜歡用less
。
-
語法
less [選項] 文件
-
選項
-s
顯示連續的空行為一個空行-N
顯示行號-m
顯示類似於more
命令的百分比-g
只標記最后搜索的關鍵詞-i
搜索時忽略大小寫
-
按鍵
h
查看幫助↑↓
向上或向下一行b
向上滾動一頁 PageUpspace
向下滾動一頁 PageDowng
移動到第一行G
移動到最后一行N g/G
N為數字,移動到第N行q/Q
退出/ KEYWORD
進入向下搜索模式,可根據關鍵字進行搜索,n
繼續往下找,N
繼續往上找& KEYWORD
輸入關鍵字,可僅顯示包含關鍵字的行F
類似於tail -f
,實時讀取文件最新內容,按ctrl + c
停止
# 使用 less 命令查看文件 less -smN /etc/service # 使用 less 命令接收其他命令的標准輸出 history | Dless
mv 剪切 / 重命名 文件或目錄
mv
命令用來為文件或目錄重命名或移動文件或目錄(剪切)
-
語法
mv [選項] 源 目標
-
選項
-i
若指定目錄已有同名文件,則先詢問是否覆蓋舊文件;-f
如果目標存在,直接覆蓋不提示
# 移動文件/local/hosts.bak到/local目錄下 mv /etc/hosts.bak /local # 重命名文件hosts.bak為hosts mv /etc/hosts.bak /etc/hosts
mkdir 創建目錄
mkdir
命令用來創建目錄
-
語法
mkdir [選項] 目錄
-
選項
-m
創建目錄的同時設置權限-p
如果父目錄不存在,則創建
# 創建目錄/local/script,如果目錄/local不存在,會報錯 mkdir /local/script # 創建目錄/local/script,如果目錄/local不存在,則創建 mkdir -p /local/script # 創建目錄/local/script,如果目錄/local不存在,則創建,並給script目錄設定755的權限分數 mkdir -pm 755 /local/script
ps 查看進程
ps
命令用於顯示當前進程的狀態,這個狀態是當前那些進程的快照,如果想要動態查看進程,請使用top
命令,常用來通過管道命令搭配grep
命令進行查詢,然后通過kill
命令,刪除不需要的進程
-
語法
ps [選項]
-
選項
-e
顯示所有進程-f
顯示全格式列表,增加 UID、PPID、C與STIME欄位的顯示
# 根據關鍵字查找進程 ps -ef | grep tomcat
pwd 顯示當前目錄
pwd
用於顯示當前所在的路徑,加-P
可顯示真實路徑,而非鏈接路徑
[root@God /]# ll -d /sbin
lrwxrwxrwx. 1 root root 8 Jun 21 11:20 /sbin -> usr/sbin
[root@God /]# cd sbin/
[root@God sbin]# pwd
/sbin
[root@God sbin]# pwd -P
/usr/sbin
passwd 修改密碼
passwd
可以用來更改用戶的密碼,還可以鎖定與解鎖用戶
-
語法
passwd [選項] 用戶
-
選項
-d
刪除密碼-f
強迫用戶下次登錄時必須修改密碼-w
設置密碼到期前提前警告的天數-l
鎖定賬戶-u
解鎖賬戶-x
設置密碼有效天數
# 修改當前用戶的密碼 passwd # 修改其他用戶的密碼,root用戶修改其他用戶密碼,不需要提供原密碼 passwd jack # 鎖定用戶 passwd -l jack # 解鎖鎖定的用戶 passwd -u jack
rm 刪除文件或目錄
rm
用於刪除文件或目錄,生產服務器執行刪除命令前一定要備份
-
語法
rm [選項] 文件或目錄
-
選項
-i
刪除前詢問-f
直接刪除,不確認-r
刪除目錄時使用,否則無法刪除目錄
# 刪除目錄下所有內容,並且不經過確認,慎用 rm -rf /local # rm 刪除目錄下所有隱藏文件 rm /local/.* # rmdir 只能刪除空目錄,目錄不為空無法刪除 rmdir /local
su 切換用戶
su
命令用於切換當前用戶,除了root外,需要輸入該用戶的密碼
su
命令和su -
命令最大的本質區別就是:前者只是切換了root身份,但Shell環境仍然是普通用戶的Shell;而后者連用戶和Shell環境一起切換成root身份了。只有切換了Shell環境才不會出現PATH環境變量錯誤。su
切換成root用戶以后,pwd
一下,發現工作目錄仍然是普通用戶的工作目錄;而用su -
命令切換以后,工作目錄變成root的工作目錄了。用echo $PATH
命令看一下su
和su -
以后的環境變量有何不同。以此類推,要從當前用戶切換到其它用戶也一樣,應該使用su -
命令。
# 切換到用戶執行命令,命令執行完在自動切換回來
[root@God ~]# su jet -c ls
ls: cannot open directory .: Permission denied
[root@God ~]# su - jet -c ls
1.txt
stat 查看文件詳細信息
stat
命令可以查看文件的詳細信息
-
語法
stat [選項] 文件
-
選項
-c FORMAT
格式化顯示 FORMAT的取值可以查看幫助
# 查看文件的權限 [root@God ~]# stat -c %A testfile -rw-r--r-- [root@God ~]# stat -c %a testdir/ 755
sort 排序 / uniq 去重
sort
命令用於對文本內容或者是對其他命令的輸出進行排序顯示。
-
語法
sort [選項] 文件
-
選項
-u
合並重復的行-r
反向排序-g
按照數字大小排序-t SEP
按照SEP
進行分列,默認為空格-k N
N為數字,表示根據第N列排序
# 根據進程號排序查看進程 ps -ef | sort -rgk 2
uniq
命令用於去除重復的行,一般與sort
搭配使用
-
語法
uniq [選項] 源數據
-
選項
-c
統計重復行出現的次數-d
僅顯示重復出現的行-u
僅顯示出現一次的行
# 統計IP地址出現的次數 cat ip.txt | sort | uniq -c
split 分割文件
split
可以將大文件分割成若干個小文件
-
語法
split [選項] 文件 前綴
-
選項
-d
給文件添加數字后綴-b SIZE
根據大小進行分割,可以添加單位(b|k|m|g)等-l N
N為數字表示行數,按照行數進行分割
# 將catalina.out按照300m的大小進行分割,分割的文件會以catalog00,catalog01,catalog02的方式來建立 split -db 300m catalina.out catalog # 將分割后的若干個小文件在還原 more catalog* >> catalina.out
tar 打包
tar
命令用來打包或壓縮文件,選項相當多。一般只打包不壓縮的文件以.tar
結尾,通過gzip
進行打包壓縮的文件以.tar.gz
結尾,通過bzip2
進行打包壓縮的文件以.tar.bz2
結尾
-
語法
tar [選項] 壓縮文件名 操作目標
-
選項
-c
創建打包文件-x
釋放打包文件-t
查看包文件內容-v
顯示詳細過程-z
使用gzip
的方式進行壓縮或解壓-j
使用bzip2
的方式進行壓縮或解壓-h
同時打包鏈接指向的文件-C
指定解壓目錄
# 將目錄/local進行打包並使用gzip進行壓縮 tar -zcvf local.tar.gz /local # 將local.tar.gz進行解壓並將打包文件釋放到當前目錄 tar -zxvf local.tar.gz # 僅解壓指定的檔案local/script到當前工作目錄 tar -zxvf local.tar.gz local/script # 將目錄/local進行打包並使用gzip進行壓縮,但排除以.log結尾的文件 tar -zcvf local.tar.gz --exclude=*.log /local
top 動態查看進程
top
命令可以實時的查看系統運行的整體情況,是一個綜合了多方信息監測系統性能和運行信息的實用工具。
-
語法
top [選項]
-
選項
-d N
N為數字,表示刷新秒數間隔-b
以追加的方式顯示結果-n N
N為數字,表示刷新次數-p PIDLIST
只顯示指定PID
的進程,多個PID
之間用,
分隔-u USER
只顯示指定用戶的進程
# 以1秒的時間間隔來動態查看進程 top -d 1 # 查看進程ID為 1 12 38 的進程信息 top -d 1 -p 1,12,38
tail 查看文件末尾內容
tail
命令和head
命令相反,用於查看文件末尾的內容,而且可以實時刷新
-
語法
tail [選項] 文件
-
選項
-n N
N為數字,表示末尾N行-c N
N為數字,表示行內的末尾的N個字節。UTF-8編碼中一個字母占1字節,一個漢字占3字節-f
實時刷新顯示文件內容
# 實時查看文件/local/mylog.log末尾100行的內容 tail -100f /local/mylog.log
touch 修改文件的時間屬性或創建空文件
touch
命令用於修改文件或者目錄的時間屬性,若文件不存在,則創建一個新的空文件。Linux下的三個時間屬性概念分別是atime(access time)
讀取時間 、 mtime(modify time)
修改時間、ctime(change time)
,注意ctime
不是create time
。實際工作中使用touch
修改這些時間屬性的需求極少,相反大多數是用來創建一個或多個空文件。有點喧賓奪主的意思~
-
語法
touch [選項] 文件或目錄
-
選項
-a
修改文件或目錄的讀取時間-m
修改文件或目錄的修改時間-t STAMP
指定時間戳,格式為[YYYY]MMDDhhmm[.ss]
-c
如果文件不存在,不要創建文件
# 使用{}可一次性創建多個空文件,如 {1..10} {a..z} {1,3,5,7,9} # 創建一個空文件 touch olympic.txt # 創建99空文件 touch olympic{1..99}.txt # 修改文件的修改時間 mtime touch -cmt 200808080808.08 olympic.txt
useradd / groupadd 用戶和組管理
Linux系統是一個多用戶多任務的分時操作系統,任何一個要使用系統資源的用戶,都必須首先向系統管理員申請一個賬號,然后以這個賬號的身份進入系統。用戶的賬號一方面可以幫助系統管理員對使用系統的用戶進行跟蹤,並控制他們對系統資源的訪問;另一方面也可以幫助用戶組織文件,並為用戶提供安全性保護。每個用戶賬號都擁有一個唯一的用戶名和各自的密碼。用戶在登錄時鍵入正確的用戶名和密碼后,就能夠進入系統和自己的家目錄。
-
添加用戶
# 添加一個普通用戶,不指定組的話會自動創建一個同名組 useradd jack # 添加一個普通用戶,並指定現有的組(組必須先存在) useradd -g root jet # 添加一個系統用戶,並不讓其登錄 -r 代表系統用戶,系統用戶不會有家目錄 useradd -r -s /sbin/nologin rose
-
刪除用戶
# 只刪除用戶 userdel jack # 刪除用戶,並刪除該用戶的家目錄(包括目錄中的內容) # 家目錄外的用戶所屬文件會替換成用戶ID,當有新的用戶使用這個ID時,該文件自動歸屬新用戶 userdel -r jack
-
修改用戶
# 修改用戶的初始用戶組,通過名稱修改 usermod -g root jack # 修改用戶的初始用戶組,通過GID修改 usermod -g 888 jack # 相當於passwd -l,鎖定用戶 usermod -L jack # 相當於passwd -u,解除鎖定 usermod -U jack # 禁止用戶登錄 usermod -s /sbin/nologin jack # 修改用戶ID usermod -u 888 jack
-
查看用戶
# 查看當前用戶 id # 查看當前登錄的用戶 w # 查看所有的用戶 cat /etc/passwd cat /etc/passwd | cut -d ':' -f 1
-
添加用戶組
# 建立一個一般用戶組 groupadd mygroup # 建立一個系統用戶組 groupadd -r admingroup
-
刪除用戶組
# 刪除用戶組 groupdel admingroup
-
修改用戶組
# 修改組ID groupmod -g 888 mygroup # 修改組名稱 CIA為新名稱 groupmod -n CIA mygroup
-
查看用戶組
cat /etc/group
vi / vim 文本編輯器
vi
和vim
用法基本一致,它們的關系有些類似於Windows下notepad與notepad++的關系,不過vim
有時默認沒有安裝,需要yum -y install vim
手動安裝一下。因為vim
相比vi
,功能更強大,又有語法高亮等功能。所以個人還是習慣並推薦使用vim
。下面介紹的vim
的使用方法,通常在vi
上同樣適用,網上介紹vim
使用的方式基本上就是說在三種模式下使用總結,即命令模式、輸入模式、底線命令模式,介紹十分詳盡,簡直快把整個vim
的幫助給弄下來了。我這里介紹的常用操作為單位,不是很全,但日常使用應該足夠了。
-
打開文件
# 打開一個文件 vim /tmp/yum.log # 按 ctrl+w 然后按 上下左右鍵 可在窗口之間切換 # 打開多個文件,縱向窗口分割,左右一邊一個窗口 vim -O /etc/hosts /etc/hosts.bak # 打開多個文件,橫向窗口分割,上下一遍一個窗口 vim -o /etc/hosts /etc/hosts.bak
-
編輯文本
- 打開文件后,按
i
鍵可在光標處插入內容;按o
鍵可在光標處的下一行插入內容。此時底部會顯示-- INSERT --
字樣,按Esc
鍵可退出編輯模式
- 打開文件后,按
-
快速定位
: set nu
顯示行號, 按:
然后輸入set nu
敲回車: set nonu
取消顯示行號: N
N為數字,表示行號,按:
然后輸入11
,敲回車即可快速移動光標到第11行,輸入$
則移動到最后一行N%
N為數字,表示百分比,比如按58
然后按一下%
,即可移動光標到文件58%的部分H | M | L
按這三個鍵可快速移動光標到屏幕的頂部、中間、底部位置ctrl+u
往上翻半頁ctrl+d
往下翻半頁↑↓←→
移動光標Home/End
移動光標到行首或行末PageUp/PageDown
翻頁
-
快速編輯
N yy
N為數字,復制光標所在行以下的N行,默認N為1,即當前行。如復制 20 行,就按20,然后按yy
就復制了N dd
和yy
用法一樣,只不過它是剪切。所以它也能當刪除使用p
在光標所在行的下一行粘貼剛復制或剪切的內容u
按u
鍵,撤銷剛才的操作ctrl+r
反撤銷v
進入視圖模式,可通過上下左右移動光標選擇一片文本,此時底部會顯示-- VISUAL --
字樣(按Esc
鍵可退出視圖模式)然后按y
復制或按d
剪切,按p
在光標處后面粘貼V
和v
一樣,只不過是以行為單位ctrl+v
和v
一樣,只不過是以列為單位,類似於在notepad++中,按住Alt選文字
-
查找
/ KEYWORD
按/
進入查找,在底部/
的后面輸入想查找的內容,按回車搜索,然后按n
往下繼續查找,按N
往上查找
-
替換
:%s#OLD#NEW#gic
個人習慣先按:%s###g
,然后移動光標到OLD位置輸入要替換的字符串,在移動光標到NEW位置,輸入新字符串,敲回車進行文字替換,%
表示全文,不加代表當前行,用10,20
替換百分號則表示替換10到20行;后面的gic
,g
表示全局替換不加只替換每行的第一個;i
表示忽略大小寫,c
表示在替換前進行確認,需要哪個加哪個
-
退出和保存
Esc
當你進入編輯模式、命令模式等其他模式時,都可按Esc
鍵退出:w
保存:wq
保存並退出q!
強制退出不保存
wc 統計字數行數
wc
命令可以統計字節數、行數、單詞數
-
語法
wc [選項] 文件
-
選項
-l
統計行數-c
統計字節數-m
統計字符數
# 依次列出/etc/passwd中的 行數、字數、字符數 wc /etc/passwd # 查看有多少個進程數 ps -ef | wc -l
xargs 參數傳遞
xargs
是給命令傳遞參數的一個過濾器,也是組合多個命令的一個工具,它可以將管道或標准輸入的數據轉換成命令行參數,也能夠從文件的輸出中讀取數據。它能夠捕獲一個命令的輸出,然后傳遞給另外一個命令,一般與管道在一起使用
# 找到修改日期在7天前的日志,並將其刪除
find /local/server -name "*.log" -mtime +7 | xargs rm -rf
yum 紅帽系列包管理工具
yum
,是Yellow dog Updater, Modified 的簡稱,是杜克大學為了提高RPM 軟件包安裝性而開發的一種軟件包管理器,適用於Redhat系列的系統。用python寫成,yum
的宗旨是自動化地升級,安裝/移除rpm
包,收集rpm
包的相關信息,檢查依賴性並自動提示用戶解決。yum
主要功能是更方便的添加/刪除/更新rpm
包,自動解決包的依賴性問題,便於管理大量系統的更新問題。yum
可以同時配置多個資源庫(Repository),簡潔的配置文件(/etc/yum.conf
),自動解決增加或刪除rpm
包時遇到的依賴性問題。
-
語法
yum [選項] 命令 [包名]
-
選項
-y
對所有的確認都回答yes
-
命令
install PACKAGE
安裝包,PACKAGE替換成要安裝的包名update PACKAGE
更新包remove PACKAGE
卸載包
# 安裝 vim yum -y install vim
zip / unzip 壓縮與解壓
zip
是個廣泛使用的壓縮程序,壓縮后的文件后綴名為.zip
# 將當前目錄下所有txt文本壓縮在一起
zip txt.zip *.txt
# 將目錄/local壓縮成local.zip文件
zip -r local.zip /local
# 將local.zip解壓縮到指定目錄,不加-d選項,則解壓到當前目錄
unzip local.zip -d ~/