三 、 檔案增刪改查
複製檔案和資料夾
cp copy 預設情況下是別名,原來本身命令是不提示覆蓋的
Usage: cp [OPTION]... [-T] SOURCE DEST
or: cp [OPTION]... SOURCE... DIRECTORY
or: cp [OPTION]... -t DIRECTORY SOURCE...
-i 顯示提示資訊
-n 不覆蓋
-r -R 遞迴複製
-d 只複製連結檔案,不復制原始檔
-a 歸檔
-v 顯示過程
-b 備份原來的檔案
--backup=number 備份檔案加上數字
-p 保留原來的屬性
-
如果原始檔是檔案的話
-
目標是檔案
-
目標檔案如果不存在的話,則新建目標檔案,並把內容寫到目標檔案中
-
如果目標檔案存在的話,本來的命令是直接覆蓋,建議使用-i來提示使用者
-
-
目標是資料夾
-
在資料夾中新建一個同名的檔案,並把檔案內容寫到新檔案中
-
-
-
如果原始檔為多個檔案的話
-
目標必須是資料夾,資料夾必須存在,其他情況都會報錯
-
-
如果原始檔是資料夾的話
-
目標檔案是檔案: 不可以
-
目標檔案必須是資料夾,必須使用-r選項
-
如果目標檔案不存在:則直接建立目標資料夾,並把原始檔夾的資料都複製到目標資料夾
-
如果目標檔案存在:
-
如果是檔案的話,則報錯
-
如果是資料夾:則在目標資料夾中建立同名資料夾,並把所有資料都複製到新資料夾
-
-
移動、重新命名
mv move
Usage: mv [OPTION]... [-T] SOURCE DEST
or: mv [OPTION]... SOURCE... DIRECTORY
or: mv [OPTION]... -t DIRECTORY SOURCE...
-i 提示
-f 強制
-b 備份
--backup=number 備份後面加數字
-v 顯示過程
刪除
rm remove
Usage: rm [OPTION]... FILE...
-i 提示
-r -R 遞迴刪除
-f 強制刪除
rm -rf 慎用
rm -rf /*
cd /
rm -rf *
連結
軟連結
-
相當於windows的快捷方式
-
建立命令 ln -s 原始檔 目標檔案
-
可以對目錄做軟連結
-
指向另外的一個檔案或者目錄的路徑,大小是路徑的長度的字元
-
對磁碟引用次數沒有影響
-
可以跨分割槽
-
原始檔發生改變,軟連結會跟著發生變化
-
原始檔刪除,軟連結不能訪問
硬連結
-
磁碟引用次數會發生變化
-
指向的是硬碟上的同一塊區域
-
磁碟的引用數會隨著硬連結次數來增加
-
不能對目錄做硬連結
-
不能跨越分割槽
-
原始檔發生改變,硬連結也會跟著變化
-
原始檔刪除以後,硬連結可以訪問
檢視檔案型別
file
輸入和輸出
-
標準輸入 預設是來自鍵盤的輸入 stdin 0
-
標準輸出 預設輸出到終端視窗 stdout 1
-
標準錯誤輸出 預設輸出到終端視窗 stderr 2
I/O重定向
> 覆蓋
-
> 將標準輸出重定向到檔案中
-
2> 將錯誤輸出重定向到檔案中
-
&> 將所有的輸出都重定向到檔案中
禁止、允許覆蓋
-
禁止覆蓋 set -C
-
允許覆蓋 set +C
>> 追加
>> 將標準輸出追加到檔案中
2>> 將錯誤輸出追加到檔案中
標準輸入和錯誤輸入分開儲存
[root@localhost ~]#ls f 45yuio > log.log 2> error.log
[root@localhost ~]#cat log.log
f
[root@localhost ~]#cat error.log
ls: cannot access 45yuio: No such file or directory
合併所有的輸出
-
&> 覆蓋重定向
-
&>> 追加重定向
-
command > file 2>&1
-
command >> file 2>&1
-
():合併多個檔案的輸出
-
/dev/null 黑洞
從檔案匯入stdin
tr 字元替換
-t 截斷
-d 刪除
-s 壓縮,去重
-c 取反
[root@localhost ~]#tr 'a-z' 'A-Z' < /etc/issue
\S
KERNEL \R ON AN \M
[root@localhost ~]#tr 'a-z' 'A-Z'
qwertyy
QWERTYY
12345678
12345678
ASDFGHJ
ASDFGHJ
qwertyuio
QWERTYUIO
^C
[root@localhost ~]#tr ab 12
ab
12
abb
122
asdfghjkl
1sdfghjkl
^C
[root@localhost ~]#tr abc 12
ab
12
abc
122
abc
122
^C
[root@localhost ~]#tr ab 123
ab
12
abb
122
avc
1vc
qbc
q2c
abc
12c
[root@localhost ~]#tr -t abc 12
abc
12c
ab
12
[root@localhost ~]#tr -d abc
qwertyui
qwertyui
an^H^H
n
abc
artyibrtyuiocrtyuiop
rtyirtyuiortyuiop
^C
[root@localhost ~]#tr -d abc < /etc/issue
\S
Kernel \r on n \m
[root@localhost ~]#cat /etc/issue
\S
Kernel \r on an \m
[root@localhost ~]#tr -s a
abc
abc
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabc
abc
^C
[root@localhost ~]#tr -sc a
aasdaaaaaaa
aasdaaaaaaa
^[[A^H^H^C
[root@localhost ~]#tr -sc a
aaaaaaaaabbbbbbbbbbbbbccccccccddddddddddd
aaaaaaaaabcd
[root@localhost ~]#tr -dc a
aaaaaaaaaaaabbbbbbbbbb
asdfghjkqwertyuiozxcvbnmxcvbnm,.
aaaaaaaaaaaaa
ctrl+d 結束
[root@localhost ~]#tr -dc "a\n"
asdfghjk
a
wertyujk;l'
asdfghj
a
[root@localhost test]#tr -d a < issue > issue 處理完成以後不能寫會到原始檔,要寫到新的檔案中
[root@localhost test]#seq 1 10 > b
[root@localhost test]#cat b
1
2
3
4
5
6
7
8
9
10
[root@localhost test]#tr -d "\n" < b
12345678910[root@localhost test]#tr -d "\n" < b
[root@localhost test]#tr "\n" " " <b
1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr "\n" " " <b >c
[root@localhost test]#cat c
1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr " " "\n" <c
1
2
3
4
5
6
7
8
9
10
多行傳送給stdin
# 第一種方式
[root@localhost test]#cat > f1
qwert
wertyui
wertyui
wertyuiopasdfghjk
sdfghjkl
sdfyhjkl;sdfghjkl;xcvb
# 第二種方式
[root@localhost test]#cat > f2 <<EOF
> qwerty
> qwertyu
> wertyui
> qwertyu
> EOF
EOF 不是必須得,只要兩個相同就可以
管道
管道使用“|”來表示
命令1|命令2|命令3
-
把命令1的輸出結果當做命令2的輸出結果,把命令2的輸出結果當成命令3的輸入結果
-
預設情況下,管道只能傳送標準輸出
-
如果需要把錯誤輸出也傳遞,則需要|&
-
一般用來組合多個命令
-
有一些命令是不接受管道的
[root@localhost test]#ls f1|tr 'a-z' 'A-Z'
F1
[root@localhost test]#ls f
ls: cannot access f: No such file or directory
[root@localhost test]#ls f|tr 'a-z' 'A-Z'
ls: cannot access f: No such file or directory
[root@localhost test]#ls f|&tr 'a-z' 'A-Z'
LS: CANNOT ACCESS F: NO SUCH FILE OR DIRECTORY
[root@localhost test]#echo file{1..20}|touch
touch: missing file operand
Try 'touch --help' for more information.