Linux目录与文件管理

1,020 阅读12分钟

1.目录层次

1.1常见目录

一级目录功能(作用)
/bin/存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行
/boot/系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
/dev/设备文件保存位置
/etc/配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等
/home/普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming
/lib/系统调用的函数库保存位置
/media/挂载目录。系统建议用来挂载媒体设备,如软盘和光盘
/mnt/挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
/misc/挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定
/opt/第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件
/root/root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下
/sbin/保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看
/srv/服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据
/tmp/临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空
  • 根(/)相当于一个入口,文件的总入口,也是唯一入口
  • bin (sbin) 二进制文件,可执行文件,也可能存在别处,默认使用较多所有用户软连接文件
  • sbin 管理员可使用的二进制文件
  • boot 系统内核、启动文件
  • dev 硬件文件(黄色)
  • etc 配置文件等同于windows 注册表,一般都是文本文件
  • run 运行的内存中文件
  • tmp 临时文件 -t
  • usr应用程序和操作系统相关的文件
  • var日志文件,数据变化的
  • home 普通用户的家目录的上级目录zhangsan目录会在 home
  • root系统管理员的目录上 /root
  • lib 动态库文件 类似于windows 的dll文件
  • proc 主要保存系统的内核、进程、外部设备状态和网络状态等
  • media 可移动设备
  • mnt 默认挂载点
  • opt 第三方应用程序安装所在目录程序

2.查看文件内容

2.1七种常见的文件类型

文件类型说明
-普通文件,包括纯文本文件、二进制文件、各种压缩文件等
b块设备文件block,就是保存大块数据的设备,比如最常见的硬盘
d目录文件directory,类似 Windows 系统中的文件夹
c字符设备character,例如键盘、鼠标等
l符号链接文件link,类似 Windows 系统中的快捷方式
p管道文件pipe,其主要作用是解决多个程序同时存取一个文件所造成的错误
s套接字文件socket,通常用于进程间的网络通信,一般隐藏在 /var/run/ 目录下

2.2显示命令

2.2.1 cat

选项效果
-n显示行号,包括空行
-b跳过空白行编号
-s将所有的连续的多个空行替换为一个空行(压缩成一个空行)
-A显示隐藏字符

示例:

##查看 .bashrc 文件内容
[root@localhost ~]# cat .bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias shua='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan;'
# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi


[root@localhost data]# cat -b abc1.txt 
#空行不编号
     1	555

     2	555


     3	5555          5555    555
[root@localhost data]# cat -s abc2.txt 
#将连续的空行压缩成一个空行
111

111111

22222          33333

cat查看后面 可以跟多个文件名

#cat后面跟多个文件名的时候,谁在前,显示结果就在前
[root@test1 opt]# echo "1" > 1.txt
[root@test1 opt]# echo "2" > 2.txt
[root@test1 opt]# cat 1.txt 2.txt 
1
2
[root@test1 opt]# cat 2.txt 1.txt 
2
1

拓展:hexdump -查看非文本文件内容

[root@localhost ~]# hexdump -C -n 512 /dev/sda
00000000  eb 63 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.c..............|
00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
00000050  00 00 00 00 00 00 00 00  00 00 00 80 01 00 00 00  |................|
00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|
00000080  00 20 fb a0 64 7c 3c ff  74 02 88 c2 52 be 05 7c  |. ..d|<.t...R..||
00000090  b4 41 bb aa 55 cd 13 5a  52 72 3d 81 fb 55 aa 75  |.A..U..ZRr=..U.u|
000000a0  37 83 e1 01 74 32 31 c0  89 44 04 40 88 44 ff 89  |7...t21..D.@.D..|
000000b0  44 02 c7 04 10 00 66 8b  1e 5c 7c 66 89 5c 08 66  |D.....f..\|f.\.f|
000000c0  8b 1e 60 7c 66 89 5c 0c  c7 44 06 00 70 b4 42 cd  |..`|f.\..D..p.B.|
000000d0  13 72 05 bb 00 70 eb 76  b4 08 cd 13 73 0d 5a 84  |.r...p.v....s.Z.|
000000e0  d2 0f 83 de 00 be 85 7d  e9 82 00 66 0f b6 c6 88  |.......}...f....|
000000f0  64 ff 40 66 89 44 04 0f  b6 d1 c1 e2 02 88 e8 88  |d.@f.D..........|
00000100  f4 40 89 44 08 0f b6 c2  c0 e8 02 66 89 04 66 a1  |.@.D.......f..f.|
00000110  60 7c 66 09 c0 75 4e 66  a1 5c 7c 66 31 d2 66 f7  |`|f..uNf.\|f1.f.|
00000120  34 88 d1 31 d2 66 f7 74  04 3b 44 08 7d 37 fe c1  |4..1.f.t.;D.}7..|
00000130  88 c5 30 c0 c1 e8 02 08  c1 88 d0 5a 88 c6 bb 00  |..0........Z....|
00000140  70 8e c3 31 db b8 01 02  cd 13 72 1e 8c c3 60 1e  |p..1......r...`.|
00000150  b9 00 01 8e db 31 f6 bf  00 80 8e c6 fc f3 a5 1f  |.....1..........|
00000160  61 ff 26 5a 7c be 80 7d  eb 03 be 8f 7d e8 34 00  |a.&Z|..}....}.4.|
00000170  be 94 7d e8 2e 00 cd 18  eb fe 47 52 55 42 20 00  |..}.......GRUB .|
00000180  47 65 6f 6d 00 48 61 72  64 20 44 69 73 6b 00 52  |Geom.Hard Disk.R|
00000190  65 61 64 00 20 45 72 72  6f 72 0d 0a 00 bb 01 00  |ead. Error......|
000001a0  b4 0e cd 10 ac 3c 00 75  f4 c3 00 00 00 00 00 00  |.....<.u........|
000001b0  00 00 00 00 00 00 00 00  11 2b 09 00 00 00 80 20  |.........+..... |
000001c0  21 00 83 d5 89 8c 00 08  00 00 00 00 a0 00 00 d5  |!...............|
000001d0  8a 8c 8e fe ff ff 00 08  a0 00 00 40 80 08 00 00  |...........@....|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200

2.2.2 more

格式:more [选项] 文件名

基本操作

  • 空格下一行 到文末后自动退出
  • b上一行
  • enter一行一行滚动
  • 自动退出
  • q退出

2.2.3 less

格式:less [选项] 文件名

  • 可以使用/ 查找 n向下 N向上查找
  • Page Up 向上翻页,Page Down 向下翻页
  • 空格下一行 到文末后自动退出
  • b上一行
  • enter一行一行滚动
  • 自动退出
  • q退出

2.2.4 head/tail

head -n 具体数字 文件名 (不加具体的数字,默认开头十行)

tail -n 具体数字 文件名 (不加具体的数字,默认结尾十行)

tail -f 具体数字 文件名 实时跟踪最后十行

[root@localhost ~]# echo "123456"|head -c2
12[root@localhost ~]# 

## 显示文件内容 开头前3行
[root@localhost ~]# cat /etc/passwd|head -3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

## 显示文件内容 末尾前3行
[root@localhost ~]# cat /etc/passwd|tail -3
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
lyn:x:1000:1000:Lyn:/home/lyn:/bin/bash
[root@localhost ~]# 

2.2.5 grep

grep [选项]… 查找条件 目标文件

  • -i:查找时忽略大小写
  • -v:反向查找,输出与查找条件不相符的行
  • -o 只显示匹配项
  • -f 对比两个文件的相同行
  • -c 匹配的行数([root@localhost ~]# grep -c root passwd 3)

基本格式

  • 要查找的字符串以双引号括起来单引号也可以
  • “^……”表示以……开头,“……$”表示以……结尾
  • “^$”表示空行
[root@test1 opt]# cat 123.txt |grep -v '^$' >123.txt  //将非空行写入到123.txt文件
[root@test1 opt]# grep "^b" 123.txt    //过滤已b开头
[root@test1 opt]#grep '/$'  123.txt    //过滤已/结尾
[root@test1 opt]# grep -v "^$" 123.txt //过滤非空行3 备份与恢

3.压缩、解压缩

3.1 gzip、bzip2

gzip [-9] 文件名… 提高压缩比例,但是文件较大时效率会低 bzip2 [-9] 文件名... 9代表压缩比率,9最大1最小,使用以上两种压缩源文件不存在了 gzip的压缩率 要高于bzip2

[root@test1 opt]# gzip *.txt    
#压缩后源文件没了 可以使用-k  保留源文件centos8 特性
[root@test1 opt]# ls
123456.txt.gz  123.txt.gz  1.txt.gz  2.txt.gz  abc.txt.gz  rh  test.txt.gz
[root@test1 opt]# gzip -d *.txt.gz    解压
[root@test1 opt]# ls
123456.txt  123.txt  1.txt  2.txt  abc.txt  rh  test.txt

3.2 归档 tar

tar [选项] ... 归档文件名 源文件或目录

tar [选项] ... 归档文件名 [-C 目标目录]

常见选项

  • -c:创建(Create).tar 格式的包文件
  • -x:解开.tar 格式的包文件
  • -C:解压时指定释放的目标文件夹
  • -f:表示使用归档文件(一般都要带上表示使用tar)
  • -p:打包时保留文件及目录的权限
  • -P:打包时保留文件及目录的绝对径
  • -t:列表查看包内的文件(要和f一起使用)
  • -v:输出详细信息(Verbose)
  • -j:调用 bzip2 程序进行压缩或解压
  • -z:调用 gzip 程序进行压缩或解压
[root@localhost data]# tar -zcvf vm.tar.gz vm1 vm2 zz
vm1
vm2
zz/
[root@localhost data]# tar -jcvf vm.tar.gz vm1 vm2 zz

[root@localhost data]# tar -zxvf vm.tar.gzip -C /opt
vm1
vm2
zz/

[root@localhost zz]# tar -tf vm1.tar.gzip 
vm1

4.Vi编辑器

Linux 系统中“一切皆文件”,因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器。Vim具有编辑程序的能力,会主动利用不同的字体颜色辨别语法的正确性,方便程序设计接口

vim是vi的升级版

vim [OPTION]... ...
命令  选项       文件

vim  文件名不存在  是新建
vim  文件名存在   就是修改

如果系统提示并未安装vim ,可以使用:

yum install vim -y 最小化安装

常用选项

+#	        打开文件后,让光标处于第#行的行首,+默认行尾
!		打开上一次的文件
+/PATTERN	让光标处于第一个被PATTERN匹配到的行行首用不多

4.1 vim三种模式

三种常见模式:

  1. 命令或普通(Normal)模式:默认模式,可以实现移动光标,剪切/粘贴文本
  2. 插入(Insert)或编辑模式:用于修改文本
  3. 扩展命令(extended command )或末行模式:保存,退出等搜索替代

命令模式 --> 插入模式

i	insert, 在光标所在处输入
I	在当前光标所在行的行首输入
a	append, 在光标所在处后面输入
A	在当前光标所在行的行尾输入
o	在当前光标所在行的下方打开一个新行
O	在当前光标所在行的上方打开一个新行

4.1.1 命令模式

命令模式:此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。

单词间跳转
w:下一个单词的词首
e:当前或下一单词的词尾
b:当前或前一个单词的词首

当前页跳转:
H:页首     
M:页中间行     
L:页底
zt:将光标所在当前行移到屏幕顶端
zz:将光标所在当前行移到屏幕中间
zb:将光标所在当前行移到屏幕底端

行首行尾跳转:
^ 跳转至行首的第一个非空白字符
0 跳转至行首
$ 跳转至行尾

行间移动:
#G 或者扩展命令模式下 
:#   跳转至由第#行
G 最后一行
1G, gg 第一行


删除命令(delete)
d 删除命令,可结合光标跳转字符,实现范围删除
d$ 删除到行尾
d^ 删除到非空行首
d0 删除到行首
dw 下一个单词的词首
de 当前或下一个单词的词尾
db 当前或上一个单词的词首
dd:   剪切光标所在的行
D:从当前光标位置一直删除到行尾,等同于d$

复制命令(yank)
y 复制,行为相似于d命令
yy:复制行
Y:复制整行

撤消更改
u 撤销最近的更改,相当于windows中ctrl+z
#u 撤销之前多次更改
U 撤消光标落在这行后所有此行的更改
Ctrl-r 重做最后的“撤消”更改,相当于windows中crtl+y
. 重复前一个操作
#. 重复前一个操作#次

4.1.2 输入模式

输入模式: 使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令,当编辑文件完成后按 Esc 键即可返回命令模式。

快捷键功能描述
i在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
I行首插入命令
o在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文
a在当前光标所在位置之后插入随后输入的文本
A行尾插入命令

4.1.3 末行模式

末行模式:文件中的指定内容执行保存、查找或替换等操作。使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”(英文冒号)键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。

快捷键功能效果
:q退出不保存
:q1强制退出不保存
:W保存
:w 新文件名另存为新文件
:wq :zz :x保存并退出
:e 另存为新文件
:r在当前文件中读入其他文件内容
# d删除 第#行
#,# d删除#到#行

4.2 配置文件定制vim的工作特性

Vim 启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim。

Vim 配置文件分为系统配置文件和用户配置文件:

  • 系统配置文件位于 Vim 的安装目录(默认路径为 /etc/.vimrc);
  • 用户配置文件位于主目录 ~/.vimrc,即通过执行 vim ~/.vimrc 命令即可对此配置文件进行合理修改。通常情况下,Vim 用户配置文件需要自己手动创建。
设置参数功能描述
set nu显示行号
set cul突出显示当前行
set ai设置自动缩进
set ts=4设置tab健宽度为4个空格