文件描述符
作用
- 是內核為了高效管理已經被打開的文件所創建的索引,用於指向被打開的文件,所有執行I/O操作的系統都是調用文件描述符
- 文件描述符是一個非負整數,用來標明每一個被打開的文件 例如:第一個文件其描述符為0 第二個為1 依次類推
- 可以將文件描述符看成文件的ID
輸入輸出標准說明
- STDIN(標准輸入):默認的是鍵盤輸入 文件描述符:0
- STDOUT(標准輸出):默認是顯示器 也可以重定向到文件 文件描述符:1
- STDERR(標准錯誤):默認是顯示器 也可以重定向到文件 文件描述符:2
fd
用來查看一個進程下打開了哪些文件
[root@SR ~]# vim /etc/passwd
[root@SR ~]# ps -aux | grep passwd
root 3703 0.9 0.1 48716 8616 pts/0 S+ 17:02 0:00 vim /etc/passwd
[root@SR ~]# ll /proc/3703/fd
總用量 0
lrwx------. 1 root root 64 5月 1 17:03 0 -> /dev/pts/0
lrwx------. 1 root root 64 5月 1 17:03 1 -> /dev/pts/0
lrwx------. 1 root root 64 5月 1 17:03 2 -> /dev/pts/0
lr-x------. 1 root root 64 5月 1 17:03 3 -> /var/lib/sss/mc/passwd
lrwx------. 1 root root 64 5月 1 17:03 4 -> 'socket:[64492]'
lrwx------. 1 root root 64 5月 1 17:03 6 -> /etc/.passwd.swp
ps:上述 0 1 2 4即是文件描述符
對文件描述符的操作就是對文件本身的操作。 我可以直接通過操作文件描述來修改文件。
查看和臨時設置一個迚程最多可以打開幾個文件,卲:一個迚程可以打開的文件描述符限制
[root@SR ~]# ulimit -n #查看一個迚程最多可以同時打開的文件數
1024
[root@SR ~]# ulimit -n 2048 #修改一個迚程最多可以同時打開的文件數為 2048
[root@SR ~]# ulimit -n
2048
重定向
作用
將輸出的內容通過重定向可以指定到我們想要存儲的文件 而不是直接輸出到屏幕
輸出重定向
>
將輸出的內容輸出到一個指定的文件 如果該文件有內容會被直接覆蓋
[root@SR ~]# cat /proc/cpuinfo > cpu.txt 文件重定向
[root@SR ~]#
[root@SR ~]# head -1 cpu.txt # 查看文件首行
[root@SR ~]#
[root@SR ~]# echo hello world > cpu.txt # 再次重定向
[root@SR ~]# head -1 cpu.txt # 查看文件首行 發現原來的文件內容都被覆蓋了
>>
將輸出的內容輸出到一個指定的文件 其不會覆蓋原文件的內容 而是會在尾部追加
[root@SR ~]# echo '測試>>尾部追加' > test.txt
[root@SR ~]#
[root@SR ~]# cat test.txt
測試>>尾部追加
[root@SR ~]#
[root@SR ~]# echo '追加成功' >> test.txt
[root@SR ~]#
[root@SR ~]# cat test.txt
測試>>尾部追加
追加成功
輸入重定向
其輸入方式不是從鍵盤進行輸入 而是可以從其余方式進行輸入 例如:文件
<
[root@SR ~]# grep root < /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
錯誤重定向
將在輸入中產生的錯誤提示信息 重定向到文件中而不是在屏幕顯示
2>
[root@SR ~]# ll asjkd~ 2> b.txt
[root@SR ~]#
[root@SR ~]# cat b.txt
ls: 無法訪問'asjkd~': 沒有那個文件或目錄
PS 使用 2> 操作符時,會像使用 > 一樣覆蓋目標文件的內容,若追加而丌覆蓋文件的內容卲可使用 2>> 操作符
null
把null看成黑洞 寫入到該null中的所有文件都會消失 同時讀取數據也不會有任何顯示
[root@SR ~]# echo '測試null' > /dev/null
[root@SR ~]#
[root@SR ~]# cat /dev/null
zero
當你讀它的時候,它會提供無限的空字符(NULL, ASCII NUL, 0x00)。 典型用法是用它來產生一個特定大小的空白文件
[root@SR ~]# dd if=/dev/zero of=b.txt bs=1M count=50
記錄了50+0 的讀入
記錄了50+0 的寫出
52428800 bytes (52 MB, 50 MiB) copied, 0.111958 s, 468 MB/s
[root@SR ~]# ll -h b.txt
-rw-r--r--. 1 root root 50M 5月 1 18:02 b.txt
[root@SR ~]# cat b.txt # 無任何顯示
EOF
作用
- EOF 本意是 End Of File,表明到了文件末尾。” EOF“通常不” <<“結合使用
- <<EOF“表示后續的輸入作為子命令戒子 shell 的輸入,直到遇到” EOF
- 再次返回到主調 shell,可將其理解為分界符(delimiter)。既然是分界符,那舉形式自然丌是固定的
- 這里可以將” EOF“可以迚行自定丿,但是前后的” EOF“必須成對出現丏丌能和 shell 命令沖突
[root@SR ~]# cat > a.txt << EOF
> ajksdhkasjd
> asjkdhaksd
> asdkjhaskdj
> EOF
管道符
作用
一個命令輸出的結果作為另外一個命令輸出的條件
語法
command -a | command -b
管道命令只處理前面正確命令 不處理錯誤命令
管道右邊的命令必須能夠接受正確的數據輸入流
管道符可以連接多個命令
tee
作用
會將標准輸出的數據流輸出到標准輸出設備上同時保存到文件
可選參數
-a
尾部追加
查找命令
which
查看可執行文件的位置
whereis
查看可執行文件位置以及相關文件
locate
配合數據庫緩存 快速查看相關文件
locate 命令和 find -name 功能差不多 是它的另外一種寫法
相比較find其查找速度更加快速 因為在find中查找文件是根據目錄查找
而那個locate查找數據是查找一個數據庫/var/lib/mlocate/mlocate.db
這個數據庫保存本地所有文件的信息 並且自動更新相關的配置信息在/etc/updatedb.conf查看定時任務信息在/etc/cron.daily/mlocate
grep
其能根據正則進行數據匹配 並且把數據打印出來
可選參數
-v
取反
^
匹配以什么開頭
$
匹配以什么結束
^$
匹配一個空行
-i
忽略大小寫
-n
對過濾的內容加上行號
find
根據條件進行文件查找
可選參數
-name
根據文件名稱進行查找
-perm
根據文件權限進行查找
-user
根據文件屬主進行查找
-group
根據文件屬組進行查找
-mtime
按照文件修改時間來查找文件
- n 表示文件更改時間距現在 n 天以內
+ n表示文件更改時間距現在 n 天以前
-type
根據文件類型進行文件查找
-size
根據文件大小進行查找
-exec
對匹配的文件執行該參數所給出的其他 linux 命令
-a
多個條件並列
-o
滿足一個條件即可
-+
超過
--
低於
命令判斷
;
連續執行 不考慮命令的正確性
&&
邏輯與
只有前面的命令執行成功 才會執行后面的命令
||
邏輯或
前面的命令執行成功 后面的命令則不執行 或者前面的命令執行失敗 后面的才會執行