linux学习笔记

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

linux学习笔记

1.操作系统的发展史

如果命令太多记不住怎么办推荐个不错的网站https://www.linuxcool.com 我们只需要过一遍完全不用记用到的时候再查询即可

1.2 Unix

  • 1965年之前电脑只有军事或者学院的研究机构碰的起当时大型主机至多能提供30台终端30个键盘、显示器)的连接。
  • 1965年左后由贝尔实验室、麻省理工学院 以及 通用电气共同发起了Multics项目想让大型主机支持300台终端
  • 1969年前后这个项目进度缓慢资金短缺贝尔实验室退出了研究
  • 1969年从这个项目中退出的Ken Thompson当时在实验室无聊时为了让一台空闲的电脑上能够运行“星际旅行”游戏在8月份左右趁着其妻子探亲的时间用了1个月的时间编写出了 Unix操作系统的原型
  • 1970年美国贝尔实验室的 Ken Thompson以 BCPL语言 为基础设计出很简单且很接近硬件的 B语言取BCPL的首字母并且他用B语言写了第一个UNIX操作系统。
  • 因为B语言的跨平台性较差为了能够在其他的电脑上也能够运行这个非常棒的Unix操作系统Dennis Ritchie和Ken Thompson 从B语言的基础上准备研究一个更好的语言
  • 1972年美国贝尔实验室的 Dennis Ritchie在B语言的基础上最终设计出了一种新的语言他取了BCPL的第二个字母作为这种语言的名字这就是C语言
  • 1973年初C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了现在大名鼎鼎的Unix操作系统

1.2 Minix

因为AT&T(通用电气)的政策改变在Version 7 Unix推出之后发布新的使用条款将UNIX源代码私有化在大学中不再能使用UNIX源代码。Andrew S. Tanenbaum(塔能鲍姆)教授为了能在课堂上教授学生操作系统运作的实务细节决定在不使用任何AT&T的源代码前提下自行开发与UNIX兼容的操作系统以避免版权上的争议。他以小型UNIXmini-UNIX之意将它称为MINIX。

1.3Minix

因为Minix只是教学使用因此功能并不强因此Torvalds利用GNU的bash当做开发环境gcc当做编译工具编写了Linux内核-v0.02但是一开始Linux并不能兼容Unix即Unix上跑的应用程序不能在Linux上跑即应用程序与内核之间的接口不一致因为Unix是遵循POSIX规范的因此Torvalds修改了Linux并遵循POSIXPortable Operating System Interface他规范了应用程序与内核的接口规范 一开始Linux只适用于386后来经过全世界的网友的帮助最终能够兼容多种硬件

img

img

img

1.4 Minix 没有火起来的原因

Minix的创始人说MINIX 3没有统治世界是源于他在1992年犯下的一个错误当时他认为BSD必然会一统天下因为它是一个更稳定和更成熟的系统其它操作系统难以与之竞争。因此他的MINIX的重心集中在教育上。四名BSD开发者已经成立了一家公司销售BSD系统他们甚至还有一个有趣的电话号码1-800-ITS-UNIX。然而他们正因为这个电话号码而惹火上身。美国电话电报公司因电话号码而提起诉讼。官司打了三年才解决。在此期间BSD陷于停滞而Linux则借此一飞冲天。他的错误在于没有意识官司竟然持续了如此长的时间以及BSD会因此受到削弱。如果美国电话电报公司没有起诉Linux永远不会流行起来BSD将统治世界。

2.linux 介绍

2.1 Linux内核版本

内核(kernel)是系统的心脏是运行程序和管理像磁盘和打印机等硬件设备的核心程序它提供了一个在裸设备与应用程序间的抽象层。

Linux内核版本又分为稳定版和开发版两种版本是相互关联相互循环

  • 稳定版具有工业级强度可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些bug或加入一些新的驱动程序。
  • 开发版由于要试验各种解决方案所以变化很快。

内核源码网址http://www.kernel.org 所有来自全世界的对Linux源码的修改最终都会汇总到这个网站由Linus领导的开源社区对其进行甄别和修改最终决定是否进入到Linux主线内核源码中。

2.2 Linux发行版本

Linux发行版 (也被叫做 GNU/Linux 发行版) 通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。

目前市面上较知名的发行版有Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
img

2.3 Linux目录结构

img

  • 根目录一般根目录下只存放目录在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”你其实是在告诉电脑先从/根目录开始再进入到home目录。
  • /bin: /usr/bin: 可执行二进制文件的目录如常用的命令ls、tar、mv、cat等。
  • /boot放置linux系统启动时用到的一些文件如Linux的内核文件/boot/vmlinuz系统引导管理器/boot/grub。
  • /dev存放linux系统下的设备文件访问该目录下某个文件相当于访问某个设备常用的是挂载光驱 mount /dev/cdrom /mnt。
  • /etc系统配置文件存放的目录不建议在此目录下存放可执行文件重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。
  • /home系统默认的用户家目录新增用户账号时用户的家目录都存放在此目录下表示当前用户的家目录edu 表示用户 edu 的家目录。
  • /lib: /usr/lib: /usr/local/lib系统使用的函数库的目录程序在执行过程中需要调用一些额外的参数时需要函数库的协助。
  • /lost+fount系统异常产生错误时会将一些遗失的片段放置于此目录下。
  • /mnt: /media光盘默认挂载点通常光盘挂载于 /mnt/cdrom 下也不一定可以选择任意位置进行挂载。
  • /opt给主机额外安装软件所摆放的目录。
  • /proc此目录的数据都在内存中如系统核心外部设备网络状态由于数据都存放于内存中所以不占用磁盘空间比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。
  • /root系统管理员root的家目录。
  • /sbin: /usr/sbin: /usr/local/sbin放置系统管理员使用的可执行命令如fdisk、shutdown、mount 等。与 /bin 不同的是这几个目录是给系统管理员 root使用的命令一般用户只能"查看"而不能设置和使用。
  • /tmp一般用户或正在执行的程序临时存放文件的目录任何人都可以访问重要数据不可放置在此目录下。
  • /srv服务启动之后需要访问的数据目录如 www 服务需要访问的网页数据存放在 /srv/www 内。
  • /usr应用程序存放目录/usr/bin 存放应用程序/usr/share 存放共享数据/usr/lib 存放不能直接运行的却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。
  • /var放置系统执行过程中经常变化的文件如随时更改的日志文件 /var/log/var/log/message所有的登录文件存放目录/var/spool/mail邮件存放的目录/var/run:程序或服务启动后其PID存放在该目录下。

2.4 用户目录

位于/home/user称之为用户工作目录或家目录,表示方式

/home/user
~

从/目录开始描述的路径为绝对路径

cd /home
ls /usr

从当前位置开始描述的路径为相对路径

cd ../../
ls abc/def

每个目录下都有**.和…**

. 表示当前目录

… 表示上一级目录即父目录

根目录下的.和…都表示当前目录

文件的颜色含义
蓝色目录
绿色可执行文件
红色压缩文件
浅蓝色链接文件
灰色其他文件

3.命令行的基本用法

3.1 命令的使用方式

linux命令格式

command  [-options]  [parameter1]

command: 命令名 [-options]选项,可用来对命令进行控制也可以省略[]代表可选 parameter1 …传给命令的参数可以是零个一个或多个

3.2 查看帮助文档

help

一般是linux命令自带的帮助信息

一般是linux命令自带的帮助信息

如ls --help

man(manual)

man是linux提供的一个手册包含了绝大部分的命令、函数使用说明

该手册分成很多章节section使用man时可以指定不同的章节来浏览。

例man ls ; man 2 printf

man中各个section意义如下

  1. Standard commands标准命令
  2. System calls系统调用如open,write
  3. Library functions库函数如printf,fopen
  4. Special devices设备文件的说明/dev下各种设备
  5. File formats文件格式如passwd
  6. Games and toys游戏和娱乐
  7. Miscellaneous杂项、惯例与协定等例如Linux档案系统、网络协定、ASCII 码environ全局变量
  8. Administrative Commands管理员命令如ifconfig

man是按照手册的章节号的顺序进行搜索的。

man设置了如下的功能键

功能键功能
空格键显示手册页的下一屏
Enter键一次滚动手册页的一行
b回滚一屏
f前滚一屏
q退出man命令
h列出所有功能键
/word搜索word字符串

3.3 tab 自动补全

在敲出命令的前几个字母的同时按下tab键系统会自动帮我们补全命令

3.4 history游览历史

当系统执行过一些命令后可按上下键翻看以前的命令history将执行过的命令列举出来

history保留了最近执行的命令记录默认可以保留1000。
历史清单从0开始编号到最大值。
常见用法

history N		显示最近N条命令
history -c		清除所有的历史记录
history -w  xxx.txt	保存历史记录到文本xxx.txt

3.5 命令行中的ctrl组合键

  • Ctrl+c 结束正在运行的程序
  • Ctrl+d 结束输入或退出shell
  • Ctrl+s 暂停屏幕输出【锁住终端】
  • Ctrl+q 恢复屏幕输出【解锁终端】
  • Ctrl+l 清屏【是字母L的小写】等同于Clear
  • 当前光标到行首ctrl+a
  • 当前光标到行尾ctrl+e
  • 删除当前光标到行首ctrl+u
  • 删除当前光标到行尾ctrl+k
  • Ctrl+y 在光标处粘贴剪切的内容
  • Ctrl+r 查找历史命令【输入关键字就能调出以前执行过的命令】
  • Ctrl+t 调换光标所在处与其之前字符位置并把光标移到下个字符
  • Ctrl+x+u 撤销操作
  • Ctrl+z 转入后台运行

4.Linux命令

4.1 文件内容查看

cat

语法

cat [-AbEnTv] 文件名

选项与参数

  • -A 相当于 -vET 的整合选项可列出一些特殊字符而不是空白而已
  • -v 列出一些看不出来的特殊字符
  • -E 将结尾的断行字节 $ 显示出来
  • -T 将 [tab] 按键以 ^I 显示出来
  • -b 列出行号空白行不标行号
  • -n 列出行号连同空白行也会有行号

tac与cat命令刚好相反文件内容从最后一行开始显示可以看出 tac 是 cat 的倒着写

nl

nl [-bnw] 文件

选项与参数

  • -b 指定行号指定的方式主要有两种
  • -b a 表示不论是否为空行也同样列出行号(类似 cat -n)
  • -b t 如果有空行空的那一行不要列出行号(默认值)
  • -n 列出行号表示的方法主要有三种
  • -n ln 行号在荧幕的最左方显示
  • -n rn 行号在自己栏位的最右方显示且不加 0
  • -n rz 行号在自己栏位的最右方显示且加 0
  • -w 行号栏位的占用的位数

more

more运行时可以输入的命令有

  • 空白键 (space)代表向下翻一页
  • Enter 代表向下翻『一行』
  • /字串 代表在这个显示的内容当中向下搜寻『字串』这个关键字
  • :f 立刻显示出档名以及目前显示的行数
  • q 代表立刻离开 more 不再显示该文件内容。
  • b 或 [ctrl]-b 代表往回翻页不过这动作只对文件有用对管线无用。

less

  • 空白键 向下翻动一页
  • [pagedown]向下翻动一页
  • [pageup] 向上翻动一页
  • /字串 向下搜寻『字串』的功能
  • ?字串 向上搜寻『字串』的功能
  • n 重复前一个搜寻 (与 / 或 ? 有关)
  • N 反向的重复前一个搜寻 (与 / 或 ? 有关)
  • q 离开 less 这个程序

head

head [-n number] 文件 

选项与参数

  • -n 后面接数字代表显示几行的意思

tail

tail取出文件后面几行

语法

tail [-n number] 文件 
1

选项与参数

  • -n 后面接数字代表显示几行的意思
  • -f 表示持续侦测后面所接的档名要等到按下[ctrl]-c才会结束tail的侦测

4.2 文件管理

输出重定向

可将本应显示在终端上的内容保存到指定文件中。

如ls > test.txt ( test.txt 如果不存在则创建存在则覆盖其内容

类型操作符用途
重定向输入<从指定文件读取数据
重定向输出>将标准输出结果保存到指定的文件并且覆盖原有文件
>>将标准输出追加到指定的文件的尾部不覆盖原有内容
标准错误输出2>将错误信息保存到指定文件并且覆盖原有文件
2>>将错误信息追加到指定文件的尾部不覆盖原有内容
混合输出&>和2>&1将标准输出标准错误保存到同—文件中

管道 |

管道一个命令的输出可以通过管道做为另一个命令的输入。

“ | ”的左右分为两端从左端写入到右端。

清屏clear

clear作用为清除终端上的显示(类似于DOS的cls清屏功能)快捷键Ctrl + l ( “l” 为字母 )。

切换工作目录 cd

  • Linux所有的目录和文件名大小写敏感

cd后面可跟绝对路径也可以跟相对路径。如果省略目录则默认切换到当前用户的主目录。

命令含义
cd相当于cd ~
cd ~切换到当前用户的主目录(/home/用户目录)
cd .切换到当前目录
cd …切换到上级目录
cd -进入上次所在的目录

显示当前路径pwd

选项与参数

  • -P 显示出确实的路径而非使用连结 (link) 路径。

创建目录mkdir

mkdir可以创建一个新的目录。

注意新建目录的名称不能与当前目录中已有的目录或文件同名并且目录创建者必须对当前目录具有写权限。

语法

mkdir [-mp] 目录名称

选项与参数

-m 指定被创建目录的权限而不是根据默认权限 (umask) 设定
-p 递归创建所需要的目录

mkdir创建的目录权限默认根据umask得到而-m参数可以指定被创建目录的权限

mkdir dirName -m 711 

删除文件rm

可通过rm删除文件或目录。使用rm命令要小心因为文件删除后不能恢复。为了防止文件误删可以在rm后使用-i参数以逐个确认要删除的文件。

常用参数及含义如下表所示

参数含义
-i以进行交互式方式执行
-f强制删除忽略不存在的文件无需提示
-r递归地删除目录下的内容删除文件夹时必须加此参数

rm -fr /* : 这个命令一定要慎用这个是从从根路径下删除所有的文件linux一切皆文件如果整个系统的文件都被删除完了那么系统都开不了机

建立链接文件ln

软链接ln -s 源文件 链接文件

硬链接ln 源文件 链接文件

软链接类似于Windows下的快捷方式如果软链接文件和源文件不在同一个目录源文件要使用绝对路径不能使用相对路径。

硬链接只能链接普通文件不能链接目录。 两个文件占用相同大小的硬盘空间即使删除了源文件链接文件还是存在所以-s选项是更常见的形式。

文本搜索grep

Linux系统中grep命令是一种强大的文本搜索工具grep允许对文本文件进行模式查找。如果找到匹配模式 grep打印包含模式的所有行。

grep常用参数

参数描述
-i忽略大小写
-c只输出匹配行的数量
-l只列出符合匹配的文件名不列出具体的匹配行
-n列出所有的匹配行显示行号
-h查询多文件时不显示文件名
-s不显示不存在、没有匹配文本的错误信息
-v显示不包含匹配文本的所有行
-w匹配整词
-x匹配整行
-r递归搜索
-q禁止输出任何结果已退出状态表示搜索是否成功
-b打印匹配行距文件头部的偏移量以字节为单位
-o与-b结合使用打印匹配的词据文件头部的偏移量以字节为单位
-F匹配固定字符串的内容
-E支持扩展的正则表达式

grep一般格式为

grep [-选项] '搜索关键词' 文件名

在grep命令中输入字符串参数时最好引号或双引号括起来。例如grep ‘a’ demo.txt。

 grep -n "bash" jenkins.sh  # 查询jenkins.sh这个文件是否有bash字符,并且显示行号

在当前目录中查找前缀有test字样的文件中包含 test 字符串的文件并打印出该字符串的行。此时可以使用如下命令

 grep sh *.sh #查询出当前目录下 以.sh结尾的文件 并且文件内容中包含有sh字符的文件

以递归的方式查找符合条件的文件。例如查找指定目录/etc/acpi 及其子目录如果存在子目录的话下所有文件中包含字符串"update"的文件并打印出该字符串所在行的内容使用的命令为

 grep -r update /etc/acpi #以递归的方式查找“etc/acpi”  

查询出某个文件中以某个字符开始

grep -n ^'#!/bin/bash' *.sh # 找出 当前目录下所有 .sh结尾的文件,开始位置为 #!/bin/bash 的文件并且显示行号 

查询多个文件

 grep 'bash' demo.sh jenkins.sh  # 查询出  jenkins.sh和 demo.sh文件中包含bash的内容

判断某个文件中是否包含某个关键词通过返回状态值输出结果0为包含1为不包含方便在Shell脚本中判断和调用

[root@compass jenkins]# grep -q 'bash' jenkins.sh 
[root@compass jenkins]# echo $?
0

grep搜索内容串可以是正则表达式常用正则表达式
image-20221222113130128

查找文件find

语法

find path -option [ -print ] [ -exec -ok command ] {} \;

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 …… {};后面可跟用于进一步处理搜索结果的命令

常用用法

命令含义
find ./ -name test.sh查找当前目录下所有名为test.sh的文件
find ./ -name ‘*.sh’查找当前目录下所有后缀为.sh的文件
find ./ -name “[A-Z]*”查找当前目录下所有以大写字母开头的文件
find /tmp -size 2M查找在/tmp 目录下等于2M的文件
find /tmp -size +2M查找在/tmp 目录下大于2M的文件
find /tmp -size -2M查找在/tmp 目录下小于2M的文件
find ./ -size +4k -size -5M查找当前目录下大于4k小于5M的文件
find ./ -perm 0777查找当前目录下权限为 777 的文件或目录

Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时不设置任何参数则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

拷贝文件cp

语法

cp [参数] 源路径 目标路径

cp命令的功能是将给出的文件或目录复制到另一个文件或目录中相当于DOS下的copy命令。

常用选项说明
选项 含义

  • -a 该选项通常在复制目录时使用它保留链接、文件属性并递归地复制目录简单而言保持文件原有属性。
  • -f 已经存在的目标文件而不提示
  • -i 交互式复制在覆盖目标文件之前将给出提示要求用户确认
  • -r 若给出的源文件是目录文件则cp将递归复制该目录下的所有子目录和文件目标文件必须为一个目录名。
  • -v 显示拷贝进度
  • -l 创建硬链接(hard link)而非复制文件本身
  • -s 复制成为符号链接 (symbolic link)相当于批量创建快捷方式
  • -u 若 destination 比 source 旧才升级 destination
  • -d 当复制符号连接时把目标文件或目录也建立为符号连接并指向与源文件或目录连接的原始文件或目录
  • -b 覆盖已存在的文件目标前将目标文件备份
  • -p 保留源文件或目录的所有属性

移动文件mv

语法

mv [参数] 源路径 目标路径|文件名

mv命令用来移动文件或目录也可以给文件或目录重命名。

常用选项说明

-i若存在同名文件则向用户询问是否覆盖
-f覆盖已有文件时不进行任何提示
-b当文件存在时覆盖前为其创建一个备份
-u当源文件比目标文件新或者目标文件不存在时才执行移动此操作

归档管理tar

tar使用格式 tar [参数] 打包文件名 文件

tar命令参数很特殊其参数前面可以使用“-”也可以不使用。

tar命令的功能是用于压缩和解压缩文件能够制作出Linux系统中常见的.tar、.tar.gz、.tar.bz2等格式的压缩包文件。对于RHEL7、CentOS7版本以后的系统解压时可以不加压缩格式参数如z或j系统能自动进行分析并解压。

把要传输的文件先进行压缩再进行传输能够很好的提高工作效率方便分享。

-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归档/压缩之后删除源文件

我常用的解压和压缩文件命令

解压用法tar -zxvf 文件名
压缩用法tar zcvf 压缩包包名 文件1 文件2 …

文件压缩解压gzip、bzip2

tar与gzip命令结合使用实现文件打包、压缩。 tar只负责打包文件但不压缩用gzip压缩tar打包后的文件其扩展名一般用xxxx.tar.gz。

gzip使用格式如下

gzip  [选项]  被压缩文件

常用参数

-a使用ASCII文字模式
-d解开压缩文件
-f强行压缩文件
-k保留原文件
-l列出压缩文件的相关信息
-c把压缩后的文件输出到标准输出设备不去更动原始文件
-r递归处理将指定目录下的所有文件及子目录一并处理
-q不显示警告信息

bzip2命令跟gzip用法类似

压缩用法tar jcvf 压缩包包名 文件…(tar jcvf bk.tar.bz2 *.c)

解压用法tar jxvf 压缩包包名 (tar jxvf bk.tar.bz2)

文件压缩解压zip、unzip

通过zip压缩文件的目标文件不需要指定扩展名默认扩展名为zip。

压缩文件zip [-r] 目标文件(没有扩展名) 源文件

解压文件unzip -d 解压后目录文件 压缩文件

查看命令位置which

4.3 权限管理

列出目录的内容ls

Linux文件或者目录名称最长可以有265个字符“.”代表当前目录“…”代表上一级目录以“.”开头的文件为隐藏文件需要用 -a 参数才能显示。

ls常用参数

-a显示所有文件及目录 (包括以“.”开头的隐藏文件)
-l使用长格式列出文件及目录的详细信息
-r将文件以相反次序显示(默认依英文字母次序)
-t根据最后的修改时间排序
-A同 -a 但不列出 “.” (当前目录) 及 “…” (父目录)
-S根据文件大小排序
-R递归列出所有子目录
-d查看目录的信息而不是里面子文件的信息
-i输出文件的inode节点信息
-m水平列出文件以逗号间隔
-X按文件扩展名排序
–color输出信息中带有着色效果

列出的信息的含义

img

ls支持通配符
通配符 含义

  • 文件代表文件名中所有字符
  • ls te* 查找以te开头的文件
  • ls html 查找结尾为html的文件
  • * 代表文件名中任意一个字符
  • s ?.c 只找第一个字符任意后缀为.c的文件
  • ls a.? 只找只有3个字符前2字符为a.最后一个字符任意的文件[] [”和“]”将字符组括起来表示可以匹配字符组中的任意一个。“-”用于表示字符范围。
  • [abc] 匹配a、b、c中的任意一个
  • [a-f] 匹配从a到f范围内的的任意一个字符
  • ls [a-f]* 找到从a到f范围内的的任意一个字符开头的文件
  • ls a-f 查找文件名为a-f的文件,当“-”处于方括号之外失去通配符的作用
  • \ 如果要使通配符作为普通字符使用可以在其前面加上转义字符。“?”和“”处于方括号内时不用使用转义字符就失去通配符的作用。
  • ls *a 查找文件名为a的文件

显示inode的内容stat

stat [文件或目录]

# stat  jenkins.sh 
  File: ‘jenkins.sh’
  Size: 516       	Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d	Inode: 4718597     Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-12-21 20:08:39.125520609 +0800
Modify: 2022-12-12 22:49:16.023253223 +0800
Change: 2022-12-12 22:49:16.025253216 +0800
 Birth: -

文件访问权限

用户能够控制一个给定的文件或目录的访问程度一个文件或目录可能有读、写及执行权限

  • 读权限r 对于文件具有读取文件内容的权限对于目录具有浏览目录的权限。
  • 写权限w 对于文件具有修改文件内容的权限对于目录具有删除、移动目录内文件的权限。
  • 可执行权限x 对于文件具有执行文件的权限对于目录该用户具有进入目录的权限。

通常Unix/Linux系统只允许文件的属主(所有者)或超级用户改变文件的读写权限。

img

第1个字母代表文件的类型

  • “d” 代表文件夹
  • “-” 代表普通文件
  • “c” 代表硬件字符设备
  • “b” 代表硬件块设备
  • “s”表示管道文件
  • “l” 代表软链接文件。

后9个字母分别代表三组权限文件所有者、用户组、其他用户拥有的权限。

修改文件权限 chmod

chmod 修改文件权限有两种使用格式字母法与数字法

chmod 修改文件权限有两种使用格式字母法与数字法。

字母法chmod u/g/o/a +/-/= rwx 文件

[ u/g/o/a ]含义
uuser 表示该文件的所有者
ggroup 表示与该文件的所有者属于同一组( group )者即用户组
oother 表示其他以外的人
aall 表示这三者皆是
[ ±= ] 含义
+增加权限
-撤销权限
=设定权限
rwx含义
rwrite 表示可写入对于一个目录如果没有w权限那么就意味着不能在目录下创建新的文件。
wread 表示可读取对于一个目录如果没有r权限那么就意味着不能通过ls查看这个目录的内容。
xexcute 表示可执行对于一个目录如果没有x权限那么就意味着不能通过cd进入这个目录。

数字法“rwx” 这些权限也可以用数字来代替

字母说明
r读取权限数字代号为 “4”
w写入权限数字代号为 “2”
x执行权限数字代号为 “1”
-不具任何权限数字代号为 “0”

如执行chmod u=rwx,g=rx,o=r filename 就等同于chmod u=7,g=5,o=4 filename

chmod 751 file

  • 文件所有者读、写、执行权限
  • 同组用户读、执行的权限
  • 其它用户执行的权限

chmod 777 file所有用户拥有读、写、执行权限

注意如果想递归所有目录加上相同权限需要加上参数“ -R ”。 如chmod 777 test/ -R 递归 test 目录下所有文件加 777 权限

修改文件所属组chgrp

常用参数

-c效果类似”-v”参数但仅回报更改的部分
-f不显示错误信息
-h对符号连接的文件作修改而不更动其他任何相关文件
-R递归处理将指定目录下的所有文件及子目录一并处理
-v显示指令执行过程
–reference把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同

改变文件的群组属性

chgrp -v groupName file

4.4 系统管理

查看当前日历cal

常用参数

-l单月分输出日历
-3显示最近三个月的日历
-s将星期天作为月的第一天
-m将星期一作为月的第一天
-j显示在当年中的第几天儒略日
-y显示当年的日历

显示或设置时间date

设置时间格式需要管理员权限

date [MMDDhhmm[[CC]YY][.ss]] +format

常用参数

-d datestr显示 datestr 中所设定的时间 (非系统时间)
-s datestr将系统时间设为 datestr 中所设定的时间
-u显示目前的格林威治时间
–help显示帮助信息
–version显示版本编号

按照“年-月-日”的指定格式输出系统当前的日期信息

 date "+%Y-%m-%d"
2022-05-11

设置当前系统为指定的日期和时间

 date -s "20221101 8:30:00" 
Sun Nov 1 08:30:00 CST 2022

查看进程信息ps

进程是一个具有一定独立功能的程序它是操作系统动态执行的基本单元。

ps命令选项

ps描述
ps a显示现行终端机下的所有程序包括其他用户的程序。
ps -A显示所有程序。
ps c列出程序时显示每个程序真正的指令名称而不包含路 径参数或常驻服务的标示。
ps -e此参数的效果和指定"A"参数相同。
ps e列出程序时显示每个程序所使用的环境变量。
ps f用ASCII字符显示树状结构表达程序间的相互关系。
ps -H显示树状结构表示程序间的相互关系。
ps -N显示所有的程序除了执行ps指令终端机下的程序之外。
ps s采用程序信号的格式显示程序状况。
ps u以用户为主的格式来显示程序状况。
ps x显示所有程序不以终端机来区分。

常用选项说明

选项含义
-a显示终端上的所有进程包括其他用户的进程
-u显示进程的详细状态
-x显示没有控制终端的进程
-w显示加宽以便显示更多的信息
-r只显示正在运行的进程

常见用法

  • ps -e 查看所有进程信息瞬时的
  • ps -u root -N 查看所有不是root运行的进程
  • ps ax 显示所有进程状态状态
  • ps -ef |grep xxx 显示含有xxx的进程

以树状图显示进程关系pstree

用参数

-a显示每个程序的完整指令包含路径参数或是常驻服务的标示
-c不使用精简标示法
-G使用VT100终端机的列绘图字符
-h列出树状图时特别标明现在执行的程序

动态显示进程top

top命令用来动态显示运行中的进程。top命令能够在运行后在指定的时间间隔更新显示信息。-d参数可以指定显示信息更新的时间间隔。

在top命令执行后可以按下按键得到对显示的结果进行排序

按键含义
M根据内存使用量来排序
P根据CPU占有率来排序
T根据进程运行时间的长短来排序
U可以根据后面输入的用户名来筛选进程
K可以根据后面输入的PID来杀死进程。
q退出
h获得帮助

终止进程kill

kill命令指定进程号的进程需要配合 ps 使用。

使用格式skill [选项] 进程id

信号值从0到15其中9为绝对终止可以处理一般信号无法终止的进程。

常用参数

v详细输出/ 列出所选择程序的资讯
-n没有动作/ 显示程序代号
-t终端机代号
-u使用者名称
-w智能警告讯息/ 尚未完成

停止三个使用者 user1、user2、user3

skill -STOP user1 user2 user3

冻结16514号进程

skill -STOP 16514

冻结oracle进程:

skill -STOP oracle

唤醒进程

 skill -CONT 16514 

关机重启reboot、shutdown、init

命令含义
reboot重新启动操作系统
shutdown –r now重新启动操作系统shutdown会给别的用户提示
shutdown -h now立刻关机其中now相当于时间为0的状态
shutdown -h 20:25系统在今天的20:25 会关机
shutdown -h +10系统再过十分钟后自动关机
init 0关机
init 6重启

检测磁盘空间df

df命令用于检测文件系统的磁盘空间占用和空余情况可以显示所有文件系统对节点和磁盘块的使用情况。

选项含义
-a显示所有文件系统的磁盘使用情况
-m以1024字节为单位显示
-t显示各指定文件系统的磁盘空间使用情况
-T显示文件系统
文件系统       类型      容量  已用  可用 已用% 挂载点
udev           devtmpfs  2.0G     0  2.0G    0% /dev
tmpfs          tmpfs     394M  6.4M  388M    2% /run
/dev/sda1      ext4       21G  8.7G   11G   45% /
tmpfs          tmpfs     2.0G  256K  2.0G    1% /dev/shm
tmpfs          tmpfs     5.0M  4.0K  5.0M    1% /run/lock
tmpfs          tmpfs     2.0G     0  2.0G    0% /sys/fs/cgroup
tmpfs          tmpfs     394M   44K  394M    1% /run/user/1000

检测目录所占磁盘空间du

du命令用于统计目录或文件所占磁盘空间的大小该命令的执行结果与df类似du更侧重于磁盘的使用状况。

du命令的使用格式如下 du [选项] 目录或文件名

选项含义
-a递归显示指定目录中各文件和子目录中文件占用的数据块
-s显示指定文件或目录占用的数据块
-b以字节为单位显示磁盘占用情况
-l计算所有文件大小对硬链接文件计算多次

查看或配置网卡信息ifconfig

ifconfig显示所有网卡的信息

[root@compass jenkins]# ifconfig 
ens33     Link encap:以太网  硬件地址 00:0c:29:59:65:f2  
          inet 地址:192.168.40.11  广播:192.168.40.255  掩码:255.255.255.0
          inet6 地址: fe80::432f:6c4a:f47d:5f6b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:422794 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:208666 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000 
          接收字节:603741383 (603.7 MB)  发送字节:12819550 (12.8 MB)

lo        Link encap:本地环回  
          inet 地址:127.0.0.1  掩码:255.0.0.0
          inet6 地址: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  跃点数:1
          接收数据包:2248 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:2248 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1 
          接收字节:497588 (497.5 KB)  发送字节:497588 (497.5 KB)

修改ip:

sudo ifconfig ens33 192.168.40.10

测试远程主机连通性ping

4.5 用户和用户组管理

查看登录用户who

who命令用于查看当前所有登录系统的用户信息。

常用选项

选项含义
-m或am I只显示运行who命令的用户名、登录终端和登录时间
-q或–count只显示用户的登录账号和登录用户的数量
-u在登录时间后显示该用户最后一次操作到当前的时间间隔
-u或–heading显示列标题

退出登录账户 exit

如果是图形界面退出当前终端

如果是使用ssh远程登录退出登陆账户

如果是切换后的登陆用户退出则返回上一个登陆账号。

添加用户账号useradd

在Unix/Linux中添加用户账号可以使用adduser或useradd命令因为adduser命令是指向useradd命令的一个链接因此这两个命令的使用格式完全一样。

useradd命令的使用格式如下 useradd [参数] 新建用户账号

参数含义
-d指定用户登录系统时的主目录
-m自动建立目录未指定-d参数时会在/home/{当前用户}目录下建立主目录
-g指定组名称

相关说明

Linux每个用户都要有一个主目录主目录就是第一次登陆系统用户的默认当前目录(/home/用户)
每一个用户必须有一个主目录所以用useradd创建用户的时候一定给用户指定一个主目录
如果创建用户的时候不指定组名那么系统会自动创建一个和用户名一样的组名。

若创建用户时未指定家目录后期可通过usermod -d /home/abc abc指定

命令含义
useradd -d /home/abc username -m创建username用户如果/home/abc目录不存在就自动创建这个目录同时用户属于username组
useradd -d /home/a username-g test -m创建一个用户名字叫username主目录在/home/a如果主目录不存在就自动创建主目录同时用户属于username组
cat /etc/passwd查看系统当前用户名

修改用户usermod

**语法格式**usermod [参数] 用户名

常用参数

-c<备注>修改用户账号的备注文字
-d<登入目录>修改用户登入时的家目录
-e<有效期限>修改账号的有效期限
-f<缓冲天数>修改在密码过期后多少天即关闭该账号
-g<群组>修改用户所属的群组
-G<群组>修改用户所属的附加群组
-l<账号名称>修改用户账号名称
-L锁定用户密码使密码无效
-s修改用户登入后所使用的shell
-u修改用户ID
-U解除密码锁定

​ 设置用户密码passwd

passwd命令来自于英文单词password的缩写其功能适用于修改用户的密码值。同时也可以对用户进行锁定等操作但需要管理员身份才可以执行。

**常用格式**passwd [参数] 用户名

常用参数

-d删除已有密码
-l锁定用户的密码值不允许修改
-u解锁用户的密码值允许修改
-e下次登陆强制修改密码
-k用户在期满后能仍能使用
-S查询密码状态

删除用户userdel

userdel命令来自于英文词组“user delete”的缩写其功能是删除用户账户。Linux系统中一切都是文件用户信息被保存到了/etc/passwd、/etc/shadow以及/etc/group文件中因此使用userdel命令实际就是帮助我们删除了指定用户在上述三个文件中的对应信息。

**语法格式**userdel [参数] 用户名

常用参数

-f强制删除用户账号
-r删除用户主目录及其中的任何文件
-h显示命令的帮助信息

切换用户su

su后面可以加“-”会将当前的工作目录自动转换到切换后的用户主目录.

命令含义
su切换到root用户
su root切换到root用户
su -切换到root用户同时切换目录到/root
su - root切换到root用户同时切换目录到/root
su普通用户 切换到普通用户
su -普通用户 切换到普通用户同时切换普通用户所在的目录

常用参数

单个减号-完全身份变更
-c执行完指定的指令后即恢复原来的身份
-f适用于csh与tsch使shell不用去读取启动文件
-l改变身份时也同时变更工作目录
-m变更身份时不要变更环境变量
-s指定要执行的shell
–help显示帮助信息
–version显示版本信息

以root身份执行指令sudo

sudo命令可以临时获取root权限

使用权限在 /etc/sudoers 中有出现的使用者。

显示出自己执行 sudo 的使用者的权限

sudo -l
以root权限执行上一条命令
sudo !!

sudoers文件配置语法

user MACHINE=COMMANDS
用户 登录的主机=可以变换的身份 可以执行的命令

例子

允许root用户执行任意路径下的任意命令 
root    ALL=(ALL)       ALL
允许wheel用户组中的用户执行所有命令  
%wheel        ALL=(ALL)       ALL
允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
%wheel        ALL=(ALL)       NOPASSWD: ALL
允许support用户在EPG的机器上不输入密码的情况下使用SQUID中的命令
Cmnd_Alias   SQUID = /opt/vtbin/squid_refresh, /sbin/service, /bin/rm
Host_Alias   EPG = 192.168.1.1, 192.168.1.2
support EPG=(ALL) NOPASSWD: SQUID

添加组groupadd

groupadd命令来自于英文词组“group add”其功能是用于创建新的用户组。每个用户在创建时都有一个与其同名的基本组后期可以使用groupadd命令创建出新的用户组信息让多个用户加入到指定的扩展组中为后续的工作提供了良好的文档共享环境。

**语法格式**groupadd [参数] 用户组

常用参数

-g指定新建工作组的id
-r创建系统工作组
-K覆盖配置文件“/ect/login.defs”
-o允许添加组ID号不唯一的工作组

参考实例

创建一个新的用户组

[root@linuxcool ~]# groupadd linuxcool

删除组账号groupdel

groupdel命令用于删除指定的工作组本命令要修改的系统文件包括/ect/group和/ect/gshadow。

userdel修改系统账户文件删除与 GROUP 相关的所有项目。给出的组名必须存在。若该群组中仍包括某些用户则必须先删除这些用户后方能删除群组。

语法格式groupdel [参数] [群组名称]

常用参数

-h显示帮助信息
-R在chroot_dir目录中应用更改并使用chroot_dir目录中的配置文件

参考实例

使用groupdel命令删除linuxcool工作组

[root@linuxcool ~]# groupdel linuxcool

4.6 磁盘管理

Linux磁盘管理常用三个命令为df、du和fdisk。

  • df列出文件系统的整体磁盘使用量
  • du检查磁盘空间使用量
  • fdisk用于磁盘分区

df查看磁盘空间

df命令来自于英文词组”Disk Free“的缩写其功能是用于显示系统上磁盘空间的使用量情况。df命令显示的磁盘使用量情况含可用、已有及使用率等信息默认单位为Kb建议使用-h参数进行单位换算毕竟135M比138240Kb更利于阅读对吧~

语法格式 df [参数] [对象磁盘/分区]

常用参数

-a显示所有系统文件
-B <块大小>指定显示时的块大小
-h以容易阅读的方式显示
-H以1000字节为换算单位来显示
-i显示索引字节信息
-k指定块大小为1KB
-l只显示本地文件系统
-t <文件系统类型>只显示指定类型的文件系统
-T输出时显示文件系统类型
– -sync在取得磁盘使用信息前先执行sync命令

du查看文件大小

du命令来自于英文词组“Disk Usage”的缩写其功能是用于查看文件或目录的大小。人们经常会把df和du命令混淆df是用于查看磁盘或分区使用情况的命令而du命令则是用于按照指定容量单位来查看文件或目录在磁盘中的占用情况。

**语法格式**du [参数] 文件

常用参数

-a显示目录中所有文件大小
-k以KB为单位显示文件大小
-m以MB为单位显示文件大小
-g以GB为单位显示文件大小
-h以易读方式显示文件大小
-s仅显示总计
root@www ~]# fdisk /dev/hdc  <==不要加上数字
The number of cylinders for this disk is set to 5005.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):     <==等待你的输入



输入 m 后就会看到底下这些命令介绍



Command (m for help): m   <== 输入 m 后就会看到底下这些命令介绍
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition            <==删除一个partition
   l   list known partition types
   m   print this menu
   n   add a new partition           <==新增一个partition
   o   create a new empty DOS partition table
   p   print the partition table     <==在屏幕上显示分割表
   q   quit without saving changes   <==不储存离开fdisk程序
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit  <==将刚刚的动作写入分割表
   x   extra functionality (experts only)

离开 fdisk 时按下 q那么所有的动作都不会生效相反的 按下w就是动作生效的意思。



Command (m for help): p  <== 这里可以输出目前磁盘的状态

Disk /dev/hdc: 41.1 GB, 41174138880 bytes        <==这个磁盘的文件名与容量
255 heads, 63 sectors/track, 5005 cylinders      <==磁头、扇区与磁柱大小
Units = cylinders of 16065 * 512 = 8225280 bytes <==每个磁柱的大小

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1   *           1          13      104391   83  Linux
/dev/hdc2              14        1288    10241437+  83  Linux
/dev/hdc3            1289        1925     5116702+  83  Linux
/dev/hdc4            1926        5005    24740100    5  Extended
/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris
# 装置文件名 启动区否 开始磁柱    结束磁柱  1K大小容量 磁盘分区槽内的系统

Command (m for help): q

使用 p 可以列出目前这颗磁盘的分割表信息这个信息的上半部在显示整体磁盘的状态。

mkfs 磁盘格式化

kfs命令来自于英文词组“make file system”的缩写其功能是用于对设备进行格式化文件系统操作。在挂载使用硬盘空间前的最后一步运维人员需要对整块硬盘或指定分区进行格式化文件系统操作Linux系统支持的文件系统包含ext2、ext3、ext4、xfs、fat、msdos、vfat、minix等多种格式。

语法格式 mkfs [参数] 设备名

常用参数

-V详细显示模式
-t给定档案系统的型式
-c检查该设备是否有损坏

参考实例

对指定的硬盘进行格式化文件系统操作

[root@linuxcool ~]# mkfs -t ext4 /dev/sdb

fsck 磁盘检验

fsckfile system check用来检查和维护不一致的文件系统。

若系统掉电或磁盘发生问题可利用fsck命令对文件系统进行检查。

**语法格式**fsck [参数] 文件系统

常用参数

-a自动修复文件系统
-f强制检查
-A依照/etc/fstab文件来检查全部文件系统
-N不执行指令仅列出实际执行会进行的动作
-r采用互动模式在执行修复时询问问题
-R略过指定的文件系统不予检查
-t指定要检查的文件系统类型
-T执行fsck指令时不显示标题信息
-V显示指令执行过程

参考实例

检查是否的文件系统是否有损坏

[root@linuxcool ~]# fsck /dev/sdb

mount磁盘挂载

磁盘挂载语法

mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n]  装置文件名  挂载点

用默认的方式将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面

常用参数

-t指定挂载类型
-l显示已加载的文件系统列表
-h显示帮助信息并退出
-V显示程序版本
-n加载没有写入文件“/etc/mtab”中的文件系统
-r将文件系统加载为只读模式
-a加载文件“/etc/fstab”中描述的所有文件系统

umount磁盘卸载

磁盘卸载命令 umount 语法

语法格式umount [参数] [设备/挂载目录]

常用参数

-a卸载/etc/mtab中记录的所有文件系统
-h显示帮助
-n卸载时不要将信息存入/etc/mtab文件中
-r尝试以只读的方式重新挂入文件系统
-t仅卸载选项中所指定的文件系统
-v执行时显示详细的信息
-V显示版本信息

4.7 linux 管道命令

cut 列选取命令

cut命令的功能是用于按列提取文件内容。常用的grep命令仅能对关键词进行按行提取过滤而cut命令则是可以根据指定的关键词信息针对特定的列内容进行过滤。

**语法格式**cut [参数] 文件

常用参数

-c以字符为单位进行分割
-b以字节为单位进行分割
-d自定义分隔符默认为制表符”TAB”
-f显示指定字段的内容
-n取消分割多字节字符
–complement补足被选择的字节、字符或字段
–out-delimiter指定输出内容是的字段分割符

参考实例

以冒号为间隔符仅提取指定文件中第一列的内容

[root@linuxcool ~]# cut -d : -f 1 /etc/passwd

案例

cut -d '分隔字符' -f 选取的列数
echo $PATH|cut -d ':' -f 2  	--选取第2列
echo $PATH|cut -d ':' -f 3,5  	--选取第3列和第5列
echo $PATH|cut -d ':' -f 3-5  	--选取第3列到第5列
echo $PATH|cut -d ':' -f 3-   	--选取第3列到最后1列
echo $PATH|cut -d ':' -f 1-3,5	--选取第1到第3列还有第5列

wc 统计文件字节数

wc命令来自于英文词组“Word count”的缩写其功能是用于统计文件的字节数、单词数、行数等信息并将统计结果输出到终端界面。利用wc命令可以很快的计算出准确的单词数及行数评估出文本的内容长度要想了解一个文件不妨先wc一下吧~

**语法格式**wc [参数] 文件

常用参数

-w统计单词数
-c统计字节数
-l统计行数
-m统计字符数
-L显示最长行的长度
–help显示帮助信息
–version显示版本信息

参考实例

统计指定文件的单词数量

[root@linuxcool ~]# wc -w anaconda-ks.cfg 
117 anaconda-ks.cfg

sort 对文件内容排序

sort命令的功能是对文件内容进行排序。有时文本中的内容顺序不正确一行行地手动修改实在太麻烦了。此时使用sort命令就再合适不过了它能够对文本内容进行再次排序。

**语法格式**sort [参数] 文件

常用参数

-b忽略每行前面开始出的空格字符
-c检查文件是否已经按照顺序排序
-d除字母、数字及空格字符外忽略其他字符
-f将小写字母视为大写字母
-i除040至176之间的ASCII字符外忽略其他字符
-m将几个排序号的文件进行合并
-M将前面3个字母依照月份的缩写进行排序
-n依照数值的大小排序
-o <输出文件>将排序后的结果存入制定的文件
-r以相反的顺序来排序
-t <分隔字符>指定排序时所用的栏位分隔字符
-k指定需要排序的栏位

参考实例

对指定的文件内容按照字母顺序进行排序

sort fruit.txt 

对指定的文件内容按照数字大小进行排序

sort -n number.txt 

uniq : 对文件内容去重

uniq命令来自于英文单词unique的缩写中文译为独特的、唯一的其功能是用于去除文件中的重复内容行。uniq命令能够去除掉文件中相邻的重复内容行如果两端相同内容中间夹杂了其他文本行则需要先使用sort命令进行排序后再去重复这样保留下来的内容就都是唯一的了

**语法格式**uniq [参数] 文件

常用参数

-c打印每行在文本中重复出现的次数
-d每个重复纪录只出现一次
-u只显示没有重复的纪录

参考实例

对指定的文件进行去重操作

uniq testfile 

统计相同内容行在文件中重复出现的次数

uniq -c testfile 

tee : 将用户输入写入到文件

tee命令的功能是用于读取标准输入的数据将其内容转交到标准输出设备中同时保存成文件。

**语法格式**tee [参数] 文件

常用参数

-a追加写入操作
-i忽略中断信号
— help查看帮助信息
— version显示版本信息

参考实例

将用户输入的数据同时写入到两个文件中

tee file1 file2

tr : 符替换

tr命令来自于英文单词transform的缩写中文译为转换其功能是用于字符转换。tr命令是一款批量字符转换、压缩、删除的文本工具但仅能从标准输入中读取文本内容需要与管道符或输入重定向操作符搭配使用。

**语法格式**tr [参数] 字符串1 字符串2

常用参数

-c反选字符串1的补集取反
-d删除字符串1中出现的所有字符
-s删除所有重复出现的字符序列

参考示例

将指定文件中的小写字母转换成大写字母后输出内容到终端界面

[root@linuxcool ~]# tr [a-z] [A-Z] < anaconda-ks.cfg 
#VERSION=RHEL8
IGNOREDISK --ONLY-USE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --ALL --INITLABEL --DRIVES=SDA
# USE GRAPHICAL INSTALL
………………省略部分输出信息………………

删除指定文件中所有的数字后输出内容到终端界面

[root@linuxcool ~]# tr -d [0-9] < anaconda-ks.cfg
#version=RHEL
ignoredisk --only-use=sda
autopart --type=lvm
# Partition clearing information
clearpart --all --initlabel --drives=sda
# Use graphical install
………………省略部分输出信息………………

将指定文件中的多个相邻空行去重后输出内容到终端界面

[root@linuxcool ~]# tr -s "[\n]" < anaconda-ks.cfg 
#version=RHEL8
ignoredisk --only-use=sda
autopart --type=lvm
# Partition clearing information
clearpart --all --initlabel --drives=sda
# Use graphical install

join文件按行连接

join的连接操作简言之就是将两个具有相同域的纪录给挑选出来再将这些纪录所有的域放到一行。

注意join在对两个文件进行连接时两个文件必须都是按照连接域排好序的按其他域排序是无效的。

**语法格式**join [参数] [文件1] [文件2]

常用参数

-a1或-a2除了显示共同域的纪录之外-a1显示第一个文件没有共同域的纪录-a2显示第二个文件中没有共同域的纪录
-i忽略大小写
-o设置结果显示的格式
-t改变域的分隔符
-v1或-v2不显示共同域的纪录之外-v1显示第一个文件没有共同域的纪录-v2显示第二个文件中没有共同域的纪录
-1或-2-1用来设置文件1连接的域-2用来设置文件2连接的域

参考实例

将两个文件的具有共同域的纪录连接在一起

[root@linuxcool ~]# cat file.db 
 A li:20:men:anhui
 B wang:21:women:jiangsu
 C zhang:22:men:anhui
 D liu:23:women:Shanghai
 E chen:23:women:Hefei
[root@linuxcool ~]# cat file_hobby.db 
 A li:Song
 B wang:shopping
 C zhang:pingpong
 D liu:chess
 E Wang:reading
[root@linuxcool ~]# join -t: file.db file_hobby.db 
 A li:20:men:anhui:Song
 B wang:21:women:jiangsu:shopping
 C zhang:22:men:anhui:pingpong
 D liu:23:women:Shanghai:chess

-a1还显示第一个文件中没有共同域的纪录-a2则显示第二个

[root@linuxcool ~]# join -t: -a1 file.db file_hobby.db
 A li:20:men:anhui:Song
 B wang:21:women:jiangsu:shopping
 C zhang:22:men:anhui:pingpong
 D liu:23:women:Shanghai:chess
 E chen:23:women:Hefei
[root@linuxcool ~]# join -t: -a2 file.db file_hobby.db
 A li:20:men:anhui:Song
 B wang:21:women:jiangsu:shopping
 C zhang:22:men:anhui:pingpong
 D liu:23:women:Shanghai:chess
 E Wang:reading

设置指定格式的域来显示出来将具有共同纪录的域按照姓名+性别+爱好的格式显示出来

[root@linuxcool ~]# join -t: -o1.1 1.3 2.2 file.db file_hobby.db 
 A li:men:Song
 B wang:women:shopping
 C zhang:men:pingpong
 D liu:women:chess

paste : 文件合并

paste命令会把每个文件以列对列的方式一列列地加以合并 他就是相当于把两个不同的文件内容粘贴在一起形成新的文件。

注意paste默认粘贴方式以列的方式粘贴但是并不是不能以行的方式粘贴加上-s选项就可以行方式粘贴。

语法格式 paste [参数] [文件1] [文件2]

常用参数

-d默认域的分隔符是空格或tab键设置新的域分隔符
-s将每个文件粘贴成一行
从标准输入中读取数据

参考实例

将file_2和file_2粘贴成一个新的文件

[root@linuxcool ~]# cat file_1
 aaa 
 bbb
 ccc
 ddd
 eee
[root@linuxcool ~]# cat file_2
 AAA
 BBB
 CCC
 DDD
 EEE
[root@linuxcool ~]# paste file_1 file_2
 aaa     AAA
 bbb    BBB
 ccc    CCC
 ddd    DDD
 eee    EEE

设置域分隔符为粘贴成新的文件

[root@linuxcool ~]# paste -d: file_1 file_2
 aaa:AAA
 bbb:BBB
 ccc:CCC
 ddd:DDD
 eee:EEE

将每个文件粘贴成一行

[root@linuxcool ~]# cat file_1
 aaa
 bbb
 ccc
 ddd
 eee
[root@linuxcool ~]# cat file_2
 AAA
 BBB
 CCC
 DDD
 EEE
[root@linuxcool ~]# paste -d: -s file_1 file_2
 aaa:bbb:ccc:ddd:eee
 AAA:BBB:CCC:DDD:EEE

split : 文件分割

split命令可以将大文件分割成较小的文件在默认情况下将按照每1000行切割成一个小文件 。

**语法格式**split [参数] [切割文件] [文件名]

常用参数

-b指定每多少字节切成一个小文件
–help查看帮助信息
–version显示版本信息
-C与参数”-b”相似但是在切 割时将尽量维持每行的完整性

参考实例

将文件”README”每6行切割成一个文件

[root@linuxcool ~]# split -6 README 

xargs : 参数代换

xargs命令来自于英文词组” extended arguments“的缩写其功能是用于给其他命令传参数的过滤器。xargs命令能够处理从标准输入或管道符输入的数据并将其转换成命令参数也可以将单行或多行输入的文本转换成其他格式。

xargs命令默认接收的信息中空格是默认定界符所以可以接收包含换行和空白的内容。

语法格式 xargs [参数]

常用参数

-n多行输出
-d自定义一个定界符
-I指定一个替换字符串{}
-t打印出 xargs 执行的命令
-p执行每一个命令时弹出确认

参考实例

默认以空格为定界符以多行形式输出文件内容每行显示三段内容值

[root@linuxcool ~]# cat anaconda-ks.cfg | xargs -n 3
#version=RHEL8 ignoredisk --only-use=sda
autopart --type=lvm #
Partition clearing information
clearpart --all --initlabel
--drives=sda # Use
graphical install graphical
………………省略部分输出信息………………

指定字符X为定界符默认以单行的形式输出字符串内容

[root@linuxcool ~]# echo "FirstXSecondXThirdXFourthXFifth" | xargs -dX
First Second Third Fourth Fifth

指定字符X为定界符以多行形式输出文本内容每行显示两段内容值

[root@linuxcool ~]# echo "FirstXSecondXThirdXFourthXFifth" | xargs -dX -n 2
First Second
Third Fourth
Fifth

设定每一次输出信息时都需要用户手动确认后再显示到终端界面

[root@linuxprobe ~]# echo "FirstXSecondXThirdXFourthXFifth" | xargs -dX -n 2 -p
echo First Second ?...y
First Second
echo Third Fourth ?...y
Third Fourth
echo Fifth
 ?...y
Fifth

由xargs调用执行执行的命令并将结果输出到终端界面

[root@linuxcool ~]# ls | xargs -t -I{} echo {}
echo anaconda-ks.cfg 
anaconda-ks.cfg
echo Desktop 
Desktop
echo Documents 
Documents
echo Downloads 
Downloads
echo initial-setup-ks.cfg 
initial-setup-ks.cfg
echo Music 
Music
echo Pictures 
Pictures
echo Public 
Public
echo Templates 
Templates
echo Videos 
Videos

5.软件安装

5.1 yum安装

5.1.1 更新国内yum源

yum Yellow dog Updater, Modified是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。

基於RPM包管理能够从指定的服务器自动下载RPM包并且安装可以自动处理依赖性关系并且一次安装所有依赖的软体包无须繁琐地一次次下载、安装。

yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令而且命令简洁而又好记。
更新国内yum源

网易163yum源是国内最好的yum源之一 无论是速度还是软件版本都非常的不错。

将yum源设置为163 yum可以提升软件包安装和更新的速度同时避免一些常见软件版本无法找到。

首先备份/etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下载对应版本 repo 文件, 放入 /etc/yum.repos.d/

CentOS5 http://mirrors.163.com/.help/CentOS5-Base-163.repo
CentOS6 http://mirrors.163.com/.help/CentOS6-Base-163.repo
CentOS7 http://mirrors.163.com/.help/CentOS7-Base-163.repo

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
mv CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo

运行以下命令生成缓存

yum clean all
yum makecache

除了网易之外国内还有其他不错的 yum 源比如中科大和搜狐。

中科大的 yum 源安装方法查看https://lug.ustc.edu.cn/wiki/mirrors/help/centos

sohu 的 yum 源安装方法查看: http://mirrors.sohu.com/help/centos.html

5.1.2 yum常用命令

yum 语法 yum [options] [command] [package …]

选项

options 可选选项包括-h帮助-y当安装过程提示选择全部为"yes"-q不显示安装的过程等等。
command 要进行的操作。
package 操作的对象。

实例

  • 列出所有可更新的软件清单命令yum check-update
  • 更新所有软件命令yum update
  • 仅安装指定的软件命令yum install <package_name>
  • 仅更新指定的软件命令yum update <package_name>
  • 显示包信息yum info <package_name>
  • 列出所有可安裝的软件清单命令yum list
  • 删除软件包命令yum remove <package_name>
  • 查找软件包 命令yum search
  • 清除缓存命令:
    • yum clean packages: 清除缓存目录下的软件包
    • yum clean headers: 清除缓存目录下的 headers
    • yum clean oldheaders: 清除缓存目录下旧的 headers
    • yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers

5.1.3 yum在线安装MySQL5.7

Step1: 检测系统是否自带安装mysql

yum list installed | grep mysql

Step2: 删除系统自带的mysql及其依赖

yum -y remove mysql-libs.x86_64

Step3: 给CentOS添加rpm源并且选择较新的源

wget dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
yum localinstall mysql-community-release-el7-5.noarch.rpm
yum repolist all | grep mysql
yum-config-manager --disable mysql55-community
yum-config-manager --disable mysql56-community
yum-config-manager --enable mysql57-community-dmr
yum repolist enabled | grep mysql

Step4:安装mysql 服务器

yum install mysql-community-server

Step5: 启动mysql

service mysqld start

grep “password” /var/log/mysqld.log(查看临时密码)

SET PASSWORD = PASSWORD('your new password');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
flush privileges;

默认的要求必须的设置格式
包含数字、小写或大写字母以及特殊字符

默认的要求必须的设置格式
包含数字、小写或大写字母以及特殊字符

如果不想复杂可以使用以下方式

set global validate_password_policy=0;
set global validate_password_length=1;

Step6: 查看mysql是否自启动,并且设置开启自启动

chkconfig --list | grep mysqld

chkconfig mysqld on

Step7: mysql安全设置

mysql_secure_installation

5.2 npm安装

RPM是Red Hat公司随Redhat Linux推出了一个软件包管理器通过它能够更加轻松容易地实现软件的安装。

常见用法

rpm -ivh <rpm包名> 安装软件
rpm -e <rpm包名> 卸载安装
rpm -qi <rpm包名> 显示软件安装信息
rpm -qa | grep xxx 查询软件是否安装包括相关依赖
rpm -Uvh <rpm包名> 升级一个rpm

具体参数详解

  • -i, --install 安装包
  • -v, --verbose 列出更多详细信息安装进度
  • -h, --hash 安装时列出hash标记 (与 -v连用)
  • -e, --erase 卸载安装包
  • -U, --upgrade=+ 升级包
  • –replacepkge 无论软件包是否已被安装都强行安装软件包
  • –test 安装测试并不实际安装
  • –nodeps 忽略软件包的依赖关系强行安装
  • –force 忽略软件包及文件的冲突
  • -q,–query:
  • -a, --all 查询/校验所有的安装包
  • -p, --package 查询/校验一个安装文件
  • -l, --list 列出安装文件
  • -d, --docfiles 列出所有文档文件
  • -f, --file 查询/校验安装包中所包含的文件

安装软件

rpm -hvi dejagnu-1.4.2-10.noarch.rpm

警告dejagnu-1.4.2-10.noarch.rpm: V3 DSA 签名NOKEY, key ID db42a60e
准备…
########################################### [100%]

显示软件安装信息rpm -qi dejagnu-1.4.2-10.noarch.rpm

6.vim编辑器

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富在程序员中被广泛使用。vim 的官方网站 (http://www.vim.org)

img

基本上vi可以分为三种状态

img

命令模式:

用户刚刚启动 vi/vim便进入了命令模式。 任何时候不管用户处于何种模式只要按一下ESC键即可使Vi进入命令模式
此状态下敲击键盘动作会被Vim识别为命令输入: 可切换到底线命令模式以在最底一行输入命令。
若想要编辑文本启动Vim进入了命令模式按下i切换到输入模式。

输入模式:

在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下用户输入的任何字符都被Vi当做文件内容保存起来并将其显示在屏幕上。在文本输入过程中若想回到命令模式下按键ESC即可。

底行模式:

在命令模式下按下:英文冒号就进入了底行命令模式。
底线命令模式可以输入单个或多个字符的命令可用的命令非常多。

从command mode进入Insert mode

  • 按i在当前位置编辑
  • 按a在当前位置的下一个字符编辑
  • 按o插入新行从行首开始编辑
  • 按R(Replace mode)R会一直取代光标所在的文字直到按下 ESC为止(常用)

按ESC键退回command mode

h←j↓k↑l→前面加数字移动指定的行数或字符数
1、翻页bu上下整页ud上下半页

ctrl+b上移一页。
ctrl+f下移一页。
ctrl+u上移半页。
ctrl+d下移半页。

2、行定位

7gg或7G定位第7行首字符。(可能只在Vim中有效)
G移动到文章的最后。
7H:当前屏幕的第7行行首
M当前屏幕中间行的行首
7L:当前屏幕的倒数第7行行首

3、定位当前行

$移动到光标所在行的“行尾”。
0或^移动到光标所在行的“行首”
w光标跳到下个单词的开头
e光标跳到下个单词的字尾
b光标回到上个单词的开头

4.编辑

$移动到光标所在行的“行尾”。
0或^移动到光标所在行的“行首”
w光标跳到下个单词的开头
e光标跳到下个单词的字尾
b光标回到上个单词的开头

6.1 命令模式

移动光标:

移动光标的方法操作
h或 向左箭头键(←) 光标向左移动一个字符
j或 向下箭头键(↓) 光标向下移动一个字符
k或 向上箭头键(↑) 光标向上移动一个字符
l或 向右箭头键(→) 光标向右移动一个字符
向下移动 30 行可以使用 “30j” 或 “30↓” 的组合按键
[Ctrl] + [f]屏幕『向下』移动一页相当于 [Page Down]按键 (常用)
[Ctrl] + [b]屏幕『向上』移动一页相当于 [Page Up] 按键 (常用)
[Ctrl] + [d]屏幕『向下』移动半页
[Ctrl] + [u]屏幕『向上』移动半页
+光标移动到非空格符的下一行
-光标移动到非空格符的上一行
n表示空格光标向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
0或功能键[Home] 这是数字『 0 』移动到这一行的最前面字符处 (常用)
$或功能键[End] 移动到这一行的最后面字符处(常用)
H光标移动到这个屏幕的最上方那一行的第一个字符
M光标移动到这个屏幕的中央那一行的第一个字符
L光标移动到这个屏幕的最下方那一行的第一个字符
G移动到这个文档的最后一行(常用)
nGn 为数字。移动到这个文件的第 n 行。例如 20G 则会移动到这个文件的第 20 行(可配合 :set nu)
gg移动到这个文档的第一行相当于 1G
nn 为数字。光标向下移动 n 行(常用)

删除操作

删除操作删除后会添加到剪切板相当于剪切
x, Xx为向后删除一个字符 (相当于 [del] 按键) X为向前删除一个字符(相当于 [backspace] )
nx n为数字连续向后删除 n 个字符。例如10x表示连续删除 10 个字符。
dd删除光标所在的一整行(常用)
nddn 为数字。删除光标所在的向下 n 行例如 20dd 则是删除 20 行
d1G删除光标所在行到首行的所有数据
dG删除光标所在行到最后一行的所有数据
d$删除光标所在位置到该行的最后一个字符
d0删除光标所在位置到该行的最前面一个字符

撤销&复原&重复

撤销&复原
u撤销操作相对于普通编辑器里面的ctrl+z
Ctrl+r恢复操作相对于普通编辑器里面的ctrl+y
.就是小数点可重复前一个动作

复制&粘贴

操作解释
yy复制光标所在行
nyyn 为数字。复制光标所在的向下 n 行例如 20yy 则是复制 20 行
y1G复制光标所在行到第一行的所有数据
yG复制光标所在行到最后一行的所有数据
y0复制光标所在的那个字符到该行行首的所有数据
y$复制光标所在的那个字符到该行行尾的所有数据
p, Pp 为将已复制的数据在光标下一行贴上P 则为贴在光标上一行

合成行

  • J: 将光标所在行与下一行的数据结合成同一行

搜索

操作解释
/word向光标之下寻找一个名称为 word 的字符串。
?word向光标之上寻找一个字符串名称为 word 的字符串。
n代表重复前一个搜寻的动作根据前面输入的/word还是?word向下或向上搜索下一个匹配的字符串。
N表示反向搜索与n的搜索方向相反。

替换

操作解释
:n1,n2s/word1/word2/g在第 n1 与 n2 行之间寻找word1并替换为word2比如『:100,200s/vbird/VBIRD/g』表示在100到200行之间将vbird替换为VBIRD
:1,$s/word1/word2/g 或 :%s/word1/word2/g$表示最后一行%s表示所有行。
:1,$s/word1/word2/gc 或 :%s/word1/word2/gcgc中的c表示取代前显示提示字符给用户确认 (confirm)

6.2 输入模式

进入输入模式(Insert mode)

  • : 插入光标前一个字符
  • I: 插入行首
  • a: 插入光标后一个字符
  • A: 插入行未
  • o: 向下新开一行,插入行首
  • O: 向上新开一行,插入行首

6.3 底行模式

按:冒号即可进入last line mode

:set nu 列出行号
:set nonu	取消行号
:#7 跳到文件中的第7行
/keyword 查找字符  按n向下
?keyword 查找字符  按N向下
:n1,n2/word1/word2/gc  替换指定范围单词c表示提示
:w 保存文件
:w filename 以指定的文件名另存
:n1,n2 w [filename]	将 n1 到 n2行另存
:r [filename]	读入另一个文件加到光标所在行后面
:! ls /home  在vi当中察看ls输出信息
:q离开vi
:wq 和 :ZZ 和 :x 保存并退出vi
!强制执行
:% s/^/#/g 来在全部内容的行首添加 # 号注释
:1,10 s/^/#/g 在1~10 行首添加 # 号注释  

6.4 可视模式

v 进入字符可视化模式 文本选择是以字符为单位的。
V 进入行可视化模式 文本选择是以行为单位的。
Ctrl+v 进入块可视化模式 选择一个矩形内的文本。

可视模式下可进行如下操作

操作解释
A在选定的部分后面插入内容
I在选定的部分前面插入内容
d删除选定的部分
c删除选定的部分并进入插入模式有批量替换效果
r把选定的部分全部替换为指定的单个字符
>>向右缩进一个单位更适合行可视化模式
<<向左缩进一个单位更适合行可视化模式
gu选中区域转为小写
gU选中区域转为大写
g~大小写互调

7.文本编辑命令

7.1 cut

选项与参数
-d  后面接分隔字符。与 -f 一起使用
-f  依据 -d 的分隔字符将一段信息分割成为数段用 -f 取出第几段的意思
-c  以字符 (characters) 的单位取出固定字符区间

cut以行为单位根据分隔符把行分成若干列这样就可以指定选取哪些列了。

cut -d '分隔字符' -f 选取的列数
echo $PATH|cut -d ':' -f 2  	--选取第2列
echo $PATH|cut -d ':' -f 3,5  	--选取第3列和第5列
echo $PATH|cut -d ':' -f 3-5  	--选取第3列到第5列
echo $PATH|cut -d ':' -f 3-   	--选取第3列到最后1列
echo $PATH|cut -d ':' -f 1-3,5	--选取第1到第3列还有第5列

7.2 sed

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

语法:

sed [-e<script>][-f<script文件>][文本文件]

参数说明

-e <script>以指定的script来处理输入的文本文件。
-f<script文件>以指定的script文件来处理输入的文本文件。
-n仅显示script处理后的结果一般跟p动作搭配使用。
-i使用处理后的结果修改文件。

动作说明

a在指定行后面插入内容
i在指定行前面插入内容
d删除指定行
c 替换指定行
p 打印指定行的数据通常需要跟-n选项搭配使用
s 替换指定字符兼容vim的替换语法例如 1,20s/old/new/g

元字符集

  • sed支持一般的正则表达式下面是支持的正则语法
  • ^行的开始 如/^sed/匹配所有以sed开头的行。
  • 行的结束如 / s e d 行的结束 如/sed 行的结束如/sed/匹配所有以sed结尾的行。
  • .匹配一个非换行符的任意字符 如/s.d/匹配s后接一个任意字符然后是d。
  • *匹配零或多个字符 如/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
  • []匹配一个指定范围内的字符如/[Ss]ed/匹配sed和Sed。
  • []匹配一个不在指定范围内的字符如/[A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头紧跟ed的行。
  • (…)保存匹配的字符如s/(love)able/\1rsloveable被替换成lovers。
  • &保存搜索字符用来替换其他字符如s/love/&/love这成love
  • <单词的开始如:/<love/匹配包含以love开头的单词的行。
  • >单词的结束如/love>/匹配包含以love结尾的单词的行。
  • x+重复字符x至少1次如/o+/匹配至少有1个o的行。
  • x{m}重复字符xm次如/o{5}/匹配包含5个o的行。
  • x{m,}重复字符x,至少m次如/o{5,}/匹配至少有5个o的行。
  • x{m,n}重复字符x至少m次不多于n次如/o{5,10}/匹配5-10个o的行。

7.3 awk

awk命令来自于三位创始人”Alfred AhoPeter Weinberger, Brian Kernighan “的姓氏缩写其功能是用于对文本和数据进行处理的编程语言。使用awk命令可以让用户自定义函数或正则表达式对文本内容进行高效管理与sed、grep并称为Linux系统中的文本三剑客。

**语法格式**awk 参数 文件

常用参数

-F指定输入时用到的字段分隔符
-v自定义变量
-f从脚本中读取awk命令
-m对val值设置内在限制

内置变量

变量名称说明
ARGC命令行参数个数
ARGV命令行参数排列
ENVIRON支持队列中系统环境变量的使用
FILENAMEawk浏览的文件名
FNR浏览文件的记录数
FS设置输入域分隔符等价于命令行 -F选项
NF浏览记录的域的个数
NR已读的记录数
OFS输出域分隔符
ORS输出记录分隔符
RS控制记录分隔符

参考实例

仅显示指定文件中第1、2列的内容默认以空格为间隔符

[root@linuxcool ~]# awk ' {print $1,$2} ' anaconda-ks.cfg
#version=RHEL8 
ignoredisk --only-use=sda
autopart --type=lvm
# Partition
clearpart --none
………………省略部分输出信息………………

以冒号为间隔符仅显示指定文件中第1列的内容

[root@linuxcool ~]# awk -F : '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
………………省略部分输出信息………………

以冒号为间隔符显示系统中所有UID号码大于500的用户信息第3列

[root@linuxcool ~]# awk -F : '$3>=500' /etc/passwd
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin
………………省略部分输出信息………………

仅显示指定文件中含有指定关键词root的内容

[root@linuxcool ~]# awk '/root/{print}' anaconda-ks.cfg 
rootpw --iscrypted $6$n9sZuTcY8Yzk4l.Q$LsuMNAROewyx.LomDtPpL9iJIOD3tsRThnzsAGE0hZXLMtdVCHVQ3pxzm3El8K2kuhcYLXJnhz.xUDGiE27s/1
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty

以冒号为间隔符仅显示指定文件中最后一个字段的内容

[root@linuxcool ~]# awk -F: '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
………………省略部分输出信息………………

8.linux防火墙

8.1 Firewalld概述

firewalld防火墙是Centos7系统默认的防火墙管理工具取代了之前的iptables防火墙也是工作在网络层属于包过滤防火墙。
firewalld和iptables都是用来管理防火墙的工具属于用户态来定义防火墙的各种规则功能内部结构都指向netfilter网络过滤子系统(属于内核态来实现包过滤防火墙功能。
firewalld提供了支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具。它支持IPv4、IPv6防火墙设置以及以太网桥在某些高级服务可能会用到比如云计算)并且拥有两种配置模式:运行时配置与永久配置。

8.2 firewalld与iptables的区别

  • iptables主要是基于接口来设置规则从而判断网络的安全性。firewalld是基于区域根据不同的区域来设置不同的规则从而保证网络的安全。与硬件防火墙的设置相类似。
  • iptables 在/etc/sysconfig/iptables 中储存配置.filewalld将配置储存在/etc/firewalld/优先加载〉和/usr/lib/firewalld/(默认的配置文件)中的各种 XMI文件里。
  • 使用iptables每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则。使用firewalld
  • 却不会再创建任何新的规则仅仅运行规则中的不同之处。因此firewalld可以在运行时间内改变设置而不丢失现行连接。
  • iptables防火墙类型为静态防火墙firewalld 防火墙类型为动态防火墙

8.3 Firewalld网络区域的概念

firewalld防火墙为了简化管理将所有网络流量分为多个区域(zone)。然后根据数据包的源IP地址或传入的网络接口等条件将流量传入相应区域。每个区域都定义了自己打开或者关闭的端口和服务列表。

firewall-cmd命令的功能是用于防火墙策略管理是firewalld服务的配置工具。使用firewall-cmd命令修改的防火墙策略会立即生效但重启后失效因此推荐要加上permanent参数呦~

8.4 firewalld防火墙预定义了9个区域

  • trusted(信任区域)允许所有的传入流量。
  • public(公共区域)允许与ssh或dhcpv6-client预定义服务匹配的传入流量其余均拒绝。是新添加网络接口的默认区域。
  • external(外部区域)允许与
  • ssh预定义服务匹配的传入流量其余均拒绝。默认将通过此区域转发的TPv4传出流量将进行地址伪装可用于为路由器启用了伪装功能的外部网络。
  • home(家庭区域)允许与ssh、mdn3、samba-client或dhcpv6-client预定义服务匹配的传入流量其余均拒绝。
  • internal(内部区域)默认值时与homel区域相同。
  • work(工作区域)允许与 ssh、dhcpv6-client预定义服务匹配的传入流量其余均拒绝。
  • dmz(隔离区域也称为非军事区域)允许与ssh 预定义服务匹配的传入流量其余均拒绝。
  • block(限制区域)拒绝所有传入流量。
  • drop(丢弃区域)丢弃所有传入流量并且不产生包含ICMP的错误响应。

最终一个区域的安全程度是取决于管理员在此区域中设置的规则。
区域如同进入主机的安全门每个区域都具有不同限制程度的规则只会允许符合规则的流量传入。
可以根据网络规模使用一个或多个区域但是任何一个活跃区域至少需要关联源地址或接口。
默认情况下public区域是默认区域包含所有接口(网卡)

语法格式firewall-cmd [参数]

常用参数

–state显示当前服务运行状态
–zone=public --list-ports查看所有打开运行的端口
–permanent策略写入到永久生效表中
–reload不重启立即加载
–list-all-zones查看区域信息情况
–panic-on拒绝所有包
–panic-off取消拒绝状态
–query-panic查看是否拒绝

参考实例

查看当前防火墙状态

[root@linuxcool ~]# firewall-cmd --state
running

查看防火墙当前放行端口号列表

[root@linuxcool ~]# firewall-cmd --zone=public --list-ports

重新加载防火墙策略立即生效

[root@linuxcool ~]# firewall-cmd --reload
success

查看当前防火墙默认使用区域名称

[root@linuxcool ~]# firewall-cmd --get-default-zone 
public

常用命令

#查看开放端口号
firewall-cmd --list-ports 
# 开启http8080端口
firewall-cmd --zone=public --add-port=8081/tcp --permanent 
# 重载服务
firewall-cmd --reload 

# 显示当前默认区域
--get-default-zone
 设置默认区域
--set-default-zone=<zone>

# 显示当前正在使用的区域及其对应的网卡接口
--get-active-zones
# 显示所有可用的区域
--get-zones 

# 显示指定接口绑定的区域
--get-zone-of-interface=<interface>
# 为指定接口绑定区域
--zone=<zone> --add-interface=<interface>
# 为指定的区域更改绑定的网络接口
--zone=<zone> --change-interface=<interface>
# 为指定的区域删除绑定的网络接口
--zone=<zone> --remove-interface=<interface>

# 显示指定源地址绑定的区域
--get-zone-of-source=<source>[/<mask>]
#  为指定源地址绑定区域
--zone=<zone> --add-source=<source>[/<mask>]
#  为指定的区域更改绑定的源地址
-- zone=<zone> --change-source=<source>[/<mask>] 
#  为指定的区域删除绑定的源地址
--zone=<zone> --remove-source=<source>[/<mask>]

#  显示所有区域及其规则
--list-all-zones
#  显示所有指定区域的所有规则省略--zone=<zone>时表示仅对默认区域操作
[--zone=<zone>] --list-all 

#  显示指定区域内允许访问的所有服务
[--zone=<zone>] --list-services
#  为指定区域设置允许访问的某项服务
[--zone=<zone>] --add-service=<service>
#  删除指定区域已设置的允许访问的某项服务
[--zone=<zone>] --remove-service=<service>


[--zone=<zone>] --list-ports # 显示指定区域内允许访问的所有端口号
[--zone=<zone>] --ad-port=<portid>[-<portid>]/<protocol> # 为指定区域设置允许访问的某个/某段端口号包括协议名)
[--zone=<zone>] --remove-port=<portid>[-<portid>]/protocol> # 删除指定区域已设置的允许访问的端口号包括协议名)
   
[--zone=<zone>] --list-icmp-blocks # 显示指定区域内拒绝访问的所有ICMP类型
[--zone=<zone>] --add-icmp-block=<icmptype> # 为指定区域设置拒绝访问的某项ICMP类型
[--zone=<zone>] --remove-icmp-block=<icmptype> # 删除指定区域已设置的拒绝访问的某项ICwp类型
firewall-cmd --get-icmptypes # 显示所有ICMP类型

8.5 firewalld管理

1.区域管理

# 显示当前系统中的默认区域
firewall-cmd --get-default-zone

# 显示默认区域的所有规则
firewall-cmd --list-all

# 显示当前正在使用的区域及其对应的网卡接口
firewall-cmd --get-active-zones

# 设置默认区域
firewall-cmd --set-default-zone=home
firewall-cmd --get-default-zone

2.服务管理

# 查看默认区域内允许访问的所有服务
firewall-cmd --list-service

# 添加httpd服务到public区域
firewall-cmd --add-service=http --zone=public

# 查看public区域已配置规则
firewall-cmd --list-all --zone=public

# 删除public区域的httpd服务
firewall-cmd --remove-service=http --zone=public

# 同时添加httpd、 https 服务到默认区域设置成永久生效
firewall-cmd --add-service=http --add-service=https --permanent
firewall-cmd --add-service={http, https, ftp} --zone=internal
firewall-cmd --reload
firewall-cmd --list-all

添加使用–permanent选项表示设置成永久生效需要重新启动firewalld服务或执行firewall-cmd --reload命令

重新加载防火墙规则时才会生效。若不带有此选项表示用于设置运行时规则但是这些规则在系统或firealld服务重启、停止时配置将失效。

firewall-cmd --runtime-to-permanent将当前的运行时配置写入规则配置文件中使之成为永久性配置。

3.端口管理

# 允许 TCP 的443端口到 internal 区域
firewall-cmd --zone=internal --add-port=443/tcp
firewall-cmd --list-all --zone=internal

# 从 internal 区域将 TCP 的443端口移除
firewall-cmd --zone=internal --remove-port=443/tcp

# 允许 UDP 的2048~2050端口到默认区域
firewall-cmd --add-port=2048-2050/udp
firewall-cmd --list-all

8.6 iptables

iptables是一个防火墙策略管理工具的命令同时也是一个基于内核级别的防火墙服务用户可以基于它来对数据包进行过滤操作拒绝掉危险的外部请求流量保护内网的安全。iptables命令默认仅支持ipv4协议如需ipv6协议支持需使用ip6tables命令。

语法格式: iptables [参数]

常用参数

-t<表>指定要操纵的表
-A向规则链中追加条目
-D从规则链中删除条目
-I向规则链中插入条目
-R替换规则链中的相应条目
-L显示规则链中的已有条目
-F清除规则链中的现有条目
-Z清空规则链中的数据包计数器和字节计数器
-N创建新的用户自定义规则链
-P定义规则链中的默认目标策略
-h显示帮助信息
-p<协议>指定要匹配的数据包的协议类型
-s<源地址>指定要匹配的数据包的源IP地址
-j<目标>指定要跳转的目标
-i<网络接口>指定数据包进入本机的网络接口
-o<网络接口>指定数据包离开本机做使用的网络接口
-c<包计数>在执行插入、追加和替换操作时初始化包计数器和字节计数器

参考实例

显示当前防火墙策略中全部的过滤表信息

[root@linuxcool ~]# iptables -L

显示当前防火墙策略中指定的NAT表信息

[root@linuxcool ~]# iptables -L -t nat

禁止指定的远程主机访问本地全部的服务通通禁止

[root@linuxcool ~]# iptables -I INPUT -s 192.168.10.10 -j DROP

禁止指定的远程主机访问本地的某个端口其余允许

[root@linuxcool ~]# iptables -I INPUT -s 192.168.10.10 -p tcp --dport 22 -j DROP

具体用法请参考https://blog.csdn.net/ver_mouth__/article/details/124682569

9.shell 脚本编程

请参考我另外一篇文章 https://blog.csdn.net/m0_46188681/article/details/128353262

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux