2.1 pwd
(print work directory)列印工作目錄(顯示當前所在路徑) 後面可以接 -L 預設情況下接的也是-L(logical)的 此種情況顯示的是邏輯路徑(相當於win的一樣) -P(physical)的話,就會把真實的物理路徑全部顯示出來
[root@oldbody local]# pwd /usr/local [root@oldbody local]# cd - /root [root@oldbody ~]# [root@oldbody home]# pwd /home [root@oldbody home]# echo $PWD /home
2.2 cd
(change directory)改變目錄路徑 例子:cd /etc 後面的引數-L和-P的話,一個是邏輯的,一個是物理的
絕對路徑:從/開始的路徑 /root/test/a/b
相對路徑:不從/開始的路徑 test/a/b
cd ../.. 上上級目錄 cd ../../.. 上上上級目錄 cd / 直接到/目錄下 cd – 上一次目錄 其實 – 是因為有一個$OLDPWD這個環境變數
cd ~ 代表家目錄 其實 因為有一個$HOME這個環境變數
cd .. 退回上一級目錄 如果是一個點的話代表當前目錄
比如[root@oldbody oldboy]# pwd /oldboy [root@oldbody oldboy]# cd /tmp/ [root@oldbody tmp]# cd - /oldboy [root@oldbody oldboy]# env | grep -i oldpwd 因為你在oldboy目錄下 所以你的環境變數OLDPWD=/tmp OLDPWD=/tmp [root@oldbody oldboy]# [root@oldbody oldboy]# cd - /tmp [root@oldbody tmp]# env | grep -i oldpwd 因為你在tmp目錄下 所以你的環境變數OLDPWD=/oldboy 其中-i就是不區分大小寫的 OLDPWD=/oldboy [root@oldbody tmp]#
2.3 tree
tree 樹的意思 以樹的形式來顯示一個目錄結構 如果tree不接任何引數的話,會顯示所有的tree的目錄結構 在Linux系統裡面以 以.開頭的都是隱藏檔案 使用 ls命令檢視不出來 必須使用ls -a引數進行檢視
tree -a 檢視隱藏檔案
tree -d代表只顯示目錄
tree -L其中L代表level層級的意思 顯示指定的層級
tree -i 不顯示樹枝 常與-f引數配合使用
tree -f 顯示每個檔案的全路徑
tree -F 用以區分檔案和目錄的方法 以/結尾的為目錄
可以用rpm -qa tree命令檢視下tree是否安裝 如果tree沒有安裝,可以使用yum install tree -y 安裝tree軟體包 LANG=en 調整字符集 為英文 然後輸入tree /liangli2/ 可以看到
[root@oldbody /]# tree /liangli2/ /liangli2/ `-- liangli3 1 directory, 0 files [root@oldbody key]# tree . |-- 1 |-- key1 | |-- 4 | `-- 5 |-- key2 | |-- 4 | `-- 5 `-- key3 |-- 4 `-- 5 10 directories, 0 files [root@oldbody key]# tree -L 1 . |-- 1 |-- key1 |-- key2 `-- key3 4 directories, 0 files [root@oldbody key]# [root@oldbody key]# tree -dL 1 . |-- 1 |-- key1 |-- key2 `-- key3 4 directories [root@oldbody key]#
為每一個路徑顯示完整的路徑 f full 完整
[root@oldbody key]# tree -dLf 1 . |-- ./1 |-- ./key1 |-- ./key2 `-- ./key3 4 directories [root@oldbody key]# [root@oldbody key]# tree -dLfi 1 indentation壓痕 這個點的話,tree後面可以接路徑點消失 不要前面的樹枝 [root@oldbody sysconfig]# tree -L 1 -fi /boot/ /boot /boot/System.map-2.6.32-573.el6.x86_64 /boot/config-2.6.32-573.el6.x86_64 /boot/efi /boot/grub /boot/initramfs-2.6.32-573.el6.x86_64.img /boot/lost+found /boot/symvers-2.6.32-573.el6.x86_64.gz /boot/vmlinuz-2.6.32-573.el6.x86_64 3 directories, 5 files [root@oldbody sysconfig]# 區分檔案和目錄 [root@oldbody key]# tree -F . |-- 1/ |-- key1/ | |-- 4/ | `-- 5/ |-- key2/ | |-- 4/ | `-- 5/ `-- key3/ |-- 4/ `-- 5/ 10 directories, 0 files [root@oldbody key]#
2.4 mkdir
windows下的路徑樣式為c:data est 而Linux下的路徑樣式為/data/test,不同的是windows系統下還有D,E等盤,Linux下就只有/,它是所有目錄的頂點 (macke directorys)建立目錄 例子:mkdir /data 在根/下建立data目錄
-p 引數 如果檔案存在 在建立檔案話,接-p引數不會報錯的 另一個作用就是 可以連續建立多級目錄
-v 引數作用 就是可以看到建立目錄的流程是怎麼樣的
或者cd /;mkdir data 切換到根下,然後建立data目錄 其中;就是命令的分隔符
連續建立目錄 mkdir -p /liangli/liangli1 建立2個目錄 一個是liangli一個是liangli1 其中liangli1在liangli目錄下
[root@oldbody /]# mkdir -pv Tech/{1..3}/{4..6} mkdir: created directory `Tech/1` mkdir: created directory `Tech/1/4` mkdir: created directory `Tech/1/5` mkdir: created directory `Tech/1/6` mkdir: created directory `Tech/2` mkdir: created directory `Tech/2/4` mkdir: created directory `Tech/2/5` mkdir: created directory `Tech/2/6` mkdir: created directory `Tech/3` mkdir: created directory `Tech/3/4` mkdir: created directory `Tech/3/5` mkdir: created directory `Tech/3/6` [root@oldbody /]# tree /tmp /tmp `-- Tech |-- 1 | |-- 4 | |-- 5 | `-- 6 |-- 2 | |-- 4 | |-- 5 | `-- 6 `-- 3 |-- 4 |-- 5 `-- 6 13 directories, 0 files [root@oldbody a]# mkdir -pv /e/b/c/d/e/f mkdir: created directory `/e` mkdir: created directory `/e/b` mkdir: created directory `/e/b/c` mkdir: created directory `/e/b/c/d` mkdir: created directory `/e/b/c/d/e` mkdir: created directory `/e/b/c/d/e/f` [root@oldbody a]# 一下子建立連續5個dir1 dir2 dir3 dir4 dir5目錄了 [root@oldbody /]# mkdir /Tech/dir{1..5} [root@oldbody /]# [root@oldbody /]# [root@oldbody /]# ls /Tech/ dir1 dir2 dir3 dir4 dir5 liangli.txt oldboy.txt 同時建立多個目錄 [root@oldbody tmp]# mkdir -p test/dir{1..5} oldboy/{a..g} [root@oldbody tmp]# tree test oldboy/ test |-- dir1 |-- dir2 |-- dir3 |-- dir4 `-- dir5 oldboy/ |-- a |-- b |-- c |-- d |-- e |-- f `-- g 12 directories, 0 files [root@oldbody tmp]# 克隆目錄結構 [root@oldbody ~]# tree -if liangli2018/ liangli2018 liangli2018/dir1 liangli2018/dir1/4 liangli2018/dir1/5 liangli2018/dir1/6 liangli2018/dir1/7 liangli2018/dir2 liangli2018/dir2/4 liangli2018/dir2/5 liangli2018/dir2/6 liangli2018/dir2/7 liangli2018/dir3 liangli2018/dir3/4 liangli2018/dir3/5 liangli2018/dir3/6 liangli2018/dir3/7 15 directories, 0 files [root@oldbody ~]# tree -if liangli2018/ --noreport liangli2018 --noreport不顯示最後一行統計資訊 liangli2018 liangli2018/dir1 liangli2018/dir1/4 liangli2018/dir1/5 liangli2018/dir1/6 liangli2018/dir1/7 liangli2018/dir2 liangli2018/dir2/4 liangli2018/dir2/5 liangli2018/dir2/6 liangli2018/dir2/7 liangli2018/dir3 liangli2018/dir3/4 liangli2018/dir3/5 liangli2018/dir3/6 liangli2018/dir3/7 liangli2018 liangli2018/dir1 liangli2018/dir1/4 liangli2018/dir1/5 liangli2018/dir1/6 liangli2018/dir1/7 liangli2018/dir2 liangli2018/dir2/4 liangli2018/dir2/5 liangli2018/dir2/6 liangli2018/dir2/7 liangli2018/dir3 liangli2018/dir3/4 liangli2018/dir3/5 liangli2018/dir3/6 liangli2018/dir3/7 [root@oldbody ~]# tree -if liangli2018/ --noreport liangli2018 >oldboy.txt [root@oldbody ~]# [root@oldbody ~]# [root@oldbody ~]# cat oldboy.txt liangli2018 這個是必須存在的目錄 liangli2018/dir1 liangli2018/dir1/4 liangli2018/dir1/5 liangli2018/dir1/6 liangli2018/dir1/7 liangli2018/dir2 liangli2018/dir2/4 liangli2018/dir2/5 liangli2018/dir2/6 liangli2018/dir2/7 liangli2018/dir3 liangli2018/dir3/4 liangli2018/dir3/5 liangli2018/dir3/6 liangli2018/dir3/7 liangli2018 liangli2018/dir1 liangli2018/dir1/4 liangli2018/dir1/5 liangli2018/dir1/6 liangli2018/dir1/7 liangli2018/dir2 liangli2018/dir2/4 liangli2018/dir2/5 liangli2018/dir2/6 liangli2018/dir2/7 liangli2018/dir3 liangli2018/dir3/4 liangli2018/dir3/5 liangli2018/dir3/6 liangli2018/dir3/7 [root@oldbody ~]# cd /tmp [root@oldbody tmp]# mkdir -p `cat /root/oldboy.txt` 首先執行``反引號裡面的內容 然後在執行mkdir命令 [root@oldbody tmp]# ll total 4 drwxr-xr-x 5 root root 4096 Sep 29 10:42 liangli2018 [root@oldbody tmp]# tree . `-- liangli2018 |-- dir1 | |-- 4 | |-- 5 | |-- 6 | `-- 7 |-- dir2 | |-- 4 | |-- 5 | |-- 6 | `-- 7 `-- dir3 |-- 4 |-- 5 |-- 6 `-- 7 16 directories, 0 files [root@oldbody tmp]#
2.5 touch
建立檔案或更新時間戳 檢視ls /Tech可以看到自己建立的檔案了,如果檔案不存在,就建立新檔案,如果存在,就改變檔案的訪問時間atime等時間戳
連續建立10000個檔案 touch stu{1..10000}
可以同時建立2個檔案 touch a.txt b.txt 兩個檔案 也可以用touch {1..4}.txt
通過命令可以看到訪問(-a) 修改(-m) 改變(-c)檔案的時間狀態
[root@oldbody 1]# stat 1.txt File: `1.txt` Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 803h/2051d Inode: 784979 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-06-21 20:16:43.546093627 +0800 Modify: 2018-06-21 20:16:43.546093627 +0800 Change: 2018-06-21 20:16:43.546093627 +0800 [root@oldbody 1]# [root@oldbody 1]# touch -a 1.txt 的話,表示只改變訪問和改變的時間戳,不改變修改的時間戳 其中Change時間不管任何情況都是會改變的 touch -m 1.txt 只改變修改時間戳 [root@oldboy liangli]# stat -c %a a.txt 644 [root@oldboy liangli]# -c 使用指定的格式而不是預設的格式 %a 八進位制許可權 指定時間屬性建立/修改檔案(瞭解) [root@oldbody tmp]# touch -d 20201001 1.txt d指定建立檔案後檔案修改時間 [root@oldbody tmp]# ll -h 1.txt -rw-r--r-- 1 root root 11 Oct 1 2020 1.txt [root@oldbody tmp]# ll -h 2.txt -rw-r--r-- 1 root root 0 Sep 29 10:57 2.txt [root@oldbody tmp]# touch -r 2.txt 1.txt r讓其和其他檔案時間屬性保持一致 [root@oldbody tmp]# ll -h 1.txt -rw-r--r-- 1 root root 11 Sep 29 10:57 1.txt [root@oldbody tmp]# touch -t 201809291110.00 1.txt t設定檔案格式 [root@oldbody tmp]# ll -h 1.txt -rw-r--r-- 1 root root 11 Sep 29 2018 1.txt [root@oldbody tmp]# ll -h --full-time 1.txt -rw-r--r-- 1 root root 11 2018-09-29 11:10:00.000000000 +0800 1.txt [root@oldbody tmp]#
2.6 ls
list(列表) 列表目錄檔案 例子:ls / 列 根/目錄下目錄和檔案
-l long 長格式(顯示出來的時間為最後一次修改時間)
-d directorys 檢視目錄
-a all的意思 顯示所有檔案,包括隱藏的檔案(預設.開標頭檔案都是隱藏的 不顯示)
-A 列出所有檔案,包括隱藏檔案,但是不包括.和..這兩個是目錄
-t根據最後修改時間排序,預設從大到小(最新到最老)
-r反轉排序
–time-style=long-iso 顯示完整時間屬性引數(年份)
ls -lrt /etc 執行這個命令後最新的檔案會在最下面 這條命令依賴於當前系統正確的時間
-F 區分檔案和目錄的方式(在結尾處加上型別指示符號 * / @等)瞭解
加上“*”代表可執行的普通檔案
加上“/”表示目錄
加上“=”表示套接字(sockets)
加上“|”表示FIFOs
加上“@”表示符號連結
-p 也是區分檔案和目錄的方式(在結尾處給目錄加上/)
[root@oldbody oldboy]# touch oldboy.txt [root@oldbody oldboy]# ls -lrt r是倒敘的意思 t按修改時間排序 total 20 -rw-r--r-- 1 root root 0 Jun 26 21:53 yingsui.gz -rw-r--r-- 1 root root 0 Jun 26 21:53 wodi.gz -rw-r--r-- 1 root root 0 Jun 26 21:53 oldboy -rw-r--r-- 1 root root 0 Jun 26 21:53 jeacen drwxr-xr-x 2 root root 4096 Jun 26 21:56 xingfujie drwxr-xr-x 2 root root 4096 Jun 26 21:56 xiaodong drwxr-xr-x 2 root root 4096 Jun 26 21:56 test drwxr-xr-x 3 root root 4096 Jun 26 21:56 ext drwxr-xr-x 2 root root 4096 Jun 26 21:56 xiaofan -rw-r--r-- 1 root root 0 Jun 26 23:40 oldboy.txt [root@oldbody oldboy]# 檢視系統時間 [root@oldbody ~]# date Wed Jun 27 20:28:45 CST 2018 [root@oldbody ~]# ls -l --color=auto 顯示顏色 [root@oldbody oldboy]# 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` alias which=`alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde` [root@oldbody oldboy]# ls -l 目錄會顯示顏色的 total 20 drwxr-xr-x 3 root root 4096 Jun 26 21:56 ext -rw-r--r-- 1 root root 0 Jun 26 21:53 jeacen -rw-r--r-- 1 root root 0 Jun 26 21:53 oldboy -rw-r--r-- 1 root root 0 Jun 26 23:40 oldboy.txt drwxr-xr-x 2 root root 4096 Jun 26 21:56 test -rw-r--r-- 1 root root 0 Jun 26 21:53 wodi.gz drwxr-xr-x 2 root root 4096 Jun 26 21:56 xiaodong drwxr-xr-x 2 root root 4096 Jun 26 21:56 xiaofan drwxr-xr-x 2 root root 4096 Jun 26 21:56 xingfujie -rw-r--r-- 1 root root 0 Jun 26 21:53 yingsui.gz [root@oldbody oldboy]# ls -l 遮蔽掉別名 total 20 drwxr-xr-x 3 root root 4096 Jun 26 21:56 ext -rw-r--r-- 1 root root 0 Jun 26 21:53 jeacen -rw-r--r-- 1 root root 0 Jun 26 21:53 oldboy -rw-r--r-- 1 root root 0 Jun 26 23:40 oldboy.txt drwxr-xr-x 2 root root 4096 Jun 26 21:56 test -rw-r--r-- 1 root root 0 Jun 26 21:53 wodi.gz drwxr-xr-x 2 root root 4096 Jun 26 21:56 xiaodong drwxr-xr-x 2 root root 4096 Jun 26 21:56 xiaofan drwxr-xr-x 2 root root 4096 Jun 26 21:56 xingfujie -rw-r--r-- 1 root root 0 Jun 26 21:53 yingsui.gz [root@oldbody oldboy]# [root@oldbody oldboy]# ls -l --color=auto 目錄會顯示顏色的 total 20 drwxr-xr-x 3 root root 4096 Jun 26 21:56 ext -rw-r--r-- 1 root root 0 Jun 26 21:53 jeacen -rw-r--r-- 1 root root 0 Jun 26 21:53 oldboy -rw-r--r-- 1 root root 0 Jun 26 23:40 oldboy.txt drwxr-xr-x 2 root root 4096 Jun 26 21:56 test -rw-r--r-- 1 root root 0 Jun 26 21:53 wodi.gz drwxr-xr-x 2 root root 4096 Jun 26 21:56 xiaodong drwxr-xr-x 2 root root 4096 Jun 26 21:56 xiaofan drwxr-xr-x 2 root root 4096 Jun 26 21:56 xingfujie -rw-r--r-- 1 root root 0 Jun 26 21:53 yingsui.gz [root@oldbody oldboy]# 我們也可以給過濾的內容加顏色 [root@oldbody oldboy]# cat 123.log key [root@oldbody oldboy]# grep --color=auto key 123.log key [root@oldbody oldboy]# 給3306這個埠加上顏色 [root@oldbody oldboy]# grep --color=auto 3306 /etc/services mysql 3306/tcp # MySQL mysql 3306/udp # MySQL [root@oldbody oldboy]# ls -a 可以顯示隱藏的檔案和不隱藏的檔案 all [root@oldbody test]# ls -a . .. dir1 dir2 dir3 file1.txt file2.txt file3.txt ls -l 將檔案的屬性和修改時間都可以顯示出來 ll就相當於ls -l一樣 系統自帶的一個alias [root@oldbody test]# ls -l total 12 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt [root@oldbody test]# ll total 12 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt [root@oldbody test]# 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` alias which=`alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde` [root@oldbody test]# -h human(人類) 的作用就是可以很直觀的現實檔案的大小 [root@oldbody test]# ls -lh total 12K drwxr-xr-x 2 root root 4.0K Jun 28 11:48 dir1 drwxr-xr-x 2 root root 4.0K Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4.0K Jun 28 11:48 dir3 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt [root@oldbody test]# -d directory參數列示只顯示目錄 [root@oldbody test]# ls -l | grep dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 [root@oldbody test]# ll -d dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 [root@oldbody test]# -F classify 就是給目錄後面加上/ [root@oldbody test]# ls -F dir1/ dir2/ dir3/ file1.txt file2.txt file3.txt [root@oldbody test]# 生產案例:查詢最近更新的檔案 ll -rt 等於ls -lrt -r reverse 倒敘排序或者反向排序 -t 按修改時間排序 預設情況下 最新建立的檔案和目錄放在最前面 [root@oldbody test]# ll total 12 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt [root@oldbody test]# [root@oldbody test]# ll -rt total 12 -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 [root@oldbody test]# -i 引數 檢視inode節點 [root@oldbody test]# ll total 12 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt [root@oldbody test]# ll -i total 12 915788 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 915789 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 915790 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 915785 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt 915786 -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt 915787 -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt [root@oldbody test]# --time-style=long-iso 引數使用 [root@oldbody tmp]# ll --time-style=long-iso total 12 -rw-r--r-- 1 root root 21 2018-09-29 11:39 1.txt -rw-r--r-- 1 root root 0 2018-09-29 11:21 123.txt -rw-r--r-- 1 root root 0 2018-09-29 10:57 2.txt drwxr-xr-x 2 root root 4096 2018-09-29 11:19 key -rw-r--r-- 1 root root 0 2018-09-29 11:18 key.txt drwxr-xr-x 5 root root 4096 2018-09-29 10:42 liangli2018 -rw-r--r-- 1 root root 0 2018-09-29 11:49 nihao.txt -rw-r--r-- 1 root root 0 2018-09-29 10:57 test1.txt -rw-r--r-- 1 root root 0 2018-09-29 10:57 test10.txt -rw-r--r-- 1 root root 0 2018-09-29 10:57 test2.txt -rw-r--r-- 1 root root 0 2018-09-29 10:57 test3.txt -rw-r--r-- 1 root root 0 2018-09-29 10:57 test4.txt -rw-r--r-- 1 root root 0 2018-09-29 10:57 test5.txt -rw-r--r-- 1 root root 0 2018-09-29 10:57 test6.txt -rw-r--r-- 1 root root 0 2018-09-29 10:57 test7.txt -rw-r--r-- 1 root root 0 2018-09-29 10:57 test8.txt -rw-r--r-- 1 root root 0 2018-09-29 10:57 test9.txt [root@oldbody tmp]#
2.7 cp
不加引數的時候 只能拷貝檔案
-a 相當於-dpr
-d 若原始檔為連結檔案(link file),則複製連結檔案屬性而非檔案本身
-p 連同檔案的屬性一起復制過去,而非使用預設屬性
-r 遞迴 用於複製目錄
假如tmp目錄下有一個test.txt檔案 mnt目錄下有一個test.txt檔案,現在將tmp目錄下的test.txt檔案複製到mnt目錄下 預設情況下 會進行相應的提示
輸入命令 cp /mnt/test.txt /tmp/ 不提示 別名的原因 就是遮蔽別名
或者 /bin/cp /mnt/test.txt /tmp/ 補全cp命令的路徑也是不提示的
因為cp vm rm屬於危險的操作命令,有可能會對檔案造成損壞,我們可以檢視下系統現有的別名alias 可以輸入命令unalias cp 直接刪除cp的別名,也可以達到其效果 (不推薦使用)
cp命令 複製檔案或目錄
[root@oldbody test]# ll total 12 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt [root@oldbody test]# cp file3.txt file4.txt [root@oldbody test]# ll total 12 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt -rw-r--r-- 1 root root 0 Jun 28 12:17 file4.txt [root@oldbody test]# cp -a -a等於-pdr 作用,複製過去的時候可以保證屬性不變化 複製檔案或目錄保持檔案或目錄所有屬性均不變化 [root@oldbody test]# ll total 12 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt -rw-r--r-- 1 root root 0 Jun 28 12:17 file4.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file5.txt [root@oldbody test]# -i 覆蓋前會提示 [root@oldbody test]# alias cp alias cp=`cp -i` [root@oldbody test]# [root@oldbody test]# cp -a file3.txt file5.txt cp: overwrite `file5.txt`? ^C [root@oldbody test]# cp -a file3.txt file5.txt [root@oldbody test]# [root@oldbody test]# cp -a dir3 dir4 [root@oldbody test]# ll total 16 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir4 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt -rw-r--r-- 1 root root 0 Jun 28 12:17 file4.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file5.txt [root@oldbody test]# A{B,C} 等價於 AB AC [root@oldbody test]# cp -a dir{3,5} [root@oldbody test]# ll total 20 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 drwxr-xr-x 3 root root 4096 Jun 28 12:30 dir4 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir5 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt -rw-r--r-- 1 root root 0 Jun 28 12:17 file4.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file5.txt [root@oldbody test]# cp /etc/ssh/sshd_config {,.ori} 相當於 cp /etc/ssh/sshd_config cp /etc/ssh/sshd_config.ori 一樣 [root@oldbody test]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.ori} 備份網路卡資訊
2.8 mv
move 移動檔案或目錄 移動就是剪下的意思 例子:mv /Tech /liangli 把Tech移動到liangli目錄下 也有改名的功能
mv 移動檔案和重新命名 move(rename)files
[root@oldbody test]# mv file{4,6}.txt [root@oldbody test]# ll total 20 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3 drwxr-xr-x 3 root root 4096 Jun 28 12:30 dir4 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir5 -rw-r--r-- 1 root root 0 Jun 28 11:47 file1.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file2.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file3.txt -rw-r--r-- 1 root root 0 Jun 28 11:47 file5.txt -rw-r--r-- 1 root root 0 Jun 28 12:17 file6.txt No such file or directory 沒有那個檔案或目錄 mv 系統別名 -i引數 在覆蓋前需要提示 [root@oldbody test]# 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` alias which=`alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde` [root@oldbody test]# 多個檔案袋移動方式(必須得保證/dir1目錄存在) [root@oldbody test]# mv file1.txt file2.txt file3.txt file5.txt file6.txt dir1/t file6.txt dir1/ [root@oldbody test]# ls dir1 dir2 dir3 dir4 dir5 [root@oldbody test]# cd dir1/ [root@oldbody dir1]# ls file1.txt file2.txt file3.txt file5.txt file6.txt [root@oldbody test]# tree . |-- dir1 | |-- file1.txt | |-- file2.txt | |-- file3.txt | |-- file5.txt | `-- file6.txt |-- dir2 |-- dir3 |-- dir4 | `-- dir3 `-- dir5 6 directories, 5 files [root@oldbody test]# 使用file dir1 可以檢視dir1是檔案還是目錄 [root@oldbody test]# file dir1 dir1: directory 移動目錄 把前n-1個目錄移動到最後一個目錄(必須得保證dir5目錄存在) [root@oldbody test]# mv dir1 dir2 dir3 dir4 dir5 [root@oldbody test]# tree . `-- dir5 |-- dir1 | |-- file1.txt | |-- file2.txt | |-- file3.txt | |-- file5.txt | `-- file6.txt |-- dir2 |-- dir3 `-- dir4 `-- dir3 6 directories, 5 files [root@oldbody test]#
2.9 rm
remove(移除)刪除目錄和檔案 -f(force)強制,-r(遞迴,用於刪除目錄) 強調刪除命令要慎用,非常危險,刪除前一定要先備份一份 因為刪除後不可恢復
正確刪除檔案的姿勢
1,使用mv命令移動到/tmp(回收站)替代刪除動作
2、通過cd命令到達目的目錄
然後通過find -type f(d) -name ‘’ | xargs rm -f
或者 find -type f(d)-name “*.txt” -mtime +7 -exec rm {} ;
別名在你敲這條命令的時候生效的額,通過一些管道符傳送給它的是不會生效的
2.10 rmdir
用於刪除空目錄 當目錄不為空時 命令不起作用
-p引數 遞迴刪除空目錄
[root@oldbody ~]# [root@oldbody ~]# mkdir -p oldboy/oldboy1/oldboy2 [root@oldbody ~]# rmdir -p oldboy/oldboy1/oldboy2/ [root@oldbody ~]#
2.11 ln
link得縮寫,可以建立硬連結與軟連線
語法 ln 選項 原始檔 目標檔案
ln這個命令就是建立連結檔案的,在預設不帶引數的情況下,執行ln命令建立的連結是硬連結 如果使用ln -s建立連結則為軟連結
硬連結 ln 原始檔 目標檔案 (硬連結生成時普通檔案-字元)
軟連結 ln -s 原始檔 目標檔案 (目標檔案不能事先存在)(生成的符號連結l型別)
硬連結:
是通過inode來進行連結的 在linux檔案系統中,多個檔名指向同一個inode是正常且允許的 硬連結檔案就相當於檔案的另外一個入口 硬連結的作用之一是允許一個檔案擁有多個有效路徑名(多個入口),這樣使用者就可以建立硬連結到重要的檔案 ,以防止 誤刪 源資料 注意:目錄不能作為硬連結
[root@oldbody ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@oldbody ~]# ln /etc/hosts hard_link [root@oldbody ~]# ll -ih /etc/hosts hard_link 654109 -rw-r--r--. 3 root root 158 1月 12 2010 /etc/hosts 654109 -rw-r--r--. 3 root root 158 1月 12 2010 hard_link [root@oldbody ~]# rm -f /etc/hosts [root@oldbody ~]# cat /etc/hosts cat: /etc/hosts: 沒有那個檔案或目錄 [root@oldbody ~]# cat hard_link 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@oldbody ~]# ln hard_link /etc/hosts [root@oldbody ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@oldbody ~]# ll -ih /etc/hosts hard_link 654109 -rw-r--r--. 3 root root 158 1月 12 2010 /etc/hosts 654109 -rw-r--r--. 3 root root 158 1月 12 2010 hard_link [root@oldbody ~]#
硬連結知識小結:
1、具有相同inode節點號的多個檔案是互為硬連結檔案
2、刪除硬連結檔案或者刪除原始檔任意之一,檔案實體並未被刪除
3、只有刪除了原始檔及所有對應的硬連結檔案,檔案實體才會被刪除
4、當所有的硬連結檔案及原始檔被刪除後,再存放新的資料會佔用這個檔案的空間,或者磁碟fsck檢查的時候,刪除的資料也會被系統回收(養成刪除及多套環境測試的好習慣)
5、硬連結檔案就是檔案的另一個入口(相當於超市的前門,後門一樣)
6、可以通過給檔案設定硬連結檔案,來防止重要檔案被誤刪
7、通過執行命令 ln 原始檔 硬連結檔案 即可完成建立硬連結
8、硬連結檔案是普通檔案,因此可以用rm命令刪除
9、對於靜態檔案(沒有程式正在呼叫的檔案)來講,當對應硬連結數為0 (i_link)檔案就被刪除 i_link的檢視方法(ls -l結果的第三列就是)
軟連線 或者符號連結 相當於win的快捷方式 注意:軟連線目錄可以建立
ln -s 原始檔 目標檔案
軟連結知識小結:
1、軟連結類似win的快捷方式(可以通過readlink檢視其指向)
2、軟連結類似一個文字檔案,裡面存放的是原始檔的路徑,指向原始檔實體
3、刪除原始檔,軟連結檔案依然存在,但是無法訪問指向的原始檔路徑的內容了
4、失效的時候一般是白字紅底閃爍提示
5、執行命令 ln -s 原始檔 軟連結檔案 即可完成建立軟連結(目標不能存在)
6、軟連結和原始檔是不同型別的檔案,也是不同的檔案,inode號也不相同
7、軟連結檔案型別為(l),可以用rm命令
[root@oldbody ~]# ln -s /etc/hosts soft_link [root@oldbody ~]# ll -ih /etc/hosts hard_link soft_link 654109 -rw-r--r--. 3 root root 158 1月 12 2010 /etc/hosts 654109 -rw-r--r--. 3 root root 158 1月 12 2010 hard_link 915785 lrwxrwxrwx 1 root root 10 9月 29 13:34 soft_link -> /etc/hosts
全域性結論:
刪除原始檔 對硬連結沒有影響 但是會導致軟連結檔案失效,白字紅底閃爍
刪除原始檔和硬連結檔案 整個檔案會真正的被刪除
很多硬體裝置中的快照功能 就是利用了硬連結的原理
[root@oldbody liangli2018]# ll -ihd oldboy oldboy/. oldboy/test/.. 915805 drwxr-xr-x 3 root root 4.0K 9月 29 13:44 oldboy 915805 drwxr-xr-x 3 root root 4.0K 9月 29 13:44 oldboy/. 915805 drwxr-xr-x 3 root root 4.0K 9月 29 13:44 oldboy/test/..
目錄的連結小結:
1、對於目錄 不可以建立硬連結 但可以建立軟連結(原因是目錄可以跨檔案系統的)
2、對於目錄的軟連結是生產場景運維中常用的技巧
3、目錄的硬連結不能跨越檔案系統(從硬連結原理可以理解 硬連結需要有相同的inode值)
4、每個目錄下面都有一個硬連結 “.” 號和對應上級目錄的硬連結“..”
5、再父目錄裡建立一個子目錄,父目錄的連結數增加1(每個子目錄裡都有..來指向父目錄)但是再父目錄裡建立檔案,父目錄的連結數不會增加
2.12 readlink
檢視符號連結檔案的內容
[root@oldbody ~]# readlink soft_link /etc/hosts [root@oldbody ~]#
2.13 find
查詢目錄下的檔案
語法格式 find 路徑 操作語句
pathname 命令所查詢的目錄路徑 如.表示當前目錄,用/表示根目錄
-maxdepth levels 查詢的最大目錄級數,levels為自然數
-type 檔案型別(f(file),d(directory),c(character字母),b(block塊)。s(socket),l(link),
-name “檔名” 支援萬用字元(* ? []等)
-mtime 後面接時間 按修改時間查詢 +7 7天以前 、7 第七天、-7最近7天
-atime 和-ctime 按照訪問時間和檔案狀態改變時間來查詢檔案
-exec 對匹配的檔案執行該引數所給出的shell命令
! 取反 -a 取交集 -o 取並集
例子:find /Tech -type f 意思就是查詢Tech下型別為檔案的東西
find /Tech -type f -name `oldboy.txt` 查詢Tech下檔名為oldboy.txt的檔案
find /Tech -type f -name ‘oldboy.txt’ -exec rm {} ; 意思是對前面查詢的檔案進行刪除的操作 {}表示find找到的內容
find /Tech -type f -name `*.txt` *號表示代表所有的檔案 萬用字元
find /Tech -type f -name `*.txt` | xargs rm -f 把查詢的內容通過管道 這個就相當於同時刪除*.txt所有檔案 等同於 rm -f /Tech/oldboy.txt /Tech/liangli.txt檔案一樣 其中xargs表示把*.txt做成一個檔案,可以一起進行刪除
find /log -type f -name `*.log` -mtime +15 | xargs rm -f 查詢/log目錄,刪15天以前修改過的檔案
find /log -type d -name `*oldboy` -mtime +30 | xargs rm -rf 查詢/log目錄,刪修改日期在30天以前且以oldboy名稱結尾的目錄
[root@oldbody oldboy]# ls oldboy.txt passwd test.txt [root@oldbody oldboy]# find /tmp/oldboy/ -type f ! -name "passwd" | xargs rm -f [root@oldbody oldboy]# ls passwd find的-delete引數 [root@oldbody key]# find . -type f -name "*.txt" ./file3.txt ./file1.txt ./file2.txt ./file4.txt ./file5.txt [root@oldbody key]# find . -type f -name "*.txt" -delete [root@oldbody data]# find /data/ -type f -name "*.txt" | xargs sed -i `s#oldgirll#oldboy#g` oldboyl oldboyl oldboyl oldboyl [root@oldbody data]# 方法二: find /data -type f -name “*.txt” -exec sed -i `s#oldgirll#oldboy#g` {} ; 方法三: sed -i `s#oldgirll#oldboy#g` `find /data -name “*.txt”` 最高效的處理方法 先執行反引號裡面的東西 [root@oldbody key]# tar zcvf oldboy.gz.tar `find . -type d -name "oldboy"` ./oldboy/ [root@oldbody key]# LL -bash: LL: command not found [root@oldbody key]# ll 總用量 44 drwxr-xr-x 2 root root 4096 9月 29 17:38 dir1.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir2.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir3.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir4.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir5.txt -rw-r--r-- 1 root root 45 9月 29 18:35 file1.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file2.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file3.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file4.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file5.txt drwxr-xr-x 2 root root 4096 9月 29 18:34 key -rw-r--r-- 1 root root 109 9月 29 18:39 key.gz drwxr-xr-x 2 root root 4096 9月 29 18:39 oldboy -rw-r--r-- 1 root root 115 9月 29 18:49 oldboy.gz.tar drwxr-xr-x 2 root root 4096 9月 29 18:40 oldgirl [root@oldbody key]# [root@oldbody key]# find . -type d -name "oldgirl" | xargs tar zcvf oldgirl.gz.tar ./oldgirl/ [root@oldbody key]# ll 總用量 48 drwxr-xr-x 2 root root 4096 9月 29 17:38 dir1.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir2.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir3.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir4.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir5.txt -rw-r--r-- 1 root root 45 9月 29 18:35 file1.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file2.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file3.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file4.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file5.txt drwxr-xr-x 2 root root 4096 9月 29 18:34 key -rw-r--r-- 1 root root 109 9月 29 18:39 key.gz drwxr-xr-x 2 root root 4096 9月 29 18:39 oldboy -rw-r--r-- 1 root root 115 9月 29 18:49 oldboy.gz.tar drwxr-xr-x 2 root root 4096 9月 29 18:40 oldgirl -rw-r--r-- 1 root root 115 9月 29 18:50 oldgirl.gz.tar [root@oldbody key]# [root@oldbody tmp]# find /data/ -type f -name "*.log" -size +1M -mtime +30 -exec mv {} /tmp ; [root@oldbody tmp]# [root@oldbody test]# find -type f -mtime -7 ./dir5/dir1/file3.txt ./dir5/dir1/file6.txt ./dir5/dir1/file1.txt ./dir5/dir1/file2.txt ./dir5/dir1/file5.txt ./.ori !還有取反的意思 把除了file1.txt檔案以外的檔案查詢出來 [root@oldbody test]# find -type f -name `file1.txt` ./dir5/dir1/file1.txt [root@oldbody test]# find -type f ! -name `file1.txt` ./dir5/dir1/file3.txt ./dir5/dir1/file6.txt ./dir5/dir1/file2.txt ./dir5/dir1/file5.txt ./.ori [root@oldbody test]# find /root -type f -exec ls -l {} ; 上面紅色的部分可以是其他任何命令,例如:ls,mv,cp等命令 {} 代表前面找出的file1.txt檔案(內容) ;作為轉義字元 後面的;作為結束標誌 [root@oldbody test]# find . -type f -name `file1.txt` -exec mv {} /tmp/ ; 是正確的 [root@oldbody key]# find . -type f -name "*.txt" -exec ls -l {} ; -rw-r--r-- 1 root root 0 9月 29 17:38 ./file3.txt -rw-r--r-- 1 root root 0 9月 29 17:38 ./file1.txt -rw-r--r-- 1 root root 0 9月 29 17:38 ./file2.txt -rw-r--r-- 1 root root 0 9月 29 17:38 ./file4.txt -rw-r--r-- 1 root root 0 9月 29 17:38 ./file5.txt [root@oldbody key]# find還有一個引數-ok 其實和-exec用法一樣,唯一區別就是使用-ok的話 在刪除之前會給出提示 需要管理員確認後方可刪除,計較安全 [root@oldbody key]# find . -type f -name "*.txt" -ok ls -l {} ; < ls ... ./file3.txt > ? y -rw-r--r-- 1 root root 0 9月 29 17:38 ./file3.txt < ls ... ./file1.txt > ? y -rw-r--r-- 1 root root 0 9月 29 17:38 ./file1.txt < ls ... ./file2.txt > ? y -rw-r--r-- 1 root root 0 9月 29 17:38 ./file2.txt < ls ... ./file4.txt > ? y -rw-r--r-- 1 root root 0 9月 29 17:38 ./file4.txt < ls ... ./file5.txt > ? y -rw-r--r-- 1 root root 0 9月 29 17:38 ./file5.txt [root@oldbody key]# [root@oldbody test]# ls /tmp/ 123.log file1.txt oldboy [root@oldbody test]# [root@oldbody test]# find -type f -name `file2.txt` | xargs -i mv {} /tmp/ [root@oldbody test]# ls /tmp 123.log file1.txt file2.txt oldboy -i引數就是把前面查詢的內容丟到{}中 [root@oldbody test]# mv `find -type f -name `file3.txt`` /tmp/ [root@oldbody test]# ls /tmp 123.log file1.txt file2.txt file3.txt oldboy [root@oldbody test]# mv中-t引數將源和目標反轉過來 find . -type f -name “file3.txt” | xargs mv -t dir2/ no such file or directory 沒有這樣的檔案或目錄 按照目錄或者檔案的許可權來進行查詢 -perm 644 引數 [root@oldbody key]# ll 總用量 20 drwxr-xr-x 2 root root 4096 9月 29 17:38 dir1.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir2.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir3.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir4.txt drwxr-xr-x 2 root root 4096 9月 29 17:38 dir5.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file1.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file2.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file3.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file4.txt -rw-r--r-- 1 root root 0 9月 29 17:38 file5.txt [root@oldbody key]# [root@oldbody key]# [root@oldbody key]# find . -type f -perm 644 ./file3.txt ./file1.txt ./file2.txt ./file4.txt ./file5.txt [root@oldbody key]# 引數-size 按大小查詢檔案 [root@oldbody key]# find . -type f -size -1M 小於1M ./file3.txt ./file1.txt ./file2.txt ./file4.txt ./file5.txt [root@oldbody key]# find中xargs和-exec的區別 -exec 該引數是將查詢的結果檔名逐個傳遞給後面的命令執行,如果檔案比較多則執行效率會比較低 檔名有空格等特殊字元照常處理 xargs 該命令是將查詢的結果一次性傳遞給後面的命令執行,命令執行效率高,可以使用-n引數控制一次傳遞給檔案的個數 處理特殊的檔名(如:檔名有空格)需要採用特殊的方式 [root@oldbody key]# find . -type f -name "*.txt" ./file3.txt ./file1.txt ./file2.txt ./file4.txt ./file5.txt [root@oldbody key]# find . -type f -name "*.txt" -exec echo mingtiannihao {} ; mingtiannihao ./file3.txt mingtiannihao ./file1.txt mingtiannihao ./file2.txt mingtiannihao ./file4.txt mingtiannihao ./file5.txt [root@oldbody key]# find . -type f -name "*.txt" | xargs echo mingtiannihao mingtiannihao ./file3.txt ./file1.txt ./file2.txt ./file4.txt ./file5.txt [root@oldbody key]# find . -type f -name "*.txt" | xargs -n 3 echo mingtiannihao mingtiannihao ./file3.txt ./file1.txt ./file2.txt mingtiannihao ./file4.txt ./file5.txt [root@oldbody key]# [root@oldbody key]# touch "hello word.txt" [root@oldbody key]# touch mingtian nihao.txt [root@oldbody key]# ll 總用量 0 -rw-r--r-- 1 root root 0 9月 29 14:23 hello word.txt -rw-r--r-- 1 root root 0 9月 29 14:25 mingtian nihao.txt [root@oldbody key]# [root@oldbody key]# find . -type f -name "*.txt" |xargs rm rm: 無法刪除"./hello": 沒有那個檔案或目錄 rm: 無法刪除"word.txt": 沒有那個檔案或目錄 rm: 無法刪除"./mingtian": 沒有那個檔案或目錄 rm: 無法刪除"nihao.txt": 沒有那個檔案或目錄 [root@oldbody key]# [root@oldbody key]# find . -type f -name "*.txt" -print0|xargs -0 rm [root@oldbody key]# ll 總用量 0 [root@oldbody key]#
2.14 xargs
將標準輸入轉換成命令列引數
三行文字變成一行文字了
[root@oldbody test]# cat test.txt 1 2 3 4 5 6 7 8 9 10 11 [root@oldbody test]# xargs < test.txt 1 2 3 4 5 6 7 8 9 10 11 [root@oldbody test]# -n 引數 -n 4 以4個字元為一組 [root@oldbody test]# xargs -n 4 < test.txt 1 2 3 4 5 6 7 8 9 10 11 [root@oldbody test]# 自定義分隔符-d引數 [root@oldbody ~]# echo splitXsplitXsplitXsplitX |xargs -d X split split split split [root@oldbody ~]# echo splitXsplitXsplitXsplitX |xargs -d X -n 2 split split split split -i 引數 把前面找到的檔案命令和 {} 進行關聯 用引數i來實現 [root@oldbody key]# find . -type f -name "file*" ./file3.txt ./file1.txt ./file2.txt [root@oldbody key]# find . -type f -name "file*" | xargs -i mv {} dir1/ [root@oldbody key]# ll 總用量 4 drwxr-xr-x 2 root root 4096 9月 29 14:14 dir1 [root@oldbody key]# tree . └── dir1 ├── file1.txt ├── file2.txt └── file3.txt 1 directory, 3 files [root@oldbody key]# 結合find使用xargs的特殊案例 xargs -0(數字0) [root@oldbody key]# touch "hello word.txt" [root@oldbody key]# touch mingtian nihao.txt [root@oldbody key]# ll 總用量 0 -rw-r--r-- 1 root root 0 9月 29 14:23 hello word.txt -rw-r--r-- 1 root root 0 9月 29 14:25 mingtian nihao.txt [root@oldbody key]# [root@oldbody key]# find . -type f -name "*.txt" |xargs rm rm: 無法刪除"./hello": 沒有那個檔案或目錄 rm: 無法刪除"word.txt": 沒有那個檔案或目錄 rm: 無法刪除"./mingtian": 沒有那個檔案或目錄 rm: 無法刪除"nihao.txt": 沒有那個檔案或目錄 [root@oldbody key]# [root@oldbody key]# find . -type f -name "*.txt" -print0|xargs -0 rm [root@oldbody key]# ll 總用量 0 [root@oldbody key]#
2.15 rename
rename from to file 重新命名檔案
rename
from 代表需要替換或要處理的字元 一般是檔案的一部分 或者是檔案的副檔名
to 把前面form代表的內容替換為to代表的內容即重新命名處理後的結果
file 就是我們需要處理的檔案
[root@oldboy test]# touch shu_102999_{1..5}_finished.jpg [root@oldboy test]# [root@oldboy test]# [root@oldboy test]# ll 總用量 0 -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_1_finished.jpg -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_2_finished.jpg -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_3_finished.jpg -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_4_finished.jpg -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_5_finished.jpg [root@oldboy test]# rename "finished" "" * 把finished替換成空 [root@oldboy test]# ll 總用量 0 -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_1_.jpg -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_2_.jpg -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_3_.jpg -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_4_.jpg -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_5_.jpg [root@oldboy test]# rename "jpg" "JPG" * [root@oldboy test]# ll 總用量 0 -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_1_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_2_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_3_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_4_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 shu_102999_5_.JPG 11:38 shu_102999_5_.JPG [root@oldboy test]# rename "102999" "1314" /root/test/* -rw-r--r-- 1 root root 0 9月 19 11:38 shu_1314_1_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 shu_1314_2_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 shu_1314_3_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 shu_1314_4_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 shu_1314_5_.JPG [root@oldboy test]#
2.16 basename
basename命令用於顯示去除路徑和檔案字尾部分的檔名或目錄名
[root@oldboy test]# ll 總用量 0 -rw-r--r-- 1 root root 0 9月 19 11:38 _1314_1_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 _1314_2_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 _1314_3_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 _1314_4_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 _1314_5_.JPG [root@oldboy test]# basename /root/test/_1314_1_.JPG _1314_1_.JPG [root@oldboy test]# basename /root/test/_1314_1_.JPG .JPG _1314_1_ [root@oldboy test]# basename /root/test/_1314_1_.JPG _.JPG _1314_1 [root@oldboy test]#
2.17 dirname
顯示檔案或目錄名
[root@oldboy test]# ll 總用量 0 -rw-r--r-- 1 root root 0 9月 19 11:38 _1314_1_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 _1314_2_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 _1314_3_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 _1314_4_.JPG -rw-r--r-- 1 root root 0 9月 19 11:38 _1314_5_.JPG [root@oldboy test]# dirname /root/test/_1314_1_.JPG /root/test [root@oldboy test]#
2.18 chattr
改變檔案的擴充套件屬性
chattr命令 只能是root使用者用 其他使用者使用不了
-a 只能向檔案追加資料 你不能刪除它 不能清空它
用途:比如.bash_history檔案中寫入歷史紀錄,可以採用-i追加模式,只增不減
-i 設定檔案不能被刪除,改名,寫入或新增內容
用途:希望鎖定的檔案不能被刪除或修改,比如/etc/passwd
-R 遞迴更改目錄屬性
+ 增加引數 – 移除引數 = 更新為指定引數
lsattr命令 所有使用者都能夠使用 顯示檔案的擴充套件屬性
[root@oldboy ~]# lsattr person.txt -------------e- person.txt [root@oldboy ~]# [root@oldboy ~]# [root@oldboy ~]# chattr +a person.txt [root@oldboy ~]# lsattr person.txt -----a-------e- person.txt [root@oldboy ~]# [root@oldboy ~]# rm -f person.txt rm: 無法刪除"person.txt": 不允許的操作 [root@oldboy ~]# > person.txt -bash: person.txt: 不允許的操作 [root@oldboy ~]# echo 111 >> person.txt [root@oldboy ~]# cat person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 011111111 0111111100 111 [root@oldboy ~]# -i 就是加鎖 [root@oldboy ~]# chattr +i .bash_history [root@oldboy ~]# lsattr .bash_history ----i--------e- .bash_history [root@oldboy ~]# [root@oldboy ~]# >.bash_history -bash: .bash_history: 許可權不夠 [root@oldboy ~]# echo 1111>>.bash_history -bash: .bash_history: 許可權不夠 [root@oldboy ~]# rm -f .bash_history rm: 無法刪除".bash_history": 不允許的操作 [root@oldboy ~]# [root@oldbody key]# tree . ├── 123 │ └── mintain ├── 456 └── 789 4 directories, 0 files [root@oldbody key]# chattr +a -R 123 [root@oldbody key]# lsattr -------------e- ./456 -------------e- ./789 -----a-------e- ./123 [root@oldbody key]# cd 123 [root@oldbody 123]# ll 總用量 4 drwxr-xr-x 2 root root 4096 9月 29 14:57 mintain [root@oldbody 123]# lsattr -----a-------e- ./mintain
2.19 file
file 後面接檔案或目錄 檢視檔案型別
[root@oldboy ~]# file xiaomi.txt xiaomi.txt: ASCII text [root@oldbody ~]# file * 1.txt: ASCII text anaconda-ks.cfg: ASCII English text hard_link: ASCII text install.log: UTF-8 Unicode text install.log.syslog: ASCII text key: directory key1: symbolic link to `key` liangli: directory liangli2018: directory oldboy.txt: ASCII text soft_link: symbolic link to `/etc/hosts`
2.20 md5sum
-c 從指定檔案中讀取MD5校驗值,並進行校驗
計算和校驗檔案的md5值 (md5值是唯一的 兩個檔案如果md5一樣的話 證明是同一個檔案)原始檔和硬連結檔案和軟連結檔案md5sum是一樣的
[root@oldboy ~]# ln xiaomi.txt xiaomi2.txt [root@oldboy ~]# md5sum xiaomi.txt d41d8cd98f00b204e9800998ecf8427e xiaomi.txt [root@oldboy ~]# md5sum xiaomi2.txt d41d8cd98f00b204e9800998ecf8427e xiaomi2.txt [root@oldboy ~]# md5sum xiaomi3.txt d41d8cd98f00b204e9800998ecf8427e xiaomi3.txt [root@oldboy ~]# [root@oldboy ~]# md5sum xiaomi.txt >md5.log [root@oldboy ~]# cat md5.log d41d8cd98f00b204e9800998ecf8427e xiaomi.txt [root@oldboy ~]# md5sum -c md5.log 顯示校驗結果是否成功 xiaomi.txt: 確定 [root@oldboy ~]# 模擬網路波動造成現象 [root@oldboy ~]# echo "1111">>xiaomi.txt [root@oldboy ~]# md5sum xiaomi.txt 1f18348f32c9a4694f16426798937ae2 xiaomi.txt [root@oldboy ~]# md5sum -c md5.log xiaomi.txt: 失敗 md5sum: 警告:1/1 生成的校驗和不匹配 [root@oldboy ~]#
2.21 chown
改變檔案或目錄的使用者和使用者組
chown命令 只能是root使用者使用 改變檔案的屬主和屬組(就是使用者和使用者組)
chown 使用者 檔案或目錄
chown :使用者組 檔案或目錄
chown 使用者:使用者組 檔案或目錄 其中:可以用.號代替
-R 就是遞迴的意思
[root@oldboy ~]# chown oldboy test.txt [root@oldboy ~]# ll test.txt -rw-r--r-- 2 oldboy root 419 9月 19 10:01 test.txt [root@oldboy ~]# 這個前提條件是oldboy使用者必須在/etc/passed 和/etc/group中 存在 [root@oldboy ~]# chown :user1 test.txt [root@oldboy ~]# ll test.txt -rw-r--r-- 2 oldboy user1 419 9月 19 10:01 test.txt [root@oldboy ~]# [root@oldboy ~]# chown root.root test.txt [root@oldboy ~]# ll test.txt -rw-r--r-- 2 root root 419 9月 19 10:01 test.txt [root@oldboy ~]# -R 就是遞迴的意思 [root@oldboy test]# pwd /root/test [root@oldboy test]# chown -R oldboy.oldboy /root/test [root@oldboy test]# ll 總用量 0 -rw-r--r-- 1 oldboy oldboy 0 9月 19 11:38 _1314_1_.JPG -rw-r--r-- 1 oldboy oldboy 0 9月 19 11:38 _1314_2_.JPG -rw-r--r-- 1 oldboy oldboy 0 9月 19 11:38 _1314_3_.JPG -rw-r--r-- 1 oldboy oldboy 0 9月 19 11:38 _1314_4_.JPG -rw-r--r-- 1 oldboy oldboy 0 9月 19 11:38 _1314_5_.JPG [root@oldboy test]#
2.22 chmod
改變檔案或目錄的許可權
chmod命令 可以是root使用者用 也可以是這個檔案的屬主使用 改變檔案或目錄許可權
-R 遞迴引數
例如: rwxr-xr-x 9個字元 三個許可權是一組
前三位叫屬主許可權位 /使用者許可權位 假如我root使用者對oldboy具有讀寫執行許可權位
r-xr 是使用者組對應的許可權 當有人加入到使用者組的話,就對應這個許可權位
r-w 其他使用者許可權位
+ 加入
– 減去
= 設定
r 4 讀
w 2 寫
x 1 執行
– 0 無
使用者型別
u user 使用者
g group 使用者組
o Other 其他
a ALL 總和
[root@oldboy ~]# ll test.txt -rw-r--r-- 2 root root 419 9月 19 10:01 test.txt [root@oldboy ~]# chmod u=x,g=w,o=rwx test.txt [root@oldboy ~]# ll test.txt ---x-w-rwx 2 root root 419 9月 19 10:01 test.txt [root@oldboy ~]# chmod o=--- test.txt [root@oldboy ~]# ll test.txt ---x-w---- 2 root root 419 9月 19 10:01 test.txt [root@oldboy ~]# chmod o-rwx test.txt [root@oldboy ~]# ll test.txt ---x-w---- 2 root root 419 9月 19 10:01 test.txt [root@oldboy ~]# [root@oldboy ~]# chmod 421 test.txt [root@oldboy ~]# ll test.txt -r---w---x 2 root root 419 9月 19 10:01 test.txt [root@oldboy ~]# [root@oldbody key]# tree . └── 123 └── mintain 2 directories, 0 files [root@oldbody key]# chmod 744 -R 123/ [root@oldbody key]# ll 總用量 4 drwxr--r-- 3 root root 4096 9月 29 14:57 123 [root@oldbody key]# ll 123 總用量 4 drwxr--r-- 2 root root 4096 9月 29 14:57 mintain [root@oldbody key]#
2.23 chgrp
更改檔案的使用者組 基本被淘汰
[root@oldboy ~]# ll test.txt -r---w---x 2 root root 419 9月 19 10:01 test.txt [root@oldboy ~]# chgrp user1 test.txt [root@oldboy ~]# ll test.txt -r---w---x 2 root user1 419 9月 19 10:01 test.txt [root@oldboy ~]#
2.24 umask
顯示或設定許可權掩碼
umask (預設許可權分配的命令)為什麼預設許可權目錄是755,檔案許可權是644 而不是其他的值呢
不管是作業系統還是網站,安全許可權的臨界點,目錄755檔案644 是相對安全的許可權,並且使用者為root 以及使用者組root
以上許可權兼顧了安全和使用,生產工作中一定要儘量要我們檔案和目錄達到以上預設的許可權,包括使用者和屬組都是root,Linux系統預設許可權的方針,允許瀏覽,檢視,但是禁止建立和修改檔案及內容以及執行
在linux下檔案的預設許可權是由umask值決定的,umask是通過八進位制的數值來決定使用者建立檔案或目錄的預設許可權的,umask對應數值表示的是禁止的許可權
超級使用者
[root@oldboy ~]# umask 0022 [root@oldboy ~]# 普通使用者 [test@oldboy ~]$ umask 0002 [test@oldboy ~]$ umask越小,許可權越大,根據umask值計算檔案許可權3中方法 檔案的許可權從666開始算起,umask都為偶數,直接相減,如果有奇數對應位+1 比如: 6 6 6 0 2 2 - --------------- 6 4 4 [root@oldboy ~]# ll xiaomi.txt -rw-r--r-- 2 root root 5 9月 19 12:28 xiaomi.txt [root@oldboy ~]# [root@oldboy ~]# [root@oldboy ~]# umask 0022 [root@oldboy ~]# [root@oldboy ~]# umask 044 [root@oldboy ~]# touch f044 [root@oldboy ~]# ll f044 -rw--w--w- 1 root root 0 9月 20 11:54 f044 [root@oldboy ~]# umask 064 [root@oldboy ~]# touch liangli123.txt [root@oldboy ~]# ll liangli123.txt -rw-----w- 1 root root 0 9月 20 11:56 liangli123.txt [root@oldboy ~]# [root@oldboy ~]# umask 043 [root@oldboy ~]# touch f043 [root@oldboy ~]# ll f043 -rw--w-r-- 1 root root 0 9月 20 11:58 f043 [root@oldboy ~]# umask 055 [root@oldboy ~]# touch f055 [root@oldboy ~]# ll f055 -rw--w--w- 1 root root 0 9月 20 11:59 f055 [root@oldboy ~]# 對於目錄的許可權從777開始(不分奇偶) [root@oldboy ~]# umask 065 [root@oldboy ~]# mkdir d065 [root@oldboy ~]# ll d065 總用量 0 [root@oldboy ~]# ll -d d065 drwx--x-w- 2 root root 4096 9月 20 12:02 d065 上面的修改都是臨時生效的,想要永久生效就需要修改配置檔案/etc/profile或者/etc/bashrc [root@oldbody ~]# sed -n `61,69p` /etc/profile if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi for i in /etc/profile.d/*.sh ; do if [ -r "$i" ]; then if [ "${-#*i}" != "$-" ]; then [root@oldbody ~]# sed -n `57,68p` /etc/bashrc fi esac } # By default, we want umask to get set. This sets it for non-login shell. # Current threshold for system reserved uid/gids is 200 # You could check uidgid reservation validity in # /usr/share/doc/setup-*/uidgid file if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 [root@oldbody ~]#
幾乎沒有什麼需求要修改必須要修改umask的,預設的umask是系統安全的臨界點,是最合適的
若要修改的話,將umask 033放在配置檔案的最後一行即可