Linux详解
一、Linux简介
1、简介
在服务器端,Linux是最流程的操作系统。Linux 有一个强大的服务器软件生态系统:Docker、Redis、MySQL、Nginx、Hadoop 等等。
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
2、内核版本
-
xx.yy.zz
- xx主版本
- yy次版本
- zz末版本
-
小于2.6版本
- 次版本奇数为开发版
- 次版本偶数为稳定版
-
大于2.6版本
- Longterm长期支持版本
- stable稳定版本
- mainline主线开发版本
3、发行版
Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
4、linux和windows区别
- 使用 Windows 倾向于 GUI 操作,Linux 虽然也可以安装图形界面,但是 Linux 倾向于命令行操作(可以自动化、可以精确控制、可以组合命令)。
- windows 下主要根据文件的扩展名区分文件类型,linux 中可以没有扩展名。
- Linux 不同版本使用方法、配置文件可能变化很大,要自己查、反复试。
- 易错的地方:Linux 中文件名是区分大小写的,Windows不区分。
二、Linux安装
1、虚拟机安装Linux
- 虚拟机安装Linux请参考VMware Workstation Pro详解
2、购买云服务器
**云服务器(Elastic Compute Service, ECS)**是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。
云服务器管理方式比物理服务器更简单高效,我们无需提前购买昂贵的硬件,即可迅速创建或删除云服务器,云服务器费用一般在几十到几百不等,可以根据我们的需求配置。
(1)购买服务器
下载地址:www.aliyun.com/minisite/go…
(2)配置服务器
登录阿里云控制台:ecs.console.aliyun.com/#/home
获取服务器公网IP
(3)修改服务器登录密码
点击蓝色实例名,进入实例详情,可以重置密码,也可以修改主机名
(4)配置安全组开放端口号
授权对象 0000表示授权给所有人
3、宝塔面板安装
宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。 有30个人的专业团队研发及维护,经过200多个版本的迭代,功能全,少出错且足够安全,已获得全球百万用户认可安装。运维要高效,装宝塔。
4、常用连接工具
(1)连接工具
- FinalShell:www.hostbuf.com/
- MobaXterm:mobaxterm.mobatek.net/
(2)SSH服务
运维人员是怎么远程连接到机房上的服务器,很少使用图形界面(卡,无法自动化),远程登录有专门的通信协议telnet,telnet就是通过网络进行命令行操作服务器。只有服务器端开始了远程登录服务,客户端才能通过telnet协议控制服务器端。 但telnet协议使用明文传输数据,这会造成严重的安全性问题,所以现在几乎不推荐使用,而替代协议是SSH,ssh命令可以让我们轻松的基于ssh加密协议进行远程主机访问,从而实现对远程服务器的管理工作。
(3)ssh命令
语法格式: ssh [参数] 远程主机
常用参数:
| -1 | 强制使用ssh协议版本1 |
|---|---|
| -2 | 强制使用ssh协议版本2 |
| -4 | 强制使用IPv4地址 |
| -6 | 强制使用IPv6地址 |
| -A | 开启认证代理连接转发功能 |
| -a | 关闭认证代理连接转发功能 |
| -b<IP地址> | 使用本机指定的地址作为对位连接的源IP地址 |
| -C | 请求压缩所有数据 |
| -F<配置文件> | 指定ssh指令的配置文件,默认的配置文件为“/etc/ssh/ssh_config” |
| -f | 后台执行ssh指令 |
| -g | 允许远程主机连接本机的转发端口 |
| -i<身份文件> | 指定身份文件(即私钥文件) |
| -l<登录名> | 指定连接远程服务器的登录用户名 |
| -N | 不执行远程指令 |
| -o<选项> | 指定配置选项 |
| -p<端口> | 指定远程服务器上的端口 |
| -q | 静默模式,所有的警告和诊断信息被禁止输出 |
| -X | 开启X11转发功能 |
| -x | 关闭X11转发功能 |
| -y | 开启信任X11转发功能 |
参考实例
# 基于ssh协议,远程访问服务器主机系统
[root@bluecusliyou ~]# ssh 链接的服务器IP地址
root@121.4.29.23's password: 服务器密码
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Sun Jul 31 13:27:41 2022 from 服务器IP
[root@bluecusliyou ~]#
# 使用指定的用户身份登录远程服务器主机系统
[root@bluecusliyou ~]# ssh -l liyou 链接的服务器IP地址
root@121.4.29.23's password: 服务器密码
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Sun Jul 31 13:27:41 2022 from 服务器IP
[root@bluecusliyou ~]$
# 登录远程服务器主机系统后执行一条命令
[root@bluecusliyou ~]# ssh 链接的服务器IP地址 "docker ps -a"
root@121.4.29.23's password:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9319e4a0df36 nginx "/docker-entrypoint.…" 5 months ago Exited (1) 5 months ago mynginxhttps
1c026f2f9a01 nginx "/docker-entrypoint.…" 5 months ago Up 5 months 80/tcp nginxforconf
e6bd5bdcba5d nginx "/docker-entrypoint.…" 5 months ago Up 5 months 0.0.0.0:80->80/tcp, :::80->80/tcp mynginx
[root@bluecusliyou ~]#
# 强制使用v1版本的ssh加密协议连接远程服务器主机
[root@bluecusliyou ~]# ssh -1 链接的服务器IP地址
(4)图形连接
以MobaXterm为例,输入host地址,输入账号密码就可以进行远程控制服务器了。实际上也是通过命令行连接的。
三、Linux基础
1、基础知识
(1)man(查看命令帮助信息)
man命令来自于英文单词manual的缩写,中文译为帮助手册,其功能是用于查看命令、配置文件及服务的帮助信息。网上搜索来的资料普遍不够准确(LinuxCool.Com除外~),或者缺乏系统性(LinuxProbe.Com除外~),质量不高造成学习进度缓慢,而man命令作为权威的官方工具则很好的解决了上述两点弊病,一份完整的帮助信息包含以下信息。
| 结构名称 | 代表意义 |
|---|---|
| NAME | 命令的名称 |
| SYNOPSIS | 参数的大致使用方法 |
| DESCRIPTION | 介绍说明 |
| EXAMPLES | 演示(附带简单说明) |
| OVERVIEW | 概述 |
| DEFAULTS | 默认的功能 |
| OPTIONS | 具体的可用选项(带介绍) |
| ENVIRONMENT | 环境变量 |
| FILES | 用到的文件 |
| SEE ALSO | 相关的资料 |
| HISTORY | 维护历史与联系方式 |
**语法格式:**man [参数] 对象
常用参数:
| -a | 在所有的man帮助手册中搜索 |
|---|---|
| -d | 主要用于检查,如果用户加入了一个新的文件,就可以用这个参数检查是否出错 |
| -f | 显示给定关键字的简短描述信息 |
| -p | 指定内容时使用分页程序 |
| -M | 指定man手册搜索的路径 |
| -w | 显示文件所在位置 |
快捷键:
| q | 退出 |
|---|---|
| Enter | 按行下翻 |
| Space | 按页下翻 |
| b | 上翻一页 |
| /字符串 | 在手册页中查找字符串 |
参考实例
# 查看ls的帮助
man ls
(2)help(获取内部帮助命令)
# 查看ls的帮助
ls --help
(3)info比man更丰富的帮助信息
(4)history显示历史输入过的命令
(5)clear清屏
(6)快捷键
- ==ctrl + c==(停止当前进程)
- ==ctrl + l==(清屏,与clear命令作用相同)
- ==ctrl +滚动鼠标==调整窗口字体大小
- 按 ==上 / 下== 光标键可以在曾经使用过的命令之间来回切换
- 敲出 ==文件 / 目录 / 命令== 的前几个字母,按下 tab 键,无歧义,系统会自动补全
- 敲出 ==文件 / 目录 / 命令== 的前几个字母,按下 tab 键,有歧义,再按 tab 键,系统会提示可能存在的命令
(7)命令提示符
- "$"普通用户
- "#"root用户
(8)命令参考网站
2、开关机
(1)开机
一般来说,用户的登录系统方式有三种:
- 命令行登录
- ssh登录
- 图形界面登录
(2)关机
在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。
可以运行如下命令关机:
sync #将数据由内存同步到硬盘中。
shutdown #关机指令,你可以man shutdown 来看一下帮助文档。
shutdown –h 10 #10分钟后关机
shutdown –h now #立马关机
shutdown –h 20:25 #系统会在今天20:25关机
shutdown –h +10 #10分钟后关机
shutdown –r now #系统立马重启
shutdown –r +10 #系统十分钟后重启
reboot #重启,等同于 shutdown –r now
halt #关闭系统,等同于shutdown –h now 和 poweroff
3、系统目录结构
(1)系统目录结构
- Linux里面一切皆文件,所有的东西都是文件的形式呈现
- /是系统的根目录,所有的东西都在这个目录下面
[root@bluecusliyou ~]# ls /
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
(2)目录结构说明
- ==/bin:bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。==
- **/boot:**这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
- **/dev :**dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
- ==**/etc:**etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。==
- ==/home:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。==
- /lib:lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
- /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
- /media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
- /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
- /opt:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
- /proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
- ==/root:该目录为系统管理员,也称作超级权限者的用户主目录。==
- ==/sbin:s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。==
- /selinux: 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
- /srv:该目录存放一些服务启动之后需要提取的数据。
- /sys:这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
- /tmp:tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
- ==/usr:usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。==
- ==**/usr/bin:**系统用户使用的应用程序。==
- ==**/usr/sbin:**超级用户使用的比较高级的管理程序和系统守护程序。==
- **/usr/src:**内核源代码默认的放置目录。
- ==/var:var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。==
- /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
四、文件与目录
1、前置概念
(1)通配符
- *:匹配任意字符
- ?:匹配单个字符
- [xyz]:匹配xyz任意一个字符
- [a-z]:匹配字符范围
- [!xyz]:匹配不在xyz中的任意字符
(2)重定向>和>>
- “>”:表示覆盖
- “>>”:表示追加
[root@bluecusliyou testdir]# ll
total 39820
drwxr-xr-x 2 root root 50 Nov 18 17:18 testdir1
drwxr-xr-x 2 root root 6 Nov 18 17:11 testdir2
-rw-r--r-- 1 root root 40764544 Nov 19 10:11 test.exe
-rw-r--r-- 1 root root 0 Nov 18 17:11 testfile1
-rw-r--r-- 1 root root 0 Nov 18 17:11 testfile2
-rw-r--r-- 1 root root 4855 Nov 19 10:09 test.png
[root@bluecusliyou testdir]# echo '123'>1.txt
[root@bluecusliyou testdir]# echo '456'>2.txt
[root@bluecusliyou testdir]# cat 1.txt
123
[root@bluecusliyou testdir]# cat 2.txt
456
[root@bluecusliyou testdir]# cat 1.txt 2.txt>3.txt
[root@bluecusliyou testdir]# cat 3.txt
123
456
[root@bluecusliyou testdir]# cat 1.txt>>3.txt
[root@bluecusliyou testdir]# cat 3.txt
123
456
123
[root@bluecusliyou testdir]# cat 1.txt>3.txt
[root@bluecusliyou testdir]# cat 3.txt
123
(3)管道符|
管道:前面命令的输出 可以通过管道做为 后面命令的输入。
管道我们可以理解现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里“ | ”的左右分为两端,左端塞东西(写),右端取东西(读)。
eg: 【ls -lh bin | more】表示:把bin下的内容分页输出
【ps -ef|grep nginx】:查询nginx的进程
【ifconfig|more】:将网络信息分页输出。
2、文件目录管理
(1)ls (显示指定工作目录下的文件及属性信息)
ls是最常被使用到的Linux命令之一,来自于英文单词list的缩写,也正如list单词的英文意思,其功能是列举出指定目录下的文件名称及其属性。
默认不加参数的情况下,ls命令会列出当前工作目录中的文件信息,经常与cd和pwd命令搭配使用,十分方便。而带上参数后,我们则可以做更多的事情,作为最基础、最频繁使用的命令,有必要仔细了解下其常用功能。
语法格式: ls [参数] [文件]
常用参数:
| -a | 显示所有文件及目录 (包括以“.”开头的隐藏文件) |
|---|---|
| -l | 使用长格式列出文件及目录的详细信息 |
| -r | 将文件以相反次序显示(默认依英文字母次序) |
| -t | 根据最后的修改时间排序 |
| -A | 同 -a ,但不列出 “.” (当前目录) 及 “..” (父目录) |
| -S | 根据文件大小排序 |
| -R | 递归列出所有子目录 |
| -d | 查看目录的信息,而不是里面子文件的信息 |
| -i | 输出文件的inode节点信息 |
| -m | 水平列出文件,以逗号间隔 |
| -X | 按文件扩展名排序 |
| --color | 输出信息中带有着色效果 |
参考实例
# 列出当前目录下的文件
[root@bluecusliyou testdir]# ls
testdir1 testdir2 test.exe testfile1 testfile2 test.png
# 列出文件,包含隐藏文件
[root@bluecusliyou testdir]# ls -a
. .. testdir1 testdir2 test.exe testfile1 testfile2 test.png
# 使用长格式列出文件及目录信息
[root@bluecusliyou testdir]# ls -l
total 39820
drwxr-xr-x 2 root root 50 Nov 18 17:18 testdir1
drwxr-xr-x 2 root root 6 Nov 18 17:11 testdir2
-rw-r--r-- 1 root root 40764544 Nov 19 10:11 test.exe
-rw-r--r-- 1 root root 0 Nov 18 17:11 testfile1
-rw-r--r-- 1 root root 0 Nov 18 17:11 testfile2
-rw-r--r-- 1 root root 4855 Nov 19 10:09 test.png
# 配合-l以人性化的方式显示文件大小
[root@bluecusliyou testdir]# ls -lh
total 39M
drwxr-xr-x 2 root root 50 Nov 18 17:18 testdir1
drwxr-xr-x 2 root root 6 Nov 18 17:11 testdir2
-rw-r--r-- 1 root root 39M Nov 19 10:11 test.exe
-rw-r--r-- 1 root root 0 Nov 18 17:11 testfile1
-rw-r--r-- 1 root root 0 Nov 18 17:11 testfile2
-rw-r--r-- 1 root root 4.8K Nov 19 10:09 test.png
# 以人性化的方式显示文件大小和隐藏文件
[root@bluecusliyou testdir]# ls -alh
total 39M
drwxr-xr-x 4 root root 104 Nov 19 10:11 .
drwxr-xr-x. 4 root root 37 Nov 18 17:09 ..
drwxr-xr-x 2 root root 50 Nov 18 17:18 testdir1
drwxr-xr-x 2 root root 6 Nov 18 17:11 testdir2
-rw-r--r-- 1 root root 39M Nov 19 10:11 test.exe
-rw-r--r-- 1 root root 0 Nov 18 17:11 testfile1
-rw-r--r-- 1 root root 0 Nov 18 17:11 testfile2
-rw-r--r-- 1 root root 4.8K Nov 19 10:09 test.png
# ll===ls -l
[root@bluecusliyou testdir]# ll
total 39820
drwxr-xr-x 2 root root 50 Nov 18 17:18 testdir1
drwxr-xr-x 2 root root 6 Nov 18 17:11 testdir2
-rw-r--r-- 1 root root 40764544 Nov 19 10:11 test.exe
-rw-r--r-- 1 root root 0 Nov 18 17:11 testfile1
-rw-r--r-- 1 root root 0 Nov 18 17:11 testfile2
-rw-r--r-- 1 root root 4855 Nov 19 10:09 test.png
# 通配符匹配
[root@bluecusliyou testdir]# ls -alh *dir*
testdir1:
total 0
drwxr-xr-x 2 root root 50 Nov 18 17:18 .
drwxr-xr-x 4 root root 104 Nov 19 10:11 ..
-rw-r--r-- 1 root root 0 Nov 18 17:18 testdir1_file1
-rw-r--r-- 1 root root 0 Nov 18 17:18 testdir1_file2
testdir2:
total 0
drwxr-xr-x 2 root root 6 Nov 18 17:11 .
drwxr-xr-x 4 root root 104 Nov 19 10:11 ..
(2)tree(以树状图形式列出目录内容)
tree命令的功能是用于以树状图形式列出目录内容,帮助运维人员快速了解到目录的层级关系。
不存在该命令直接安装 yum install tree
**语法格式:**tree [参数]
常用参数:
| -a | 显示所有文件和目录 |
|---|---|
| -A | ASNI绘图字符形式 |
| -C | 彩色显示 |
| -d | 仅显示目录名称 |
| -D | 显示文件更改时间 |
| -f | 显示完整的相对路径名称 |
| -g | 显示文件所属群组名称 |
| -i | 不以阶梯状列出文件或目录名称 |
| -I<范本样式> | 不显示符合范本样式的文件或目录名称 |
| -l | 直接显示连接文件所指向的原始目录 |
| -n | 不在文件和目录清单上加上色彩 |
| -N | 直接列出文件和目录名称 |
| -p | 列出权限标示 |
| -P<范本样式> | 只显示符合范本像是的文件或目录名称 |
| -q | 用“?”号取代控制字符,列出文件和目录名称 |
| -s | 列出文件或目录大小 |
| -t | 用文件和目录的更改时间排序 |
| -u | 列出文件或目录的拥有者名称 |
| -x | 将范围局限在现行的文件系统中 |
| -L | 层级显示 |
参考实例
# 显示当前工作目录下的文件层级情况
[root@bluecusliyou testdir]# tree
.
├── 1.txt
├── 2.txt
├── 3.txt
├── 4.txt
├── grepfile1.txt
├── grepfile2.txt
├── grepfile3.txt
├── grepfile4.txt
├── testdir1
│?? ├── testdir1_file1
│?? └── testdir1_file2
├── testdir2
├── test.exe
├── testfile1
├── testfile2
└── test.png
2 directories, 14 files
(3)cd (切换目录)
cd命令来自于英文词组”change directory“的缩写,其功能是用于更改当前所处的工作目录,路径可以是绝对路径,也可以是相对路径,若省略不写则会跳转至当前使用者的家目录。
- 绝对路径:完整路径
- 相对路径:相对当前路径的路径
- ..:上级目录
- .或者./:当前目录
**语法格式:**cd [参数] [目录名]
常用参数:
| -P | 如果切换的目标目录是一个符号链接,则直接切换到符号链接指向的目标目录 |
|---|---|
| -L | 如果切换的目标目录是一个符号链接,则直接切换到符号链接名所在的目录 |
| -- | 仅使用”-“选项时,当前目录将被切换到环境变量”OLDPWD”对应值的目录 |
| ~ | 切换至当前用户目录 |
| .. | 切换至当前目录位置的上一级目录 |
参考实例
[root@bluecusliyou /]# cd home/testdir #相对路径
[root@bluecusliyou testdir]# cd / #绝对路径根目录
[root@bluecusliyou /]# cd /home/testdir #绝对路径
[root@bluecusliyou testdir]# cd .. #上级路径
[root@bluecusliyou /]# cd ./ #当前路径
[root@bluecusliyou /]#
(4)pwd (显示当前工作目录的路径)
pwd命令来自于英文词组”print working directory“的缩写,其功能是用于显示当前工作目录的路径,即显示所在位置的绝对路径。
在实际工作中,我们经常会在不同目录之间进行切换,为了防止”迷路“,可以使用pwd命令快速查看当前所处的工作目录路径,方便开展后续工作。
语法格式:pwd [参数]
常用参数:
| -L | 显示逻辑路径 |
|---|
参考实例
[root@bluecusliyou bluecusliyou]# pwd
/home/bluecusliyou
(5)mkdir (创建目录文件)
mkdir命令来自于英文词组“make directories”的缩写,其功能是用来创建目录文件。使用简单,但需要注意若要创建的目标目录已经存在,则会提示已存在而不继续创建,不覆盖已有文件。而目录不存在,但具有嵌套的依赖关系,例如a/b/c/d/e/f,要想一次性创建则需要加入-p参数,进行递归操作。
语法格式 : mkdir [参数] 目录
常用参数:
| -p | 递归创建多级目录 |
|---|---|
| -m | 建立目录的同时设置目录的权限 |
| -z | 设置安全上下文 |
| -v | 显示目录的创建过程 |
参考实例
# 创建目录
[root@bluecusliyou home]# ls
[root@bluecusliyou home]# mkdir testdir
[root@bluecusliyou home]# ls
testdir
# 创建目录同时配置权限
[root@bluecusliyou home]# mkdir -m 711 testdir2
[root@bluecusliyou home]# ll
total 0
drwxr-xr-x 4 root root 240 Nov 19 13:06 testdir
drwxr-xr-x 2 root root 6 Nov 20 19:33 testdir2
# 递归创建目录
[root@bluecusliyou home]# mkdir testdir3/testdir/testdir
mkdir: cannot create directory ‘testdir3/testdir/testdir’: No such file or directory
[root@bluecusliyou home]# mkdir -p testdir3/testdir/testdir
[root@bluecusliyou home]# tree
.
├── testdir
│ ├── 1.txt
│ ├── 2.txt
│ ├── 3.txt
│ ├── 4.txt
│ ├── grepfile1.txt
│ ├── grepfile2.txt
│ ├── grepfile3.txt
│ ├── grepfile4.txt
│ ├── testdir1
│ │ ├── testdir1_file1
│ │ └── testdir1_file2
│ ├── testdir2
│ ├── test.exe
│ ├── testfile1
│ ├── testfile2
│ └── test.png
├── testdir2
└── testdir3
└── testdir
└── testdir
7 directories, 14 files
(6)rmdir (删除空目录文件)
rmdir命令来自于英文词组“remove directory”的缩写,其功能是用于删除空目录文件。rmdir命令仅能够删除空内容的目录文件,如需删除非空目录时,则需要使用带有-R参数的rm命令进行操作。而rmdir命令的-p递归删除操作亦不意味着能删除目录中已有的文件,而是要求每个子目录都必须是空的。
语法格式 : rmdir [参数] 目录
常用参数:
| -p | 用递归的方式删除指定的目录路径中的所有父级目录,非空则报错 |
|---|---|
| -v | 显示命令的详细执行过程 |
| -- -- help | 显示命令的帮助信息 |
| -- -- version | 显示命令的版本信息 |
参考实例
# 删除目录
[root@bluecusliyou home]# ls
testdir testdir2 testdir3
[root@bluecusliyou home]# rmdir testdir2
[root@bluecusliyou home]# ls
testdir testdir3
# 递归删除目录
[root@bluecusliyou home]# rmdir -p testdir3/testdir/testdir
[root@bluecusliyou home]# ls
testdir2
(7)cp (复制文件或目录)
cp命令来自于英文单词copy的缩写,用于将一个或多个文件或目录复制到指定位置,亦常用于文件的备份工作。-r参数用于递归操作,复制目录时若忘记加则会直接报错,而-f参数则用于当目标文件已存在时会直接覆盖不再询问,这两个参数尤为常用。
**语法格式:**cp [参数] 源文件 目标文件
常用参数:
| -f | 若目标文件已存在,则会直接覆盖原文件 |
|---|---|
| -i | 若目标文件已存在,则会询问是否覆盖 |
| -p | 保留源文件或目录的所有属性 |
| -r | 递归复制文件和目录 |
| -d | 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录 |
| -l | 对源文件建立硬连接,而非复制文件 |
| -s | 对源文件建立符号连接,而非复制文件 |
| -b | 覆盖已存在的文件目标前将目标文件备份 |
| -v | 详细显示cp命令执行的操作过程 |
| -a | 等价于“pdr”选项 |
参考实例
[root@bluecusliyou home]# ls
testdir testfile1
# cp 源文件 目标地址
[root@bluecusliyou home]# cp testfile1 testfile2
[root@bluecusliyou home]# ls
testdir testfile1 testfile2
# 目标文件已存在会询问是否覆盖
[root@bluecusliyou home]# cp testfile1 testfile2
cp: overwrite 'testfile2'? y
[root@bluecusliyou home]# ls
testdir testfile1 testfile2
(8)rm (删除文件或目录)
rm命令来自于英文单词remove的缩写,其功能是用于删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。
rm也是一个很危险的命令,使用的时候要特别当心,尤其对于新手更要格外注意,如执行rm -rf /*命令则会清空系统中所有的文件,甚至无法恢复回来。所以我们在执行之前一定要再次确认下在哪个目录中,到底要删除什么文件,考虑好后再敲击回车,时刻保持清醒的头脑。
**语法格式:**rm [参数] 文件
常用参数:
| -f | 强制删除(不二次询问) |
|---|---|
| -i | 删除前会询问用户是否操作 |
| -r/R | 递归删除 |
| -v | 显示指令的详细执行过程 |
参考实例
rm -rf / #删除根目录下所有文件,传说中的删库跑路
[root@bluecusliyou home]# ls
testdir testfile1 testfile2
[root@bluecusliyou home]# rm -rf testfile2
[root@bluecusliyou home]# ls
testdir testfile1
(9)mv (移动或改名文件)
mv命令来自于英文单词move的缩写,其功能与英文含义相同,用于对文件进行剪切和重命名。
这是一个高频使用的文件管理命令,我们需要留意它与复制命令的区别。cp命令是用于文件的复制操作,文件个数是增加的,而mv则为剪切操作,也就是对文件进行移动(搬家)操作,文件位置发生变化,但总个数并无增加。
在同一个目录内对文件进行剪切的操作,实际应理解成重命名操作,例如下面的实例一所示。
**语法格式:**mv [参数] 源文件 目标文件
常用参数:
| -i | 若存在同名文件,则向用户询问是否覆盖 |
|---|---|
| -f | 覆盖已有文件时,不进行任何提示 |
| -b | 当文件存在时,覆盖前为其创建一个备份 |
| -u | 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作 |
参考实例
[root@bluecusliyou home]# ls
testdir testfile1
# 移动文件
[root@bluecusliyou home]# mv testfile1 testfile2
[root@bluecusliyou home]# ls
testdir testfile2
# 移动文件夹
[root@bluecusliyou home]# mv testdir testdir2
[root@bluecusliyou home]# ls
testdir2 testfile2
(10)touch(创建空文件与修改时间戳)
touch命令的功能是用于创建空文件与修改时间戳。如果文件不存在,则会创建出一个空内容的文本文件;如果文件已经存在,则会对文件的Atime(访问时间)和Ctime(修改时间)进行修改操作,管理员可以完成此项工作,而普通用户只能管理主机的文件。
**语法格式:**touch [参数] 文件
常用参数:
| -a | 改变档案的读取时间记录 |
|---|---|
| -m | 改变档案的修改时间记录 |
| -r | 使用参考档的时间记录,与 --file 的效果一样 |
| -c | 不创建新文件 |
| -d | 设定时间与日期,可以使用各种不同的格式 |
| -t | 设定档案的时间记录,格式与 date 命令相同 |
| --no-create | 不创建新文件 |
| --help | 显示帮助信息 |
| --version | 列出版本讯息 |
参考实例
[root@bluecusliyou home]# ls
testdir2 testfile2
[root@bluecusliyou home]# touch testfile1
[root@bluecusliyou home]# ls
testdir2 testfile1 testfile2
(11)echo(输出字符串或提取变量值)
echo是用于在终端设备上输出指定字符串或变量提取后值的命令,能够给用户一些简单的提醒信息,也可以将输出的指定字符串内容同管道符一起传递给后续命令作为标准输入信息再来进行二次处理,又或者同输出重定向符一起操作,将信息直接写入到文件中。
如需提取变量值,需在变量名称前加入$符号做提取,变量名称一般均为大写形式。
**语法格式:**echo [参数] 字符串/变量
常用参数:
| -n | 不输出结尾的换行符 |
|---|---|
| -e “\a” | 发出警告音 |
| -e “\b” | 删除前面的一个字符 |
| -e “\c” | 结尾不加换行符 |
| -e “\f” | 换行,光标扔停留在原来的坐标位置 |
| -e “\n” | 换行,光标移至行首 |
| -e “\r” | 光标移至行首,但不换行 |
| -E | 禁止反斜杠转移,与-e参数功能相反 |
| —version | 查看版本信息 |
| --help | 查看帮助信息 |
参考实例
[root@bluecusliyou home]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/.dotnet/tools:/root/bin
[root@bluecusliyou home]# echo '111'
111
(12)ln(为文件创建快捷方式)
ln命令来自于英文单词link的缩写,中文译为“链接”,其功能是用于为某个文件在另外一个位置建立同步的链接。Linux系统中的链接文件有两种形式,一种是硬链接(hard link),另一种是软链接(symbolic link)。软连接相当于Windows系统中的快捷方式文件,原始文件被移动或删除后,软连接文件也将无法使用,而硬链接则是通过将文件的inode属性块进行了复制 ,因此把原始文件移动或删除后,硬链接文件依然可以使用。
软链接 :
- 以路径的形式存在,类似于Windows操作系统中的快捷方式。
- 可以跨文件系统 ,硬链接不可以。
- 可以对一个不存在的文件名进行链接,硬链接不可以。
- 可以对目录进行链接,硬链接不可以。
硬链接:
- 以文件副本的形式存在,但不占用实际空间。
- 不允许给目录创建硬链接。
- 只有在同一个文件系统中才能创建。
语法格式: ln [参数] 源文件 目标文件
常用参数:
| -b | 为每个已存在的目标文件创建备份文件 |
|---|---|
| -d | 此选项允许“root”用户建立目录的硬链接 |
| -f | 强制创建链接,即使目标文件已经存在 |
| -n | 把指向目录的符号链接视为一个普通文件 |
| -i | 交互模式,若目标文件已经存在,则提示用户确认进行覆盖 |
| -s | 对源文件建立符号链接,而非硬链接 |
| -v | 详细信息模式,输出指令的详细执行过程 |
参考实例
# 创建文件,写入内容
[root@bluecusliyou home]# echo 'i have an apple'>>testfile
[root@bluecusliyou home]# cat testfile
i have an apple
# 创建文件的硬连接
[root@bluecusliyou home]# ln testfile testfile_ln
[root@bluecusliyou home]# cat testfile_ln
i have an apple
# 创建文件的软连接
[root@bluecusliyou home]# ln -s testfile testfile_lns
[root@bluecusliyou home]# cat testfile_lns
i have an apple
# 删除文件
[root@bluecusliyou home]# rm -f testfile
# 连接文件都还在
[root@bluecusliyou home]# ls
testfile_ln testfile_lns
# 硬链接还可以访问,查看内容
[root@bluecusliyou home]# cat testfile_ln
i have an apple
# 软连接访问报错
[root@bluecusliyou home]# cat testfile_lns
cat: testfile_lns: No such file or directory
(13)find(根据路径和条件搜索指定文件)
find命令的功能是根据给定的路径和条件查找相关文件或目录,可以使用的参数很多,并且支持正则表达式,结合管道符后能够实现更加复杂的功能,是系统管理员和普通用户日常工作必须掌握的命令之一。
find命令通常进行的是从根目录(/)开始的全盘搜索,有别于whereis、which、locate……等等的有条件或部分文件的搜索。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,会相对消耗较多的系统资源。
语法格式:find [路径] [参数]
常用参数:
| -name | 匹配名称 |
|---|---|
| -perm | 匹配权限(mode为完全匹配,-mode为包含即可) |
| -user | 匹配所有者 |
| -group | 匹配所有组 |
| -mtime -n +n | 匹配修改内容的时间(-n指n天以内,+n指n天以前) |
| -atime -n +n | 匹配访问文件的时间(-n指n天以内,+n指n天以前) |
| -ctime -n +n | 匹配修改文件权限的时间(-n指n天以内,+n指n天以前) |
| -nouser | 匹配无所有者的文件 |
| -nogroup | 匹配无所有组的文件 |
| -newer f1 !f2 | 匹配比文件f1新但比f2旧的文件 |
| -type b/d/c/p/l/f | 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件) |
| -size | 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
| -prune | 忽略某个目录 |
| -exec …… {}; | 后面可跟用于进一步处理搜索结果的命令 |
参考实例
# 查找名字test开头文件
[root@bluecusliyou home]# find ./ -name "test*"
./testfile2
./testdir2
./testdir2/testfile1
./testdir2/testfile2
./testdir2/testdir1
./testdir2/testdir1/testdir1_file1
./testdir2/testdir1/testdir1_file2
./testdir2/testdir2
./testdir2/test.png
./testdir2/test.exe
./testfile1
# 查找大小超过1K文件
[root@bluecusliyou home]# find ./ -size +1k
./testdir2/test.png
./testdir2/test.exe
# 全盘搜索系统中所有类型为目录,且权限为1777的目录文件
[root@bluecusliyou ~]# find / -type d -perm 1777
/dev/mqueue
/dev/shm
/tmp
/tmp/.X11-unix
/tmp/systemd-private-43cf563dbcc645918281642fb6b168fe-chronyd.service-09HBh3/tmp
/tmp/.ICE-unix
/tmp/.Test-unix
/tmp/.font-unix
/tmp/.XIM-unix
/var/tmp
# 搜索当前工作目录中的所有近7天被修改过的文件
[root@bluecusliyou ~]# find . -mtime +7
.
./.ssh
./.ssh/authorized_keys
./.bash_profile
./.bash_logout
./.bashrc
./.nuget
./.nuget/packages
./.nuget/packages/system.numerics.vectors
./.nuget/packages/system.numerics.vectors/4.5.0
# 在/var/log目录下搜索所有后缀不是.log的文件
[root@bluecusliyou ~]# find /var/log ! -name "*.log"
/var/log
/var/log/grubby_prune_debug
/var/log/spooler-20220703
/var/log/dmesg
/var/log/secure-20220703
/var/log/messages-20220717
/var/log/cron-20220703
/var/log/cron-20220717
/var/log/btmp
/var/log/messages-20220724
/var/log/messages-20220703
/var/log/dmesg.old
/var/log/spooler-20220724
/var/log/chrony
# 全盘搜索系统中所有类型为普通文件,且可以执行的文件信息
find / -type f -perm /a=x
# 全盘搜索系统中所有后缀为.mp4的文件,并删除所有查找到的文件
find / -name "*.mp4" -exec rm -rf {} \;
3、文件内容查看
(1)cat(在终端设备上显示文件内容)
cat命令来自于英文单词concatenate的缩写,其功能是用于查看文件内容。在Linux系统中有很多用于查看文件内容的命令,例如more、tail、head……等等,每个命令都有各自的特点。cat命令适合查看内容较少的、纯文本的文件。
对于内容较多的文件,使用cat命令查看后会在屏幕上快速滚屏,用户往往看不清所显示的具体内容,只好按Ctrl+c键中断命令的执行,所以对于大文件,干脆用more命令吧~
**语法格式:**cat [参数] 文件
常用参数:
| -n | 显示行数(空行也编号) |
|---|---|
| -s | 显示行数(多个空行算一个编号) |
| -b | 显示行数(空行不编号) |
| -E | 每行结束处显示$符号 |
| -T | 将TAB字符显示为 ^I符号 |
| -v | 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外 |
| -e | 等价于”-vE”组合 |
| -t | 等价于”-vT”组合 |
| -A | 等价于 -vET组合 |
| --help | 显示帮助信息 |
| --version | 显示版本信息 |
参考实例
# 查看文件
[root@bluecusliyou testdir]# cat 3.txt
123
456
[root@bluecusliyou testdir]# cat 4.txt
123
456
# >覆盖
[root@bluecusliyou testdir]# cat 1.txt 2.txt>3.txt
# >>追加
[root@bluecusliyou testdir]# cat 1.txt 2.txt>>4.txt
[root@bluecusliyou testdir]# cat 3.txt
123
456
[root@bluecusliyou testdir]# cat 4.txt
123
456
123
456
# 搭配空设备文件和输出重定向操作符,将某个文件内容清空
[root@bluecusliyou testdir]# cat /dev/null >1.txt
[root@bluecusliyou testdir]# cat 1.txt
(2)tac(反向列示文件内容)
tac命令就是将文件反向输出,刚好和cat输出相反。
**语法格式:**tac [参数] [文件]
常用参数:
| -b | 在行前而非行尾添加分隔标志 |
|---|---|
| -r | 将分隔标志视作正则表达式来解析 |
| -s | 使用指定字符串代替换行作为分隔标志 |
| --version | 显示版本信息并退出 |
| --help | 显示此帮助信息并退出 |
参考实例
[root@bluecusliyou home]# tac testfile2
10
9
8
7
6
5
4
3
2
1
(3)nl(显示的时候,输出行号)
nl命令是一个很好用的编号过滤工具。该命令可以读取 File 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。
**语法格式:**nl [参数] [文件]
常用参数:
| -b | 指定行号指定的方式 |
|---|---|
| -n | 列出行号表示的方式 |
| -w | 行号栏位的占用的位数 |
| -p | 在逻辑定界符处不重新开始计算。 |
参考实例
[root@bluecusliyou home]# nl testfile2
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
(4)more(分页显示文本文件内容)
more命令的功能是用于分页显示文本文件内容。如果文本文件中的内容较多较长,使用cat命令读取后则很难看清,这时使用more命令进行分页查看就更加合适了,可以把文本内容一页一页的显示在终端界面上,用户每按一次回车即向下一行,每按一次空格即向下一页,直至看完为止。
命令内部操作:
- Space键:显示文本的下一屏内容
- Enter键:向下n行,需要定义,默认为1行
- 斜线符\:接着输入一个模式,可以在文本中寻找下一个相匹配的模式
- H键:显示帮助屏
- B键:显示上一屏内容
- Q键:退出more命令
- Ctrl+F、空格键:向下滚动一屏
- Ctrl+B:返回上一屏
- =: 输出当前的行号
- :f:输出文件名和当前的行号
- V:调用vi编辑器
- !:调用Shell,并执行命令
**语法格式:**more [参数] 文件
常用参数:
| -num | 指定每屏显示的行数 |
|---|---|
| -l | more在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性 |
| -f | 计算实际的行数,而非自动换行的行数 |
| -p | 先清除屏幕再显示文本文件的剩余内容 |
| -c | 与-p相似,不滚屏,先显示内容再清除旧内容 |
| -s | 多个空行压缩成一行显示 |
| -u | 禁止下划线 |
| +/pattern | 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示 |
| +num | 从第 num 行开始显示 |
参考实例
[root@bluecusliyou home]# more testfile
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
--More--(49%)
(5)less(可以往前翻页)
less命令的功能是用于分页显示文件内容。分页显示的功能与more命令很相像,但more命令只能从前向后浏览文件内容,而less命令则不仅能从前向后(PageDown键),还可以从后向前(PageUp键)浏览文件内容,更加灵活。
命令内部操作:
- b 向后翻一页
- d 向后翻半页
- h 显示帮助界面
- Q 退出less 命令
- u 向前滚动半页
- y 向前滚动一行
- 空格键 滚动一页
- 回车键 滚动一行
**语法格式:**less [参数] 文件
常用参数:
| -b | 置缓冲区的大小 |
|---|---|
| -e | 当文件显示结束后,自动离开 |
| -f | 强迫打开特殊文件,例如外围设备代号、目录和二进制文件 |
| -g | 只标志最后搜索的关键词 |
| -i | 忽略搜索时的大小写 |
| -m | 显示类似more命令的百分比 |
| -N | 显示每行的行号 |
| -o | 将less 输出的内容在指定文件中保存起来 |
| -Q | 不使用警告音 |
| -s | 显示连续空行为一行 |
| -S | 在单行显示较长的内容,而不换行显示 |
| -x | 将TAB字符显示为指定个数的空格字符 |
[root@bluecusliyou home]# less testfile
1
2
3
4
5
6
7
8
9
10
(END)
(6)head(显示文件开头的内容)
head命令的功能是显示文件开头的内容,默认为前10行。
**语法格式:**head [参数] 文件
常用参数:
| -n <数字> | 定义显示行数 |
|---|---|
| -c <数字> | 指定显示头部内容的字符数 |
| -v | 总是显示文件名的头信息 |
| -q | 不显示文件名的头信息 |
参考实例
[root@bluecusliyou home]# head -3 testfile
1
2
3
(7)tail(查看文件尾部内容)
tail命令的功能是用于查看文件尾部内容,例如默认会在终端界面上显示出指定文件的末尾十行,如果指定了多个文件,则会在显示的每个文件内容前面加上文件名来加以区分。
高阶玩法的-f参数作用是持续显示文件的尾部最新内容,类似于机场候机厅的大屏幕,总会把最新的消息展示给用户,对阅读日志文件尤为适合,而不需要手动刷新。
**语法格式:**tail [参数] 文件
常用参数:
| -c | 输出文件尾部的N(N为整数)个字节内容 |
|---|---|
| -f | 持续显示文件最新追加的内容 |
| -F | 与选项“-follow=name”和“--retry”连用时功能相同 |
| -n | 输出文件的尾部N(N位数字)行内容 |
| --retry | 即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。 |
| --pid=<进程号> | 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令 |
| --help | 显示指令的帮助信息 |
| --version | 显示指令的版本信息 |
参考实例
[root@bluecusliyou home]# tail -3 testfile
8
9
10
(8)wc(统计文件的字节数、单词数、行数)
wc命令来自于英文词组“Word count”的缩写,其功能是用于统计文件的字节数、单词数、行数等信息,并将统计结果输出到终端界面。利用wc命令可以很快的计算出准确的单词数及行数,评估出文本的内容长度,要想了解一个文件,不妨先wc一下吧~
**语法格式:**wc [参数] 文件
常用参数:
| -w | 统计单词数 |
|---|---|
| -c | 统计字节数 |
| -l | 统计行数 |
| -m | 统计字符数 |
| -L | 显示最长行的长度 |
| --help | 显示帮助信息 |
| --version | 显示版本信息 |
参考实例
[root@bluecusliyou home]# wc testfile_ln
1 4 16 testfile_ln
(9)sort(对文件内容进行排序)
sort命令的功能是对文件内容进行排序。有时文本中的内容顺序不正确,一行行地手动修改实在太麻烦了。此时使用sort命令就再合适不过了,它能够对文本内容进行再次排序。
**语法格式:**sort [参数] 文件
常用参数:
| -b | 忽略每行前面开始出的空格字符 |
|---|---|
| -c | 检查文件是否已经按照顺序排序 |
| -d | 除字母、数字及空格字符外,忽略其他字符 |
| -f | 将小写字母视为大写字母 |
| -i | 除040至176之间的ASCII字符外,忽略其他字符 |
| -m | 将几个排序号的文件进行合并 |
| -M | 将前面3个字母依照月份的缩写进行排序 |
| -n | 依照数值的大小排序 |
| -o <输出文件> | 将排序后的结果存入制定的文件 |
| -r | 以相反的顺序来排序 |
| -t <分隔字符> | 指定排序时所用的栏位分隔字符 |
| -k | 指定需要排序的栏位 |
参考实例
# 对指定的文件内容按照字母顺序进行排序
[root@bluecusliyou testdir]# cat testfile1
aaa
banana
apple
water malen
file fruit
[root@bluecusliyou testdir]# sort testfile1
aaa
apple
banana
file fruit
water malen
# 对指定的文件内容按照数字大小进行排序
[root@bluecusliyou testdir]# cat testfile2
33
123
34
234
56
456
[root@bluecusliyou testdir]# sort testfile2
123
234
33
34
456
56
[root@bluecusliyou testdir]# sort -n testfile2
33
34
56
123
234
456
# 以冒号(:)为间隔符,对指定的文件内容按照数字大小对第3列进行排序
[root@bluecusliyou testdir]# cat testfile3
rtkit:x:172:172:RealtimeKit
unbound:x:996:991:Unbound DNS resolver
geoclue:x:997:995:User for geoclue
polkitd:x:998:996:User for polkitd
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
pulse:x:171:171:PulseAudio System Daemon
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
gluster:x:995:990:GlusterFS daemons
[root@bluecusliyou testdir]# sort -t : -k 3 -n testfile3
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
pulse:x:171:171:PulseAudio System Daemon
rtkit:x:172:172:RealtimeKit
gluster:x:995:990:GlusterFS daemons
unbound:x:996:991:Unbound DNS resolver
geoclue:x:997:995:User for geoclue
polkitd:x:998:996:User for polkitd
4、文本三剑客
(1)grep(强大的文本搜索工具)
grep来自于英文词组“global search regular expression and print out the line”的缩写,意思是用于全面搜索的正则表达式,并将结果输出。人们通常会将grep命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵活。
与之容易混淆的是egrep命令和fgrep命令。如果把grep命令当作是标准搜索命令,那么egrep则是扩展搜索命令,等价于“grep -E”命令,支持扩展的正则表达式。而fgrep则是快速搜索命令,等价于“grep -F”命令,不支持正则表达式,直接按照字符串内容进行匹配。
语法格式: grep [参数] 文件
常用参数:
| -i | 忽略大小写 |
|---|---|
| -c | 只输出匹配行的数量 |
| -l | 只列出符合匹配的文件名,不列出具体的匹配行 |
| -n | 列出所有的匹配行,显示行号 |
| -h | 查询多文件时不显示文件名 |
| -s | 不显示不存在、没有匹配文本的错误信息 |
| -v | 显示不包含匹配文本的所有行 |
| -w | 匹配整词 |
| -x | 匹配整行 |
| -r | 递归搜索 |
| -q | 禁止输出任何结果,已退出状态表示搜索是否成功 |
| -b | 打印匹配行距文件头部的偏移量,以字节为单位 |
| -o | 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位 |
| -F | 匹配固定字符串的内容 |
| -E | 支持扩展的正则表达式 |
参考实例
# 创建文件内容
[root@bluecusliyou testdir]# echo 'abcefg'>grepfile1.txt
[root@bluecusliyou testdir]# echo 'abc'>grepfile2.txt
[root@bluecusliyou testdir]# echo 'efg'>grepfile3.txt
[root@bluecusliyou testdir]# echo 'abchahahaha'>grepfile4.txt
# 输出匹配字符串内容
[root@bluecusliyou testdir]# grep abc grepfile*
grepfile1.txt:abcefg
grepfile2.txt:abc
grepfile4.txt:abchahahaha
# 输出匹配字符串行数
[root@bluecusliyou testdir]# grep -c abc grepfile*
grepfile1.txt:1
grepfile2.txt:1
grepfile3.txt:0
grepfile4.txt:1
# 输出匹配字符串行号+内容
[root@bluecusliyou testdir]# grep -n abc grepfile*
grepfile1.txt:1:abcefg
grepfile2.txt:1:abc
grepfile4.txt:1:abchahahaha
# 只输出匹配字符串内容
[root@bluecusliyou testdir]# grep -h abc grepfile*
abcefg
abc
abchahahaha
# 只输出匹配文件名
[root@bluecusliyou testdir]# grep -l abc grepfile*
grepfile1.txt
grepfile2.txt
grepfile4.txt
正则匹配:
| ^a | 匹配以a开头 |
|---|---|
| a$ | 匹配以a结尾 |
| [abc] | 匹配abc中的一个 |
| . | .匹配一个字符 |
[root@bluecusliyou home]# cat testfile1
abc
def
aaa
bbb
ccc
ddd
eee
fff
txt
tnt
tpt
[root@bluecusliyou home]# grep '^a' testfile1
abc
aaa
[root@bluecusliyou home]# grep 'a$' testfile1
aaa
[root@bluecusliyou home]# grep 't[xn]t' testfile1
txt
tnt
[root@bluecusliyou home]# grep 't.t' testfile1
txt
tnt
tpt
(2)awk(文本和数据进行处理的编程语言)
awk命令来自于三位创始人”Alfred Aho,Peter Weinberger, Brian Kernighan “的姓氏缩写,其功能是用于对文本和数据进行处理的编程语言。使用awk命令可以让用户自定义函数或正则表达式对文本内容进行高效管理,与sed、grep并称为Linux系统中的文本三剑客。
**语法格式:**awk 参数 文件
常用参数:
| -F | 指定输入时用到的字段分隔符 |
|---|---|
| -v | 自定义变量 |
| -f | 从脚本中读取awk命令 |
| -m | 对val值设置内在限制 |
内置变量:
| 变量名称 | 说明 |
|---|---|
| ARGC | 命令行参数个数 |
| ARGV | 命令行参数排列 |
| ENVIRON | 支持队列中系统环境变量的使用 |
| FILENAME | awk浏览的文件名 |
| FNR | 浏览文件的记录数 |
| FS | 设置输入域分隔符,等价于命令行 -F选项 |
| NF | 浏览记录的域的个数 |
| NR | 已读的记录数 |
| OFS | 输出域分隔符 |
| ORS | 输出记录分隔符 |
| RS | 控制记录分隔符 |
参考实例
# 仅显示指定文件中第1、2列的内容(默认以空格为间隔符)
[root@bluecusliyou testdir]# awk ' {print $1,$2} ' /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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
...
# 以冒号为间隔符,仅显示指定文件中第1列的内容
[root@bluecusliyou testdir]# awk -F : '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
...
# 以冒号为间隔符,显示系统中所有UID号码大于500的用户信息(第3列)
[root@bluecusliyou testdir]# awk -F : '$3>=500' /etc/passwd
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
mysql:x:997:1000::/home/mysql:/bin/bash
# 仅显示指定文件中含有指定关键词root的内容
[root@bluecusliyou testdir]# awk '/root/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# 以冒号为间隔符,仅显示指定文件中最后一个字段的内容
[root@bluecusliyou testdir]# awk -F: '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
...
(3)sed(批量编辑文本文件)
sed命令来自于英文词组“stream editor”的缩写,其功能是用于利用语法/脚本对文本文件进行批量的编辑操作。sed命令最初由贝尔实验室开发,后被众多Linux系统接纳集成,能够通过正则表达式对文件进行批量编辑,让需要重复的工作不再浪费时间。
**语法格式:**sed 参数 文件
常用参数:
| -e或--expression= | 以指定的脚本来处理输入的文本文件 |
|---|---|
| -f<script文件>或--file=<script文件> | 以指定的脚本文件来处理输入的文本文件 |
| -h或--help | 显示帮助 |
| -n或--quiet或--silent | 仅显示script处理后的结果 |
| -V或--version | 显示版本信息 |
参考实例
# 查找指定文件中带有某个关键词的行
[root@bluecusliyou testdir]# cat -n test.cfg | sed -n '/root/p'
45 <root>
49 </root>
# 替换指定文件中某个关键词成大写形式
[root@bluecusliyou testdir]# sed 's/root/ROOT/g' test.cfg
...
# 读取指定文件,删除所有带有某个关键词的行
[root@bluecusliyou testdir]# sed '/root/d' test.cfg
...
# 读取指定文件,在第4行后插入一行新内容NewLine
[root@bluecusliyou testdir]# sed -e 4a\NewLine test.cfg
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<!-- Define some output appenders -->
<appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
NewLine
...
# 读取指定文件,删除第2-5行的内容
[root@bluecusliyou testdir]# cat -n test.cfg | sed '2,5d'
1 <?xml version="1.0" encoding="utf-8" ?>
6
7 <!--追加日志内容-->
8 <appendToFile value="true" />
...
# 指定读取某个文件的第3-7行
[root@bluecusliyou testdir]# sed -n '3,7p' test.cfg
<!-- Define some output appenders -->
<appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
<file value="D:\logs\log4net\log4net.log" />
<!--追加日志内容-->
5、压缩和解压
(1)tar(压缩和解压缩文件)
它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成xxx.tar.gz(或称为xxx.tgz)的文件。
tar命令的功能是用于压缩和解压缩文件,能够制作出Linux系统中常见的.tar、.tar.gz、.tar.bz2等格式的压缩包文件。对于RHEL7、CentOS7版本以后的系统,解压时可以不加压缩格式参数(如z或j),系统能自动进行分析并解压。
把要传输的文件先进行压缩再进行传输,能够很好的提高工作效率,方便分享。
**语法格式:**tar 参数 文件或目录
常用参数:
| -A | 新增文件到以存在的备份文件 |
|---|---|
| -B | 设置区块大小 |
| -c | 建立新的备份文件 |
| -C <目录> | 仅压缩指定目录里的内容或解压缩到指定目录 |
| -d | 记录文件的差别 |
| -x | 从归档文件中提取文件 |
| -t | 列出备份文件的内容 |
| -z | 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz |
| -Z | 通过compress指令处理备份文件 |
| -f<备份文件> | 指定备份文件 |
| -v | 显示指令执行过程 |
| -r | 添加文件到已经压缩的文件 |
| -u | 添加改变了和现有的文件到已经存在的压缩文件 |
| -j | 通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2 |
| -v | 显示操作过程 |
| -l | 文件系统边界设置 |
| -k | 保留原有文件不覆盖 |
| -m | 保留文件不被覆盖 |
| -w | 确认压缩文件的正确性 |
| -p | 保留原来的文件权限与属性 |
| -P | 使用文件名的绝对路径,不移除文件名称前的“/”号 |
| -N <日期格式> | 只将较指定日期更新的文件保存到备份文件里 |
| -- -exclude=<范本样式> | 排除符合范本样式的文件 |
| -- -remove-files | 归档/压缩之后删除源文件 |
参考实例
# 将所有文件打包成 all.tar 多个文件的时候用空格隔开
[root@bluecusliyou home]# tar -cf all.tar *
[root@bluecusliyou home]# ls
all.tar testdir2 testfile1 testfile2
# 打包文件后删除原文件
[root@bluecusliyou home]# tar -cvf new.tar all.tar --remove-files
all.tar
[root@bluecusliyou home]# ls
new.tar testdir2 testfile1 testfile2
# 打包文件以后,以 gzip 压缩
[root@bluecusliyou home]# tar -zcvf newgz.tar.gz new.tar
new.tar
[root@bluecusliyou home]# ls
newgz.tar.gz new.tar testdir2 testfile1 testfile2
# 解包
[root@bluecusliyou home]# tar -xvf new.tar
all.tar
[root@bluecusliyou home]# ls
all.tar newgz.tar.gz new.tar testdir2 testfile1 testfile2
(2)zip(压缩文件)
zip命令的功能是用于压缩文件,解压命令为unzip。通过zip命令可以将文件打包成.zip格式的压缩包,里面会附含文件的名称、路径、创建时间、上次修改时间等等信息,与tar命令相似。
**语法格式:**zip 参数 文件
常用参数:
| -q | 不显示指令执行过程 |
|---|---|
| -r | 递归处理,将指定目录下的所有文件和子目录一并处理 |
| -z | 替压缩文件加上注释 |
| -v | 显示指令执行过程或显示版本信息 |
| -d | 更新压缩包内文件 |
| -n<字尾字符串> | 不压缩具有特定字尾字符串的文件 |
参考实例
[root@bluecusliyou home]# ls
all.tar testdir2 testfile1 testfile2
# 压缩文件
[root@bluecusliyou home]# zip test.zip testfile1 testfile2
adding: testfile1 (deflated 9%)
adding: testfile2 (stored 0%)
[root@bluecusliyou home]# ls
all.tar testdir2 testfile1 testfile2 test.zip
# 解压文件
[root@bluecusliyou home]# unzip ./ test.zip
Archive: test.zip
replace testfile1? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
inflating: testfile1
replace testfile2? [y]es, [n]o, [A]ll, [N]one, [r]ename: y
extracting: testfile2
[root@bluecusliyou home]# ls
all.tar testdir2 testfile1 testfile2 test.zip
(3)gzip(压缩和解压文件)
gzip命令来自于英文单词gunzip的缩写,其功能是用于压缩和解压文件。gzip是一款使用广泛的压缩工具,文件经过压缩后一般会以.gz后缀结尾,与tar命令合用后即为.tar.gz后缀。
据统计,gzip命令对文本文件的压缩比率通常能达到60%~70%,压缩后可以很好的提升存储空间的使用率,还能够在网络传输文件时减少等待时间。
**语法格式:**gzip [参数] 文件
常用参数:
| -a | 使用ASCII文字模式 |
|---|---|
| -d | 解开压缩文件 |
| -f | 强行压缩文件 |
| -k | 保留原文件 |
| -l | 列出压缩文件的相关信息 |
| -c | 把压缩后的文件输出到标准输出设备,不去更动原始文件 |
| -r | 递归处理,将指定目录下的所有文件及子目录一并处理 |
| -q | 不显示警告信息 |
参考实例
[root@bluecusliyou home]# ls
all.tar testdir2 testfile1 testfile2
# 压缩完删除源文件
[root@bluecusliyou home]# gzip all.tar
[root@bluecusliyou home]# ls
all.tar.gz testdir2 testfile1 testfile2
# 解压完删除源文件
[root@bluecusliyou home]# gzip -d all.tar.gz
[root@bluecusliyou home]# ls
all.tar testdir2 testfile1 testfile2
(4)bzip2(bz2文件的压缩程序)
Linux系统中bzip2命令的英文是“bunzip2”,即.bz2文件格式的压缩程序; bzip2命令系统默认是没有安装的,需要安装bzip2库才可以使用此命令。
bzip2命令采用新的压缩演算法,压缩效果比传统的LZ77/LZ78压缩演算法来得好。若没有加上任何参数,bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。
tar与bzip2命令结合使用实现文件打包、压缩(用法和gzip一样)。
tar只负责打包文件,但不压缩,用bzip2压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz2。
在tar命令中增加一个选项(-j) 可以调用bzip2实现了一个压缩的功能,实行一个先打包后压缩的过程。
压缩用法:【tar -jcvf 压缩包包名 文件...(tar jcvf bk.tar.bz2 *.c)】 v可以省略
解压用法:【tar -jxvf 压缩包包名 (tar jxvf bk.tar.bz2)】 v可以省略
**语法格式:**bzip2 [参数] 文件系统
常用参数:
| -c | 将压缩与解压缩的结果送到标准输出 |
|---|---|
| -d | 执行解压缩 |
| -f | bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,请使用此参数 |
| -k | bzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数 |
| -s | 降低程序执行时内存的使用量 |
| -t | 测试.bz2压缩文件的完整性 |
| -v | 压缩或解压缩文件时,显示详细的信息 |
| -z | 强制执行压缩 |
参考实例
# 压缩文件
bzip2 a.txt
# 检查文件完整性
bzip2 -t a.txt.bz2