目錄
1. 文件描述符
定義:
是內核爲了高效管理已被打開的文件所創建的索引,用於指向被打開的文件,所有執行 I/O 操作的系統調用都通過文件描述符;文件描述符是一個簡單的非負整數,用以標明每一個被進程所打開的文件,程序剛剛啓動的時候,第一個打開的文件是 0,第二個是 1,依此類推。
輸入輸出標準說明:
STDIN:標準輸入,默認設備是鍵盤,文件編號爲0
STDOUT:標準輸出,默認設備是顯示器,文件編號爲1,可以重定向到文件
STDERR:標準錯誤,默認設備是顯示器,文件編號爲2,可以重定向到文件
查看和進程相關的文件:
查看一個進程打開的文件:ll /proc/進程ID/fd
查看和臨時設置一個進程最多打開多少個文件:ulimit -n,ulimit -n 2048
2. 重定向
輸出重定向:
定義:將命令的正確輸出結果保存到指定的文件中,而不是直接顯示在顯示器的屏幕上
語法:> 文件名 #表示將標準輸出的內容,寫到文件中;如果此文件已經存在,將會覆蓋原文件中的內容
>> 文件名 #表示將標準輸出的內容,追加到文件中;如果此文件不存在,將會新建該文件
舉例:
查看當前主機的CPU的類型並保存到cpu.txt文件中(不顯示在屏幕中):cat /proc/cpuinfo > cpu.txt
將內核的版本信息追加到cpu.txt:uname -a >> cpu.txt
清空一個文件:> cpu.txt
輸入重定向:
定義:不使用標準輸入端口輸入文件,而是使用指定的文件作爲標準輸入設備
語法:< 文件名
錯誤重定向:
定義:將命令執行過程中出現的錯誤信息(選項或參數錯誤)保存到指定的文件,而不是直接顯示在顯示器的屏幕上
作用:將錯誤信息保存到文件中
舉例:
將錯誤顯示的內容和正確顯示的內容分開:ls /etc/passwd xxx 2> a.txt
EOF:
用法介紹:“EOF”通常與“<<”結合使用,“<”作爲子命令或子shell的輸入,直到遇到“EOF”,再次返回到主調shell,可將其理解爲分界符(delimiter)。
舉例:
null黑洞和zero空文件:
把/dev/null看作“黑洞”,所有寫入它的內容都會永久丟失,從它那無法讀取到任何內容。
/dev/zero在類UNIX系統中是一個特殊的文件,它會提供無限的空字符(NULL,ASCII NUL,0x00)。典型的用法是用它來產生一個特定大小的空白文件。
舉例:
使用DD命令產生一個50M的文件:dd if=/dev/zero of=b.txt bs=1M count=50
查看一個文件的大小:du -sh b.txt
正確的內容寫入一個文件,錯誤的信息寫入一個文件:ls /tmp xxx >1.txt 2>2.txt
把正確消息和錯誤消息輸入到相同的位置:ls /tmp xxx &> 1.txt
管道:
注意:
(1)管道命令只處理前一個命令的正確輸出;
(2)管道右邊的命令,必須能夠接收標準輸入的數據流命令纔行;
(3)管道符可以把兩條命令連起來,它可以鏈接多個命令使用。
舉例:ps -aux | grep sshd
tee:
功能:讀取標準輸入的數據,並將其內容輸出成文件
舉例:
將磁盤使用的信息寫入文件:df -h|tee m.txt
將磁盤使用的信息追加到文件:df -h|tee -a m.txt
3. 文件查找
which:
which useradd:查看可執行文件的位置
whereis:
whereis useradd:查看可執行文件的位置及相關文件
locate:
updatedb,locate root
grep:
語法:grep 關鍵字 文件
grep -v 關鍵字 文件:查詢不包括關鍵字的條目
grep -i 關鍵字 文件:查詢忽視大小寫
grep ^# 文件:查詢以#開頭的條目
grep #$ 文件:查詢以$結尾的條目
grep ^$ 文件:查詢空行
grep -n 關鍵字 文件:查詢並加行號
grep "nologin\|root" /etc/passwd:“或”查找
find:
格式:find pathname -options
find pathname -name:按照文件名查找文件
find pathname -perm:按照文件權限查找文件
find ./ -perm 755:查找文件權限爲755的文件
find pathname -user:按照文件屬主查找文件
find pathname -group:按照文件屬組查找文件
find pathname -mtime -n/+n:按照文件的更改時間查找文件,-n/+n表示文件更改時間距現在n天以內/以前
find pathname -size n:按照文件的大小來查找文件
find pathname -type:查找某一類型的文件,b 塊設備文件,d 目錄文件,c 字符設備文件,p 管道文件,l 符號鏈接文件,f 普通文件
find . -name "*.txt" -exec mv {} /opt \;:找到當前目錄下txt格式的目錄並移動到/opt
mtime 文件最後一次修改的時間,atime 文件最後一次訪問的時間,ctime 文件最後一次變化的時間(修改時間)
find /opt -size +20k -a -size -50k:-a 且,-o 或,+ 大於,- 小於
find /bin/ -maxdepth 1 -perm 755:查找/bin 目錄下權限等於 755 的可執行的文件
4. 命令判斷
; 不考慮左右命令的相關性 cd /xxx ; touch a.txt
&& 只有前面的命令執行成功,後面的命令纔會執行 cd /etc && touch a.txt
|| 如果前面的命令執行成功,後面的命令就不去執行了;或者如果前面的執行不成功,纔會去執行後面的命令 ls /etc/passwd || cd /etc
5. 計劃任務
at單次執行計劃任務:
(1)啓動atd服務:systemctl status atd,systemctl restart atd,systemctl enable atd
(2)at 時間:at 20:20,at 20:20 2020-1-1,at now +10min
(3)輸入要執行的命令:mkdir /root/th
(4)結束:ctrl d
(5)查看計劃任務:at -l
(6)刪除計劃任務:atm 計劃任務的編號
cron週期性的計劃任務:
主文件(說明文件):/etc/crontab
systemctl status crond:查看crond服務的狀態
systemctl restart crond:重啓crond服務
systemctl enable crond:開機自動啓動crond服務
crontab -e:創建一個計劃任務
1 1 9 * * /root/backup.sh:分 時 日 月 周 執行一個備份腳本,命令最好用絕對路徑
crontab -l:查看計劃任務
crontab -r:刪除計劃任務
0 0 1,2,3 * * /root/backup.sh:每月的1、2、3日凌晨0點0分執行一個備份腳本
0 0 1-10 * * /root/backup.sh:每月的1至10日凌晨0點0分執行一個備份腳本
*/5 * * * * /root/backup.sh:每5分鐘執行一個備份腳本
/var/spool/cron/root:計劃任務文件的位置