文件管理相关

 rename:对文件重命名
    rename [options] expression replacement file
      
  • 示例:         
# rename -v cut.exe cut.exe3 cut.exe
            `cut.exe’ -> `cut.exe3′
                注:rename 源文件名 改后名  源文件名
  •      option
         
           -V:显示版本信息并退出            
      # rename -V
       rename from util-linux 2.23.2


tree:显示目录树
   按树状结构显示某一目录下的文件列表
      tree [options]
      
      options:
        -d:只显示目录    
     tree -d
         .
          └── mode
        -L:设定显示的层次       
   tree -L 2 lianxi/
                lianxi/
                ├── 8yu
                ├── a123
                ├── a123.bak
                ├── a123.bak.bak
                ├── access_log
                ├── acl2.txt
                ├── k\ 67
                ├── mode
                │   ├── a123
                │   ├── access_log
                │   └── cut2.txt
                ├── m.z
                ├── passw
                └── sort
                1 directory, 13 file

mkdir: 创建目录
   mkdir [OPTION]… DIRECTORY..
    

         -p:自动创建父目录 

     mkdir -p haha/hehe
 
         -v:显示详细信息
     # mkdir -pv 666/888
mkdir: created directory ‘666’
mkdir: created directory ‘666/888’
          -m:直接指定权限
     mkdir  -m 640 mc

rmdir:删除目录(非空目录不能删除)
  -p:自动删除空的父目录
rmdir -p testdir/dir2/

索引节点
  inode:表中包含文件系统的所有列表
  一个节点(索引节点)是在一个表项,包含有关文件的信息(元数据),包括:
    文件类型,权限,UID,GID
    链接数(指向这个文件名路径名称个数)
    该文件大小和不同的时间戳
    有关文件的其他数据

inode在特定范围内是唯一的

cent6.8 根分区inode默认从2开始;centos7默认64开始

lost+found :相当于收容所,系统突然断电等非正常关机所找不到存放地的文件都在此。

目录
  文件引用一个inode号(系统自动分配)
  人是通过文件名来引用一个文件
  一个目录是目录下的文件名和文件inode号之间的映射。
对于目录:目录里存放的是子目录或文件对应的节点编号,文件名存放在目录里

df 参看磁盘空间使用状况
  # df
    Filesystem     1K-blocks    Used Available Use% Mounted on
    /dev/sda2       52403200 4029708  48373492   8% /
    devtmpfs          918976       0    918976   0% /dev
    tmpfs             933644      84    933560   1% /dev/shm
    tmpfs             933644    9172    924472   1% /run
    tmpfs             933644       0    933644   0% /sys/fs/cgroup
    /dev/sda5       10475520   32944  10442576   1% /app
    /dev/sda1        1038336  172112    866224  17% /boot
    tmpfs             186732      16    186716   1% /run/user/42
    tmpfs             186732       0    186732   0% /run/user/0
   -i:查看节点使用情况,而不是空间
     # df -i
    Filesystem       Inodes  IUsed    IFree IUse% Mounted on
    /dev/sda2      26214400 119707 26094693    1% /
    devtmpfs         229744    401   229343    1% /dev
    tmpfs            233411      6   233405    1% /dev/shm
    tmpfs            233411    556   232855    1% /run
    tmpfs            233411     16   233395    1% /sys/fs/cgroup
    /dev/sda5       5242880      3  5242877    1% /app
    /dev/sda1        524288    330   523958    1% /boot
    tmpfs            233411     17   233394    1% /run/user/42
    tmpfs            233411      1   233410    1% /run/user/0

watch  -n 1 `command`
  每隔1秒就执行一次后面的命令

cp命令(复制):
  分配一个空闲的inode号,在inode表中生成新条目在目录中创建一个目录项,将名称与inode编号关联拷贝数据生成新的文件
    语法格式:
        cp [OPTION]… [-T] SOURCE DEST
        cp [OPTION]… SOURCE… DIRECTORY
        cp [OPTION]… -t DIRECTORY SOURCE..
          options:        
-a :same as -dR –preserve=all
           -i : 交互式操作
           -f : 强制操作
           -r :递归
           -v :显示过程信息
           …              
    # cp -v sort haha/
    ‘sort’ -> ‘haha/sort’

rm 命令(删除文件或目录):
  
  连接数递减,从而释放的inode号可以被重用
  把数据块放在空闲列表中
  删除目录项
  数据实际不会被马上删除,但当另一个文件使用数据块时将被覆盖。
   语法格式
      rm [OPTION]… FILE…
      
   -i : 交互式操作,需要用户确认(例如:输入y)
         -f : 强制操作
         -r :递归操作
         -v :显示过程信息
         …
 # rm -i k\ 67
          rm: remove regular empty file ‘k 67’? y

mv命令:
 
 如果mv命令的目标和源在相同的文件系统,作为mv命令用新的文件名创建对应新的目录项,删除旧目录条目对应的旧的文件名,不影响inode表 (除时间戳)或磁盘上的数据位置;没有数据被移动!
  如果目标和源在一个不同的文件系统,mv相当于cp和rm
  语法格式
   
     mv [OPTION]… [-T] SOURCE DEST
     mv [OPTION]… SOURCE… DIRECTORY
     mv [OPTION]… -t DIRECTORY SOURCE…
       options:
         -i: 交互式操作
         -f: 强制操作
         -v: 显示过程信息
  
 示例:
       # mv -v fule bufu
      ‘fule’ -> ‘bufu’


shred  :碎纸机k,覆盖文件内容,并删除该文件内容
  语法格式
     shred [OPTION]… FILE…
     options:
       -z 清零
       -v 显示过程信息
       -n 操作次数
    
 示例:
           # shred -zvn5 bufu
    shred: bufu: pass 1/6 (random)…
    shred: bufu: pass 2/6 (ffffff)…
    shred: bufu: pass 3/6 (random)…
    shred: bufu: pass 4/6 (000000)…
    shred: bufu: pass 5/6 (random)…
    shred: bufu: pass 6/6 (000000)…

hexdump:以不同的格式显示文件内容
  语法格式:
     hexdump [options] file […]
     options:
  •          -b: 以八进制格式显示
  •          -C:以十六进制+ascII显示
  •          -d: 以十进制显示

ln filename linkname 创建硬链接
  •   硬链接:不同的路径名指向同一个文件
  •   硬链接不支持目录,只支持文件
  •   硬链接不能跨文件系统
  •   创建硬链接会增加链接计数
  •   每个目录引用相同的inode号
  

ln -s filename linkname:创建软连接,符号链接
  •   一个符号链接指向另一文件
  •   符号链接可以跨文件系统
  •   不会增加inode引用计数
  •   可以跨文件系统
  •   可以跨目录
  •   符号链接指向的是另一个文件路径,大小为指定路径的大小。


file 显示文件类型
   语法格式:
     file [options] filename
     示例:
           
   # file 666
    666: setgid directory
       options:
          -b:列出文件辨识结果时,不显示文件名
               
     # file -b 666
        setgid directory
          -f:列出文件中文件名的文件类型(前提是文件内保存的文件名是真实存在)
      
        # file -f file.txt
            /etc/passwd: ASCII text
            /usr/share/: directory
          -F:使用指定分隔符替换输出文件名后默认的”:”分隔符
          -L:查看软连接对应的文件的文件类型    
     file -L /etc/localtime
     /etc/localtime: timezone data, version 2, 2 gmt time flags, 2 std time flags, no leap seconds, 16 transition times, 2 abbreviation chars

reset:重置当前的工作环境

Linux给程序提供三种IO设备
  •   标准输入(STDIN) -0 默认接受来自键盘的输入
  •   标准输出 stdout -1 默认输出到当前终端窗口
  •   标准错误 stderr -2 默认输出到终端窗口

I/O 改变默认位置
  输出重定向
  •     > file: 覆盖输出重定向
  •     >> file:追加输出重定向
  错误输出重定向
  •     2> file 错误覆盖输出重定向
  •     2>> file 错误追加输出重定向
  联合重定向,正确和错误的都输出到同一个文件:
  •   ls /err /boot > /app/all 2>&1
  •   ls /err /boot &> /app/all
  •   ls /err /boot >& /app/all
 
  set -C :禁止覆盖已有文件
  set +C: 取消上述功能
  ls /boot >| /app/ls.log 强行覆盖
  (echo err 1>&2) > /app/f1把正确输出转为错误输出
  (cmd1;cmd2) > f1 把两个命令的结果输出到f1
  多行重定向
    cat > filename << EOF(结束符)(此处生成文档)
      >ddd
      >skdfjlsd
      >EOF
     mail -s ‘sanqueyi’ username@hostname <<EOF 
       mail 邮件发送程序 -s 指定标题 username@hostname 邮件接收者地址,执行上述命令,则开始输入正文,输入EOF则结束输入,邮件发送
  输入重定向操作(tr命令请看下面内容):
  tr ‘a-z’ ‘A-Z’ > f2 < /etc/issue
  cat > f1单行重定向
wall  xxxx ;发送广播信息


tr:转换或删除字符
  语法格式:
  tr [options] set1 [set2]
  options:
  •       -c:取补集
  •       -d:把set1中定义的内容删除
  •       -s:把set1中重复的字符压缩为一个
  •       -t:将set1中的字符转换为set2,对位替换


管道   
  cmd1 | cmd2  :把命令1的标准输出当作命令2的标准输入,一般情况前面的成功才能正确执行
  •     ls /boot /err 2>&1 | tr ‘a-z’ ‘A-Z’
  •     ls /boot /err |& tr ‘a-z’ ‘A-Z’\
  stderr默认不能通过管道转发,不过可以利用2>&1或者|& 实现
  最后一个命令会在当前shell进程的子shell进程执行、
  一页一页地查看输入:
    ls -l /etc | less
  mail:通过电子邮件发送输入:
    echo “test” | mail \ -s “test” user@hostname.com
  lpr:把输入发送给打印机
    echo “test print” | lpr -P printer_name
  – 符号:
       -是取前一个命令的stdout
 
     tar -zcf – /home | tar -zxf –
  ls /etc | tee file3: tee命令可以把前一个命令的输出同时保存到指定文件又输出到屏幕

 tee:重定向到多个目标
        command1 | tee 文件名 | command2
        把命令1的stdout保存到文件名中,然后管道输入给命令2
           tee -a :附加,原文件的内容不进行覆盖操作,保留原有内容。
 作用:
  •         保存不同阶段的输出
  •         复杂管道的故障排除
  •         同时查看和记录输出

readlink linkname 查看链接文件对应的原始文件

 chown 设置的属主属组(普通用户不可以执行,无权限)
  •       chown onwer: file 默认把文件的属主改为onwer属组改为onwer的属组
  •       chown :grp file 默认修改file的属组为grp,属主不改变
  •       chown owner:grp file
  •       chown [options] –reference=RFILE FILE..



chgrp 设置文件的属组信息 (普通用户属于的组可以执行)
  •       chgrp [options]..group file..
  •       chgrp [options] ..–reference=RFILE FILE..
                options: 
                   -R 递归修改

文件的权限主要针对三类对象进行定义:
      owner:属主,u
      group:属组,g
      other:其它,o

每个文件针对对每类访问者都定义了三种权限:
      r:readable
      w:writeable
      x:eXcutable

对目录
  •        r读:可以使用ls查看文件列表,使用ls等
  •        w写:可以对目录内创建删除目录内的文件
  •        x执行:cd到目录内或者ls -l
  对文件
  •        r读:可以使用文件查看类工具获取其内容
  •        w写:可以修改文件内部内容
  •        x执行:可以将可执行文件提请为一个进程
  •        X:大x,给目录设定x权限,不给文件x权限
                    X只设定目录执行权限,而不给文件执行权限(但是,当文件本身任何一权限拥有执行权限的时候,大X将赋予该文件执行权限)
                    例: aa文件权限为-r–rw—x+
                    执行chmod a+X 后,权限为-r-xrwx–x+
                    bb文件权限为-r–rw—-+
                    执行chmod a+X 后,权限为-r–rw—-+
                   X一般配合-R对目录使用;对目录下的子目录加x权限,但对无执行权限的文件不会加x
                   目录的执行权限是一个基本权限,通常会有该权限;
权限检查顺序
      所有者,组,其他人
     先检查当前用户与当前文件的属主是否相同,相同则只运用文件的属主权限,而不管其他用户权限;如果用户属主不是文件的属主,则检查用户属组和文件属组是否相同,同,则运用属组权限,而不管其他权限;以上两者都不是,则只运用其他权限

chmod :改变文件的各执行权限
  语法格式:
  •     chmod [OPTION]… MODE[,MODE]… FILE…
  •     chmod [OPTION]… OCTAL-MODE FILE…
  •     chmod [OPTION]… –reference=RFILE FILE…(复制RFILE到FILE中)
      options:
        -R 递归修改
  mode表示法      
  赋权表示法,直接操作某一类用户的所有权限
  •             属主u=
  •             属组g=
  •             其他o=
  •             所有a=
授权表示法:直接操作一个用户的一个权限
  •             u+,u-
  •             g+,g-
  •             o+,o-
  •             a+,a-
数字法:
  •        chmod 640 file

umask本质意义:
    对位最大权限的unamsk相应位的权限去除,得出默认权限
  •       目录的默认权限:777-umask
  •       文件的默认权限:666-umask
                   结果中,有奇数加一,偶数不
  •       umask -S 模式方式显示
  •       umask -p 输出方式可调用
  •       umask -p >> /etc/bashrc
    非特权用户umask是002
    root的umask 是022·

文件的特殊权限:
  SUID,SGID,Sticky
  SUID:
    只能作用在可执行的二进制程序,作用在目录上无意义,执行该程序时,继承的是该程序的属主身份,访问文件时,则以程序属主去访问文件
    设置SUID(显示占用u的执行权限位):
          chmod u[+|-]s file
      如果文件本身有执行权限,则u的执行权限位为s,否则,为S。
   SGID:可以作用在文件和目录上,对于目录,有SGID,在内部创建文件,默认继承目录的属组,对文件,如某程序,执行该程序时,继承了该程序的属组,访问某文件,就是以程序的属组身份去访问文件。
       chmod g[+|-]s file
  sticky:只作用在目录上有意义,用户只能在此目录内删除自己创建的文件,但可以看其他人的文件。
     chmod o[+|-]t file
隐藏属性
  chattr +i 不能删除,修改,更改
  chattr +a 只能增加、追加,(编辑文件算修改),新建用户也不行,
  lsattr 查看隐藏属性
  chattr +A 锁定文件访问时间

ACL访问控制列表
  •    Access Control List:实现灵活的权限管理,除了文件的所有者,所属组和其他人,可以对更多的用户设置权限。
  •    centos7 默认创建的xfs和ext4文件系统有ACL功能。
  •    centos7之前的版本,默认手工创建的ext4文件系统无ACL功能,需要手动增加:
  •    tune2fs -o acl /dev/sdb1 调整文件系统的属性、增加acl功能
  •    mount -o acl /dev/sdb1 /mnt/test     挂载文件系统,支持acl
  •    文件属性上末尾有+代表设置了acl,一旦有了acl,中间原来文件属组位权限所代表的不是原来的含义了,即为facl的umask。
  •    getfacl file|directory:获取文件或目录的访问控制列表
  •    setfacl -m u:wang:r file 设定用户facl
  •    setfacl -Rm u:wang:r f2 递归设置facl权限
  •    setfacl -M file.acl file|directory
  •      file.acl为facl模版文件,通常可执行getfacl f1.txt > file.acl 获取某文件facl来充当模版
  •    setfacl -m g:admin:rw f2 设定指定组的facl权限
  •    setfacl -m d:u:wang:rx directory:设定指定目录下文件的facl权限,但目录不设置,默认acl
  •    setfacl -x u:wang f2 删除后续用户的facl权限
  •    setfacl -X file.acl directory 以前一个文件内部的facl模版删除后续文件的facl权限
  •    base ACL不能删除
  •    setfacl -d dir 设置默认的facl权限 ( setfacl -m d:u:wang:rx directory )
  •    setfacl -k dir 删除默认的facl权限(仅限于目录)
  •    setfacl -b file 删除全部的扩展facl权限
  •    setfacl -m mask::r file 设定facl的mask值
    注意:后续设置的facl权限会影响到mask,mask会自动调整以使后续设置的facl生效,达到目的。
       mask: 限高线,所有facl列表扩展用户的最高权限不能超过mask
        acl mask只影响所有者和other以外的所有人:所属组,自定义用户,自定义组
          setfacl -m mask::rx file:设定mask值
    批量设置facl权限(备份和恢复acl):
    1、getfacl file1 > file.acl
    2、setfacl –set-file=file.acl file2
    备份和恢复ACL
       getfacl -R /tmp/dir > acl.txt :递归备份该文件和文件下的子文件acl
       setfacl -R -b /tmp/dir 递归删除acl
       setfacl -R –set-file=acl.txt /tmp/dir 递归恢复acl
       setfacl –restore acl.txt :–restore=file:从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除–test以外的任何参数一同执行。
       –set选项会把原有的ACL项都删除,用新的代替,需要注意是一定要包含UGO的设置,不能像-m一样只是添加ACL
          setfacl –set u::rw,u:wang:r,g::r,o::- file
    执行时,遍历facl列表,如果某个用户存在于多个acl设定,可进行权限累加 ,最终权限是多个acl的权限和。
    ACL生效顺序:所有者,所属组,自定义用户,自定义组,其他人 
     tune2fs -l /dev/ 查看文件系统的属性
    mkfs.ext4 /dev/ 创建文件系统
    blkid /dev/查看磁盘文件系统格式,UUID
    mount -o loop  /xx/file mountpoint 挂载本地文件,模拟成挂载磁盘
字典:  /usr/share/dict/linux.words
netstat -nt 显示访问当前ip的链接信息

原创文章,作者:switch,如若转载,请注明出处:http://www.178linux.com/70027