第二章 檔案和目錄操作命令

key-oldboy發表於2018-09-30

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

相關文章