Linux之文件重定向與查找


文件描述符

作用

  • 是內核為了高效管理已經被打開的文件所創建的索引,用於指向被打開的文件,所有執行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

滿足一個條件即可

-+

超過

--

低於

命令判斷

;

連續執行 不考慮命令的正確性

&&

邏輯與
只有前面的命令執行成功 才會執行后面的命令

||

邏輯或
前面的命令執行成功 后面的命令則不執行 或者前面的命令執行失敗 后面的才會執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM