第二章 文件和目錄操作命令
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\test 而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放在配置文件的最後一行即可
第二章 文件和目錄操作命令