Linux文件管理
在Linux中一切皆文件
文件命名规范:
1.不能 使用‘/’作为文件名,因为‘/’为linux的根目录。
2.文件名称不能超过255个字符
3.名称区分大小写(linux中没有文件扩展名,名称中出现类似扩展名只是方便更好理解)
查看文件:
linux中有很多可以查看文件的方式,以下是几种常用的方式:
ls:显示指定路径下的所有文件信息
以下是ls的常用选项:
| -a | 列出指定路径下的全部文件 |
| -l | 以列表的形式展示文件(等价于ll命令) |
| -d | 只展示目录本身而不展示目录下的内容 |
| -h | 以人的阅读习惯进行展示 |
| -r | 递归展示 |
以下为常用选项的演示,以根目录‘/’为例:
ls -a /:展示出根目录下所有文件内容

根目录以下的文件与linux的许多功能都息息相关,以下是对该些文件的基本介绍:
| bin | 普通用户可以执行的命令所在目录 |
| boot | 系统启动时所需要的文件 |
| dev | 设备文件所在目录 |
| etc | 系统中所有配置文件所在目录 |
| home | 普通用户所在的家目录 |
| lib | 库文件,在系统运行过程中所需要的一个库文件 |
| lib64 | 也是库文件所在的目录 |
| media | 媒体,是用户挂载的,一般光盘可以挂载在这下面 |
| mnt | 挂载目录 |
| opt | 第三方软件安装目录 |
| root | 超级用户所在的家目录 |
| run | 程序运行时的相关文件所在目录 |
| sbin | 超级用户可以执行的命苦所在目录 |
| srv | 网络服务数据 |
| tmp | 运行程序时产生的临时文件所在目录,会定期进行清理 |
| usr | 软件资源所在目录 |
| var | 用于存放一些会变化的数据,如日志 |
ls -l /和ll /:以列表的形式进行展示:


可以看出两条命令产生的结果都是一样的。
链接文件:
其中有四条文件出现带箭头标识是链接文件。
链接文件分为硬链接文件和软链接文件。软链接文件也叫符号链接文件,类似于windows中的快捷方式,每个软链接文件的数据是它所在链接文件的路径,但和源文件有着不同node,如果源文件被删除,软链接文件也就不起作用了。硬链接文件相当于源文件的副本,拥有和源文件相同的node,当源文件被删除后硬链接文件依旧可以用。
创建硬链接文件:
ln 源文件 目标文件/链接名称
创建软链接文件:
ln -s 源文件 目标文件/链接名称
例如,复制/etc/passwd的内容到passwd文件中,并为该文件分别创建软链接和硬链接

软链接文件可以对一个不存在文件进行创建,而硬链接文件只能对同一个文件系统中存在的文件进行创建;软链接文件也可以对目录进行链接,而硬链接文件不行。
回到我们的ls命令中。
ls -d /:只能展示目录本身而不会展示目录下的内容

可以看出,根据这条命令我们没办法看出根目录下有哪些文件。
cat:用于查看文件的详细内容,而非展示目录下的子文件
以下是cat常用的选项:
| -b | 显示没有空行的行号 |
| -n | 显示行号 |
以下是常用选项的演示,以/etc/passwd文件为例:
cat -b /etc/passwd:显示的是该文件中无空行的行,并且为其标上了行号

cat -A /etc/passwd:该命令会在每一行的末尾都标上$符号

head:显示文件内容的前部分,默认前10行
| -c | 输出每行的第一个字符 |
| -n | 输出指定的行数,默认10 |
head -n -3 /etc/passwd:指定的行数为负数时,会从尾部去掉指定行数再展示

这里看出结果只有36行,而通过cat -n /etc/passwd展示的结果是有39行,因为-3为去掉末尾三行

tail:显示文件内容的尾部分,默认后10行
| -c | 显示指定数量字符 |
| -n | 显示指定行数内容,默认10 |
| -f | 显示追加内容,文件会进入阻塞状态,使用ctrl+c退出 |
将虚拟机打开两个界面,一个界面使用tail -f passwd来观察,另一个对文件进行添加内容

可以看到新加入的内容被显示出来。
more:用于分页显示文件的内容
less:用于分页显示文件的内容,类似与more
按g回到第一页,G回到最后一页,空格向下翻页,q退出。
grep:过滤文件内容,显示想要的内容
| -c | 显示找到目标内容的行数 |
| -i | 不区分大小写得找 |
| -n | 显示行号 |
| -v | 反向选择,即不包含目标内容的行 |
| -A | 显示找到目标内容的那一行以及以下n行 |
| -B | 显示找到目标内容的那一行以及以上n行 |
| -C | 显示找到目标内容的那一行以及上下n行 |
grep支持多个选项混合使用。
grep -ci RooT passwd:显示包含不区分大小写得RooT有几行

grep -ni RooT passwd:显示包含不区分大小写得RooT的行并显示行号
grep -cv root passwd:显示不包含root的行数
grep -B 2 root passwd:显示包含root的行的前2行
grep nologin$ passwd:显示以nologin结尾的行。

另外还有一些特殊符号的表示:
| grep ^h 文件名 | 以h开头的行 |
| grep ^[qf] 文件名 | 以q或者以f开头的行 |
| grep ^[^qf] 文件名 | 除了以q或者以f开头以外的行 |
| grep h$ 文件名 | 以h结尾的行 |
| grep ^h$ 文件名 | 只有h的行 |
wc:统计文件内容中的字符数
| -c | 统计文件大小 |
| -m | 统计字符个数 |
| -w | 统计单词个数 |
| -l | 统计行数 |
wc a.txt:结果分别是行数,单词数,文件大小,文件名

cut:切割提取文本内容
| -d | 指定分隔符,如果是空格需要用引号引起来 |
| -f | 指定第几个字段 |
| -c | 指定获取几个字符 |
以/etc/passwd内容为例,为了获取uid和gid的内容,已知他们分别是第三和第四个字段,通过-d来指定分隔符为":",从而分出字段,再选择指定字段。

sort:对文本内容进行排序显示
| -b | 忽略缩进与空格 |
| -f | 忽略大小写 |
| -n | 根据数值排序 |
| -r | 反向排序 |
| -k | 指定字段范围 |
| -t | 指定间隔符 |
| -u | 去除重复行 |
sort -t : -k 4 -n passwd:同样指定分隔符和字段,但显示的是全部数据,只是数据的顺序根据指定字段的大小进行排序

uniq:去重显示
根据uniq -c a.txt的结果与原文内容对照可以发现,只能对出现连续的额重复内容进行去重

对比sort -u a.txt的去重结果来说,sort更能识别重复的单词,进行去重后再根据字母顺序进行了排序。

创建文件:
mkdir:创建目录
| -p | 递归创建 |
| -v | 显示创建的过程 |
可以通过花括号形式进行同时创建多个目录。

touch:创建文件
| -a | 指access time,即访问时间 |
| -m | 指modify time,即修改时间 |
| -c | 指change time,即元数据的时间 |
可以通过stat 文件名来查看文件的状态(包括access time,modify time,change time)。
rm:删除目录和文件
| -f | 强制删除,不会有提示信息 |
| -r | 递归删除 |
| -d | 删除空目录 |
| -v | 显示删除过程 |
操作文件:
vim:编辑文件内容,是vi的增强版,支持关键字变色
vim编辑器的三种模式:
命令模式:
| 光标移动 | 上下左右键可以移动光标 |
| gg | 快速移动到文件开头,10gg即移动到前面10行 |
| shift+g | 快速移动到文件末尾 |
| yy | 复制内容,10yy即复制10行数据 |
| dd | 删除内容,10dd即删除10行数据 |
| u | 撤销之前操作 |
| p | 将复制内容粘贴到光标之后 |
插入模式:
| i | 光标之前插入 |
| a | 光标之后插入 |
| o | 光标所在行的下一行插入 |
末行模式:
| :wq | 保存退出 |
| :q! | 强制退出不保存 |
| :r | 将指定文件写入光标位置 |
| :%s/x/y/gi | 替换文本内容,用y来替换x |
| /keyword | 查找关键字,n向前搜索,N向后搜索 |
| :set nu | 显示行号 |
| :set nonu | 取消行号 |
| :noh | 取消高亮 |
cp:复制文件
| -a | 复制时保留链接、文件属性 |
| -d | 复制时保留链接 |
| -f | 在覆盖已经存在目标路径时不提示 |
| -r | 递归复制 |
通过cp -a passwdlink passwdlink2复制passwdlink的内容到passwdlink2中,并且拥有相同的文件属性,除了硬链接数不同。
mv:移动文件或者目录
通过tree 路径可以查看目录结构,可以看出passwdlink2为dir1的子文件。

