Linux下的文件管理
文件管理相关命令
对于用户而言,文件管理最简单的要求无非是创建,浏览,删除,读写.
Linux对以上要求自然也都进行了满足,以下为相关指令.
touch #新建文件,文件存在时修改文件时间戳
touch file1 file2... #创建文件
touch file #文件已经存在,同步文件时间到当前时间
touch -t YYYYMMDDHHmm file #把文件时间更改到指定时间
mkdir #新建目录
mkdir dir1 dir2 ... #新建空目录
mkdir -p test/redhat/linux # -p 参数用于在新建目录时对不存在的父目录进行补全
rm #删除命令
rm file file1 ... #删除文件,会提示是否删除
rm -f file #无提示的删除文件
rm -r dir... #删除目录,同时递归删除目录内的子目录和文件
rm -rf dir #无提示的递归删除目录及其内部文件,需要特别注意安全性.
gedit #图形化的文本编辑器
gedit #打开图形化的文本编辑器
gedit file #用图形化的文本编辑器打开文件
关于以上命令有两者需要特别注意
rm -rf
删除内容时不会有任何提示,也无法简单恢复,执行前需要额外注意安全性和后果.
gedit
开启文本编辑器需要当前为图形环境,如果为命令行环境则根本无法打开.
文件的查看和处理
图形界面本身也需要占用部分系统资源,在没有特别需求的情况下使用命令行环境进行文件浏览显然更节约资源,而gedit
又仅支持图形环境,因此当然有命令行的文件查看工具和命令了.
同时,除了创建和删除文件,复制/粘贴/剪贴也是我们常用的文件操作,这些当然也得到了系统的支持.
cat #显示文件的全部内容
cat file #显示指定文件的全部内容
cat -b file #显示文件全部内容并显示行号,不对空行进行统计
cat -n file #显示文件全部内容并显示行号,对空行也进行统计
当文件过长时这样查看内容显然是低效而繁琐的,可能需要不断向上翻页;而当我们需要查找关键词之类的操作时cat
也不能提供帮助.但对于不同的使用场景也有其他适合的工具,比如已知需要的信息在文件开头时可以使用head
,当查看的文件不断更新需要查看新内容时使用tail
,需要翻页查看和关键字检索时使用less
等等.
head #查看文件前多少行
head file #默认显示文件的前10行
head -n 5 file #显示文件的前n行,这里为前5行
tail #查看文件的后多少
tail file #默认显示文件的后10行
tail -n 5 file #显示文件的后n行,这里为后5行
##不难看出两者为同类指令,可以放在一起记忆
less #分页浏览
less file #进入less模式查看file文件
less模式中的按键 <上><下> 可以逐行查看文件内容
<pgup><pgdn>逐页查看文件内容
在less浏览页面<v>可进入vim进行实时编辑,编辑过程参考下文的vim指令
在less浏览页面输入`/+关键词`可在当前文件中进行关键词查找,查找得出的关键词用深颜色背景着重标出
搜索关键字后 <n> 向下匹配 <N> 向上匹配
在less浏览页面 <q> 可退出less模式,返回shell页面
重命名
#移动原理:
#相同设备分区中的文件移动是重命名过程
#不同分区的文件移动是建立删除过程
查看文件节点号(相当与文件身
而移动和复制则更为简单.
cp #复制文件
cp 文件 目的地文件 #用目标文件的内容覆盖目的地文件的内容,若目的地文件中本身已经有内容存在,会提示是否覆盖
cp 文件1 文件2 目的地目录 #将目标文件复制到目的地目录
cp -r 目录1 目录2 #将目录1中的内容全部复制到目录2中, -r表示递归查询
mv #移动文件
mv file dir #将file移动到dir目录下
mv dir1 dir2 #将dir1目录移动到dir2目录下,当然dir1中的内容也会跟着移动过去
mv file1 不存在的file2 #因为目标文件不存在,因此实际上是重命名
关于两者的具体实现方式,这里也可以简单提一提.
复制的本质是按照指定的源文件建立新文件,文件的节点号不同.
而移动则需要分情况讨论.
当在同一块物理硬盘中移动文件时,实际移动后的文件还是原本的文件,本质是进行重命名的过程.
当在不同的硬盘间移动文件时,实现方法为复制当前文件/目录到目的分区,随后删除原始文件的过程.
那么如何知道新的文件和之前的文件是否是同一文件呢?
可以查看文件的节点号,相当于文件的"身份证"
如何识别操作前后文件是否为同一文件
ls -i file # 可以查看文件的节点号,相当于文件身份证号,若相同则为同一文件
还有一些用来查看文件属性的命令如下所示.
file ##文件类型的查看
file file1 #查看file1的真实类型
wc #文件容量统计
wc -l #统计文件的总行数
wc -m #统计文件的总字符数
wc -w #统计文件的总单词数
wc -c #统计文件的总字符数
文件的批量处理
与人相比,计算机的优点之一就是可以进行简单但是繁多的计算.当创建一个文件时我们可以touch
一次,但如果一次创建一百个文件,总不能手动输入100次文件名.对于文件的批量处理是显而易见的需求.
对于这类需求,用到了匹配和条件指定的概念
匹配机制
* 匹配0-任意字符
? 匹配任意单个字符
[[:alpha:]] 匹配单个字母
[[:lower:]] 仅匹配单个大写字母
[[:upper:]] 仅匹配单个小写字母
[[:digit:]] 仅匹配单个数字
[[:alnum:]] 匹配单个的字母或数字
[[:space:]] 匹配单个空格
[[:punct:]] 匹配单个符号
根据上述匹配方式我们显然能做到很多事,比如
rm -rf * #删除当前目录下的所有文件和目录
rm -rf file? #删除当前目录下file开头+一个字符的所有文件
了解了匹配机制,下面来了解字符集合的匹配方法,毕竟上面的匹配方法很多时候并不能满足具体需求.
[] ##条件是或者关系是模糊匹配,对象和几个对比匹配就操作,没有也不会报错
##[1-10] 1到10 [!d-f]|[^d-f] 除了d-f以外
{} ##点名机制,精确指定集合中的每一个元素
##{1..10} 1-10 {a..c} a-c
Linux系统中文件的寻址
首先需要明确的是,Linux系统中一切都是文件.
命令的实现也是对应文件内容的,删除了对应的文件,命令也会无法使用.
因此对于文件的寻址和管理就成了Linux操作系统的核心要务之一.
这里设计到了绝对路径和相对路径的概念
绝对路径
文件在系统中的真实位置,在任何场景下都可以使用
通常以/开头,不会考虑当前系统位置
相对路径
绝对路径名称的简写,省略了用户当前所在的系统位置
此名称只有在管理当前所在系统目录中子文件时才能使用
系统中不以/开有的文件名称都为相对路径在程序操作时
会自动识别当前路径的信息并关联操作目标
文件寻址常用命令
pwd ##显示当前的工作目录
cd ##切换当前的工作目录,绝对路径/相对路径均可
cd /mnt ##切换到/mnt目录下
ls ##显示文件信息,以下为附加参数
ls ##无参数时显示当前目录中的文件/目录名称
ls file ##显示指定文件名称
ls dir ##显示指定目录中内容的名称
ls -d dir ##显示目录本身的名称
ls -l file ##显示文件属性
ls -l dir ##显示目录中内容的属性
ls -ld dir ##组合使用显示目录本身属性
ls -a dir ##显示目录中所有文件名称包括隐藏文件
ls -s ##显示文件大小
ls -R dir ##递归显示目录中的内容
Vim简单认识
作为Linux下比较著名的命令行文件编辑器,vim可以说是广为人知了.
其操作指令和快捷键也很繁多,此处只涉及与课题相关的,具体的使用方法单独开一章进行叙述.
vim #文本编辑器
vim file ##进入到vim的浏览模式,对file文件进行浏览
##浏览模式不能编辑文件
<i> ##在浏览模式中按<i>进入插入模式
##按<ESC>退出插入模式
#在vim中鼠标不能控制光标用上下左右移动光标
#按:wq保存更改
在使用vim时会在同目录生成.
开头的swp后缀隐藏文件,作为缓存,:wq
后swp文件消失
如果因为部分原因vim未能正常关闭时,swp文件不会消失,同时在下次企图修改同一文件时会报错并要求用户选择处理方式.
Vim异常退出的处理
当vim编写文件时未保存更改内容被强制关闭,再次打开该文件时就会提示异常处理
[O] 只读打开文件
(E) 继续编辑
(R) 恢复未保存内容编辑
(D) 删除.swp文件进入编辑
(Q) 退出当前文件编辑
(A) 退出vim程序
当然可能你会觉得退出当前文件编辑和退出vim程序似乎没什么区别,实则不然.
因为vim也可以同时开启多个文件.
当同时打开多个文件时,退出当前文件编辑会继续编辑其他文件,而退出vim程序则会直接回到shell.
vim -o file1 file2 ##上下模式打开两个文件
##<ctrl>+<w> <上|下>来转换控制窗口
vim -p file1 file2 ##左右打开两个不同文件
##:tabn 进入到下一个窗口
##:tabp 进入到上一个窗口
Tips
常见的系统二级目录
/bin ##系统常规命令
/sbin ##系统管理命令
/dev ##设备文件
/home ##普通用户家目录集合,此目录中的子目录为普通用户家目录
/root ##超级用户家目录
/lib64 ##64位函数库
/lib ##系统函数库
/proc ##进程信息,系统识别的硬件信息
/run ##当前运行的硬件和系统模块
/srv ##系统数据(常量)
/var ##系统数据(变化)
/tmp ##系统临时文件存放目录
/mnt ##临时设备挂载点
/media ##cdrom临时挂载点
/etc ##系统大多数程序的配置目录
/opt ##第三方软件安装位置
/boot ##系统启动分区,系统启动时读取的文件都在此目录中
/sys ##关于内核设定目录
/usr ##unix system resource 仅次于/ 重要 多数系统资源都在此目录中
寻址可能用到的简易写法
~ ##当前用户的家目录
~username ##指定用户的家目录
"~+" = "." ##当前目录
~- ##当前目录之前所在目录
.. ##上级目录