文件目录管理类命令与SHELL的特性
一、列出目录内容。
ls:列出当前目录的内容或指定目录
用法:ls[options][file_or_dirs]
选项:
ls -a 列出所有文件
ls -l 显示具体信息
ls -R 目录递归
ls -ld 目录和符号链接信息
ls -1 文件分行显示
ls -S 按从大到小排序
ls -u 配合-t选项,显示并按atime从新到旧排序
ls -U 不排序按目录存放顺序显示
二、文件通配符
*:匹配零个或者多个字符。
?:匹配任何单个字符。
~:当前用户家目录。
~username:用户家目录。
~+:当前工作目录。
~-:前一个工作目录
^:取反。
[0-9]:匹配一个数字范围
[a-z]:小写字母开头,小写在前大写在后。
[A-Z]:大写字母开头,后一个字母小写开头,结尾为大写字母
[wxc]:匹配列表中的任何的一个字符
[^wxc]:匹配列表中的所有字符以外的字符
预定义的字符类:#man 7 glob
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]:任意大写字母
[:alpha:]:任意大小写字母
[:alnum:]:任意数字或字母
[:space:]:空格
[:punct:]:标点符号
练习:
1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录。
先使用touch命令创建几个符合要求的文件,然后写出命令显示他们。
ls -d /var/l*[0-9]*[[:lower:]]
2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录。
使用touch 与mkdir创建几个符合项与几个不符合项然后输入命令显示。
ls -d /etc/[[:digit:]]*[^[:digit:]]*
3、显示/etc目录下以非字母开头,后面跟了一个字母及其他任意长度字符的文件或目录。
ls -d /etc/[^[:alpha:]][[:alpha:]]*
4、显示/etc目录下,所有以m开头以非数字结尾的文件或目录。
ls -d /etc/m[^[:migit:]]*
5、显示/etc目录下,所有以.d结尾的文件或目录。
ls -d /etc/*.d
6、显示/etc目录下,所有以.conf结尾,以m,n,r,p开头的文件或目录。
ls -d /etc/[mnrp]*.conf
三、alias别名的用法
alias别名:
显示当前所有别名~]#alias
定义别名alias NAME=‘VALUE’(只在当时内存中生效,退出登录后就无效了。)
别名永久生效:
仅对当前用户生效:配置文件~/.bashrc
对所有用户都生效:配置文件/etc/bashrc
如果想让配置文件立即生效,需要重新读取配置文件,有以下两种方法重新读取配置文件
1: soure /path/to/config_file
2: . /path/to/config_file
撤销别名:unalias
使用方法:unalias[-a] name [name...]
四、文件管理类命令
stat命令:
stat:显示文件或者文件系统的状态
stat FILE...
文件:两类数据
元数据:metadata
数据:data
时间戳:
最近访问access time:最近一次读取文件数据的时间。
最近更改modify time:文件最近增删内容的时间。
最近改动change time:文件源数据最近更改的时间(如大小)。
touch命令:
touch:时间状态更改
touch[OPTION]...FILE...
-c:指定的文件路径不存在时不予创建;
-a:仅修改access time;
-m:仅修改modify time;
-t STAMP
[[CC]YY]MMDDhhmm[.ss]
五、文件管理工具:cp,mv,rm
cp命令:copy
单源复制:cp[OPTION]...[-T] SOURCT DEST
如果DEST不存在:则实现创建此文件并复制源文件的数据流至目标(dest)中。
如果DEST存在:
如果DEST是非目录文件:则覆盖目标文件。
如果DEST是目录文件,则现在DEST目录下创建一个与源文件同名的文件,并复制其数据流。
多源复制:cp[OPTION]...SOURCT...DIRECTORY
:cp[OPTION]...-t DIRECTORY SOURCT
如果DEST不存在:错误。
如果DEST存在:
如果DEST是非目录文件,错误。
如果DEST是目录文件:分别复制每个文件至目标文件中,并保持原名。
常用选项:
-i:交互式复制,即覆盖前提醒用户确认。
-f(force):强制覆盖目标文件。(其实是删除源文件,复制新文件至目标)
-r:递归复制目录。
-d:复制符号链接文件本身,而非其指向的源文件;
-a:归档(备份)相当于-dr --preserv=all
--preserv[=ATTR_LIST]
mode:权限。
ownership:属主属组
timestamp:时间戳
links:链接
all:全部
-p:复制保留权限,属主属组,时间戳。
-v:查看具体复制过程
mv命令:move
单元复制:cp[OPTION]...[-T] SOURCT DEST
多源复制:cp[OPTION]...SOURCT...DIRECTORY
:cp[OPTION]...-t DIRECTORY SOURCT
常用选项:
-i:交互
-f:强制
rm命令:remove
rm [option]...FILE...
常用选项:
-i:交互
-f:强制删除
-r:递归
--no-preserve-root
小技巧:不想使用别名可以用反斜线\‘’绝对路径来使用原始命令。
练习:
1、定义别名baketc每日将/etc/目录下所有文件备份到/testdir/独立的新目录下,并要求新目录的格式为backupyyyy-mm-dd,备份过程可见。
alias baketc="cp -rv /etc/ /testdir/back`date +%F`"
定义别名 -v显示过程 复制根下ect下文件至跟下testdie下的back加日期目录下
备份过程
2、先创建/testdir/rootdir目录,在复制/root所有文件到该目录中,并要求保留其权限。
cp -r --preserv=mode /root /testdir/rootdir
之前错了一次是没有加空格。
六目录管理类的命令:mkdir,rmdir
mkdir:make directory
使用规则:mkdir[OPTIONS]...DIRECTORY...
-p:自动按需要创建父目录;
-v:verbose,显示详细过程;
-m MODE;直接给定权限;
注意:路径的基名就是命令的操作对象。基名之前的路径必须存在。
rmdir:remove empty directories
使用规则:rmdir[options]...DIRECTORY...
-p:递归删除。
-v:显示过程。
练习:
1、如何创建/testdir/dir1/x,/testdir/dir1/y,/testdir/dir1/x/a,/testdir/dir1/x/b
/testdir/dir1/y/a,/testdir/dir1/y/b.
mkdir -pv /testdir/dir1/{x,y}/{a,b}
这条命令就像多项式相乘一样理解x与/a,/b结合y也与后面的/a,/b结合。
2、如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir1/x/a,/testdir/dir1/b.
mkdir -pv /testdir/dir2/{x/{a,b},y}
3、如何创建/testdir/dir3,/testdir/dir4,/testdir/dir5,/testdir/dir5/dir3
/testdir/dir5/dir4.
mkdir -pv /testdir/{dir3,dir4,dir5/{dir3,dir4}}
五、索引节点
-
- inode(index node)表中包含文件系统所有文件列表
- 一个节点(索引节点)是在一个表项,包含有关文件信息(源数据)包括:
- 文件类型,权限,UID,GID连接数,文件大小,时间戳,指向磁盘上的数据块指针,有关文件的其他数据
- 在分区中,节点号是唯一的,不同分区节点号可能相同,但不是一个文件。
在每一个分区中都是这样的一套存贮文件方式,所以节点号可能相同。
1、cp在inode中的作用
分配一个空闲的inode号,在inode表中生成新条目在目录中创建一个目录项,将名称与inode编号关联拷贝数据生成新文件。
2、rm在inode中的作用
-
- 连接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除但是当另一个文件使用数据块时会被覆盖,所以在被覆盖之前,该数据块上的数据可以被找回。
3、mv在inode中的作用
如果mv命令的目标和源在相同的文件系统,作为mv命令:
用新的文件名创建对应新的目录项。
删除旧目录条目对应的旧的文件名。
不影响inode表(除了时间戳)或磁盘上的数据位置:没有数据被移动。
如果目标和源在一个不同的文件系统,mv相当于cp和rm
六、硬链接与软连接
1、硬链接
-
- 创建硬链接会增加额外的记录项以引用文件。
- 对应一个分区中的一个物理文件。
- 每个目录引用相同的索引节点号
- 创建时链接数递增
- 删除文件时:
1、rm命令递减计数的链接
2、文件要存在,至少要有一个链接数
3、当链接数为零时该文件被删除
- 不能跨越驱动器或分区
- 语法:ln filename [linkname]
2、软链接
-
- 一个符号链接指向另一个文件
- ls -l 显示链接的名称和引用的文件
- 一个符号链接内容是它引用文件的名称
- 可以对目录进行
- 可以跨分区
- 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数;
- 语法:ln -s filename[linkname]
硬链接与软连接的区别:
硬连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。硬连接的作用让一个文件拥有多个有效的路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。那么当你有一些重要的文件时,可以对重要文件创建很多个硬链接,只有最后一个链接被删除,才会对对应的链接释放。
软链接文件有点类似于Windows的快捷方式。
个人体会:
软链接是另一个文件,就像一个指针,对这个文件操作都直接转向软连接指向的文件,并且软连接就像另一个文件,所以要占用空间。
硬链接它只是实际文件的一个别名,它的作用就是防止文件被误删,给一个文件建立硬链接后,删除其中任意一个,实际文件并不会被删除。
七:确定文件内容
1、文件可以包含多种类型的数据
2、检查文件类型,然后确定适当的开放命令或应用程序使用
3、file[OPTION]<filename>...
OPTION:
-
- -b:列出文件辨识结果时,不显示文件名称。
- -c:详细显示指令执行过程,便于排错或分析程序执行
- -f:列出文件中文件名的文件类型。
- -F:使用指定的分隔符号替换输出文件名后默认的“:”分隔符
- -i:输出mime类型的字符串
- -L:查看对应软链接对应的文件类型
- -z:尝试去解读压缩文件内容
- --help:显示命令在线帮助