一、目录管理命令(mkdir、rmdir)

linux文件的类型有:-:普通文件此案;d:目录文件;b:块设备文件;c:字符设备文件;l:链接文件;s:套接字文件;p:管道文件。

1、mkdir:创建目录(作用于路径基名,路径基名之前路径名必须存在)

  mkdir [OPTION]... DIRECTORY...

OPTION:

    -p:创建目录时,如果路径基名前的路径不存在,则创建路径名。

    -v:显示创建目录的过程。verbose

    -m mode:创建目录时,设置目录权限,如果不给参数mode,即为默认权限。


扩展1:创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b 

方法一:#mkdir /tmp/x/y1 /tmp/x/y2 /tmp/x/y1/a /tmp/x/y1/b -pv

方法二:用命令行展开机制:

            [root@localhost tmp]# mkdir /tmp/x/{y1/{a,b},y2} -pv

            mkdir: 已创建目录 "/tmp/x"

            mkdir: 已创建目录 "/tmp/x/y1"

            mkdir: 已创建目录 "/tmp/x/y1/a"

            mkdir: 已创建目录 "/tmp/x/y1/b"

            mkdir: 已创建目录 "/tmp/x/y2"

            [root@localhost tmp]#

[root@localhost tmp]# tree x            //查看目录x的目录结构

x

|-- y1

|   |-- a

|   `-- b

`-- y2


扩展2:创建a_c,a_d,b_c,b_d

  • [root@localhost tmp]# mkdir ./x/{a,b}_{c,d}        //多项式相乘。

  • [root@localhost tmp]# mkdir -pv /tmp/x/{a_{c,d},b_{c,d}}

扩展3:

2、rmdir:删除目录:(仅用于删除空目录,且没有选项可以强制删除)

 rmdir [OPTION]... DIRECTORY...

OPTION

    -p:删除某目录时,如果其父目录为空,则一并删除。

    -v:显示删除过程


二:文本类管理命令:

1、查看文本文件命令(cat、tac、head、tail、more、less、wc、cut、sort、uniq、diff、patch)

cat、tac查看文本文件时,直接翻到文件末尾;(cat -n:显示文件行号)

a)、分屏查看命令:

    more:查看文件,翻至文件尾部,自动退出;空格向后翻一屏,b键向前翻一屏

    less:用法和man命令差不多。


b1)、head:查看文件的前n行(默认为前10行)

 head [OPTION]... [FILE]...

OPTION:  

  -n # :查看前n行,(也可以直接用-#代替,如:head -n 20 和head -20 是一样的)

b2)、tail查看文件的后n行(默认为10行)

 tail [OPTION]... [FILE]...

OPTION:

     -n # :   查看后n行,(也可以直接用-#代替,如:tail -n 20 和tail -20 是一样的)

    -f:         查看最后行时不退出。等待追加进来的新行并直接显示。(在观测日志增长时有用)


c)、wc:统计文本文件中的行数、单词数、字节数;

 wc [OPTION]... [FILE]...

OPTION:

    -l:行

    -w:单词数

    -c:bytes字节数

    

  wc [OPTION]... --files0-from=F

如:

[root@promote ~]# wc /etc/passwd        //64行、135个单词(连续非特殊字符)、3543个字节数

  64  135 3543 /etc/passwd

[root@promote ~]#


d)、cut:移除每一行中的指定片段(文本截取工具)

 cut OPTION... [FILE]...

OPTION:

    -d CHAR:以CAHR为分隔符;(只能指定单个分隔符)

    -f    #:仅显示#字段;

    -f #-N:显示#至N字段;

    -f #,N :显示第#和第N字段;

如:

[root@promote ~]# tail -3 /etc/passwd

gentoo:x:1001:1001::/users/gentoo:/bin/bash

fedora:x:1002:1002::/users/fedora:/bin/bash

username:x:1003:1003::/home/username:/bin/bash

[root@promote ~]# tail -3 /etc/passwd | cut -d : -f 1,7    //-d : 以:为分隔符,-f1,7:显示1和7字段;

gentoo:/bin/bash

fedora:/bin/bash

username:/bin/bash

[root@promote ~]#


e)、sort:排序

  sort [OPTION]... [FILE]...

  sort [OPTION]... --files0-from=F

OPTION:

    -n:基于数值大小排序,而非字符

    -t CHAR:以指定分隔符char排序

    -k # :用于排序比较的字段

    -r:逆序排序,默认是顺序排列的

    -f:忽略字符大小写进行排序。

    -u:重复的行只保留一份;

如:

[root@promote ~]# sort -t : -k 7 -u /etc/passwd    //以:为分隔符,显示第7字段排序,并去重复的行;

root:x:0:0:root:/root:/bin/bash

tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat:/bin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

halt:x:7:0:halt:/sbin:/sbin/halt

bin:x:1:1:bin:/bin:/sbin/nologin

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

[root@promote ~]#


f)、uniq:移除或报告重复的行;(一般和sort连用)

  uniq [OPTION]... [INPUT [OUTPUT]]

OPTION:

    -c:对每一行出现的次数做计数

    -u:只显示没有重复的行

    -d:只显示重复的行

如:

[root@promote ~]# cut -d : -f 7 /etc/passwd  | sort  | uniq -c

      7 /bin/bash

      1 /bin/nologin

      1 /bin/sync

      1 /sbin/halt

     53 /sbin/nologin

      1 /sbin/shutdown


g)、diff:逐行比较文件的不同处;(一般和patch一起使用,patch打补丁)

 diff [OPTION]... FILES

OPTION:

    -u :使用unfied机制,即显示要修改的行的上下文,默认为三行;

生成补丁:

diff  OLDFILE NEWFILE  > PATCH_FILE


h)、patch :向文件打补丁(一般和diff一起使用)

patch [OPTION] -l PATCH_FILE  OLDFILE    //向older文件打补丁patch_file


patch OLDFILE < PATCH_FILE



2、stat:显示文件或文件系统的状态。

 stat [OPTION]... FILE...

如:

[root@localhost ~]# stat /etc/passwd

  文件:"/etc/passwd"

  大小:3349            块:8          IO 块:4096   普通文件

设备:fd00h/64768d      Inode:38661949    硬链接:1

权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)

环境:system_u:object_r:passwd_file_t:s0

最近访问:2016-11-12 21:44:27.506274786 +0800    //最近一次打开时间

最近更改:2016-10-15 11:49:07.453292619 +0800    //新增、删除(数据改变)

最近改动:2016-10-15 11:49:07.453292619 +0800    //元数据改变

创建时间:-

[root@localhost ~]#


时间戳:(元数据)

最近访问:2016-11-12 21:44:27.506274786 +0800    //最近一次打开时间

最近更改:2016-10-15 11:49:07.453292619 +0800    //新增、删除(数据改变)

最近改动:2016-10-15 11:49:07.453292619 +0800    //元数据改变



3、touch:改变文件时间戳或者创建一个不存在的文件。

 touch [OPTION]... FILE...

如:

[root@localhost ~]# touch /etc/passwd        //将文件系统的时间戳改为当下时间。

[root@localhost ~]# stat /etc/passwd

  文件:"/etc/passwd"

  大小:3349            块:8          IO 块:4096   普通文件

设备:fd00h/64768d      Inode:38661949    硬链接:1

权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)

环境:system_u:object_r:passwd_file_t:s0

最近访问:2016-11-13 17:09:12.050331106 +0800

最近更改:2016-11-13 17:09:12.050331106 +0800

最近改动:2016-11-13 17:09:12.050331106 +0800

创建时间:-

[root@localhost ~]#


[root@localhost ~]# ls

15-14-09  15-19-26  anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面

[root@localhost ~]# touch abc        //创建一个不存在的文件

[root@localhost ~]# ls

15-14-09  15-19-26  abc  anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面

[root@localhost ~]# file abc        //查看文件类型

abc: empty

[root@localhost ~]# type abc        //查看命令类型

-bash: type: abc: 未找到

[root@localhost ~]#


OPTION:

    -c:指定的文件路径不存在时不予创建

    -a:只改最近访问的时间

    -m:只改最近改动的时间

  注意:最近改动时间不能手动更改,因为最近改动时间会改变最近改动时间

    -t :STAMP   use [[CC]YY]MMDDhhmm[.ss] instead of current time

   如:

[root@localhost ~]# stat abc

  文件:"abc"

  大小:0               块:0          IO 块:4096   普通空文件

设备:fd00h/64768d      Inode:72910278    硬链接:1

权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)

环境:unconfined_u:object_r:admin_home_t:s0

最近访问:2016-11-13 17:12:06.271883893 +0800

最近更改:2016-11-13 17:21:22.000000000 +0800

最近改动:2016-11-13 17:22:11.355353388 +0800

创建时间:-

[root@localhost ~]# touch -m -t 1211101721.22 abc    //只改动最近更改时间,最近改动会更新到当下时间。

[root@localhost ~]# stat abc

  文件:"abc"

  大小:0               块:0          IO 块:4096   普通空文件

设备:fd00h/64768d      Inode:72910278    硬链接:1

权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)

环境:unconfined_u:object_r:admin_home_t:s0

最近访问:2016-11-13 17:12:06.271883893 +0800

最近更改:2012-11-10 17:21:22.000000000 +0800

最近改动:2016-11-13 17:22:58.075076404 +0800

创建时间:-

[root@localhost ~]#


4、文件管理工具:(cp、mv、rm)

a)、cp :复制命令copy (注意:cp命令默认不支持源是目录文件)

SYNOPSIS

  1.        cp [OPTION]... [-T] SOURCE DEST        //单目标复制,源和目的可以是文件也可以是目录

  2.        cp [OPTION]... SOURCE... DIRECTORY        //多个源文件复制

  3.        cp [OPTION]... -t DIRECTORY SOURCE...    //多个源文件复制




    i、cp [OPTION]... [-T] SOURCE DEST            //单个源

        如果DEST不存在,则事先创建此文件,并复制源文件的数据流至DEST中

        如果DEST存在:

                    如果DEST是非目录文件,则覆盖目标文件

                    如果DEST是目录文件,则先在DEST目录下创建一个与源文件同名的文件,并复制数据流


  1.        cp [OPTION]... SOURCE... DIRECTORY        //多个源文件复制

  2.        cp [OPTION]... -t DIRECTORY SOURCE...    //多个源文件复制(不常用)

             这两个命令是一样的都是多源复制

            如果DEST不存在,则会报错

            如果DEST存在:

                    如果DEST是非目录文件,则会报错

                    如果DEST是目录文件,分别复制每个文件至目标目录中,并保持原名。

注意:以上的目标(DEST)都是单个文件或目录,而源可以是单个或多个


OPTION:

    -i:交互提醒;

    -a:-dr用于实现归档;

    -f:force强制覆盖目标效果;

    -r:递归复制目录

    -d:复制符号链接本身,而非其指向的源文件。

            --preserve

     -p :    same as --preserve=mode,ownership,timestamps

 --preserve[=ATTR_LIST]

              preserve the specified attributes (default:  mode,ownership,timestamps),  if  possible  additional

              attributes: context, links, xattr, all


b)、mv:移动命令(和cp用法基本一样),也可以用于重命名

在同一目录下相当于重命名

不在同一目录下是移动。


c)、rm:删除命令(remove)可以删除文件也可以删除目录。//不建议使用,可以mv到其他地方。

     rm [OPTION]... FILE...

  OPTION:

    -r:递归删除

    -i:交互,默认

    -f:强制删除  


5、文件查找:locate、find

5.1、locate:

模糊匹配,模糊查找,依赖于事先构建的索引库系统自动实现(周期性任务),也可以手动更新数据库(updatedb)),只要包括查找的文件字符串就显示出来;

注意:updatedb命令很消耗资源,因为要遍历整个文件系统,不建议使用

locate [OPTION]... PATTERN...

OPTION:

-b:只匹配路径中的基名,而非整个路径;

-c:统计有多少个符合条件的文件;

-r:基于基本正则表达式来匹配文件


5.2、find:

实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找;

工作特点:

    查找速度略慢

    精确查找

    实时查找

 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

其中expression由选项和测试组成;测试通常为布尔型(true、flase);

或:find [OPTIONS] [查找起始路径] [查找条件] [处理动作]

查找起始路径:指定搜索目标的起始路径;默认为当前目录;

查找条件(expression):指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等

 根据文件名查找:

        -name  pattern:

        -iname  pattern:不区分字符大小写,

                       pattern支持glob模式的通配符(*、?、[ ] [^ ]),而不是正则表达式;如:

[root@promote /]# find /etc/ -name *pass

/etc/pam.d/kcheckpass

        -regex  pattern:基于正则表达式查找文件,匹配整个路径,而非基名;(不常用)

 根据文件从属关系查找:

        -user USERNAME:根据文件属主查找;如:find /etc/ -user root

        -group GROUPNAME:根据文件属组查找:如:find /etc/ -group root

        -uid UID:根据uid查找;

        -gid GID:根据gid查找;

        -nouser: 查找没有属主的文件;//当一个用户删除时,原来属主为他的文件会变成id显示;

        -nogroup:查找没有属组的文件;

如:

[root@promote tmp]# ll a b c

-rw-r--r--. 1 test1 root 0 Dec 16 23:01 a

[root@promote tmp]# userdel -r test1

[root@promote tmp]# ll a 

-rw-r--r--. 1 1007 root 0 Dec 16 23:01 a

[root@promote tmp]# find /tmp/ -nouser

/tmp/a

[root@promote tmp]#

根据文件的类型来查找:

        -type type

                type: f:普通文件;

                           d:目录文件;

                            l:符号链接文件;

                            b:块设备文件;

                            c:字符设备文件;

                            p:管道文件;

                            s:套接字文件;

如:

[root@promote tmp]# find  /tmp/ -type f -ls    //-ls是执行的动作,默认是标准输出;

105261823   16 -rw-r--r--   1 root     root        13948 Dec 16 11:04 /tmp/functions

[root@promote tmp]#

[root@promote tmp]# find /etc/  -type l -ls    //查找符号链接文件,并查看指向何处

33554564    0 lrwxrwxrwx   1 root     root           17 Nov 29 20:13 /etc/mtab -> /proc/self/mounts    

    根据逻辑组合测试来查找:    

        -a:逻辑运算“与”; 默认为与;       

        -o:逻辑运算“或”;只要符合二者其中之一就可以

        -not:逻辑运算“非” ;

如:

[root@promote ~]# find /tmp/ -not -user root -ls    //查找属主为非root的文件;

[root@promote ~]# find /tmp/ -not -name "*fstab*" -ls    //查找文件名不包含fstab字符串的文件;

[root@promote ~]# find /tmp/ -not -user root -a -not -name "*fstab*" -ls    //查找文件属主为非root且名字不包含fstab字符串的文件

[root@promote ~]# find /tmp/ -not \( -user root -o -name "*fstab*" \) -ls    //查找文件属主为非root且名字不包含fstab字符串的文件,如果不加(),ls命令会结合-o会面的命令显示

根据文件的大小来查找:

        -size [+|-]#UNIT:

        #表示数字;UNIT表示单位;

        #UNIT(不带加减号(+|-)时表示精确查找,他会查找在(#-1,#]区间大小的文件;

        -#UNIT(带减号表示):表示查找在[0,#-1]区间大小的文件;

        +#UNIT(带加号表示):表示查找在(#,∞)区间大小的文件;

                常用单位(UNIT):k、M、G;默认是字节;

如:

[root@promote tmp]# find /tmp/ -size 13k

/tmp/autofs.conf

[root@promote tmp]#

根据时间戳来查找文件:(+表示时间外,-表示时间内,不带+-号表示具体时间)

        以为单位来查找:

                -atime  [+|-]#UNIT:访问时间

                -mtime [+|-]#UNIT:修改时间

                -ctime  [+|-]#UNIT:改动时间:

        以分钟为单位来查找:

                -amin  [+|-]#UNIT:访问时间

                -mmin [+|-]#UNIT:修改时间

                -cmin  [+|-]#UNIT:改动时间

如:

find /tmp/ -atime 4     //查找4天内访问过的文件

 根据文件权限来查找:

        -perm [/|-]MODE:

        mode:不带斜线和减号(/、-)直接使用MODE表示精确查找;

        /mode:任何一类用户(u、g、o)的权限中的任何一位(r、w、x)权限位只要符合条件即满足;

                    9位权限位之间的关系是“或”关系;

        -mode:一类用户(u、g、o)的权限中的一位(r、w、x)权限位同时符合条件即满足;

                    9位权限位之间的关系是“与”关系;

如:

[root@promote tmp]# find /tmp/ -perm 644    //精确查找文件权限为644的文件

[root@promote tmp]# find /tmp/ -perm /222    //查找至少有一类用户有写权限的文件;

[root@promote tmp]# find /tmp/ -perm /111    //查找至少有一类用户有执行权限的文件;

[root@promote tmp]# find /tmp/ -perm /001    //查找其他用户有执行权限的文件,00表示不关心u、g的权限位设置;此种文件不安全;

 [root@promote tmp]# find /tmp/ -perm /002    //查找其他用户有写权限的文件,此种文件不安全;   

 [root@promote tmp]# find /tmp/ -perm -002    //查找其他用户有写权限的文件,此种文件不安全;   

[root@promote tmp]# find /tmp/ -perm  -222 -ls    //查找所有用户同时有写权限的文件

[root@promote tmp]# find /tmp/ -not -perm  -222 -ls    //查找至少有一类用户没有写权限的文件;

[root@promote ~]# find /etc/ -not  -perm /222 -type f -ls    //查找/etc下都没有写权限的文件;

   

查找动作:对符合查找条件的文件作出操作,如删除等;默认为输出至标准输出;

    -print:输出至标准输出;默认的动作;

    -ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;

    -delete:删除查找到的文件;

    -fls /PATH/TO/SOMEFILE:将查找到的文件输出的详细信息(-ls输出的)保存到指定文件中;

    -ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;{}为占位符,表示引用前面查找到的文件,\;是固定格式 ;每次操作都需用户确认

    -exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;{}为占位符,表示引用前面查找到的文件,\;是固定格式 ;执行的操作不需用户确认

如:

[root@promote tmp]# find /tmp/ -nouser -a -nogroup  -ok chown root:root {} \;    //查找没有属主属组的文件,并将其改为root主用户和root组用户;chown root:root即是-ok后面需要执行的命令{}表示查找到的文件并引用,是一个占位符\;是固定格式

如:

[root@promote tmp]# find /tmp/ -perm /002  -exec mv {} {}.old \;    //查找其他用户有写权限的文件,并将其改名为原文件名.old


[root@promote /]# find / -name "passwd"

/sys/fs/selinux/class/passwd

/sys/fs/selinux/class/passwd/perms/passwd

/etc/passwd

/etc/pam.d/passwd

/usr/bin/passwd

/usr/share/bash-completion/completions/passwd

[root@promote /]#


处理动作需要注意的问题:

find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件的路径,并一次性传递给后面的执行命令,但是有些命令不能接受过长的参数,此时命令执行会失败,

可以使用find | xargs COMMAND 来避免;


[root@promote ~]# find /etc/ -size +1M -type f -exec ls -lh {} \;    //查找/etc下文件大小大于1M的文件;