您的位置:首页 > 运维架构 > Linux

linux基础

2018-09-04 23:54 746 查看
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和不加任何参数的不同之处如下:





同理cd命令也有-P和-L选项,它们的使用和pwd的-P、-L一模一样:
cd -P
进入真实的物理路径中。
cd -L
如果目录是软连接,那么-L进入的就是软连接目录,而不是真正的物理路径。
举例如下:





3、basename和dirname命令
basename
获取基名
dirname
获取目录名
举例如下:





4、ls命令
ls -R
目录递归显示,目录里面有什么文件,都会一一显示出来。
ls -t
按mtime排序
ls -S
按从大到小排序显示
ls -l --time=ctime file
ls -l默认显示的是mtime,--time=ctime,使其显示ctime
举例如下:





5、查看文件/目录的状态
三个时间戳:
access time:访问时间,atime,读取文件内容
modify time: 修改时间, mtime,改变文件内容(数据)
change time: 改变时间, ctime,元数据发生改变
stat命令可以查看文件的三个时间戳,如下:





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表中的指针寻找文件的数据,而管理员通过文件名引用





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值不变也就意味着磁盘块不变。因此同一分区移动文件特别快
举例如下:





9、硬链接、硬链接
硬链接:为某一个文件创建硬链接文件实际上就是再分配一个inode号,并将该inode号指向新的文件名,但是这两个文件名都是指向的同一个block,因此,当通过一个文件更改该block数据时,它的硬链接文件的数据也变了,因为是同一个block。所以硬链接不能跨分区创建。
软连接:就是快捷键,可以跨分区创建,它不会创建额外的inode号,和源文件共享一个inode号。
ln A B
为A创建硬链接文件B
ln -sv A B
为A创建软链接文件B
10、/dev/zero文件





11、file命令
file -f filename
用于批量显示文件的类型,filename中每一行列出一个文件或目录
file和file -f的区别举例如下:





12、标准输入和输出
Linux给程序提供三种I/O设备
标准输入(STDIN):用0表示, 默认的标准输入来自键盘的输入
标准输出(STDOUT):用1表示, 默认的标准输出为输出到终端窗口
标准错误(STDERR):用2表示, 默认的标准错误Wie输出到终端窗口
上面的默认输入和输出在Linux中有专门的伪文件定义,如下,每个终端用户登录上来之后,都会在系统的/proc/$$/fd目录中创建一个对该shell对应的终端,因此系统也就知道每一个用户的默认输出是哪个终端。fd: file descriptor (文件描述符):





13、tr命令
tr用作转换和删除字符,用法如下:
tr [OPTION]... SET1 [SET2]
tr [a-z] [A-Z]
从标准输入中读取数据,然后将小写字母转换成大写字母
tr -d [a-z]
从标准输入中读取数据,然后将小写字母删除
tr -s "a"
将一行中多个连续重复的a字符压缩成一个
举例如下:





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





2)重定向标准输入
输入重定向有两种符号:
< :单行重定向,用户每输入一行都会立即被发送给stdin。
<<"终止符号" :多行重定向,用户每输入一行都会被缓存下来,直到用户输入“终止符”之后才会将这些数据一并发送给stdin。
使用单行重定向< 重定向标准输入时,除了手动输入数据外还可以使用文件作为标准输入源。





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



15、管道符号 |
管道符的格式如下:
命令1 | 命令2 | 命令3 | …
管道的作用是:将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN,最后一个命令会在当前shell进程的子shell进程中执行
值的注意的是:STDERR默认不能通过管道转发的,这是因为管道只会转发标准输出。但可利用2>&1将标准错误“洗白”





16、tee命令
tee -a 文件
从标准输入中读取数据保存到文件当中,并打印到标准输出上。
tee命令的作用就是:把标准输入的数据保存到一个文件当中,并且打印到标准输出上来。
tee的使用场景:
保存不同阶段的输出

复杂管道的故障排除

同时查看和记录输出





正是因为tee的多重输出性质,因此tee通常都是与管道符联合使用的,如下:
命令1 | tee -a 文件名 | 命令2
作用:把命令1的STDOUT保存在文件中,并将tee的STDOUT做为命令2的输入,-a(append)追加的意思,即不会覆盖源文件的内容。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux基础