1. Linux系统概述
1.1Linux 系统简介
Linux是一套免费使用和自由传播的类UNIX操作系统,是一个基于POSIX移植操作系统接口( portable operating system interface of UNIX,POSIX)和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。因此,这一标准带来的好处就是在一个POSIX兼容的操作系统编写的符合其标准的应用程序可以直接在其他POSIX支持的操作系统中无需修改而能够直接编译运行。
Linux被广泛应用于企业服务器、Web网站平台、大数据、虚拟化、Android、超级计算机,云计算、物联网、人工智能等领域。
1.2Linux 系统发行版本
学习Linux 操作系统需要选择不同的发行版本,Linux操作系统发行版本众多,目前Linux操作系统主流发行版本包括Red Hat Linux、CentOS、Ubuntu、SUSE Linux、Fedora Linux等。具体发行版本之间的区别如下:
- Red Hat Linux
Red Hat Linux 是最早的Linux发行版本之一,同时也是最著名的Linux 版本,Red Hat Linux已经创造了自己的品牌,也就是读者经常听到的“红帽操作系统"。Red Hat向用户提供一套完整的服务,这使得它特别适合在公共网络中使用。这个版本的Linux也使用最新的内核,同时还拥有大多数人都需要使用的主体软件包。
Red Hat Linux发行版操作系统的安装过程非常简单,图形安装过程提供简易设置服务器的全部信息,磁盘分区过程可以自动完成,还可以通过图形界面( graphical user interface,GUI)完成安装,即使对于Linux 新手来说这些过程都非常简单。 - CentOS
社区企业版操作系统( community enterprise operating system,CentOS)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码编译而成的。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。
CentOS与RedHatLinux不同之处在于CentOS并不包含封闭的源代码软件,可以开源免费使用,这使得它得到运维人员、企业、程序员的青睐。CentOS 发行版操作系统是目前企业使用最多的服务器领域的系统之一。 - Ubuntu
Ubuntu是一个以桌面应用为主的Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu” 一词(译为吾帮托或乌班图),意思是 “我的存在是因为大家的存在”,代表非洲传统的一种价值观。
Ubuntu基于Debian发行版和GNOME桌面环境,Ubuntu发行版操作系统的目标在于为用户提供-一个最新的、同时稳定地以开放自由软件构建而成的操作系统,目前Ubuntu具有庞大的社区力量,用户可以很方便地从社区获得帮助。 - SUSE Linux
SUSE(发音//su:sa/)是指SUSE Linux,是德国SUSE Linux AG公司发行维护的Linux发行版,是属于此公司的注册商标。2003年11月4日,Novell公司表示将会对SUSE提出收购,收购的工作于2004年1月已完成。
Novell公司也向大家保证SUSE的开发工作仍会继续下去,Novell更把公司内全线电脑的系统换成SUSELinux,并同时表示将会把SUSE特有而优秀的系统管理程序-YaST2以GPL授权释出。 - Fedora Linux
Fedora是一个知名的Linux发行版,是一款由全球社区爱好者构建的、面向日常应用的、快速、稳定、强大的操作系统。它允许任何人自由地使用、修改和重发布,无论现在还是将来。它由一个强大的社群开发,这个社群的成员以自己的不懈努力,提供并维护自由、开放源码的软件和开放的标准,约每6个月会发布新版本。
1.3虚拟机
虚拟化是一种在单个物理服务器上运行多个虚拟机的技术,即可以将一个物理服务器划分为多个虚拟服务器,每个虚拟机都有自己的资源,如CPU、内存、硬盘等,允许每台虚拟运行不同的操作系统(如Windows、Linux)。这种技术可以充分利用硬件,显著降低IT部门的管理和维护成本,同时提高系统的灵活性和可伸缩性。
VMware虚拟机是一个“虚拟PC”软件,可让你在一台机器上同时运行二个或更多Windows. DOS、 LINUX系统。在虚拟网路,实时快照,拖曳共享文件夹,支持PXE等方面均有特别之处,使用vmware,用户可在单一的桌面上同时运行不同的操作系统,进行开发、测试、部署新的应用程序。## Linux必备指令
1.4 目录与文件操作命令
14.1cd命令
cd命令主要用于目录切换,例如cd /home表示切换至/home目录,cd /root表示切换至/root目录,cd …/表示切换至上一级目录,cd ./表示切换至当前目录。其中“.”和“…”可以理解为相对路径,例如cd ./test表示以当前目录为参考,表示相对于当前目录。而cd /home/test表示完整的路径。理解为绝对路径。
命令操作如下:
[root@oracle12 ~]# cd /home
[root@oracle12 home]#
[root@oracle12 home]# cd
[root@oracle12 ~]# cd /usr/local/sbin
[root@oracle12 sbin]#
[root@oracle12 sbin]# cd ../../
[root@oracle12 usr]
[root@oracle12 usr]# cd ./local
[root@oracle12 local]#
[root@oracle12 local]# cd sbin
[root@oracle12 sbin]#
[root@oracle12 sbin]# cd /
[root@oracle12 /]#
[root@oracle12 /]# cd
[root@oracle12 ~]#
1.4.2pwd命令
pwd命令主要用于显示或者查看当前所在的目录路径。
命令操作如下:
[root@oracle12 /]# cd
[root@oracle12 ~]# pwd
/root
[root@oracle12 ~]# cd /home
[root@oracle12 home]# pwd
/home
[root@oracle12 home]# cd /usr/local/sbin
[root@oracle12 sbin]# pwd
/usr/local/sbin
[root@oracle12 sbin]# cd
[root@oracle12 ~]# pwd
/root
1.4.3ls命令
ls命令主要用于浏览目录下的文件或者文件夹,Is ./表示查看当前目录所有的文件和目录。Is -a表示查看所有的文件,包括隐藏文件、以“.”开头的文件,常用参数详解如下:
- -a,–all:不隐藏任何以“.”开始的项目。
- -A,–almost-all:列出除“.”及“…”以外的任何项目。
- –author :与-l同时使用时列出每个文件的作者。
- -b,–escape:以八进制溢出序列表示不可打印的字符。
- –block-size=大小:块以指定大小的字节为单位。
- -B,–ignore-backups:不列出任何以“~”字符结束的项目。
- -d,–directory::当遇到目录时列出目录本身而非目录内的文件。
- -D,–dired:产生适合Emacs的dired模式使用的结果。
- -f:不进行排序,-aU选项生效,-lst选项失效。
- -i, --inode:显示每个文件的inode号。
- -I,–ignore= PATTERN:不显示任何符合指定shell PATTERN的项目。
- -k:即–block-size= 1KB。
- -l:使用较长格式列出信息,即详细信息。可以用ll命令代替。
- -n,–numeric-uid-gid::类似-l但列出UID及GID号。
- -N,–literal:输出未经处理的项目名称(如不特别处理控制字符)。
- -r,–reverse:排序时保留顺序。
- -R,–recursive::递归显示子目录。
- -s,–size:以块数形式显示每个文件分配的尺寸。
- -S:根据文件大小排序。
- -t:根据修改时间排序。
- -u:同-lt一起使用时按照访问时间排序并显示。同-l一起使用时显示访问时间并按
- 文件名排序,其他情况则按照访问时间排序。
- -U:不进行排序,按照目录顺序列出项目。
- -v:在文本中进行数字(版本)的自然排序。
命令操作如下:
[root@oracle12 ~]# ls
anaconda-ks.cfg out.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@oracle12 ~]# ls /usr
bin etc games include java lib lib64 libexec local sbin share src tmp
[root@oracle12 ~]# ls -d /usr
/usr
[root@oracle12 ~]# ll /usr
总用量 284
dr-xr-xr-x. 2 root root 53248 12月 10 18:29 bin
drwxr-xr-x. 2 root root 6 4月 11 2018 etc
drwxr-xr-x. 2 root root 6 4月 11 2018 games
lrwxrwxrwx. 1 root root 10 8月 3 17:14 tmp -> ../var/tmp
ls -l 表示将文件型态、权限、拥有者、文件大小等资讯详细列出:
- 字段1:文件类型:Linux系统不会像windows一样根据扩展名来区分文件类型,而是通过为文件设定属性的方式区分文件类型。如d表示目录,减号(-)表示文件等。
- 字段2:用户权限:对于文件来说,它都有一个特定的所有者(属主),也就是对该文件具有所有权的用户。用户权限是指属主用户的文访问权限。用户组权限用三个字母(r:读w:写x:执行-:无)表示,如r-x等。
- 字段3:用户组权限:在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。用户组权限是指与文件所有者同组用户对文件的访问权限。用户组权限用三个字母表示,如r-x等。
- 字段4:其它用户权限:是指文件所有者和同组用户以外的用户对文件的访问权限。其它用户权限用三个字母表示,如r-x等。
- 字段5:硬链接文件数:硬链接就是同一个文件使用了多个别名。
- 字段6:用户名:是指文件的属主。
- 字段7:用户组名:是指文件属主的属组名。
- 字段8:文件或目录大小:指文件或目录所占用的磁盘空间大小,默认单位为字节。
- 字段9:文件或目录的修改时间:这里的时间是该文件的最后被更新(包括文件创建、内容更新、文件名更新等)。可用如下命令查看文件的修改,访问,创建的时间 。
1.4.4mkdir命令
mkdir命令主要用于创建目录。用法为mkdir dirname,命令后接目录的名称,常用参数详解如下:
语法:mkdir [选项] 目录
若指定目录不存在则创建目录。
- -m,–mode=模式:设置权限模式(类似chmod),而不是rw xrwxrwx或umask。
- -p,–parents:需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错
- 误处理。即逐层创建子目录。
- -v,–verbose:每次创建新目录都显示信息。
- -Z,–context=CTX:将每个创建的目录的SELinux安全环境设置为CTX。
命令操作如下:
[root@oracle12 ~]# mkdir /opt/test
[root@oracle12 ~]# cd /opt
[root@oracle12 opt]# ls
ORCLfmap test
[root@oracle12 opt]# mkdir -p my/test
[root@oracle12 opt]# ls my
test
1.4.5 rm命令
rm命令主要用于删除文件或者目录。用法为rm -rf test.txt (-r 表示递归,-f表示强制),常用参数详解如下:
语法: rm [选项] 文件
- -f,–force:强制删除,忽略不存在的文件,不提示确认。
- -i:在删除前需要确认。
- -I:在删除超过3个文件或者递归删除前要求确认,此选项比-i提示内容更少,但同样可以阻止大多数错误发生。
- -r,-R,–recursive:递归删除目录及其内容。
默认时,rm不会删除目录,使用–recursive(-r或- R)选项可删除每个给定的目录,以及其下所有的内容。
命令操作如下:
[root@oracle12 ~]# touch 1.txt
[root@oracle12 ~]# ls
1.txt anaconda-ks.cfg out.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@oracle12 ~]# rm 1.txt
rm:是否删除普通文件 "1.txt"?n
[root@oracle12 ~]# ls
1.txt anaconda-ks.cfg out.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@oracle12 ~]# rm -f 1.txt
[root@oracle12 ~]# ls
anaconda-ks.cfg out.txt 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@oracle12 ~]# rm -r /opt/test
rm:是否删除目录 "/opt/test"?y
[root@oracle12 ~]# ls /opt
my ORCLfmap
[root@oracle12 ~]# rm -rf /opt/my
[root@oracle12 ~]# ls /opt
ORCLfmap
1.4.6touch命令
touch命令主要用于创建普通文件,用法为touch test.txt,如果文件存在,则表示修改当前文件时间,常用参数详解如下:
语法:touch [选项] 文件
作用为将每个文件的访问时间和修改时间改为当前时间。不存在的文件将会被创建为空文件,除非使用-c或-h选项。
- -a:只更改访问时间。,
- -c,–no-create::不创建任何文件。
- -d,–date=字符串:使用指定字符串表示时间而非当前时间。
- -f:忽略。
- -h,–no-dereference::会影响符号链接本身,而非符号链接所指示的目的地(当系统支持更改符号链接的所有者时,此选项才有用)。
- -m:只更改修改时间。
- -r,–reference=文件:使用指定文件的时间属性而非当前时间。
1.4.7cp命令
cp命令主要用于复制文件,用法为cp old.txt /tmp/ new.txt,常用来备份,如果复制目录需要加-r参数。常用参数详解如下:
语法:cp [选项] 源文件 目录
或
cp [选项] -t目录 源文件
作用为将源文件复制至目标文件,或将多个源文件复制至目标目录。
- -a,–archive:等于-dR --preserve= all。
- –backup[ = CONTROL]:为每个已存在的目标文件创建备份。
- -b:类似–backup,但不接受参数。
- –copy-contents:在递归处理是复制特殊文件内容。
- -d:等于–no-dereference --preserve= links。
- -f,–force:如果目标文件无法打开则将其移除并重试(当-n选项存在时则不需再选此项)。
- -i,–interactive:覆盖前询问(使前面的-n选项失效)。
- -H:跟随源文件中的命令行符号链接。
- -I,–link:链接文件而不复制。
- -L,–dereference:总是跟随符号链接。
- -n,–no-clobber:不要覆盖已存在的文件(使前面的-i选项失效)。
- -P,–no-dereference:不跟随源文件中的符号链接。
- -p:等于-preserve=模式,所有权,时间戳。
- –preserve[=属性列表:保持指定的属性(默认:模式,所有权,时间戳),如果可能保持附加属性:环境、链接、xattr等。
- -C:等于–preserve= context。
- –sno-preserve=属性列表:不保留指定的文件属性。
- –parents:复制前在目标目录创建来源文件路径中的所有目录。
- -R,-r,–recursive:递归复制目录及其子目录内的所有内容。
命令操作如下:
[root@oracle12 ~]# mkdir /opt/a
[root@oracle12 ~]# mkdir /opt/b
[root@oracle12 a]# mkdir /opt/c
[root@oracle12 ~]# cd /opt/a
[root@oracle12 a]# touch 1.txt
[root@oracle12 a]# cp 1.txt /opt/b
[root@oracle12 a]# ls /opt/b
1.txt
[root@oracle12 a]# cd ..
[root@oracle12 opt]# cp -r a /opt/c
[root@oracle12 opt]# ls /opt/c
a
1.4.8mv命令
mv命令主要用于重命名或者移动文件或者目录,用法为mv old.txt new.txt
,常用参数详解如下:
用法: mv [选项] 源文件 目录
或
mv [选项] -t目录源文件
作用为将源文件重命名为目标文件,或将源文件移动至指定目录。注意长选项必须使用的参数对于短选项时也是必须使用的。
- –backup[= CONTROL]:为每个已存在的目标文件创建备份。
- -b:类似–backup,但不接受参数。
- -f,–force:覆盖前不询问。
- -i, --interactive:覆盖前询问。
- -n,–no-clobber:不覆盖已存在文件,如果用户指定了-i、-f、-n中的多个,仅最后一个生效。
- -S, --suffix= SUFFIX:替换常用的备份文件后缀。
- -t, --target-directory= DIRECTORY:将所有参数指定的源文件或目录移动至指定目录。
- -u, --update:只在源文件文件比目标文件新或目标文件不存在时才进行移动。
- -v, --verbose:详细显示进行的步骤。
命令操作如下:
[root@oracle12 opt]# mv a/1.txt /opt/c
[root@oracle12 opt]# ls /opt/c
1.txt a
[root@oracle12 opt]# mv -t a /opt/b
[root@oracle12 opt]# ls /opt/b
ls:无法访问/opt/b:没有那个文件或目录
[root@oracle12 opt]# ls /opt/a
b
1.4.9echo命令
echo命令主要用于打印字符或者回显,例如输人echo ok,会显示ok,echo ok>test.tx则会把ok字符覆盖test.txt内容。“>”表示覆盖,原内容被覆盖,“>>”表示追加,原内容变。例如echo ok >> test.txt, 表示向test.txt 文件追加ok字符,不覆盖原文件里的内容,如果文件不存在,创建文件。常用参数详解如下:
- \a:发出警告声。
- \b:删除前一个字符。
- \c:最后不加上换行符号。
- \f:换行但光标仍旧停留在原来的位置。
- \n:换行且光标移至行首。
- \r:光标移至行首,但不换行。
- \t:插人tab。
- \v:与\f相同。
- \:插人“\”字符。
命令操作如下:
[root@oracle12 opt]# cd /opt/a
[root@oracle12 a]# echo hello
hello
[root@oracle12 a]# echo hello > 2.txt
[root@oracle12 a]# echo world >> 2.txt
1.4.10cat命令
cat命令用于连接文件并打印到标准输出设备上。
语法:cat [选项] 文件
常用参数详解如下:
- -n 或 --number:由 1 开始对所有输出的行数编号。
- -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
- -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
- -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
- -E 或 --show-ends : 在每行结束处显示 $。
- -T 或 --show-tabs: 将 TAB 字符显示为 ^I。
- -A, --show-all:等价于 -vET。
- -e:等价于"-vE"选项。
- -t:等价于"-vT"选项。
命令操作如下:
[root@oracle12 a]# cp /root/anaconda-ks.cfg ./
[root@oracle12 a]# ls
2.txt anaconda-ks.cfg b
[root@oracle12 a]# cat 2.txt
hello
world
[root@oracle12 a]# cat -n anaconda-ks.cfg
1 #version=DEVEL
2 # System authorization information
3 auth --enableshadow --passalgo=sha512
4 # Use CDROM installation media
5 cdrom
6 # Use graphical install
7 graphical
8 # Run the Setup Agent on first boot
9 firstboot --enable
10 ignoredisk --only-use=sda
1.4.11more命令
more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似)。
语法:more [选项] [[fileNames…]
fileNames 欲显示内容的文档,可为复数个数。常用参数详解如下:
- -num: 一次显示的行数,如-10,一次显示10行。
- -d: 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 。
- -l: 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能。
- -f :计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)。
- -p :不以卷动的方式显示每一页,而是先清除萤幕后再显示内容。
- -c: 跟 -p 相似,不同的是先显示内容再清除其他旧资料。
- -s :当遇到有连续两行以上的空白行,就代换为一行的空白行。
- -u: 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)。
- +/pattern: 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示。
- +num: 从第 num 行开始显示。
常用操作命令: - Enter 向下n行,需要定义。默认为1行。
- Ctrl+F 向下滚动一屏。
- 空格键 向下滚动一屏。
- b 返回上一屏。
- = 输出当前行的行号。
- f 输出文件名和当前行的行号。
- V 调用vi编辑器。
- !命令 调用Shell,并执行命令。
- q 退出more。
命令操作如下:
[root@oracle12 a]# more -10 anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
--More--(15%)
1.4.12less命令
less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。建议使用less,less读取文件时不需要将文件全部读取显示,节省资源,而且支持PGUP和PGDN等功能键,便于浏览。
语法:less [选项] 文件
常用参数详解如下:
- -b <缓冲区大小> 设置缓冲区的大小。
- -e 当文件显示结束后,自动离开。
- -f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件。
- -g 只标志最后搜索的关键词。。
- -i 忽略搜索时的大小写
- -m 显示类似more命令的百分比。
- -N 显示每行的行号。
- -o <文件名> 将less 输出的内容在指定文件中保存起来。
- -Q 不使用警告音。
- -s 显示连续空行为一行。
- -S 行过长时间将超出部分舍弃。
- -x <数字> 将"tab"键显示为规定的数字空格。
- /字符串:向下搜索"字符串"的功能。
- ?字符串:向上搜索"字符串"的功能。
- n:重复前一个搜索(与 / 或 ? 有关)。
- N:反向重复前一个搜索(与 / 或 ? 有关)。
主要常用键: - b 向上翻一页。
- d 向后翻半页。
- Q 退出less 命令。
- u 向前滚动半页。
- y 向前滚动一行。
- 空格键 滚动一页。
- 回车键 滚动一行。
- [pagedown]: 向下翻动一页。
- [pageup]: 向上翻动一页。
- j - 下一行。
- k - 上一行。
- G - 移动到最后一行。
- g - 移动到第一行。
- q / ZZ - 退出 less 命令。
- v - 使用配置的编辑器编辑当前文件。
命令操作如下:
[root@oracle12 a]# less -N anaconda-ks.cfg
1 #version=DEVEL
2 # System authorization information
3 auth --enableshadow --passalgo=sha512
4 # Use CDROM installation media
5 cdrom
1.4.13head命令
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
语法:head [选项] [文件]
常用参数详解如下:
- -q 隐藏文件名。
- -v 显示文件名。
- -c<数目> 显示的字节数。
- -n<行数> 显示的行数。
命令操作如下
[root@oracle12 ~]# head -2 anaconda-ks.cfg
#version=DEVEL
# System authorization information
1.4.14tail命令
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
语法:**tail [选项] [文件] **
常用参数详解如下:
- -f 循环读取。
- -q 不显示处理信息。
- -v 显示详细的处理信息。
- -c<数目> 显示的字节数。
- -n<行数> 显示文件的尾部 n 行内容,默认显示最后 10 行。
- –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束。
- -q, --quiet, --silent 从不输出给出文件名的首部。
- -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒。
命令操作如下
[root@oracle12 a]# head anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
[root@oracle12 a]# tail anaconda-ks.cfg
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
用tail监听文件内容,打开2个远程管理窗,一个窗监听文件,另一个窗添加文件内容:
#监听窗
[root@oracle12 a]# tail -f 2.txt
hello
world
linux
centos
#文件追加窗
[root@oracle12 ~]# cd /opt/a
[root@oracle12 a]# echo linux >> 2.txt
[root@oracle12 a]# echo centos >> 2.txt
1.4.15find命令
find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法:find [路径] [选项] [条件] [操作]
选项:
- -depth 从指定目录下最深层的子目录开始查找。
- maxdepth levels 查找的最大目录级数,levels为自然数。
- -mindepth levels 查找的最小目录级数,leves为自然数。
条件: - 数字参数可以指定为:
- +n:大于n。
- n:等于n。
- -n:小于n。
- -atime [+n|n|-n] 在 n 天内被读取过的文件。
- -ctime [+n|n|-n] 在 n 天内创建的文件。
- -mtime [+n|n|-n] 在 n 天内修改过的文件。
- -amin [+n|n|-n] 在 n 分钟内被读取过。
- -cmin [+n|n|-n] 在 n 分钟内创建。
- -mmin [+n|n|-n] 在 n 分钟内被修改过。
- -name 按照文件名查找文件,只支持"*”,“?”,“[]” 等特殊通配苻。
- -iname 按照文件名查找文件,不区分大小写。
- -samefile 文件引用与名称相同的inode,即硬链接。
- -inum 文件具有inode编号。通常使用-samefile测试更容易。
- -user 按照文件所属用户查找文件。
- -group 按照文件所属组查找文件。
- -size [+n|n|-n] 按照文件大小查找文件,单位为:
-
- b 代表 512 位元组的区块。
-
- c 表示字节数。
-
- k 表示 kilo bytes。
-
- w 是二个位元组。
- -links n 按照链接数查找文件。
- -type : 按时文件类型查找文件,其中文件类型:
- d: 目录
- c: 字型装置文件
- b: 区块装置文件
- p: 管道文件
- f: 一般文件
- l: 符号连结
- s: socket
- -path pattern 指定路径样式, 配合-prune 参数排除指定目录。
- -perm 按权限查找。
表达式: - -delete 将查找出的文件删除(慎用)。
- -exec 对匹配的文件执行该参数所给出的执行命令。固定的格式为:-exec ‘commond’ {} ; 注意:{} 表示查询的结果。
- -ok 与-exec的作用相同,但在执行每个命中之前,都会让用户来确定是否执行。
- -prune 使用这一选项可以使find命令不在特殊指定的目录中查找。
- -print 将匹配的文件输出到标准设备输出(默认功能,使用中可省略)。
逻辑运算符: - -a 与 (默认情况查询条件之间都是 与 的关系)
- -o 或
- -not | ! 非
命令操作如下:
-- 查询/usr/sbin目录下sh文件
[root@oracle12 ~]# find /usr/sbin -name *.sh
/usr/sbin/alsa-info.sh
/usr/sbin/alsabat-test.sh
/usr/sbin/pm-utils-bugreport-info.sh
-- 查询/etc目录下最近20在内更新过的文件
[root@oracle12 ~]# find /etc -ctime -20
/etc
/etc/resolv.conf
/etc/group
/etc/gshadow
-- 搜索profile文件所在的位置
[root@oracle12 ~]# find / -name profile
/etc/profile
/etc/lvm/profile
/etc/dconf/profile
1.4.16Ln命令
ln命令是创建一个文件或目录的软件链接。软链接相当于windows的快捷方式:
- 当我们访问这个软链接文件时,其实就是在访问源文件的本身。
- 那么当我们删除软链接文件时,其实只是删除了一个指向,并不会对源文件造成影响。
- 如果我们删除的是源文件,那么该文件的所有软链接文件都会失效。
语法:ln [选项] [源文件或目录] [目标文件或目录]
选项: - -b或–backup 删除,覆盖目标文件之前的备份。
- -d或-F或–directory 建立目录的硬连接。
- -f或–force 强行建立文件或目录的连接,不论文件或目录是否存在。
- -i或–interactive 覆盖既有文件之前先询问用户。
- -n或–no-dereference 把符号连接的目的目录视为一般文件。
- -s或–symbolic 对源文件建立软链接(符号连接),而非硬连接。
- -S<字尾备份字符串>或–suffix=<字尾备份字符串> 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的字尾备份字符串是符号"~“,可通过”-S"参数来改变它。
- -v或–verbose 显示指令执行过程。
– -V<备份方式>或–version-control=<备份方式> 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用"-S"参数变更,当使用"-V"参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串。
命令操作如下:
[root@oracle12 ~]# ln -s /etc/passwd
[root@oracle12 ~]# ll
总用量 12
-rw-------. 1 root root 1521 8月 3 17:21 anaconda-ks.cfg
lrwxrwxrwx 1 root root 11 1月 24 16:08 passwd -> /etc/passwd
1.4.17zip命令
zip 命令用于压缩文件,压缩后的文件后缀名为 .zip。
语法:zip [选项] 压缩包名 源文件
选项:
- -r 递归压缩目录,及将制定目录下的所有文件以及子目录全部压缩。
- -m 将文件压缩之后,删除原始文件,相当于把文件移到压缩文件中。
- -v 显示详细的压缩过程信息。
- -q 在压缩的时候不显示命令的执行过程。
- -压缩级别 压缩级别是从 1~9 的数字,-1 代表压缩速度更快,-9 代表压缩效果更好。
- -u 更新压缩文件,即往压缩文件中添加新文件。
命令操作如下:
[root@oracle12 ~]# mkdir /opt/zip
[root@oracle12 ~]# echo hello > /opt/zip/1.txt
[root@oracle12 ~]# echo zip > /opt/zip/2.txt
[root@oracle12 ~]# zip -r test.zip /opt/zip
adding: opt/zip/ (stored 0%)
adding: opt/zip/1.txt (stored 0%)
adding: opt/zip/2.txt (stored 0%)
[root@oracle12 ~]# ll test.zip
-rw-r--r-- 1 root root 484 1月 26 07:57 test.zip
1.4.18unzip命令
unzip 命令可以查看和解压缩 zip 文件。
语法:unzip [选项] 压缩包名
选项:
- -d 目录名 将压缩文件解压到指定目录下。
- -n 解压时并不覆盖已经存在的文件。
- -o 解压时覆盖已经存在的文件,并且无需用户确认。
- -v 查看压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作。
- -t 测试压缩文件有无损坏,但并不解压。
- -x 文件列表 解压文件,但不包含文件列表中指定的文件。
命令操作如下:
[root@oracle12 ~]# unzip -d /opt/zip1/ test.zip
Archive: test.zip
creating: /opt/zip1/opt/zip/
extracting: /opt/zip1/opt/zip/1.txt
extracting: /opt/zip1/opt/zip/2.txt
[root@oracle12 ~]# ls /opt/zip1
opt
[root@oracle12 ~]# ls /opt/zip1/opt
zip
[root@oracle12 ~]# ls /opt/zip1/opt/zip
1.txt 2.txt
2.2 Linux 重定向与管道命令
Linux中的重定向和管道命令用于处理输入、输出以及将多个命令连接在一起。
2.2.1 重定向命令
可以通过使用特殊字符来改变标准输入或者标准输出流的目标位置,标准输入输出流的目标位置可以是文件,也可是标准设备,在linux中默认使用文件描述符0,1,2分别代表标准输入、标准输出、标准错误。常见的重定向操作有三种类型:
- >:将命令的输出结果写入到指定文件中,如果该文件不存在则创建新文件;已经存在同名文件,会被覆盖。
- >>:与上面相似,区别在于如果文件已经存在,则将内容添加到文件末尾而非覆盖原有内容。
- <:从指定文件中获取输入数据并传递给命令进行处理。
特殊重定向类型: - 命令 >>文件1 2>文件2:以追加的方式,把命令的正确输出内容输出到文件1中,以覆盖的方式,把命令的错误输出内容输出到文件2。
- 命令 >>文件 2>&1:以覆盖或追加的方式,把命令的正确输出或错误输出内容输出到指定的文件中。
命令操作如下:
[root@oracle12 ~]# ll /opt > /opt/ll.txt
[root@oracle12 ~]# cat /opt/ll.txt
总用量 0
drwxr-xr-x 2 root root 19 1月 7 11:06 a
drwxr-xr-x 3 root root 28 12月 31 09:26 c
-rw-r--r-- 1 root root 0 1月 7 18:15 ll.txt
drwxr-xr-x 3 root root 22 12月 14 09:39 ORCLfmap
[root@oracle12 ~]# echo Hello >> /opt/ll.txt
[root@oracle12 ~]# cat /opt/ll.txt
总用量 0
drwxr-xr-x 2 root root 19 1月 7 11:06 a
drwxr-xr-x 3 root root 28 12月 31 09:26 c
-rw-r--r-- 1 root root 0 1月 7 18:15 ll.txt
drwxr-xr-x 3 root root 22 12月 14 09:39 ORCLfmap
Hello
[root@oracle12 ~]# grep Hello < /opt/ll.txt
Hello
# 以追加的方式,把命令的正确输出内容输出到out.log中,把命令的错误输出内容输出到err.log中。
[root@oracle12 ~]# cat ll.txt >> out.txt 2>>err.log
[root@oracle12 ~]# cat out.txt
[root@oracle12 ~]# cat err.log
cat: ll.txt: 没有那个文件或目录
2.2.2管道命令
管道命令用“ | ”将一个命令的输出直接作为下一个命令的输入,形成了一条命令序列。这样可以将多个命令串联起来完成复杂任务。
[root@oracle12 ~]# cat /opt/ll.txt | grep Hello
Hello
2.3Linux命令四剑客
在Linux shell命令工具中,四剑客工具的使用更加广泛,shell命令四剑客包括find、sed、grep、awk。
2.3.1find命令
find工具主要用于操作系统文件、目录的查找,find在工作时会遍历指定的目录。其语法参数格式如下:
find path -option [expression]
其中option常用参数详解如下:
- -name filename: 查找名为filename的文件。
- -type b/d/c/p/l/f: 查找块设备、目录、字符设备、管道、符号链接、普通文件。
- -size n[c]:查找长度为n块[或n字节]的文件。
- -perm: 按执行权限来查找。
- -user username:按文件属主来查找。
- -group groupname:按组来查找。
- -mtime -n +n:按文件更改时间来查找文件,-n指n天以内,+n指n天以前。
- -atime -n +n:按文件访问时间来查找文件。
- -ctime -n +n:按文件创建时间来查找文件。
- -mmin -n +n:按文件更改时间来查找文件,-n指n分钟以内,+n指n分钟
以前。 - -amin-n +n:按文件访问时间来查找文件。
- -cmin-n +n:按文件创建时间来查找文件。
- -nogroup:查找无有效属组的文件。
- -nouser:查找无有效属主的文件。
- -depth:在进入子目录前先行查找完本目录。
- -follow:如果遇到符号链接文件,就跟踪链接所指的文件。
- -cpio: 查找位于某- -类型文件系统中的文件。
- -prune:忽略某个目录。
- maxdepth: 查找目录级别深度
# 查找/etc目录下的文件
[root@oracle12 ~]# find /etc/ -name *.conf
/etc/resolv.conf
/etc/pki/ca-trust/ca-legacy.conf
/etc/yum/pluginconf.d/fastestmirror.conf
# 查找文件只搜索/etc一级目录下的文件
[root@oracle12 ~]# find /etc/ -maxdepth 1 -name *.conf
/etc/resolv.conf
/etc/asound.conf
/etc/logrotate.conf
# 查找/etc目录下以n开头的文件
[root@oracle12 ~]# find /etc/ -maxdepth 1 -name [n]*
/etc/nsswitch.conf.bak
/etc/networks
/etc/nsswitch.conf
# 查找/etc目录的子目录
[root@oracle12 ~]# find /etc/ -type d
/etc/
/etc/grub.d
/etc/pki
/etc/pki/rpm-gpg
# 查找/etc目录的子链接文件
[root@oracle12 ~]# find /etc/ -type l
/etc/mtab
/etc/pki/ca-trust/source/ca-bundle.legacy.crt
/etc/pki/java/cacerts
# 查找/etc目录的权限为755的文件
[root@oracle12 ~]# find /etc/ -perm 755
/etc/
/etc/grub.d/00_header
/etc/grub.d/01_users
/etc/grub.d/10_linux
# 查找/etc目录的权限为30天内创建的文件
[root@oracle12 ~]# find /etc/ -mtime -30 -type f
/etc/fstab
/etc/resolv.conf
/etc/systemd/system/oracle-tfa.service
/etc/profile
2.3.2sed命令
sed是操作、过滤和转换文本内容的强大工具。
常用功能包括结合正则表达式对文件实现快速的增删改查,其中查询功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。
sed 会根据脚本命令来处理文本文件中的数据,这些命令要么从命令行中输入,要么存储在一个文本文件中。
此命令执行数据的顺序如下:每次仅读取一行内容;根据提供的规则命令匹配并修改或删除数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据,将执行结果输出。当一行数据匹配完成后,它会继续读取下一行数据,并重复这个过程,直到将文件中所有数据处理完毕。其语法参数格式如下:
sed [ -options] [ ‘Commands’ ] filename
sed工具默认处理文本,文本内容输出屏幕已经修改,但是文件内容其实没有修改,需要加-i参数,即对文件彻底修改。具体参数详解如下:
- x:指定行号。
- x,y: 指定从x到y的行号范围。
- /pattern/:查询包含模式的行。
- /pattern/pattern/:查询包含两个模式的行。
- /pattern/,x:从与pattern的匹配行到x号行之间的行。
- x,/pattern/:从x号行到与pattern的匹配行之间的行。
- x,y!:查询不包括x和y行号的行。
- r:从另一个文件中读文件。
- w:将文本写人到一个文件。
- y:变换字符。
- q:第一个模式匹配完成后退出。
- I:显示与八进制ASCII码等价的控制字符。
- {}: 在定位行执行的命令组。
- p:打印匹配行。
- =:打印文件行号。
- a\:在定位行号之后追加文本信息。
- i\:在定位行号之前插人文本信息。
- d:删除定位行。
- c\:用新文本替换定位文本。
- s:使用替换模式替换相应模式。
- n:读取下一个输入行,用下一个命令处理新的行。
- N:将当前读入行的下一行读取到当前的模式空间。.
- h:将模式缓冲区的文本复制到保持缓冲区。
- H:将模式缓冲区的文本追加到保持缓冲区。
- x:互换模式缓冲区和保持缓冲区的内容。
- g:将保持缓冲区的内容复制到模式缓冲区。
- G:将保持缓冲区的内容追加到模式缓冲区。
[root@oracle12 /]# cd /opt/a
[root@oracle12 a]# echo first line >> sed.txt
[root@oracle12 a]# echo second line >> sed.txt
[root@oracle12 a]# echo third line >> sed.txt
[root@oracle12 a]# echo fourth line >> sed.txt
[root@oracle12 a]# cat sed.txt
first line
second line
third line
fourth line
# 替换文件中的line 为 word
[root@oracle12 a]# sed 's/line/word/g' sed.txt
first word
second word
third word
fourth word
# 打印文本的第一行至第三行
[root@oracle12 a]# sed -n '1,3p' sed.txt
first line
second line
third line
# 在第2行之后,添加 ======内容
[root@oracle12 a]# sed '2a\============' sed.txt
first line
second line
============
third line
fourth line
2.3.3awk命令
awk基本原理是逐行处理文件中的数据,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤,如果找不到匹配内容,则继续处理下一行。其语法参数格式如下:
awk 'pattern {action} ' file
awk常用参数、变量、函数详解如下。
(1) awk基本语法参数详解如下:
- 单引号是为了和shell命令区分开。
- 大括号{ }表示一个命令分组。
- pattern是一个过滤器,表示匹配pattern条件的行才进行action处理。
- action是处理动作,常见动作为print。
(2) awk内置变量详解如下: - FS:分隔符,默认是空格。
- OFS:输出分隔符。
- NR:当前行数,从1开始。
- NF:当前记录字段个数。
- $0:当前记录。
-
1
1~
1 n:当前记录第n个字段(列)。
(3) awk内置函数详解如下: - gsub(r,s): 在$0中用s代替r。
- index(s,t):返回s中t的第一个位置。
- length(s): s的长度。
- match(s,r): s是否匹配r。
- split(s,a,fs): 在fs上将s分成序列a。
- substr(s,p): 返回s从p开始的子串。
(4) awk常用操作符、运算符及判断符,详解如下: - ++ --:增加与减少(前置或后置)。
- ^ **:指数(右结合性)。
- ! ±:非、一元(unary)加号.- -元减号。
- ±*/ %:加、减、乘、除、余数。
- <<= == !=>>=:数字比较。
- &.&:逻辑and。
- II :逻辑or。
- =+=-=*=/=%=^= **=:赋值。
# 打印/opt目录内容(以空格分隔)
[root@oracle12 ~]# ll /opt
总用量 0
drwxr-xr-x 3 root root 66 1月 6 21:08 a
drwxr-xr-x 3 root root 28 12月 31 09:26 c
drwxr-xr-x 3 root root 22 12月 14 09:39 ORCLfmap
[root@oracle12 ~]# ll /opt | awk '{print $1}'
总用量
drwxr-xr-x
drwxr-xr-x
drwxr-xr-x
[root@oracle12 ~]# ll /opt | awk '{print $9}'
a
c
ORCLfmap
# 以冒号分离
[root@oracle12 ~]# ll /opt | awk -F:'{print $2}'
06 a
26 c
39 ORCLfmap
# 打印/opt/a/1.txt 文件包含th的内容
[root@oracle12 ~]# cat /opt/a/1.txt
first line
second line
============
third line
fourth line
[root@oracle12 ~]# awk '/th/' /opt/a/1.txt
third line
fourth line
[root@oracle12 ~]# awk '/th/ {print $1}' /opt/a/1.txt
third
fourth
# 打印/opt/a/1.txt 文件以f开头的内容
[root@oracle12 ~]# cat /opt/a/1.txt | awk '/^f/ {print $1}'
first
fourth
# 打印/opt/a/1.txt 文件1-3行的内容,并显示行号
[root@oracle12 ~]# awk 'NR>=1 && NR<=3 {print NR,$0}' /opt/a/1.txt
1 first line
2 second line
3 ============
2.3.4rep命令
全面搜索正则表达式grep ( global search regular expression(re)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。其语法格式如下:
grep [ -options] ' word' Filenane
grep常用参数详解如下:
- -a:以文本文件方式搜索。
- -c:计算找到的符合行的次数。
- -i:忽略大小写。
- -n:顺便输出行号。
- -v:反向选择,即显示不包含匹配文本的所有行。
- -h:查询多文件时不显示文件名。
- -I:查询多文件时只输出包含匹配字符的文件名。
- -s:不显示不存在或无匹配文本的错误信息。
[root@oracle12 ~]# grep -c 'line' /opt/a/1.txt
4
[root@oracle12 ~]# grep -n 'line' /opt/a/1.txt
1:first line
2:second line
4:third line
5:fourth line
# 在/etc目录下查找包含network的文件
[root@oracle12 ~]# grep -l -i 'network' /etc/*.conf
/etc/autofs.conf
/etc/chrony.conf
/etc/dleyna-server-service.conf
/etc/dnsmasq.conf
/etc/ipsec.conf
/etc/nfsmount.conf
/etc/nsswitch.conf
/etc/ntp.conf