1. 程式人生 > >第二章 文件和目錄操作命令

第二章 文件和目錄操作命令

win etc 相減 源文件 inux 用戶 alex rac data

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放在配置文件的最後一行即可

第二章 文件和目錄操作命令