Linux目录和文件管理
1.目录层次
1.1常见目录
一级目录 | 功能(作用) |
---|---|
/bin/ | 存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行 |
/boot/ | 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 |
/dev/ | 设备文件保存位置 |
/etc/ | 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 |
/home/ | 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming |
/lib/ | 系统调用的函数库保存位置(c语言 写的一些固定格式的代码,方便调用) |
/media/ | 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘 |
/mnt/ | 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 |
/misc/ | 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的 |
/opt/ | 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件 |
/root/ | root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下 |
/sbin/ | 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看 |
/srv/ | 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 |
/tmp/ | 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空 |
Linux /usr目录
usr(注意不是 user),全称为 Unix Software Resource,此目录用于存储系统软件资源。FHS 建议所有开发者,应把软件产品的数据合理的放置在 /usr 目录下的各子目录中,而不是为他们的产品创建单独的目录。
Linux 系统中,所有系统默认的软件都存储在 /usr 目录下,/usr 目录类似 Windows 系统中 C:\Windows\ + C:\Program files\ 两个目录的综合体。
子目录 | 功能(作用) |
---|---|
/usr/bin/ | 存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行 |
/usr/sbin/ | 存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。 |
/usr/lib/ | 应用程序调用的函数库保存位置 |
/usr/XllR6/ | 图形界面系统保存位置 |
/usr/local/ | 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置 |
/usr/share/ | 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录 |
/usr/src/ | 源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。不过笔者更习惯把手工下载的源码包保存到 /usr/local/src/ 目录中,把内核源码保存到 /usr/src/linux/ 目录中 |
/usr/include | C/C++ 等编程语言头文件的放置目录 |
Linux /var 目录
/var 目录用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等。通常,此目录下建议包含如表 4 所示的这些子目录。
/var子目录 | 功能(作用) |
---|---|
/var/lib/ | 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在 /var/lib/mysql/ 目录中 |
/var/log/ | 登陆文件放置的目录,其中所包含比较重要的文件如 /var/log/messages, /var/log/wtmp 等。 |
/var/run/ | 一些服务和程序运行后,它们的 PID(进程 ID)保存位置 |
/var/spool/ | 里面主要都是一些临时存放,随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务。 |
/var/www/ | RPM 包安装的 Apache 的网页主目录 |
/var/nis和/var/yp | NIS 服务机制所使用的目录,nis 主要记录所有网络中每一个 client 的连接信息;yp 是 linux 的 nis 服务的日志文件存放的目录 |
/var/tmp | 一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再行删除 |
-
根(/)相当于一个入口,文件的总入口,也是唯一入口
-
bin (sbin) 二进制文件,可执行文件,也可能存在别处,默认使用较多所有用户软连接文件 ----------------命令
-
sbin 管理员可使用的二进制文件---------------------------------命令ls cd useradd
-
boot 系统内核、启动文件
-
dev 硬件文件(黄色)
-
etc 配置文件等同于windows 注册表,一般都是文本文件
-
run 运行的内存中文件 运行中的文件
-
tmp 临时文件 -t 特殊权限
-
usr应用程序和操作系统相关的文件 bin sbin
-
var/log日志文件,数据变化的
-
home 普通用户的家目录的上级目录zhangsan目录会在 home
-
root系统管理员的家目录上 /root
-
lib 动态库文件 类似于windows 的dll文件
-
proc 主要保存系统的内核、进程、外部设备状态和网络状态等
-
media 可移动设备
-
mnt 默认挂载点
-
opt 第三方应用程序安装所在目录程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c7gmZwbl-1689738988047)(2第二章Linux目录和文件管理.assets/image-20220118142454119.png)]
1.2 文件系统的目录结构(常识)
- 以 . 开头的文件均为隐藏文件
- 路径用/分开 / 不在第一位就是分隔符
- 文件名最长 255个字符
- 区分大小写 linux 注意事项
- 不要太华丽
2.查看文件内容
2.1七类常见的linux的文件
- d 目录文件directory
- b 块设备文件block 块设备文件,就是保存大块数据的设备,比如最常见的硬盘。
- c 字符设备character 这些文件通常隐藏在 /dev/ 目录下,当进行设备读取或外设交互时才会被使用
- l 符号链接文件link
- p 管道文件pipe 主要用于进程间通信单向传输 一个发一个输管道文件
- s 套接字文件socket 套接字文件一般隐藏在 /var/run/ 目录下,用于进程间的网络通信
- -普通文件 普通文件,包括纯文本文件、二进制文件、各种压缩文件等
第一个字符 | 文件类型 |
---|---|
- | 普通文件,包括纯文本文件、二进制文件、各种压缩文件等。 |
d | 目录,类似 Windows 系统中的文件夹。 |
b | 块设备文件,就是保存大块数据的设备,比如最常见的硬盘。 |
c | 字符设备文件,例如键盘、鼠标等。 |
s | 套接字文件,通常用在网络数据连接,可以启动一个程序开监听用户的要求,用户可以通过套接字进行数据通信。 |
p | 管道文件,其主要作用是解决多个程序同时存取一个文件所造成的错误。 |
l | 链接文件,类似 Windows 系统中的快捷方式。 |
2.2显示命令
2.2.1 cat
选项 | 效果 |
---|---|
-n | 显示行号包括空行 |
-b | 跳过空白行编号 |
-s | 将所有的连续的多个空行替换为一个空行(压缩成一个空行) |
-A | 显示隐藏字符 |
2.2.1rev
将同一行的内容逆向显示
[root@centos8 ~]#cat /data/fa.txt
1 2 3 4 5
a b c
[root@centos8 ~]#tac /data/fa.txt
a b c
1 2 3 4 5
[root@centos8 ~]#rev /data/fa.txt
5 4 3 2 1
c b a
[root@centos8 ~]#rev
abcdef
fedcba
[root@centos8 ~]#echo {1..10} |rev
01 9 8 7 6 5 4 3 2 1
2.3 分页显示
2.3.1 more
more [选项] 文件名
基本操作
- 空格下一行 到文末后自动退出
- b上一行
- enter一行一行滚动
- 自动退出
- q退出
[root@test1 var]# /etc/dhcp/dhcpd.conf
##################################################################################
[root@test1 var]# ls -lh /etc/*.conf | more //命令显示过多也可以使用管道 加more查看
-rw-r--r--. 1 root root 55 3月 1 2017 /etc/asound.conf
-rw-r--r--. 1 root root 15K 8月 4 2017 /etc/autofs.conf
-rw-------. 1 root root 232 8月 4 2017 /etc/autofs_ldap_auth.conf
-rw-r--r--. 1 root root 22K 8月 7 2017 /etc/brltty.conf
-rw-r--r--. 1 root root 676 8月 3 2017 /etc/cgconfig.conf
-rw-r--r--. 1 root root 265 6月 18 23:09 /etc/cgrules.conf
-rw-r--r--. 1 root root 131 8月 3 2017 /etc/cgsnapshot_blacklist.conf
-rw-r--r--. 1 root root 1.1K 1月 31 2017 /etc/chrony.conf
-rw-r--r--. 1 root root 1.2K 8月 3 2017 /etc/dleyna-server-service.conf
-rw-r--r--. 1 root root 27K 8月 3 2017 /etc/dnsmasq.conf
-rw-r--r--. 1 root root 1.3K 8月 5 2017 /etc/dracut.conf
-rw-r--r--. 1 root root 112 3月 16 2017 /etc/e2fsck.conf
-rw-r--r--. 1 root root 20 6月 24 2014 /etc/fprintd.conf
-rw-r--r--. 1 root root 38 5月 2 2017 /etc/fuse.conf
-rw-r--r--. 1 root root 842 11月 6 2016 /etc/GeoIP.conf
-rw-r--r--. 1 root root 9 6月 7 2013 /etc/host.conf
-rw-r--r--. 1 root root 4.8K 8月 2 2017 /etc/idmapd.conf
-rw-r--r--. 1 root root 2.1K 8月 5 2017 /etc/ipsec.conf
-rw-r--r--. 1 root root 7.1K 6月 18 23:08 /etc/kdump.conf
-rw-r--r--. 1 root root 590 4月 29 2017 /etc/krb5.conf
-rw-r--r--. 1 root root 478 6月 13 2017 /etc/ksmtuned.conf
-rw-r--r--. 1 root root 28 2月 28 2013 /etc/ld.so.conf
-rw-r-----. 1 root root 191 4月 19 2017 /etc/libaudit.conf
-rw-r--r--. 1 root root 2.4K 10月 13 2013 /etc/libuser.conf
-rw-r--r--. 1 root root 19 6月 18 23:12 /etc/locale.conf
-rw-r--r--. 1 root root 662 7月 31 2013 /etc/logrotate.conf
-rw-r--r--. 1 root root 5.1K 6月 10 2014 /etc/man_db.conf
-rw-r--r--. 1 root root 936 8月 3 2017 /etc/mke2fs.conf
--More--
不可以向上翻页
2.3.2less
less [选项] 文件名
- 可以使用/ 查找 n向下 N向上查找
- Page Up 向上翻页,Page Down 向下翻页
- 其余参考more
[root@test1 var]# less /etc/dhcp/dhcpd.conf 空格到底不会自动退出
#################################################################################
[root@test1 var]# ls -lh /etc/*.conf | less
-rw-r--r--. 1 root root 55 3月 1 2017 /etc/asound.conf
-rw-r--r--. 1 root root 15K 8月 4 2017 /etc/autofs.conf
-rw-------. 1 root root 232 8月 4 2017 /etc/autofs_ldap_auth.conf
-rw-r--r--. 1 root root 22K 8月 7 2017 /etc/brltty.conf
-rw-r--r--. 1 root root 676 8月 3 2017 /etc/cgconfig.conf
-rw-r--r--. 1 root root 265 6月 18 23:09 /etc/cgrules.conf
-rw-r--r--. 1 root root 131 8月 3 2017 /etc/cgsnapshot_blacklist.conf
-rw-r--r--. 1 root root 1.1K 1月 31 2017 /etc/chrony.conf
-rw-r--r--. 1 root root 1.2K 8月 3 2017 /etc/dleyna-server-service.conf
-rw-r--r--. 1 root root 27K 8月 3 2017 /etc/dnsmasq.conf
-rw-r--r--. 1 root root 1.3K 8月 5 2017 /etc/dracut.conf
-rw-r--r--. 1 root root 112 3月 16 2017 /etc/e2fsck.conf
-rw-r--r--. 1 root root 20 6月 24 2014 /etc/fprintd.conf
-rw-r--r--. 1 root root 38 5月 2 2017 /etc/fuse.conf
-rw-r--r--. 1 root root 842 11月 6 2016 /etc/GeoIP.conf
-rw-r--r--. 1 root root 9 6月 7 2013 /etc/host.conf
-rw-r--r--. 1 root root 4.8K 8月 2 2017 /etc/idmapd.conf
-rw-r--r--. 1 root root 2.1K 8月 5 2017 /etc/ipsec.conf
-rw-r--r--. 1 root root 7.1K 6月 18 23:08 /etc/kdump.conf
-rw-r--r--. 1 root root 590 4月 29 2017 /etc/krb5.conf
-rw-r--r--. 1 root root 478 6月 13 2017 /etc/ksmtuned.conf
-rw-r--r--. 1 root root 28 2月 28 2013 /etc/ld.so.conf
-rw-r-----. 1 root root 191 4月 19 2017 /etc/libaudit.conf
-rw-r--r--. 1 root root 2.4K 10月 13 2013 /etc/libuser.conf
-rw-r--r--. 1 root root 19 6月 18 23:12 /etc/locale.conf
-rw-r--r--. 1 root root 662 7月 31 2013 /etc/logrotate.conf
-rw-r--r--. 1 root root 5.1K 6月 10 2014 /etc/man_db.conf
-rw-r--r--. 1 root root 936 8月 3 2017 /etc/mke2fs.conf
:
2.4显示文件前后内容
2.4.1 head
可以显示文件或标准输入的前面行
格式:
head [OPTION]... [FILE]...
选项:
-c # 指定获取前#字节
-n # 指定获取前#行,#如果为负数,表示从文件头取到倒数第#前
-# 同上
head -n 具体数字 文件名 (不加具体的数字,默认开头十行)
例子:
[root@centos7 ~]#head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@centos8 ~]#head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@centos8 ~]#cat seq.log
1
2
34
5
6
7
8
9
10
[root@centos8 ~]#head -n 3 seq.log
1
2
3
[root@centos8 ~]#head -n -3 seq.log
1
2
3
4
5
6
7
[root@centos8 ~]#head -n +3 seq.log
1
2
3
2.4.2 tail
tail 和head 相反,查看文件或标准输入的倒数行
格式:
tail [OPTION]... [FILE]...
常用选项:
-f 跟踪显示文件fd新追加的内容,常用日志监控,
tail -n 具体数字 文件名 (不加具体的数字,默认结尾十行)
tail -f 具体数字 文件名 实时跟踪最后十行
例子:
abcd[root@localhost test]# echo abcdef|head -c2
ab[root@localhost test]#
[root@localhost test]# head -n -3 3.txt
#-3 不显示最后3行
1
2
3
4
5
[root@localhost ky15]# tail -n -3 3.txt
#-3 只显示最后三行
6
7
8
[root@localhost ky15]# head -n +3 3.txt
#就只显示前三行
1
2
3
[root@localhost ky15]# tail -n +3 3.txt #
#从第三行开始
3
4
5
6
7
##################################################################################
加入具体数字后显示开头20行
[root@test1 var]# head -20 /etc/dhcp/dhcpd.conf
# dhcpd.conf
#
[root@localhost ky15]# ifconfig ens33 |head -2|tail -1
inet 192.168.91.100 netmask 255.255.255.0 broadcast 192.168.91.255
[root@test1 var]# ping 192.168.91.1 >log.txt
#开启新终端后
[root@test1 var]# tail -f log.txt
#tail -f 等于tailf
[root@localhost ~]#ifconfig ens33 |head -2 |tail -1
###############面试题###################
[root@localhost ~]#cat /dev/urandom |tr -cd '[:alnum:]' |head -c12
513sHzLASljv
#生成随机密码
tr -d
tr -c
tail -n +k 文件名 从k行开始显示
2.2.5 tr
基本功能转换
格式
tr [选项]… SET1 [SET2]
SET 是一组字符串,一般都可按照字面含义理解
-d 删除
-s 压缩
-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
[root@localhost ~]#tr 123 abc
#只要出现123 就转换成abc
1g2j3k
agbjck
[root@localhost ~]#tr 12345678 abc
#最后一个一直用
123456789
abcccccc9
[root@localhost ~]#tr -d abc
删除
2a34bc
234
[root@localhost ~]#tr -s " "
1 2 3 4
1 2 3 4
[root@localhost ~]#tr -s "a"
aaaa
a
#管道符号的好处
#求和
[root@localhost opt]#seq -s+ 100
#中间加上加号
1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100
[root@localhost ~]#seq -s+ 100 >log.txt
[root@localhost ~]#bc < log.txt
#将log.txt中的信息交给bc 计算
#bc就是计算命令
5050
[root@localhost ~]#seq -s+ 100|bc
5050
#写脚本
#面试题生成随机密码
[root@localhost ~]cat /dev/urandom |tr -dc '[:alnum:]' |head -c12
[root@localhost ~]#cat 1.txt
aaaaa 11111
bbbbb 22222
[root@localhost ~]#cat 1.txt |tr -c "[a-z]" " "
#用 空格替换除了小写字母之外的所有字符
aaaaa bbbbb
[root@localhost ~]#cat 1.txt |tr -sc "[a-z]" " "
#加s压缩
aaaaa bbbbb
2.2.6 cut
cut 命令可以提取文本文件数据的指定列
格式
cut [选项]… [文件]…
常用选项
-d DELIMITER: 指明分隔符,默认tab
-f 想要获取的字段
#: 第#个字段,例如 3
#,#[,#]:离散的多个字段,例如 1,3,6
#-#:连续的多个字段, 例如 1-6
混合使用:1-3,7
-c 取字符
例子:
[root@localhost ~]#cut -d: -f1,3 /etc/passwd
##已冒号作为分隔的条件,取文件的第一列和第三列
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
mail:8
operator:11
[root@localhost ~]#ll |tail -n +2 |tr -s " "| cut -d" " -f3,9
#将空行压缩成一个后 再空格为分隔符 取 第3 和第9列
root abc.txt
root anaconda-ks.cfg
root initial-setup-ks.cfg
root 公共
root 模板
root 视频
root 图片
root 文档
root 下载
root 音乐
root 桌面
[root@localhost ~]#df |tail -n +2|tr -s " " |cut -d " " -f5|tr -d %
# df |tail -n +2 不显示第一行字段
# tr -s " " 将多个空格压缩成一个
# cut -d " " -f5 已空格为分隔符,取第五列
# tr -d % 删除百分号
[root@localhost ~]#df|tail -n +2 |tr -s " " % |cut -d % -f5
# df |tail -n +2 不显示第一行字段
# tr -s " " 将多个空格压缩成一个后 将空格替换成%
# cut -d % -f5 已%为分隔符 取第5列
[root@localhost ~]#df |tail -n +2 |cut -c54
#使用字符取字段,-c 取当前字符的字段
#在xshell的左下角,复制会有字符个数
2.2.7 wc
wc [选项]… 目标文件…
统计列数,wc本身就是参数 word
- -l:统计行数
- -w:统计单词个数
- -c:统计字节数
[root@localhost ~]# cat a.txt
dasdasdads
[root@localhost ~]# wc a.txt
1 1 11 a.txt
[root@localhost ~]# cat a.txt
das dasdads
[root@localhost ~]# wc a.txt
1 2 12 a.txt
########注意空行和换行符
tab 空格 算单词的分隔符
2.2.8 grep
grep [选项]… 查找条件 目标文件
- -i:查找时忽略大小写
- -v:反向查找,输出与查找条件不相符的行
- -o 只显示匹配项
- -f 对比两个文件的相同行
- -c 匹配的行数([root@localhost ky15]# grep -c root passwd 2)
- -r对文件
grep ‘^ ’ 开头
grep’ KaTeX parse error: Expected group after '^' at position 12: ' 结尾 grep '^̲’ 空行
2.2.9 paste
-d 指定分隔符
合并文件
#一个文件放密码一个文件放用户名
[root@localhost ~]#cat user.txt pass.txt
lisi
liwu
liliu
123
345
444
[root@localhost ~]#paste user.txt pass.txt
lisi 123
liwu 345
liliu 444
[root@localhost ~]#paste -d: user.txt pass.txt
###分隔符 用冒号隔开
lisi:123
liwu:345
liliu:444
2.2.10 sort
排序
sort [options] file(s)
把整理过的文本显示在屏幕上,不改变原始文件
r n t k
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-h 人类可读排序,如: 2K 1G
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique),合并重复项,即去重
-t 指定分隔符
-k 指定列
[root@localhost ~]#sort /etc/passwd
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]#sort -t: -k3 /etc/passwd
#已冒号为分隔符,只排序第三列,不是已数字是已字符比较
[root@localhost ~]#sort -t: -k3 -n /etc/passwd
#正序
[root@localhost ~]#sort -t: -k3 -nr /etc/passwd
#到序
[root@localhost ~]#df |tail -n +2 |tr -s " " % |cut -d % -f5|sort -nr |head -1
8
2.2.11去重uniq
uniq [OPTION]… [FILE]…
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
uniq常和sort 命令一起配合使用:
[root@localhost ~]#cat f3.txt
1
2
3
3
4
5
6
6
3
6
[root@localhost ~]#uniq f3.txt
#只会将连续的行去重
1
2
3
4
5
6
3
6
[root@localhost ~]#uniq -c f3.txt
#显示出现次数
1 1
1 2
2 3
1 4
1 5
2 6
1 3
1 6
###面试题,查看访问日志,找出访问前10名的用户,
[root@localhost ~]#cat log|cut -d" " -f1
#先取地址
[root@localhost ~]#cat log|cut -d" " -f1|sort
#再排序一样的ip地址在一起
[root@localhost ~]#cat log|cut -d" " -f1|sort|uniq -c
#去重
[root@localhost ~]# cat log|cut -d" " -f1|sort|uniq -c|sort -nr |head
#再数字排序,取前10 行
5498 122.51.38.20
2161 117.157.173.214
953 211.159.177.120
219 58.87.87.99
100 222.218.17.189
100 218.201.62.71
100 122.139.5.237
100 120.195.144.116
100 118.121.41.14
100 1.177.191.161
awk sed
#面试题 取两个文件一样或不一样的字段
[root@localhost ~]#cat f1.txt f2.txt
a
b
c
1
a
2
b
3
c
awk '{dskjdls}'
[root@localhost ~]#cat f1.txt f2.txt |uniq -d
#直接使用 看不出来
[root@localhost ~]#cat f1.txt f2.txt |sort |uniq -u
#一样的
1
2
3
[root@localhost ~]#cat f1.txt f2.txt |sort |uniq -d
#不一样的
a
b
c
2.1.12 split
作用:分割文件
split [-b ][-C ][-][-l ][要切割的文件][输出文件名前缀][-a ]
最常用的选项,都在这里了:
-b<字节>:指定按多少字节进行拆分,也可以指定 K、M、G、T 等单位。
-<行数>或-l<行数>:指定每多少行要拆分成一个文件。
输出文件名前缀:设置拆分后的文件的名称前缀,split 会自动在前缀后加上编号,默认从 aa 开始。
-a<后缀长度>:默认的后缀长度是 2,也就是按 aa、ab、ac 这样的格式依次编号。
例子:
[root@localhost data]#dd if=/dev/zero bs=1024 count=700000 of=k
记录了700000+0 的读入
记录了700000+0 的写出
716800000字节(717 MB)已复制,2.98155 秒,240 MB/秒
[root@localhost data]#split -b 400M k
[root@localhost data]#ls
k xaa xab
[root@localhost data]#split -b 400M k a
#指定分隔名
root@localhost data]#split -b 400M k a
[root@localhost data]#ll
总用量 1400000
-rw-r--r--. 1 root root 419430400 8月 12 15:50 aaa
-rw-r--r--. 1 root root 297369600 8月 12 15:50 aab
-rw-r--r--. 1 root root 716800000 8月 12 15:46 k
没有指定拆分后文件的命名方式的情况下,split 会默认采用 x 字符作为文件前缀,采用类似 aa、ab、ac 的字符串依次作为文件后缀。于是,就出现了我们上面看到的 xaa、xab 了。
[root@localhost data]#split -d -10 /etc/passwd my_passwd
#行数分隔
[root@localhost data]#ls
my_passwd00 my_passwd01 my_passwd02 my_passwd03 my_passwd04
3 压缩,解压缩
gzip和bzip都是压缩软件,比如windows里的好压和360 压缩或微软自带的等等
比较gzip和bzip之间的压缩比例,压缩时间等问题
3.1 gzip bzip2
gzip [-9] 文件名… 提高压缩比例,但是文件较大时效率会低
bzip2 [-9] 文件名…
gzip -d .gz格式的压缩文件 d就是解压
bzip2 -d .bz2格式的压缩文件
9代表压缩比率,9最大1最小,使用以上两种压缩源文件不存在了
gzip的压缩率 要高于bzip2
不会使用 应为只能对文件操作
[root@test1 opt]# gzip *.txt
#压缩后源文件没了 可以使用-k 保留源文件centos8 特性
[root@localhost data]#bzip2 -9k 2.txt
#bzip2 centos7 可以使用-k 保留源文件
[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 tape archive 磁带归档,磁带便宜磁带机很贵,慢永久保存,硬盘越来越便宜了
tar [选项] … 归档文件名 源文件或目录
tar [选项] … 归档文件名 [-C 目标目录]
此处选项有先后要求
- -c:创建(Create).tar 格式的包文件
- -x:解开.tar 格式的包文件
- -C:解压时指定释放的目标文件夹
- -f:表示使用归档文件(一般都要带上表示使用tar)
- -p:打包时保留文件及目录的权限
- -P:打包时保留文件及目录的绝对径
- -t:列表查看包内的文件(要和f一起使用)
- -v:输出详细信息(Verbose)
- -z:调用 gzip 程序进行压缩或解压
tar czvf all.tar.gz /etc
tar归档
czvf 创建使用归档用gzip程序并显示过程
all.tar.gz 文件名可自定制
/etc 解压文件路径
4.vi编辑器
参考链接
https://www.w3cschool.cn/vim/
Linux 系统中“一切皆文件”,因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器。
linux中常见的 文本 还有 nano gedit 知道
推荐使用 Vi 文本编辑器的原因有很多,比如说:
- 几乎所有的Linux 发行版都内嵌有 Vim 文本编辑器,而其他的编辑器则不一定存在;
- Vim具有编辑程序的能力,会主动利用不同的字体颜色辨别语法的正确性,方便程序设计 接口
vi与vim之间的区别
vim是vi的升级版
基本格式:
vim [OPTION]... ...
命令 选项 文件
vim 文件名不存在 是新建
vim 文件名存在 就是修改
如果系统最小化安装vim并没有提前安装,可以使用
yum install vim -y
最小桌面
常用选项
+# 打开文件后,让光标处于第#行的行首,+默认行尾
! 打开上一次的文件
+/PATTERN 让光标处于第一个被PATTERN匹配到的行行首用不多
[root@localhost opt]#vim +/^named passwd
#匹配表达式
[root@localhost opt]#vim +10 passwd
4.1三种模式
三种常见模式:
- 命令或普通(Normal)模式:默认模式,可以实现移动光标,剪切/粘贴文本
- 插入(Insert)或编辑模式:用于修改文本
- 扩展命令(extended command )或末行模式:保存,退出等搜索替代
命令模式 --> 插入模式
i insert, 在光标所在处输入
I 在当前光标所在行的行首输入
a append, 在光标所在处后面输入
A 在当前光标所在行的行尾输入
o 在当前光标所在行的下方打开一个新行
O 在当前光标所在行的上方打开一个新行
4.1.1 命令模式
-
命令模式:此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。
#### 退出VIM ####### ZZ 保存退出 ZQ 不保存退出 ########## 光标跳转 ############## h: 左 L: 右 j: 下 k: 上 单词间跳转 w:下一个单词的词首 e:当前或下一单词的词尾 b:当前或前一个单词的词首 #COMMAND:由#指定一次跳转的单词数 当前页跳转: H:页首 M:页中间行 L:页底 zt:将光标所在当前行移到屏幕顶端 zz:将光标所在当前行移到屏幕中间 zb:将光标所在当前行移到屏幕底端 行首行尾跳转: ^ 跳转至行首的第一个非空白字符 0 跳转至行首 $ 跳转至行尾 行间移动: #G 或者扩展命令模式下 :# 跳转至由第#行 G 最后一行 1G, gg 第一行 命令模式翻屏操作: Ctrl+f 向文件尾部翻一屏,相当于Pagedown Ctrl+b 向文件首部翻一屏,相当于Pageup Ctrl+d 向文件尾部翻半屏 Ctrl+u 向文件首部翻半屏 字符编辑 x 剪切光标处的字符 #x 剪切光标处起始的#个字符 xp 交换光标所在处的字符及其后面字符的位置 ~ 转换大小写 J(大写) 删除当前行后的换行符 替换命令(replace) r 只替换光标所在处的一个字符 R 切换成REPLACE模式(在末行出现-- REPLACE -- 提示),按ESC回到命令模式 删除命令(delete) d 删除命令,可结合光标跳转字符,实现范围删除 d$ 删除到行尾 d^ 删除到非空行首 d0 删除到行首 dw 下一个单词的词首 de 当前或下一个单词的词尾 db 当前或上一个单词的词首 #COMMAND dd: 剪切光标所在的行 #dd 多行删除 D:从当前光标位置一直删除到行尾,等同于d$ 复制命令(yank) y 复制,行为相似于d命令 y$ y0 y^ ye yw yb #COMMAND yy:复制行 #yy 复制多行 Y:复制整行 粘贴命令(paste) p 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面 P 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面 改变命令(change) 命令 c 删除后切换成插入模式 c$ c^ c0 cb ce cw #COMMAND cc #删除当前行并输入新内容,相当于S #cc C #删除当前光标到行尾,并切换成插入模式,相当于c$ 查找 /PATTERN:从当前光标所在处向文件尾部查找 ?PATTERN:从当前光标所在处向文件首部查找 n:与命令同方向 N:与命令反方向 撤消更改 u 撤销最近的更改,相当于windows中ctrl+z #u 撤销之前多次更改 U 撤消光标落在这行后所有此行的更改 Ctrl-r 重做最后的“撤消”更改,相当于windows中crtl+y . 重复前一个操作 #. 重复前一个操作#次 100iky18 [ESC] 重复的次数 i(输入模式) 重复的内容 esc 命令模式 di" 光标在“ “之间,则删除” “之间的内容 d i " "之间的内容就会删除" yi( 光标在()之间,则复制()之间的内容 vi[ 光标在[]之间,则选中[]之间的内容 dtx 删除字符直到遇见光标之后的第一个 x 字符 ytx 复制字符直到遇见光标之后的第一个 x 字符
操作键 功能 ctrl+f或者Pagedown 向下翻页 ctrl+b或者Pageup 向上翻页 Home;^;0 跳到本行的行首 按 End 键或$ 跳转到本行的行尾 1G 或 gg 跳转到文件的第一行包括空行 G 跳转文件的末尾 #G #代表行号数字,直接跳转到#行 M 跳转到当前显示页面的中间行 x或delete 删除当前光标的字符 dd 删除一整行 #dd 删除当前光标开始到第#行(包括当前行) d^ 删除当前光标之前到行首 往前不包括当前光标处的字符
86 往后删除包括当前光标处的字符d$ 删除当前光标到行尾 dw 删除当前光标处的单词 R 或shift+r 替换当前光标处文字,会进入替换模式 yy 复制当前光标处整行 #yy 复制当前光标处向下的#行 p 粘贴到光标处下一行 P 粘贴到光标处上一行 u 只消除上一次可多次使用 U U 取消所有操作 /字符 向下查找 ?字符 向上查找 n 向同一方向重复上次的查找指令 N 向相反方向重复上次的查找指定末行模式
4.1.2 输入模式
-
输入模式: 使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令(各指令的具体功能如表 3 所示),当编辑文件完成后按 Esc 键即可返回命令模式。
切入到输入模式
快捷键 功能描述 i 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动 I 行首插入命令 o 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本 O 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本 a 在当前光标所在位置之后插入随后输入的文本 A 行尾插入命令
4.1.3末行模式
- 末行模式:文件中的指定内容执行保存、查找或替换等操作。使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”(英文冒号)键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。
######################基础命令###################
# #具体第#行,例如2表示第2行
#,# #从左侧#表示起始行,到右侧#表示结尾行
#,+# #从左侧#表示的起始行,加上右侧#表示的行数,范例:2,+3 表示2到5行
. #当前行
$ #最后一行
.,$-1 #当前行到倒数第二行
% #全文, 相当于1,$
/pattern/ #从当前行向下查找,直到匹配pattern的第一行,即:正则表达式
/pat1/,/pat2/ #从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
#,/pat/ #从指定行开始,一直找到第一个匹配pattern的行结束
/pat/,$ #向下找到第一个匹配patttern的行到整个文件的结尾的所有行
###################地址定界后跟一个编辑命令#############################
d #删除
y #复制
###########################另存为#############################
w file #将范围内的行另存至指定文件中
r file #在指定位置插入指定文件中的所有内容
.!命令 #将命令执行结果贴到当前光标处
###################查找并替换##########################
格式:
范围 s/要查找的内容/替换的内容/g
说明:
要查找的内容:可使用基本正则表达式模式
替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查
找到的整个内容
修饰符:
i #忽略大小写
g #全局替换,默认情况下,每一行只替换第一次出现
c #全局替换,每次替换前询问
查找替换中的分隔符/可替换为其它字符,如:#,@
范例:
s@/etc@/var@g
s#/boot#/#i
################行号##################
显示:set number,简写 set nu
取消显示:set nonumber, 简写 set nonu
#########忽略字符的大小写###############
启用:set ignorecase,简写 set ic
不忽略:set noic
##############自动缩进############
启用:set autoindent,简写 set ai
禁用:set noai
############复制保留格式##############
启用:set paste
禁用:set nopaste
###########显示隐藏字符###############
显示Tab ^I和换行符 和$显示
启用:set list
禁用:set nolist
##############tab用指定空格的个数代替#############
启用:set tabstop=# 指定#个空格代替Tab
简写:set ts=4
###############设置光标所在行的标识线#############
启用:set cursorline,简写 set cul
禁用:set nocursorline
######################加密##########################
启用: set key=password
禁用: set key=
#######################set 帮助#####################
set all
快捷键 | 功能效果 |
---|---|
:q | 退出不保存 |
:q! | 强制退出不保存 |
:w | 保存 |
:w 新文件名 | 另存为新文件: |
:wq :zz :x | 保存并退出 |
:e 其他文件名(如果已修改需要加e!) | 打开新文件进行编辑 |
:r 其他文件名 | 在当前文件中读入其他文件内容 |
!命令 | 执行命令 |
:r!命令 | 读入命令 |
: [替换范围] s /旧的内容/新的内容[/g] | |
😒 /old/new | 替换当前行中的第一个old改为new |
😒 /old/new/g | 替换当前行中的所有old改为new |
:#,# s /old/new/g | #到#行所有old改为new |
:%s /old/new/g | %代表全文 全文替换所有old改为new |
# d | 删除 第#行 |
#,# d | 删除#到#行 |
#,# y | 复制三到6 行 |
:set nu 或:set nonu | 加行号 不显示行号 |
:set cul (:set nocul ) | 光标所在行有下划线(取消) |
no hl | 取消高亮 |
:set ai | 对齐 回车后和上一行对齐 |
:set all 可以看所有的一些帮助 | 可以看所有的一些帮助 |
set key=password (大X) | 加密码 |
set key=空白 | 取消密码 |
set tabstop=4 (set ts=4) | tab 一次为四个空格 |
.!命令 (who,date ) | 将date命令插入当前行注意会覆盖当前行 |
4.1.4 可视化模式(不常用,且不实用)
在末行有”-- VISUAL – “指示,表示在可视化模式
允许选择的文本块
- v 面向字符,-- VISUAL –
- V 面向整行,-- VISUAL LINE –
- ctrl-v 面向块,-- VISUAL BLOCK –
范例:在文件指定行的行首插入#
1、先将光标移动到指定的第一行的行首
2、输入ctrl+v 进入可视化模式
3、向下移动光标,选中希望操作的每一行的第一个字符
4、输入大写字母 I 切换至插入模式
5、输入 #
6、按 ESC 键
范例:在指定的块位置插入相同的内容
1、光标定位到要操作的地方
2、CTRL+v 进入“可视 块”模式,选取这一列操作多少行
3、SHIFT+i(I)
4、输入要插入的内容
5、按 ESC 键
4.2 配置文件定制vim的工作特性
Vim 启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim。
/etc/.vimrc #全局
~/.vimrc #个人
Vim 配置文件分为系统配置文件和用户配置文件:
- 系统配置文件位于 Vim 的安装目录(默认路径为 /etc/.vimrc);
- 用户配置文件位于主目录 ~/.vimrc,即通过执行
vim ~/.vimrc
命令即可对此配置文件进行合理修改。通常情况下,Vim 用户配置文件需要自己手动创建。
设置参数 | 功能描述 |
---|---|
set nu | 显示行号 |
set cul | 突出显示当前行。 |
set ai | 设置自动缩进,即每行的缩进同上一节相同。 |
set ts=4 | 设置 Tab 键宽度为 4 个空格。 |
例题
1.将所有行开头的#号删除(使用末行命令模式)
:% s/^#//
2.对上面的anaconda-ks.cfg文件的1到3行加上#号
:1,3 /^/#/
3.显示anaconda-ks.cfg文件的的行号
:set nu
4.将anaconda-ks.cfg文件另存到/mnt 目录下
:w /mnt/文件名
5.打开anaconda-ks.cfg文件时直接跳到第10行
vim +10 anaconda-ks.cfg
6将anaconda-ks.cfg文件里所有的System 改成小写的system
:% s/System/system/g
7将anaconda-ks.cfg文件里所有的/换成$
:% s./.$.g
9.分别写出如何从当前光标处删除到行尾和行首。
d^
d$
10.如何将/etc/passwd,读入到当前打开的将anaconda-ks.cfg文件里?
:r /etc/passwd (从光标位置开始读入)