linux学习笔记

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兼容的操作系统,以避免版权上的争议。他以小型UNIX(mini-UNIX)之意,将它称为MINIX。

1.3Minix

因为Minix只是教学使用,因此功能并不强,因此Torvalds利用GNU的bash当做开发环境,gcc当做编译工具,编写了Linux内核-v0.02,但是一开始Linux并不能兼容Unix,即Unix上跑的应用程序不能在Linux上跑,即应用程序与内核之间的接口不一致,因为Unix是遵循POSIX规范的,因此Torvalds修改了Linux,并遵循POSIX(Portable 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 :磁盘检验

fsck(file 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源

网易(163)yum源是国内最好的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/\1rs,loveable被替换成lovers。
  • &保存搜索字符用来替换其他字符,如s/love/&/,love这成love
  • <单词的开始,如:/<love/匹配包含以love开头的单词的行。
  • >单词的结束,如/love>/匹配包含以love结尾的单词的行。
  • x+重复字符x,至少1次,如:/o+/匹配至少有1个o的行。
  • x{m}重复字符x,m次,如:/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 Aho,Peter 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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值