知识梳理


本文旨在复习知识点,做知识梳理,对基本概念、基本用法等作记录

1. Linux文件系统、文件类型

2. Bash基本特性

3. 文件管理命令: cp, mv, rm

4. 目录管理命令:mkdir, rmdir, tree, dirname, basename

5. 文本命令:包含基本的文本查看[cat, tac, more, less, tail, head]、文本编辑[nano]、文本处理[wc, cut, sort, uniq]  

6. 时间戳基本概念和命令touch


Linux文件系统、文件类型


  • 每一款OS都有自己的文件系统,通过文件系统才能够更好地管理、组织、调度、编辑磁盘上的数据文件。

        Linux的根文件系统是:RootFS

  • Linux是开源的,以内核为基础+封装各种软件包=形成了各种Linux发行版本。那么会不会各有各的文件系统层次而造成管理的不方便呢?

        不会! LSB [Linux规范标准]中的 FHS [文件系统层级标准] 规定了文件系统的通用层次、通用命名!


FHS基本标准:

/boot: 引导文件存放目录,例如kernel(vmlinuz)、bootloader(grub, grub2)
/bin: binary,供用户使用的基本的命令;OS启动即会用到程序;
/sbin:管理类的基本命令;
/lib: 基本共享库;内核模块;
/lib64:x86_64系统的共享库;
/etc:配置文件目录;
/home/USERNAME: 普通用主目录的默认位置;
/root: 管理员的主目录;
/media:便携式移动设备;
/mnt:临时文件系统挂载点;
/opt: 可选目录,第三方应用程序的默认安装位置;
/dev:设备文件 b是块设备,c是字符设备
/proc:伪文件系统;用于输出内核与进程的相关信息;
/sys: 伪文件系统
/srv: 系统上运行服务用到中间数据;
/tmp:临时文件目录;
/usr:Universal Shared, Read-only data;通常用作用户安装程序目录
/var:variable data files通常用作应用程序临时文件目录,如缓存
/selinux:系统权限安全验证

Linux文件类型:

白色:普通文件
蓝色:目录
绿色:可执行文件
红色:压缩文件
浅蓝色:链接文件  使用ls -al 能够看到这个链接文件究竟指向谁
红色闪烁:链接的文件有问题
***:设备文件
灰色:其他文件


Bash基本特性


  • 命令历史

    • 执行过的命令会放在缓存中,当用户正常退出时候写入到.bash_history文件中

    • 和2个变量有关系HISTSIZE缓冲区大小、HISTFILE缓存写入文件

    • 查看历史命令history、常用选项-c清空、

    • !#调用历史中第#条命令

  • 命令补全

    • 内建命令

    • 外部命令:去指定的环境变量PATH路径中依次寻找该命令

  • 路径补全

    • 把用户给出的路径字符串当前路径起始,并在其指定的上级目录下搜索以指定的字符串开头的文件名;

  • 命令行展开

    • ~展开为当前用的主目录,本质是/home/$user

    • {}可承载一个以逗号分隔的列表,并其展开为多个路径;

  • 命令执行结果

    • 由bash追踪 和保存

    • 成功:0

    • 失败:1-255

  • 命令别名

    • Alias/unlias,将多参数直接附加到命令本身上,省事

    • 命令的另一个引用符号,由bash程序维护

    • 如果想使用原命令,\Command 

  • Glob通配符

    • [:lower:]单个小写字母

    • [:upper:]单个大写字母

    • [:digit:]单个数字

    • [:space:]空白符

    • [:punct:] 其他标点符    

    • [:alnum:]大小字母及数字

    • *:匹配任意长度的任意字符;

    • ?:匹配任意单个字符;

    • []: 匹配指定范围内的任意单个字符; 如[a,b,c]匹配当中任意单个字符即可

    • [^]:匹配范围外的任意单个字符;如[^a,b,c]除abc以外任意单个字符

    • 字符集合:

  • 组合键

    • Ctrl+l:清屏 clear也可以

    • Ctrl+a: 切换至命令行首

    • Ctrl+e:切换至命令行尾

    • Ctrl+c:取消命令执行

    • Ctrl+u:删除光标所在处至行首的内容;

    • Ctrl+k: 删除光标所在处至行尾的内容;

  • IO重定向

    • >   覆盖输出

    • >> 追加输出

    • <

    • << cat >> /path/to/somefile << EOF

    • 标准输入:keyboard, 0, /dev/stdin

    • 标准输出:monitor, 1, /dev/stdout

    • 标准错误输出:monitor, 2, /dev/stderr

    • 输入重定向

    • 输出重定向

  • 管道

    • 将上一个命令的结果 作为下一个命令的参数继续使用

    • COMMAND1 | COMMAND2 | ...


文件管理命令


  • cp,复制命令[文件、目录都可以复制]

cp SRC DEST
   SRC是文件
   <1>如果DEST不存在:新建目标文件,并将SRC复制到目标文件;
   <2>如果DEST存在:
      如果DEST是文件:用SRC的内容覆盖至DEST文件中;
      如果DEST是目录:在DEST目录中新一个与原文件同名的文件,将将SRC内容复制到新建的同名的目标文件中;
   
常用选项:
-r, -R: 递归复制;
-d: 不跟踪符号链接;
-i: interactive 当出现覆盖时候会显示提示,默认root用户定义alias 'cp=cp -i'
-f: force        强制覆盖
-v: 显示过程
  • mv,移动文件

mv [OPTION]... [-T] SOURCE DEST
本质操作:先创建目标文件----将原文件读取形成数据流写入到目标文件-----删除源文文件
注意事项:源和目标在同一个目录,mv实现的是重命名的功能
常用选项:
-i:交互式,会出现提示
-f:强制执行

  • rm,删除文件,默认情况下只能删除单个文件

rm [OPTION]... FILE...
默认情况只能删除文件;如果想删除目录请参照-r选项
常用选项:
-r:递归删除,这样就可以删除目录
-i:交互式的,会出现提示
-f:强制执行


目录管理命令


  • dirname指的是一个绝对路径除最后文件名意外的其他部分,我称之“引导名”

  • basename指的是一个绝对路径最后的文件名部分,我称之为“基名”

举个例子:
# dirname /etc/init/rc.conf            
--->/etc/init                    //输出引导名,前面的部分
# basename /etc/init/rc.conf    
--->rc.conf                      //输出基名,最后的部分
  • mkdir,创建目录举个例子:

mkdir [OPTION] /PATH/TO/SOMEWHERE
常用选项:
-p:创建父目录,比如创建/a/b/c,但是目录a、目录b都不存在,就会依次创建下去
-v:显示创建过程,是小写,比如追踪上面的例子


  • rmdir,删除空目录,请注意是空目录举个例子:

rmdir /PATH/TO/SOMEWHERE
注意事项:
1.请保证目录是空目录,否则会报错;
2.rm也可以删除目录,但是需要添加-r参数,这是因为非空目录不能直接删除,-r能递归删除,目录本身也是文件不是吗?


  • tree,默认没有安装的命令,树状显示目录结构举个例子:

tree [OPTION]... [DIR] 
非常直观显示层次结构,比ls一行一行显示更能反映层次关系
注意事项:默认没有安装,yum -y install tree
常用选项:
-L 2:追踪2个层级显示,就是显示1级目录、2级目录
-d:只显示目录类型的文件  


文本命令


  • 文本查看[cat, tac, more, less, tail, head]

cat和tac
Cat [OPTION]... [FILE]...
Tac cat [OPTION]... [FILE]...
1.都是打印输出整个文件内容到屏幕上,执行完毕退出命令;
2.不可以回滚、翻页,因为你执行完就退出了;
3.cat是自上而下输出内容,tac和他相反,这2个单词本来就相反!! 

more和less
More [OPtion]... File
Less [Option]... File
1.都支持翻屏查,space往下一屏,b往上一屏;
2.都支持逐行查看,Enter键
3.都支持文本过滤,其实也支持正则
   /keyword  从首部向尾部翻动
   ?keyword 相反
       n:与命令方向相同的下一个
       N:与命令方向相反的前一个
4.more看到尾部会退出命令回到bash,而less不会退出命令,还可上滚;

Head和tail  
Head [OPtion]... File
Tail [Option]... File
1.只检索某些内容,不需要全部打开文件,抽取一个文本流中的多少行数据,或者一个block
2.如果不指定行数,默认是前10行或者末10行
-n#
3.tail -f可以跟踪文件的更改

  • 文本处理[wc, cut, sort, uniq]  --->只是显示结果增强,文件自身内容不变!

Wc [option]... File...
统计之用,默认显示:行 单词 字符 文件名
-l:显示行数
-w:显示单词数

cut [OPTION]... [FILE]...
切割工具,按照分隔符来切割、字段来切割、指定提取,很好的文本过滤器
常用选项:
-d:   指明分割符号-d’’  -d:  
-d:   指明要显示的字段
1:    只显示第1列
1-3:  显示1,2,3列
1,3,4:显示1,3,4列

sort [OPTION]... [FILE]...
排序工具,原理:逐行比较第一个字符,第一个相同比较第二个.....[比较的是ASCII大小]
常用选项
-r 逆序显示    
-f 忽略字符大小写,Linux默认严格区分大小写
-u 排序后去重, 连续且相同,如果开启了-u只显示一次,请注意文件内容不变!!
-t char指定分割符
-k #:以哪个字段为准 进行排序
-n:以数值大小来排序
  • 简单文本编辑[nano]-

nano 最简单的文本编辑工具,vi、vim功能更为强大、更为灵活 


时间戳命令和touch


  • 每个文件都有三个时间戳[传统linux上,Centos7可能更多和文件系统有关]

        Atime:文件最佳一次被访问的时间:比如more、less、cat这种访问行为;

        Mtime:文件最近一次被“修改”的时间;

        Ctime:文件最近一次被“改变”的时间; 

         注意  atime、mtime时间是独立的,可以单独修改atime[mtime不变],同理修改mtime[atime不变]

                      不管是atime还是mtime修改,只要有变动,ctime永远跟随最后系统时钟         

 

  • touch 本来是修改时间戳的,但是可以用来创建新文件

touch [OPTION]... FILE...
以特定的时间 来 修改特定的时间戳
touch -t STAMP [[CC]YY]MMDDhhmm[.ss]
特殊用法:当指定的文件不存在的时候,会创建一个文件,但是这个文件是empty的