本章节包含如下命令:

touch, mkdir, cp, install, mv, rm, mktemp,more, less, head, tail, man, stat,setfacl, getfacl, set, wc, cut, sort, uniq, diff, path

一、File system hierarchy standard

**Linux设计哲学一切皆文件,包括所有的设备、总线都定义为文件,FHS协会将linux文件定义为各个不同的层级,每个从根到根下的二级目录,表示的意义都不一样。Linux操作系统包含了kernel和application。Linux系统又将各类库划分为两大类,其中包含了静态库和动态库。静态库是直接编译进同内核,即initrd中,随系统启动时启动。动态库是将所包含的功能编译为单个库文件,放至系统指定的目录中,再程序应用启动时,按需调用。Linux将系统所需要用到的库文件都包含进了glibc库中,故glibc是linux系统必不可少的库文件。FHS定义的linux文件系统也被称作为Filesystem Hierarchy Standard,其也被众多的linux分行版本所引用,只是其极少的部分未统一。

Filesystem Hierarchy standard:

  1. /bin Essential user command binaries,所有用户的基本命令文件存放路径
  2. /sbin System binaries,系统管理二进制程序存放路径
  3. /boot Static file of the boot loader,系统引导加载器必须用到的各静态文件,如:kerenl,initrd,initramfs
  4. /dev device file ,特殊文件及设备文件
  5. /etc Host-specific system configuration,系统及程序的配置文件,只能为静态文件,不能为二进制文件
  6. /home User-home directory(optional),普通用户的家目录
  7. /lib Essential shares binaries and kernel moudles,为系统及程序提供共享库(/bin,/sbin等),以及为kernel提供内核模块
    1. lib.so.* :启动链接的C库
    2. ld* : 运行时链接器/加载器
    3. modules : 用于存储内核模块的目录
  8. /lib64 64位操作系统特有存储64位库的路径
  9. /media Mount point for removable media
  10. /mnt Mount point for temp
  11. /opt And-on application software packages,第三方软件安装位置
  12. /root root home directory (optional)
  13. /srv Date for service provided by system,为当前主机服务提供的数据
  14. /tmp Temporary files.为所有用户提供临时存放文件的路径,所有用户有写权限,这处有特殊权限
  15. /usr User Hierarhcy,全局共享只读数据路径
    bin/ sbin/ lib/ lib64/ include/ share/ local/ src/
  16. /usr/local local hierarchy.让管理员安装本地程序,能通常安装三方程序
  17. /var variables,var hierarchy,存储学发生变化的数据目录
    1. cache/ application cache date
    2. lib/ variables state information
    3. local/ variables date for /usr/local
    4. lock/ lock file
    5. log/ log file and directory
    6. opt/ variable date for opt
    7. run/ date relevnat to runing processes
    8. spool/ application spool date
    9. tmp/ temporary files
  18. /proc Kernel and processes information virtual filesystem,基于内存的虚拟文件系统,存储内核和进程的相关信息,多为内核参数
  19. /sys sysfs虚拟文件系统,提供了比proc更为理想的访问内核数据的途径,主要用来管理硬件
    1. /sys/devices 这是内核对系统中所有设备的分层次表达模型
    2. /sys/dev 维护了一个按字符设备和块设备的主次设备号连接到真实设备,在2.6.26引用
    3. /sys/bus 按总线类型分层旋转的目录结构,devices中的所有设备都工作在某种总线下
    4. /sys/class 按设备功能分类的设备模型,如所有输入设备/sys/class/input之下
    5. /sys/block 系统中所有的块设备
    6. /sys/firmware 系统加载固件机制对用户空间的接口
    7. /sys/fs 描述系统中所有文件系统
    8. /sys/kernel 内核所有可调整能数的位置
    9. /sys/module 系统中所有的模块信息,不论是静态编译或动态编译的模块KO文件,都可能会出现在这里

Linux system file type

  1. - : 普通文件
  2. d : 目录文件,directory
  3. b : block device,块设备文件,以block为单位进行随机访问
  4. c : character device,字符设备,支持以charactor为单位,进行线性访问,有时序
  5. l : symbolic link,符号连接文件
  6. p : pipe,命名管道
  7. s : socket,套接字文件,IP:PORT = Socket

二、文件的复制、移动及删除

1、创建文件

touch

`touch` - touch - change file timestamps
     synopsis:touch [OPTION]... FILE...
     options:
         `-c` : 只是修改时间,不创建文件
         `-a` : 修改文件的access时间,即访问时间
         `-m` : 修改文件的mtime时间,却数据的修改时间,元数据的修改时间是changetime,Ctime时间
         `-t` : STAMP,改到的指定时间
     例:touch -m -t 200212012001.08  # 修改mtime 并指定详细时间

文件分两类:
    文件元数据(meta date)
    文件数据

 时间戳:
            Access time : 最近访问时间
            Modify time :  数据改变的时间
            Change time : 元数据改变的时间
            注:只要数据改变了, 元数据也会变的
 故:使用touch修改timestamps,是修改文件的元数据部分

2、创建目录

`mkdir` - mkdir - make directories
    synopsis: mkdir [OPTION]... DIRECTORY...
    options:
        `-p` : --perents,按照创建父目录
        `-v` :--verbose,查看创建进度信息
        `-m` : --mode=MODE,设置权限
             mkdir -m u=x,go=w DIR
             mkdir -m 600 DIR
    例:如何创建/tmp/x/y1,/tmpx/y2 ,/tmp/x/y1/a,/tmp/x/y1/b?
        mkdir -p ‘/tmp/x/{y1/{a,b},y2}
    例:如何创建a_c,a_d b_c,b_d
        mkdir {a,b}_{c,d}

3、复制文件

文件及目录的复制 ,linux是将底层的数据流从一个位置导到另一个位置,再进行重命名操作

CP命令:

`cp` - copy file and directory
    synopsis: cp [OPTION]... [-T] SOURCE DEST
                 cp [OPTION]... SOURCE... DIRECTORY
                 cp [OPTION]... -t DIRECTORY SOURCE...
       options:
           `-i` : --interactive,交互模式,即覆盖之前提示用户
           `-f` : force,强制模式
           `-r` `-R` : 递归复制文件,用于复制目录
           `-d` : 复制连接,如果复制的是一个连接文件,加`-d`只会复制连接文件,不会复制连接文件所指向的文件及内容
           `--preserve` : 复制其扩展属性,=mode,=ownership,=timestamps(文件属性时间),=xattr(扩展属性),=context(安全标签),=links,=all(表示以上都包含)
           `-a` : -dR --preserve=all,用于实现归档(archive)

           注意:如果在不加`-d`参数时复制links,将把连接指向的文件内容复制一份到指定位置并以连接文件名命名
单源复制注意内容:
     如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中
    如果DEST存在:
        如果DEST是非目录文件:则覆盖目标文件
        如果DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件并复制数据流至目标文件**
多源复制注意内容:
    如果DEST不存在:错误
    如果DEST存在:
        如果DEST是非目录文件,错误
        如果DEST是目录文件:分别复制每个文件至DEST目录中, 并保持原名

install命令:

`install` - copy files and set attributes
    synopsis: install [OPTION]... [-T] SOURCE DEST
                 install [OPTION]... SOURCE... DIRECTORY
                 install [OPTION]... -t DIRECTORY SOURCE...
                   install [OPTION]... -d DIRECTORY...
       options:
           `-m` : --mode=MODE,设定目标文件权限
                   install -m o=x,ug=rw /etc/issue .
                   nstall -m 755 /etc/issue ./issue
           `-o` : --owner=OWNER,设定属主
           `-g` : --group=GROUP,设定属组
           `-d` : 创建目录

4、移动文件

mv

`mv` - move (rename) files
    sinopsis: mv [OPTION]... [-T] SOURCE DEST
             mv [OPTION]... SOURCE... DIRECTORY
             mv [OPTION]... -t DIRECTORY SOURCE...
    options: 
        `-f` : 强制
        `-i` : 交互

删除文件

rm

`rm` - remove files or directories
    sinopsis: rm [OPTION]... FILE...
    options:
        `-f` : 强制
        `-i` : 交互
        `-r`,`-R` : 递归操作
    注:所有文件不建议直接删除,建议使用MV将文件移动到一个固定位置,后期确定不使用的时候再清理

5、创建临时文件和目录

mktemp

`mktemp` - mktemp - create a temporary file or directory
    synopsis: mktemp [OPTION]... [TEMPLATE]
    options:
        `-d` : 创建临时目录
        ·-u` : 测试创建
mktemp /tmp/mytmp.XXXX
mktemp -d /tmp/mytmp.XXXX

三、文件查看类工具

more
`more` - more - file perusal filter for crt viewing
    synopssis: more [-dlfpcsu] [-num] [+/pattern] [+linenum] [file ...

less

`less` - less - opposite of more
    synopsis: less File
    options:
        `space` - 向下翻页
        `b`    - 向上翻页
        `u` - 向上翻半页
        `d` - 向下翻半页
        `j` - 向下翻一行
        `k` - 向上翻一行
        `q` - 退出

head

`head` - head - output the first part of files
    synopsis: head [OPTION]... [FILE]...
    options:
        `-n` : 显示要查看的前几行
        注:一般可以使用`-6` 代替 `-n 6`

tail

`tail` - tail - output the last part of files
    synopsis: tail - output the last part of files
    options:
        `-n` : 显示要查看的后几行
        注:一般可以使用`-6` 代替 `-n 6`
        `-f` : --follow,监控最后行的变化,并显示出来

man

`man` - man - format and display the on-line manual pages
    synopsis: format and display the on-line manual pages
    options:
        注:同less工具, man工具就是调用了Less的查看功能

stat

`stat` - stat - display file or file system status
    synopsis: stat [OPTION]... FILE...
    查看文件的元数据信息

wc

`wc` - wc - print newline, word, and byte counts for each file
    synopsis : wc [OPTION]... [FILE]...
    options:
        -l : 统计行数
        -c : byte conuts 
        -w : 统计单词总数
        -m : 字符
   使用`wc file`: 格式为:行数 单词 字符

cut

`cut` - remove sections from each line of file
    synopsis: cut OPTION... [FILE]...
    options:
        -d CHAR: 指定分隔符,默认为空格
        -f #|#,#|#,#-#: fields,保留那些字段
  • 例:
    • cut -d: -f7 /etc/passwd
    • cut -d: -f1,3,5-7 /etc/passwd

sort

`sort` - sort - sort lines of text files
    synopsis: sort [OPTION]... [FILE]...
    options:
        -t CHAR : 指定分隔符
        -n : 基于数据大小排序
        -k # : 以#字段列进行排序
        -r :逆序进行排序(reverse)
        -f : 忽略字符大小写
        -u : 重复的行只保留一份(重复相同且连续的行)
  • 例:
    • sort -r -n -t: -k3  /etc/passwd
    • cut -d: -f7 /etc/passwd | sort -u(统计系统用户用了哪几种shell)

uniq

`uniq` - report or omit repeated lines
    synopsis: uniq [OPTION]... [INPUT [OUTPUT]]
    options:
        -c : 每行重复出现的次数
        -u : 只显示没有重复的行
        -d : 只显示重复的行,至少2次或2次以上
  • 例:
    • cut -d: -f7 /etc/passwd | sort | uniq -c (统计系统同一shell使用的次数)

diff

`diff` - diff - compare files line by line
    synosis: diff [OPTION]... FILES
    options:
        -u : 不同风格显示文件差别,使用unified机制,显示要修改行的上下文,默认为3行
  • 例:diff fstab fstab.bak > fstab.path (应用两个文件成生fstab.path补丁文件)

path

synopsis: path [option] -i /path/to/patch_file /path/to oldfile (打补丁)
          path /path/to/oldfile < /path/to/patch_file (同上)
    • path -i fstab.path  fstab : 打补丁
    • path -R -i fstab.patch fstab
  • diff用于生成补要,path用于打补丁

四、IO重定向及管道

什么是管道及其作用:

将一个命令的执行结果作为另一个命令的输入,即是管道

计算机对文件的识别方式:

  • 标准输入,0表示
  • 标准输出,1表示
  • 错误输出,2表示

程序的数据流有三种:

输入的数据流 ←— 标准输入(stdin),即键盘
输出的数据流 —→ 标准输出(stdout),即显示器
错误的输出流 —→ 错误输出(stderr),显示器

IO重定向

  • > : 覆盖输出重定向
  • >> : 追加输出重定向
  • < : 输入重定向
  • 2> : 错误覆盖输出重定向
  • 2>> : 错误追加输出重定向
  • &> : 合并覆盖重定向(即把标准输出和错误输出合在一起)
  • &>> : 合并追加重定向(即把标准输出和错误输出合在一起)
  • >| : 强行覆盖(即使用命令set -c 关闭覆盖重定向时,可以使用这个强行覆盖)

setw命令:

options:
    -C : 开启禁用覆盖重定向
    +C : 关闭禁用覆盖重定向