1、Linux下的文件类型

-:普通文件

d: 目录文件

b: 块设备

c: 字符设备

l: 符号链接文件

p: 管道文件pipe

s: 套接字文件socket

CentOS 7目录变化:

Centos7的如下目录都变成了软连接文件了:

/bin 和 /usr/bin

/sbin 和 /usr/sbin

/lib 和/usr/lib

/lib64 和 /usr/lib64

2、pwd命令pwd -P显示真实物理路径

pwd -L显示链接路径(默认)

-P、-L和不加任何参数的不同之处如下:

centos7 查看软链 centos查看软连接指向_centos7 查看软链

同理cd命令也有-P和-L选项,它们的使用和pwd的-P、-L一模一样:cd -P进入真实的物理路径中。

cd -L如果目录是软连接,那么-L进入的就是软连接目录,而不是真正的物理路径。

举例如下:

centos7 查看软链 centos查看软连接指向_标准输入_02

3、basename和dirname命令basename获取基名

dirname获取目录名

举例如下:

centos7 查看软链 centos查看软连接指向_标准输入_03

4、ls命令ls -R目录递归显示,目录里面有什么文件,都会一一显示出来。

ls -t按mtime排序

ls -S按从大到小排序显示

ls -l --time=ctime filels -l默认显示的是mtime,--time=ctime,使其显示ctime

举例如下:

centos7 查看软链 centos查看软连接指向_数据_04

5、查看文件/目录的状态

三个时间戳:

access time:访问时间,atime,读取文件内容

modify time: 修改时间, mtime,改变文件内容(数据)

change time: 改变时间, ctime,元数据发生改变

stat命令可以查看文件的三个时间戳,如下:

centos7 查看软链 centos查看软连接指向_重定向_05

6、文件通配符

* 匹配零个或多个字符

? 匹配任何单个字符

~ 当前用户家目录

~mage 用户mage家目录

~+ 当前工作目录

~- 前一个工作目录

[0-9] 匹配数字范围

[a-z]:字母

[A-Z]:字母

[wang] 匹配列表中的任何的一个字符

[^wang] 匹配列表中的所有字符以外的字符

预定义的字符类:man 7 glob[:digit:]:任意数字,相当于0-9

[:lower:]:任意小写字母

[:upper:]: 任意大写字母

[:alpha:]: 任意大小写字母

[:alnum:]:任意数字或字母

[:blank:]:水平空白字符

[:space:]:水平或垂直空白字符

[:punct:]:标点符号

[:print:]:可打印字符

[:cntrl:]:控制(非打印)字符

[:graph:]:图形字符

[:xdigit:]:十六进制字符

通配符练习:

1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录

2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录

3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录

4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录

5、显示/etc目录下,所有以.d结尾的文件或目录

6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录

7、只显示/root下的隐藏文件和目录

8、只显示/etc下的非隐藏目录

7、touch,cp,mv和rm命令

touch file:需要注意的是如果file文件存在,则touch是不会覆盖原文件的,它只会更新文件的ctime。cp -t DEST SRC默认情况下cp都是源目录在前,目标地址在后,-t可以颠倒这个顺序

cp -r或者cp -R请注意,cp命令不加任何参数时是不能够复制文件夹的,需要加上-r或者-R选项复制文件夹

cp -p保留时间戳、属主,权限这些元数据复制。

cp -av保留源文件的所有属性复制,也可以复制文件夹,-v显示复制过程。

cp -i当目的地有同名文件时,-i选项可以发出告警信息提示是否覆盖,否者将直接覆盖。系统默认的cp命令其实是cp -i的别名

mv -t DEST SRC同cp -t,默认情况下mv都是源目录在前,目标地址在后,-t可以颠倒这个顺序

mv -i-i:交互式,和cp -i一样,同样系统自带的mv也是mv -i的别名

rm -i-i:交互式,和cp -i一样,同样系统自带的rm也是rm -i的别名

rm -f-f:强制的意思,不提示

练习:

1)定义别名命令baketc,每天将/etc/目录下所有文件,备份到/app独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见。

alias baketc="cp -av /etc /app/etc_backup$(date +%F)"

2)rm命令太危险了,如何尽可能的避免让用户使用该命令。定义rm别名,相当于把rm给隐藏了。

alias rm="mv -t /backups"

8、inode

inode(index node)表:用于存放磁盘上文件的元数据信息。

文件的元数据信息包括如下几个部分:文件类型,权限,UID,GID

链接数(指向这个文件名路径名称个数)

该文件的大小和不同的时间戳

数据块指针:指向磁盘上文件的真正数据的磁盘块block

有关文件的其他数据

系统通过inode表中的指针寻找文件的数据,而管理员通过文件名引用

centos7 查看软链 centos查看软连接指向_标准输入_06

cp命令和inode的关系:cp命令做的事情实际上就是分配一个空闲的inode号,然后在inode表中生成一个新条目,然后在目录中创建一个目录项,然后将名称与inode编号关联,最后拷贝数据生成新的文件

rm 命令和inode的关系:删除文件时,实际上是释放文件的inode号,文件的block数据实际上并不会马上被删除,直到有另一个文件使用该block时才会删除。

mv和inode的关系:如果mv的目标文件和源文件在同一个分区内,那么move后的文件的inode号并不会改变,因为该文件实际的block位置并没有改变。但是如果目标和源在一个不同的分区中, 那么mv就相当于cp和rm了,mv后的文件的inode号将会被改变,因为文件的block变了。ls -i显示文件的inode节点号,每个分区的inode节点编号都是独立分配的。因此不同分区中的文件的inode值可能会一样。

df -i显示每个分区的inode编号最大值,在同一分区mv文件,文件的inode值不变,inode值不变也就意味着磁盘块不变。因此同一分区移动文件特别快

举例如下:

centos7 查看软链 centos查看软连接指向_数据_07

9、硬链接、硬链接

硬链接:为某一个文件创建硬链接文件实际上就是再分配一个inode号,并将该inode号指向新的文件名,但是这两个文件名都是指向的同一个block,因此,当通过一个文件更改该block数据时,它的硬链接文件的数据也变了,因为是同一个block。所以硬链接不能跨分区创建。

软连接:就是快捷键,可以跨分区创建,它不会创建额外的inode号,和源文件共享一个inode号。ln A B为A创建硬链接文件B

ln -sv A B为A创建软链接文件B

10、/dev/zero文件

centos7 查看软链 centos查看软连接指向_数据_08

11、file命令file -f filename用于批量显示文件的类型,filename中每一行列出一个文件或目录

file和file -f的区别举例如下:

centos7 查看软链 centos查看软连接指向_centos7 查看软链_09

12、标准输入和输出

Linux给程序提供三种I/O设备

标准输入(STDIN):用0表示, 默认的标准输入来自键盘的输入

标准输出(STDOUT):用1表示, 默认的标准输出为输出到终端窗口

标准错误(STDERR):用2表示, 默认的标准错误Wie输出到终端窗口

上面的默认输入和输出在Linux中有专门的伪文件定义,如下,每个终端用户登录上来之后,都会在系统的/proc/$$/fd目录中创建一个对该shell对应的终端,因此系统也就知道每一个用户的默认输出是哪个终端。fd: file descriptor (文件描述符):

centos7 查看软链 centos查看软连接指向_linux显示源程序和数据_10

13、tr命令

tr用作转换和删除字符,用法如下:

tr [OPTION]... SET1 [SET2]tr [a-z] [A-Z]从标准输入中读取数据,然后将小写字母转换成大写字母

tr -d [a-z]从标准输入中读取数据,然后将小写字母删除

tr -s "a"将一行中多个连续重复的a字符压缩成一个

举例如下:

centos7 查看软链 centos查看软连接指向_centos7 查看软链_11

14、重定向

1)把标准输出 1 和标准错误 2 重新定向到文件

centos7 查看软链 centos查看软连接指向_centos7 查看软链_12

2)重定向标准输入

输入重定向有两种符号:

<

使用单行重定向< 重定向标准输入时,除了手动输入数据外还可以使用文件作为标准输入源。

centos7 查看软链 centos查看软连接指向_重定向_13

使用多行重定向<< “终止词”时,终止词可以随意写,表示结束输入,因此一般使用EOF或者END(结束的意思),多行重定向一般都是手动输入数据,而非文件。

15、管道符号 |

管道符的格式如下:

命令1 | 命令2 | 命令3 | …

管道的作用是:将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN,最后一个命令会在当前shell进程的子shell进程中执行

值的注意的是:STDERR默认不能通过管道转发的,这是因为管道只会转发标准输出。但可利用2>&1将标准错误“洗白”

centos7 查看软链 centos查看软连接指向_数据_14

16、tee命令tee -a 文件从标准输入中读取数据保存到文件当中,并打印到标准输出上。

tee命令的作用就是:把标准输入的数据保存到一个文件当中,并且打印到标准输出上来。

tee的使用场景:保存不同阶段的输出

复杂管道的故障排除

同时查看和记录输出

centos7 查看软链 centos查看软连接指向_数据_15

正是因为tee的多重输出性质,因此tee通常都是与管道符联合使用的,如下:

命令1 | tee -a 文件名 | 命令2

作用:把命令1的STDOUT保存在文件中,并将tee的STDOUT做为命令2的输入,-a(append)追加的意思,即不会覆盖源文件的内容。

centos7 查看软链 centos查看软连接指向_linux显示源程序和数据_16