Linux操作系统总结
一、系统安装与常用命令
1 安装与配置Linux操作系统
1.1 体系结构
Linux一般有三个主要部分:内核(Kernel)、命令解释层(shell或其它操作环境)、实用工具(编辑器、过滤器、交互程序)。
1.2 内核版本
Linux版本通常为:主版本号.次版本号.修正号
查看最最新内核命令:apt-cache search linux-image
安装kali最新版本内核命令:apt-get install linux-image-xxx linux-header-xxx(xxx代表内核版本)
1.3 物理设备命名规则
Linux系统中的一切都是文件,包括硬件设备。
1.3.1 常见的硬件设备及其文件名称:
硬件设备 | 文件名称 |
---|---|
IDE设备 | /dev/hd[a-d] |
SCSI/SATA/U盘 | /dev/sd[a-p] |
软驱 | /dev/fd[0-1] |
打印机 | /dev/lp[0-15] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0或/dev/ht0 |
1.3.2 硬盘分区编号规定:
-
主分区或拓展分区的编号从1开始,到4结束。
-
逻辑分区从编号5开始。
例:/dev/sda5
/dev 目录保存的是硬件设备文件
sd 表示储存设备
a 表示系统同类接口中第一个被识别的设备
5 表示这个设备是逻辑分区
1.4 安装配置Linux系统
1.4.1 Kali Linux(Debian体系Linux)
Kali安装参考:
Kali调试参考:
1.4.2 CentOS(RHEL体系Linux)
ContOS安装与调整参考:
CentOS重置root管理员密码参考:
1.5 Linux软件安装
1.5.1 Debian体系软件安装(Kali Linux)
【1】dpkg是为Debian操作系统专门开发的套件管理系统,用于软件的安装,更新和移除,能被dpkg命令安装的软件包一般以.deb为文件后缀
dpkg常见命令
命令 | 作用 |
---|---|
dpkg -i | 安装软件包 |
dpkg -r name | 移除软件(保留配置) |
dpkg -P name | 移除软件(不保留配置) |
dpkg -c *.deb | 列出deb包的内容 |
dpkg -l | grep [关键字] | 配合' | grep [包名关键字]',查找主机包 |
dpkg -s name | 查找包的详细信息 |
dpkg -L name | 查看已安装的软件包,都存在系统哪有文件 |
dpkg -S [文件名] | 显示指定包的状态信息(用于反查) |
【2】apt是一个在Debian中的Shell前端软件包管理器,apt命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令
注:apt命令执行需要超级管理员权限(root)
(1)源的配置
apt命令更新和安装软件包是从软件安装源中请求的,kali系统的源文件在/etc/apt/sources.list
-
阿里云kali源
deb https://mirrors.aliyun.com/kali kali-rolling main non-free contrib deb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib
(2)apt常见命令
命令 | 作用 |
---|---|
apt-get install | 安装软件包 |
apt-get remove | 卸载软件,但不卸载配置文件 |
apt-get purge | 卸载软件,同时卸载相应的配置文件 |
apt-get update | 将所有包的来源更新(更新源) |
apt-get upgrade | 将系统中旧版本的包升级成最新的 |
apt-cache search | 用关键字搜索包 |
apt-cache show | 显示特定包的基本信息 |
apt-cache depends | 列出包的依赖 |
apt-get clean | 清理本地包占用的磁盘空间(/var/cache/apt/archives) |
apt-get autoremove | 卸载软件的时候同时卸载那些当初作为依赖但是现在并不需要的包 |
1.5.2 RHEL体系软件安装(CentOS)
【1】rpm(红帽软件包管理器)命令用于管理软件,能被rpm命令安装的软件包一般以.rpm为文件后缀
rpm常见命令
命令 | 作用 |
---|---|
rpm -ivh [package_name] | 安装软件包 |
rpm -Uvh [package_name] | 升级软件 |
rpm -evh [package_name] | 卸载软件 |
rpm -qlp [package_name] | 列出rpm包的内容(软件的文件信息) |
rpm -qa | grep [字符串] | 在已安装的所有软件中查询包含某字符串的软件版本 |
rpm -ql [软件名] | 列出该软件所有文件与目录所在的完整文件名 |
rpm -qc [软件名] | 列出软件的所有设置文件 |
rpm -qR [软件名] | 查询某软件依赖的其他软件 |
rpm -qf [文件名] | 查询文件属于哪个软件包(RPM) |
【2】yum命令是一个在Fedora和RedHat以及 SUSE 中的Shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令
(1)源的配置
同apt命令一样,yum依然从源获取软件,在CentOS中yum源文件存储在/etc/yum.repos.d目录中,repo文件的示例:
[baseos] name=Rocky Linux $releasever - BaseOS mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=releasever #baseurl=http://dl.rockylinux.org/releasever/BaseOS/$basearch/os/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
epel源是redhat系比较常用的源,EPEL(Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux,安装epel源只需要安装一个叫”epel-release”的软件包,这个软件包会自动配置yum的软件仓库
命令 | 作用 |
---|---|
dnf install -y epel-release | 安装epel-release |
(2)yum常见命令
命令 | 作用 |
---|---|
yum makecache | 更新源(安装新源后执行) |
yum clean all | 清除缓存目录(/var/cache/yum)下的软件包及旧的headers |
yum list | grep | 显示所有已经安装和可以安装的程序包 |
yum info [package-name] | 显示安装包信息 |
yum -y install [package-name] | 安装软件包,默认选yes |
yum remove [package-name] | 卸载软件包 |
yum deplist rpm | 查看程序rpm依赖情况 |
yum update | 更新全部软件包 |
yum group list | 列出组 |
yum group install "Security Tools" | 安装‘Security Tools’软件组 |
yum search | 检索安装包 |
【3】dnf是新一代的rpm软件包管理器,它正在逐步取代yum命令
(1)dnf常见命令
命令 | 作用 |
---|---|
yum makecache | 更新源(安装新源后执行) |
dnf repolist | 该命令用于显示系统中可用的 dnf 软件库 |
dnf repolist all | 该命令用于显示系统中可用和不可用的所有的 dnf 软件库 |
dnf list | 用户系统上的所有来自软件库的可用软件包和所有已经安装在系统上的软件包 |
dnf list installed | 该命令用于列出所有安装了的 rpm 包 |
dnf list available | 用于列出来自所有可用软件库的可供安装的软件包 |
dnf search [pakage] | 用该命令来搜索软件包 |
dnf provides /bin/bash | 查找某一文件的提供者 |
dnf info nano | 查看软件包详情 |
dnf install [pakage] | 安装软件包 |
dnf update systemd | 该命令用于升级指定软件包 |
dnf check-update | 该命令用于检查系统中所有软件包的更新 |
dnf update | 该命令用于升级系统中所有有可用升级的软件包 |
dnf remove [pakage] | 删除系统中指定的软件包 |
dnf autoremove | 删除无用孤立的软件包 |
dnf clean all | 删除缓存的无用软件包 |
dnf history | 查看您系统上dnf命令的执行历史 |
dnf grouplist | 该命令用于列出所有的软件包组 |
dnf groupinstall ‘Educational Software’ | 该命令用于安装一个软件包组 |
dnf groupupdate ‘Educational Software’ | 升级一个软件包组中的软件包 |
dnf groupremove ‘Educational Software’ | 该命令用于删除一个软件包组 |
dnf reinstall [pakage] | 该命令用于重新安装特定软件包 |
2 常用命令总结
2.1 命令基础
2.1.1 命令特点
【1】Tab键
-
Tab补全:只需输入文件或目录名以及命令的前几个字符,然后按Tab键,如无相重的,完整的文件名或者命令立即自动在命令行出现;如有相重的,再按一下Tab键,系统会列出当前目录下所有以这几个字符开头的名字
-
Tab键查看:在命令行下,只需输入例如m,再连续按两次Tab键,系统将列出所有以m开头的命令,(包括自定义的Bshell命令函数),对查找某些记不清楚的命令特有用
【2】上下键
-
翻查曾经执行过的历史命令,并可以再次执行
【3】分号
-
使用分号分隔命令,可以在命令行上输入或执行多条命令
【4】反斜杠
-
断开长命令行,可将较长的命令分成多行表达,增强命令可读性
2.1.2 后台运行程序
在执行的命令行后跟上一个“&”符号,即可使程序以后台方式执行
2.1.3 命令使用格式
[COMMAND] [options] [arguments](命令+选项+对象)
注:在Linux中严格区分大小写
说明:
-
COMMAND: 命令的名称, 如 ls
-
options:定义命令的执行特性,可以有长短两种选项:
-
长选项:用 -- 引导,后面跟完整的单词,如 --help
-
短选项:用 - 引导,后面跟单个的字符,,如 -a
-
多个短选项可以组合使用,例如:-h -l -a == -hla;但是长选项不能组合使用,如 --help后面就不能再跟另外一个单词
-
-
options也可以有自己的参数,注意:选项与选项之间、选项与参数之间、参数与参数之间必须有空格
-
arguments:表示命令的作用对象,如上述示例中farmsec 就是ls命令的作用对象
2.2 文件目录类命令
2.2.1 pwd命令
pwd命令以绝对路径的方式显示用户当前工作目录,命令将当前目录的全路径名称(从根目录)写入标准输出,全部目录使用/分隔
第一个/表示根目录,最后一个目录是当前目录,执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称
例如:
[root@centos ~]# pwd /root
2.2.2 cd命令
cd命令用于切换当前工作目录
语法:
cd [目录]
cd [绝对路径]
例如:
[root@centos ~]# cd #改变目录位置至用户登录时的工作目录
[root@centos ~]# cd file #改变目录位置至当前目录下的 file 子目录下
[root@centos file]# cd ~ #改变目录位置至用户登录时的工作目录(用户的家目录)
[root@centos ~]# cd .. #改变目录位置至当前目录的父目录
[root@centos ~]# cd #改变目录位置至用户登录时的工作目录
[root@centos ~]# cd ../etc #改变目录位置至当前目录的父目录的 etc 子目录下
[root@centos etc]# cd /root/file/test #利用绝对路径表示改变目录到 /root/file/test 目录下
[root@centos test]# cd - /etc #改变目录位置至上一个目录
说明:
. 代表当前目录
.. 代表当前目录的父目录(上一级目录)
~ 代表用户的个人家目录(root为/root,其他用户在/home下)
2.2.3 ls命令
ls命令用于显示指定工作目录下之内容(列出指定目录所含之文件及子目录),ls命令的输出信息可以进行彩色加亮显示,以区分不同类型的文件
语法:
ls [参数] [目录或文件]
参数:
-
-a:显示所有目录及文件,包括以“.”开头的隐藏文件
-
-l:除文件名称外,也将文件型态、权限、拥有者、文件大小等列出(以长格形式显示文件的详细信息)
-
-h:以容易理解的格式列出文件大小
例如:
[root@centos ~]# ls #列出当前目录下的文件及目录
[root@centos ~]# ls -a #列出包含以“.”开始的隐藏文件在内的所有文件
[root@centos ~]# ls -a file
[root@centos ~]# ls -al file
2.2.4 cat命令
cat命令用于打开文件查看文件内容或将多个文件合并成一个文件
语法:
cat [参数] [文件名]
cat [源文件名] [源文件名] > [覆盖文件名]
cat [源文件名] [源文件名] >> [追加文件名]
参数:
-
-v:除了换行和Tab之外所有控制符,用“^”和“M-”显示
-
-n:对输出内容中的所有行标注行号
例如:
[root@centos ~]# cat /etc/passwd #查看/etc/passwd文件内容
[root@centos ~]# cat -v /etc/passwd
[root@centos ~]# cat file1 file2 > file #如果file文件存在,则此命令的执行结果会覆盖file文件中原有内容
[root@centos ~]# cat file1 file2 >> file #如果file文件存在,此命令的执行结果将把file1和file2文件的内容附加到file文件中原有内容的后面
2.2.5 more命令
more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是,按空格键(Space)就往下一页显示,按Enter键显示文本的下一行内容,按 b 键就会往回(back)一页显示,按q键退出
语法:
more [参数] [文件名]
例如:
[root@centos ~]# more /etc/passwd #以分页方式查看/etc/passwd文件的内容
2.2.6 less命令
less 与 more 类似,用 less 命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页,要退出less程序按q键
语法:
less [参数] [文件名]
例如:
[root@centos ~]# less /etc/passwd #以分页方式查看/etc/passwd文件的内容
2.2.7 head命令
head命令用于查看文件的开头的内容(默认情况下,head命令显示文件的头10行内容)
语法:
head [参数] [文件名]
参数:
-
-n num:显示指定文件的前num行
例如:
[root@centos ~]# head -n 2 /etc/passwd #显示/etc/passwd文件的前2行
2.2.8 tail命令
tail命令用于显示文件中的尾部内容(默认在屏幕上显示指定文件的末尾10行),如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题
语法:
tail [参数] [文件名]
参数:
-
-n num:显示指定文件的末尾num行
-
-f:持续刷新文件内容(循环读取)
例如:
[root@centos ~]# tail -n 3 /etc/passwd #显示/etc/passwd文件的末尾3行
[root@centos ~]# tail -f /var/log/secure #/var/log/secure是系统远程登录日志,通过tail -f命令监控日志变化情况
[root@centos ~]# tail -f /var/log/messages #实时查看最新日志文件
2.2.9 mkdir命令
mkdir命令用于创建目录
语法:
mkdir [参数] [目录名]
参数:
-
-p:创建多级目录,如果父目录不存在,则同时创建该目录及该目录的父目录
例如:
[root@centos ~]# mkdir file #在当前目录下创建file子目录
[root@centos ~]# mkdir file1 file2
[root@centos ~]# mkdir -p fileA/fileB #在当前目录的fileA目录中创建fileB子目录,如果fileA目录不存在,则同时创建
2.2.10 cp命令
cp命令主要用于复制文件或目录
语法:
cp [参数] [源文件] [目标文件]
参数:
-
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件(递归)
-
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中(保持默认属性)
例如:
[root@centos ~]# cp file1 file2
[root@centos ~]# cp /root/file/file1 file2
[root@centos ~]# cp /root/file/file1 /root/file2
[root@centos ~]# cp -r file1 file/file2
2.2.11 mv命令
mv命令用来为文件或目录改名、或将文件或目录移入其它位置
语法:
mv [参数] [源文件或目录] [目标文件或目录]
参数:
-
-f:如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件(直接覆盖不提示)
-
-n:不要覆盖任何已存在的文件或目录(不覆盖已存在的文件)
例如:
[root@centos ~]# mv file /usr/ #将当前目录下的file文件移动到/usr/目录下,文件名不变
[root@centos ~]# mv /usr/file /test #将/usr/file文件移动到根目录下,移动后的文件名为test
2.2.12 rm命令
rm命令用于删除文件或者目录
语法:
rm [参数] [文件名或目录名]
参数:
-
-i:删除前逐一询问确认
-
-f:删除文件或目录时不提示用户,即使原档案属性设为唯读,亦直接删除,无需逐一确认
-
-r:将目录及以下之档案亦逐一删除(递归删除目录)
例如:
[root@centos ~]# rm * #删除当前目录下的所有文件,但不删除子目录和和隐藏文件
[root@centos ~]# rm -rf fileA/fileB/ #不提示用户,删除fileA/fileB/目录下的所有文件,包含其下的所有文件和目录
注意:rm -rf是一条危险的命令,代表递归删除某文件,如rm -rf /是递归删除根目录下的所有目录和文件,该命令不会询问,一旦执行系统将崩溃
2.2.13 touch命令
touch命令用于创建一个空白的新文件,如果同名文件已存在,则修改其时间属性
语法:
touch [参数] [文件名或目录名]
例如:
[root@centos ~]# touch file #如果当前目录下存在file文件,则把file文件的存取和修改时间改为当前时间;如果不存在file文件,则新建file文件
2.2.14 rpm命令(红帽体系)
rpm命令可以检查文件完整性,rpm命令经常使用,但是”-V”参数很少使用,rpm -V用来检查已安装rpm包的完整性,所谓“完整性”,就是指安装rpm包产生的所有文件和原始rpm包中的信息是否一致,如果完全一致,则不做任何输出,只有发现有不正确的文件时才会输出,系统完整性检查工具lynins、aide、tripwire等防御工具,可以更方便的发现,查找被替换文件
语法:
rpm [参数] [软件包名]
例如:
[root@centos ~]# rpm -Va #校验所有的RPM软件包,查找丢失的文件
.M5....T /usr/X11R6/lib/X11/fonts/misc/fonts.dir #表示fonts.dir这个文件的mode被修改了,MD5也不一致,文件的修改时间也发生了改变
S.5....T c /etc/passwd #表示/etc/passwd的Size,MD5,modify time不一致,且这是一个配置文件
missing /var/spool/at/spool #表示rpm包本来该生产/var/spool/at/spool文件,但却丢失了
rpm -V输出格式:
SM5DLUGT c [文件路径]
每发现一个不一致的文件就会有一行类似输出,每个字符的含义:
S:表示对应文件的大小(size)不一致
M:表示对于文件的mode不一致
5:表示对应文件的MD5不一致
D:表示文件的major和minor号不一致
L:表示文件的符号连接内容不一致
U:表示文件的owner不一致
G:表示文件的group不一致
T:表示文件的修改时间不一致
c:只有文件是一个配置文件时才会有此标志,可以用这种方法快速定位rpm包的配置文件安装位置(只有文件不一致情况下才会显示,但是配置文件通常会被修改,所以通常都会被检测出不一致)
file:检测出不一致的文件安装路径
一般不可能一个文件的所有以上属性都不一致,所以检测通过的属性就会用一个“.”表示
2.2.15 find命令
find命令用来在指定目录下查找文件,任何位于参数之前的字符串都将被视为欲查找的目录名,使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示
语法:
find [路径] [匹配表达式]
匹配表达式类型:
-
-name [filename]:查找指定名称的文件
-
-user [username]:查找属于指定用户的文件
-
-group [groupname]:查找属于指定用户组的文件
-
-size n:查找大小为n块的文件,一块为512B。符号“+n”表示查找大小大于n块的文件;符号“-n”表示查找大小小于n块的文件;符号“nc”表示查找大小为n个字符的文件
-
-type [类型]:查找指定类型的文件。文件类型有:b(块设备文件)、c(字符设备文件)、d(目录)、p(管道文件)、l(符号链接文件)、f(普通文件)
-
-atime n:查找n天前被访问过的文件。“+n”表示超过n天前被访问的文件;“-n”表示未超过n天前被访问过的文件;“n”表示前第n天当天被访问过的为文件
-
-mtime n:类似于atime,但检查的是文件内容被修改的时间
-
-ctime n:类似于atime,但检查的是文件索引点被改变的时间
-
-amin n:类似于atime,查找n分钟前被访问过的文件
-
-perm mode:查找与给定权限匹配的文件,必须以八进制的形式给出访问权限
-
-exec [command] {}\ ;:对匹配指定条件的文件执行command命令
atime、amin、mtime、mmin、ctime、cmin释义:
a:访问过的文件(access);m:修改过的文件(modify);c:状态(权限、时间等)改变的文件(change)
time:天;min:分钟
例如:
[root@centos ~]# find -name '1*' #在当前目录下查找文件名以1开始的文件
[root@centos ~]# find / -name '1*' #从根目录查找文件名以1开始的文件
[root@centos ~]# find / -user kalpa #从根目录查找属主为kalpa的文件
[root@centos ~]# find / -group zero #从根目录查找属组为zero的文件
[root@centos ~]# find / -size 1000k #从根目录查找大小为1000K的文件
[root@centos ~]# find /etc -type d #按sock类型查找,f代表文件,d代表目录
[root@centos ~]# find . -type f -atime -1 #搜索当前目录下一天内被访问的文件(-1代表1天内,1代表前1天那一天,+1代表1天前)
[root@centos ~]# find . -type f -amin -10 #搜索当前目录下10分钟内被访问的文件
[root@centos ~]# find . -type f -mtime -7 #搜索7天内当前目录下修改过的文件(-7代表7天内,7代表前7天那一天,+7代表7天前)
[root@centos ~]# find . -type f -mmin -10 #搜索10分钟内当前目录下修改过的文件
[root@centos ~]# find . -type f -ctime -1 #搜索当前目录下一天内状态被改变(列如权限)的文件(-1代表1天内,1代表前1天那一天,+1代表1天前)
[root@centos ~]# find . -type f -cmin -10 #搜索当前目录下10分钟内状态被改变的文件
[root@centos ~]# find . -perm 777 #搜索处当前文件下符合777权限的文件
[root@centos ~]# find / -exec grep "Hello" {} \;#根目录搜索关键字"Hello"
[root@centos ~]# find . -type f -perm 644 -exec ls -l {} \;#在当前目录下查找权限为755的普通文件
[root@centos ~]# find /logs -type f -mtime +5 -exec rm -rf {} \;#在/logs目录中查找修改时间为5天以前的普通文件,并删除。保证/logs目录存在
[root@centos /]# find / -name "*.tmp" -exec rm -f {} \;#危险命令
[root@centos ~]# find / -name "*" -ctime +2 -exec rm -f {} \;#危险命令,嘎嘎删,勿敲
2.2.16 awk命令
awk是一种处理文本文件的语言,是一个强大的文本分析工具,相比较屏幕处理的优点,awk在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息,awk是一个非常棒的数据处理工具,相较于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理
awk处理过程: 依次对每一行进行处理,然后输出
语法:
awk ‘{print($n)}’ #打印文本中每行第n个字段
cat /etc/passwd | awk -F ":" '{print($1)}' # -F指定分隔符,以“:”为分隔符,打印出文本中每行第一个字段
参数:
-
-F:指定分隔符
例如:
[root@centos ~]# cat kalpa | awk '{print($2)}' #打印文本中每行第二个字段
[root@centos ~]# cat /etc/passwd | awk -F ":" '{print(3)}' #打印出第一个字段与第三个字段,并在其中间添加+++内容,空格连接
[root@centos ~]# cat /etc/passwd | awk -F ":" '{print(3)}' #无空格连接
[root@centos ~]# cat passwd | awk -F ":" '{print $NF}' #打印出文本每行的最后一个字段
[root@centos ~]# cat passwd | awk -F ":" '{print (NF-1)为倒数第二,依此类推
2.2.17 sed命令
sed是stream editor(流编辑器)的简称,是一款强大并且有些复杂的程序。sed本身是一个管线命令,可以将数据进行替换、删除、新增、提取特定行等功能,主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等,sed按行来执行命令。sed命令中,搜索位置使用^代表一行的开头,$代表一行的结尾,sed以行为单位执行,d为删除
语法:
sed 's/:/+/g' #s代表搜索,g代表的全文,不加g则是替换每行第一个出现的。这条命令代表将文件中所有的:替换为+
参数:
-
-i:直接修改文件,不打印
例如:
(例1)以/etc/passwd文件内容为例,拷贝文件cat /etc/passwd > 1.txt
[root@centos ~]# cat kalpa | sed 's/:/+/ng' #代表从第n次匹配开始替换
[root@centos ~]# sed -i 's/:/+/g' kalpa #参数-i,直接修改文件,不打印出来
[root@centos ~]# cat passwd | sed 's!:!/!g' #以!做为定界
(例2)ip.txt内容:
192.168.0.1
192.168.0.2
192.168.0.3
[root@centos ~]# cat ip.txt | sed 's#^#http://#g' #每行前加“http://”
[root@centos ~]# cat ip.txt | sed 's#$#:8080#g' #在每行末尾加上“:8080”
[root@centos ~]# sed '/^$/d' ip.txt #删除空白的行
[root@centos ~]# cat ip.txt | sed '/^s/'d #删除文件中所有开头是s的行
说明:
以上命令以/做为命令的定界符,如果需要修改或者匹配的字段带有/则不能再使用/做为该条命令的定界符,可以使用任意的定界符,不冲突即可
2.2.18 grep命令
grep来自于短语“global regular expression print”,所以grep程序和正则表达式有关联,本质上,grep程序会在文本文件中查找一个指定的正则表达式,并把匹配行输出到标准输出
语法:
grep [参数] [要查找的字符串] [文件名]
参数:
-
-v:列出不匹配的行
-
-r:递归查询
-
-n:每个匹配行只按照对应的行号显示(显示关键字出现在第几行)
例如:
[root@centos ~]# cat passwd | grep root #只显示带有root关键字的行
[root@centos ~]# cat passwd | grep -E "root|sshd" #包含多个可能性的行
[root@centos ~]# cat passwd | grep -E '^r' #以r开头的行
[root@centos ~]# cat passwd | grep -E 'n$' #以n结尾的行
[root@centos ~]# grep -e root /etc/passwd #匹配有root的行
[root@centos ~]# grep -v root /etc/passwd #忽略匹配到的行
[root@centos ~]# grep "passwd" /etc -rn #在多级目录中对文本进行递归查找
[root@centos ~]# grep "root" /etc/passwd /etc/shadow #查询多个文件
[root@centos ~]# cat ip.txt | sed '/^s/'d #删除文件中所有开头是s的行
2.2.19 ag命令
ag类似grep和find,但是执行效率比后两者高
语法:
ag -g [File Name] #最基本用法,从当前目录寻找文件,类似于find . -name <File Name>
ag -i PATTERN #忽略大小写搜索含PATTERN文本
ag -A [number] PATTERN #搜索含PATTERN文本,并显示匹配内容之后的n行文本
ag -B [number] PATTERN #搜索含PATTERN文本,并显示匹配内容之前的n行文本
ag -C [number] PATTERN #搜索含PATTERN文本,并同时显示匹配内容以及它前后各n行文本的内容
ag --ignore-dir [Dir Name] #忽略某些文件目录进行搜索
ag -w PATTERN #全匹配搜索,只搜索与所搜内容完全匹配的文本
ag --java PATTERN #在java文件中搜索含PATTERN的文本
例如:
[root@centos ~]# ag -A 5 abc #会显示搜索到的包含abc的行以及它之后5行的文本信息
2.2.20 stat命令
用于显示文件信息
语法:
stat [文件或目录]
例如:
[root@centos ~]# stat /etc/passwd
2.2.21 split命令
split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等
语法:
sed 's/:/+/g' #s代表搜索,g代表的全文,不加g则是替换每行第一个出现的。这条命令代表将文件中所有的:替换为+
参数:
-
-b:按文件大小进行切割
-
-l:按行数来进行切割
-
-d:为使用数字为生成文件的后缀
-
-a:指定后缀的长度
例如:
[root@centos ~]# split -b 30k messages #按照每个文件30K大小切割messages文件
[root@centos ~]# split -l 3 messages #将messages文件切割为每3行一份
2.2.22 sort命令
sort命令将文件进行排序,并将排序结果标准输出
例如:
[root@centos ~]# cat kalpa | sort #默认的排序方式,从首字母开始
[root@centos ~]# cat kalpa | sort -d #按照字典进行排序
[root@centos ~]# cat kalpa | sort -n #按照数字进行排序
2.2.23 uniq命令
uniq用于报告或忽略文件中的重复行,一般与sort命令结合使用。要注意先排序,后去重,因为uniq命令只能消除相邻且相同的行
例如:
[root@centos ~]# cat kalpa | sort -n | uniq #排序去重
[root@centos ~]# cat kalpa | sort -n | uniq -c #列出重复的次数
[root@centos ~]# cat kalpa | sort -n | uniq -d #列出有哪些行是重复的
参考释义:
以上系列命令可用于日志分析,如:
-
统计IP地址的访问数量并按照数量进行排序:cat access_log | awk '{print($1)}'| sort | uniq -c | sort -nr | more
-
针对访问量最大的IP分析其访问内容:cat access_log | grep 'IP地址'| head -n 100
2.2.24 nl命令
nl命令用于显示文件内容行号
例如:
[root@centos ~]# cat /etc/passwd | nl
2.2.25 wc命令
wc命令用来计算数字,利用wc指令可以计算文件的Byte数、字数或是列数
用法:
wc [参数] [文件]
参数:
-
-l:显示行数
-
-c:显示Bytes数
-
-w:显示字数
例如:
[root@centos mail]# wc -l /etc/passwd [root@centos mail]# wc -c /etc/passwd [root@centos mail]# wc -w /etc/passwd
2.2.26 diff命令
diff 命令用于比较文件的差异,diff以逐行的方式,比较文本文件的异同处。指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录
语法:
df [参数] [文件]
参数:
-
-i:比较时忽略大小写
例如:
[root@centos mail]# diff kalpa zero
说明:diff命令所参考的不是第一个文件,而是第二个文件
它的输出信息有以下几种字符:
-
c:表示必须做一些修改才能使两个文件相同
-
a:表示必须添加一些内容才能使两个文件相同
-
d:表示必须删除一些内容才能使两个文件相同
2.2.27 tee命令
tee命令用于文件尾部追加内容
语法:
tee [参数] [文件名]
参数:
-
-a:将输出添加到文件的末尾而不是覆盖写入
例如:
[root@centos farm]# echo Hello world! | tee -a kalpa
2.3 系统信息类命令
2.3.1 dmesg命令
dmesg命令用实例名和物理名称来标识连接到系统上的设备,dmesg命令也用于显示系统诊断信息、操作系统版本号、物理内存大小以及其它信息
语法:
dmesg
例如:
[root@centos ~]# dmesg | more
2.3.2 free命令
free命令主要用来查看系统内存、虚拟内存的大小及占用情况
语法:
free
2.3.3 clock命令
clock命令用于从计算机的硬件获得日期和时间
例如:
[root@centos ~]# clock
2.3.4 ip命令
ip命令用于查看网络IP
例如:
[root@centos ~]# ip a
2.3.5 ifconfig命令
ifconfig命令用于查看网络IP
例如:
[root@centos ~]# ifconfig
2.3.6 w命令
w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令,执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序,单独执行w命令会显示所有的用户,也可指定用户名称,仅显示某位用户的相关信息
语法:
[root@centos ~]# w
2.4 进程管理类命令
2.4.1 ps命令
ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束
语法:
ps [参数]
参数:
-
-A:显示所有的进程(同-e)
-
-a:显示当前终端的所有进程(包含其它用户的)
-
-u:显示进程的用户信息
-
-o:以用户自定义形式显示进程信息
-
-f:显示程序间的关系
-
-x:显示所有程序,不以终端机来区分
-
-aux:显示所有包含其他使用者的行程
例如:
[root@centos ~]# ps -aux | more [root@centos ~]# ps -aux | grep root | more
说明:
USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND |
---|---|---|---|---|---|---|---|---|---|---|
行程拥有者 | 进程ID | CPU使用率 | 内存使用率 | 进程使用的虚拟内存大小,以K为单位 | 驻留空间的大小 | 显示当前常驻内存的程序的K字节数 | 终端号码 | 进程状态 | 执行时间 | 所执行的指令 |
STAT进程状态包括下面的状态:
D:不可中断 Uninterruptible sleep(usually IO)
R:正在运行,或在队列中的进程
S:处于休眠状态
T:停止或被追踪
Z:僵尸进程
W:进入内存交换(从内核2.6开始无效)
X:死掉的进程
<:高优先级
N:低优先级
L:有些页被锁进内存
s:包含子进程
+:位于后台的进程组
l:多线程,克隆线程
2.4.2 kill命令
kill命令用于结束进程
语法:
kill [参数] [pid]
例如:
[root@centos ~]# kill -9 123456 #彻底杀死进程号为123456的进程
2.4.3 top命令
top可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具,通过top命令所提供的互动式界面,可以用热键管理
语法:
top
说明:
(1)第一行:
第1行:top - 19:31:16 up 21:10, 2 users, load average : 0.00, 0.00, 0.00
内容 | 含义 |
---|---|
19:31:16 | 表示当前时间 |
up 21:10 | 系统运行时间 格式为时:分 |
2 users | 当前登录用户数 |
load average: 0.00, 0.00, 0.00 | 系统负载,即任务队列的平均长度。三个数值分别为1分钟、5分钟、15分钟前到现在的平均值 |
(2)第二、三行:
第2、3行为进程和CPU的信息,当有多个CPU时,这些内容可能会超过两行
第2行:Tasks: 109 total, 1 running, 108 sleeping, 0 stopped, 0 zombie
内容 | 含义 |
---|---|
109 total | 进程总数 |
1 running | 正在运行的进程数 |
108 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
第3行:%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st
内容 | 含义 |
---|---|
0.0 us | 用户空间占用CPU百分比 |
0.0 sy | 内核空间占用CPU百分比 |
0.0 ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
99.7 id | 空闲CPU百分比 |
0.0 wa | 等待输入输出的CPU时间百分比 |
0.3 hi | 硬中断(Hardware IRQ)占用CPU的百分比 |
0.0 si | 软中断(Software Interrupts)占用CPU的百分比 |
(3)第四、五行:
第4、5行为内存信息
第4行:MiB Mem: 1775.3 total, 1369.3 free, 162.4 used, 243.6 buff/cache
内容 | 含义 |
---|---|
1775.3 tota | 物理内存总量 |
1369.3 free | 空闲内存总量 |
162.4 used | 使用的物理内存总量 |
243.6 buff/cache | 用作内核缓存的内存量 |
第5行:MiB Swap: 1640.0 total, 1640.0 free, 0.0 used. 1466.1 avail Mem
内容 | 含义 |
---|---|
1640.0 total | 交换区总量 |
1640.0 free | 空闲交换区总量 |
0.0 used | 使用的交换区总量 |
1466.1 avail Mem | 代表可用于进程下一次分配的物理内存数量 |
(4)第六行:
第6行为进程信息
第6行:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
列名 | 含义 |
---|---|
PID | 进程id |
USER | 进程所有者的用户名 |
PR | 优先级 |
NI | nice值(负值表示高优先级,正值表示低优先级) |
VIRT | 进程使用的虚拟内存总量,单位kb(VIRT=SWAP+RES) |
RES | 进程使用的、未被换出的物理内存大小,单位kb(RES=CODE+DATA) |
SHR | 共享内存大小,单位kb |
S | 进程状态(D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程) |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 命令名/命令行 |
2.4.4 lsof命令
查看进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP),找回/恢复删除的文件,是十分方便的系统监视工具
注:因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行,需要恢复已删除的文件前提条件是还有进程打开这个文件。比如遭到黑客入侵往往总是会删除一些日志、木马文件等,假设ssh登录日志被删除,使用lsof查看,可以看到最后面有(deleted)状态
语法:
lsof
lsof | more
恢复已删除的文件(rm -rf /var/log/messages):
查看pid
lsof | grep /var/log/messages
pid是XXX
查看XXX进程打开的文件描述
cd /proc/XXX/fd
使用ls -l命令查看被删除的文件,deleted状态文件是被删除的文件
ls -l
将x的内容拷贝回原目录完成恢复
cp x /var/log/
更改文件名
mv x [原文件名]
例如:
[root@centos ~]# lsof kalpa #查看哪些进程打开了kalpa文件 [root@centos ~]# lsof -c sshd #查看sshd服务所打开的文件 [root@centos ~]# lsof -c sshdlsof -i :22 #查看22端口有哪些进程在访问 [root@centos ~]# lsof -p 1168 #查看1168进程号所打开的文件 [root@centos ~]# lsof -u 0 #查看uid为0的用户打开的文件 [root@centos ~]# lsof|grep /var/log/ #查看/var/log/下的文件被哪些进程打开
说明:
(1)如果输入lsof命令提示未找到命令,需要进行安装,安装命令为
[root@centos ~]# yum -y install lsof
(2)显示信息:
COMMAND | PID TID TASKCMD | USER | FD | TYPE | DEVICE | SIZE/OFF | NODE | NAME |
---|---|---|---|---|---|---|---|---|
进程的名称 | 进程ID | 进程所有用户 | 文件描述符,应用程序通过文件描述符识别该文件 | 文件类型 | 指定磁盘的名称 | 文件的大小 | 索引节点(文件在磁盘上的标识) | 打开文件的确切名称 |
2.5 其它常用命令
2.5.1 clear命令
clear命令用于清除字符终端屏幕内容
语法:
clear
2.5.2 uname命令
uname命令用于显示系统信息
例如:
[root@centos ~]# uname -a
2.5.3 shutdown命令
shutdown命令用于在指定的时间关闭系统
语法:
shutdown [参数] [时间] [警告信息]
参数:
-
-r:系统关闭后重新启动
-
-h:关闭系统
时间形式:
-
now:表示立即
-
hh:mm:指定绝对时间,hh表示小时,min表示分钟
-
+m:表示m分钟后
例如:
[root@centos ~]# shutdown -h now #关闭系统
2.5.4 history命令
history命令用于显示历史指令, 可以保留的历史命令数和环境变量HISTSIZE有关
语法:
history [参数]
参数:
-
n:打印最近的n条历史指令
-
-c:清空当前历史指令
例如:
[root@centos ~]# history
[root@centos ~]# history 5
[root@centos ~]# history -c
2.5.5 curl命令
curl命令是一个利用URL规则在命令行下工作的文件传输工具,它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具,作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征
语法:
curl [参数] [url]
参数:
-
-i:显示头部信息
-
-v:显示请求全过程解析
-
-O:下载
例如:
[root@centos ~]# curl https://www.sdcit.edu.cn/ [root@centos ~]# curl https://www.sdcit.edu.cn/ -i [root@centos ~]# curl https://www.sdcit.edu.cn/ -v [root@centos ~]# curl -O https://www.sdcit.edu.cn/
2.5.6 wget命令
wget命令用来从指定的URL下载文件,wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕,如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载,这对从那些限定了链接时间的服务器上下载大文件非常有用
语法:
wget [参数] [下载地址]
参数:
-
-O:指定文件名
-
-b:后台下载,可使用tail -f wget-log查看进度
-
-c:继续执行上次终端的任务,可以在下载中断后再次使用
例如:
[root@centos ~]# wget https://www.sdcit.edu.cn/ #wget下载https://www.sdcit.edu.cn/网页
[root@centos ~]# wget -O https://www.sdcit.edu.cn/ school.html #如果下载的文件名是乱码,则需要给它自定义文件名,加入-O的参数即可指定文件名
[root@centos ~]# wget -O -b https://www.sdcit.edu.cn/ school.html #文件比较大时,加参数-b,进行后台下载,可使用tail -f wget-log查看后台下载进度
[root@centos ~]# wget -O https://www.sdcit.edu.cn/ school.html(下载) --> Ctrl+C(中断)
[root@centos ~]# wget -O -c https://www.sdcit.edu.cn/ school.html #加入参数-c,继续执行上次终端的任务,可以在下载中断后再次使用(继续下载)
2.5.7 who命令
who命令用于查看当前登入主机的用户终端信息
语法:
who [参数]
例如:
[root@centos ~]# who
2.5.8 last命令
last命令用于显示用户最近登录信息,单独执行last命令,它会读取/var/log/wtmp的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来
语法:
last [参数]
例如:
[root@centos ~]# last [root@centos ~]# last -5 #只显示5行
2.5.9 echo命令
echo命令用于输出指定内容(字符串或变量提取后的值)
语法:
echo [字符串|$变量]
例如:
[root@centos ~]# echo test #把指定的字符串“test”输出到终端屏幕
[root@centos ~]# echo test > test.txt #把指定的字符串内容覆盖到test.txt文件中
[root@centos ~]# echo test >> test.txt #把指定的字符串内容追加到test.txt文件中
[root@centos ~]# echo 变量的方式提取变量shell的值,并将其输出到屏幕上
说明:
利用>>和>可以将输出内容写入到文件中(使用>>和>可以将命令的输出结果保存于文件中)
-
'>' #为覆盖
-
'>>' #为追加
2.5.10 init命令
init命令用于关机/重启
用法:
init 0 #关机
init 6 #重启
运行级别说明:简单来说,运行级别就是操作系统当前正在运行的功能级别,级别从0到6,具有不同的功能
Linux的7个运行级别:
-
0:系统停机状态,系统默认运行级别不能设置为0,否则不能正常启动,机器关闭
-
1:单用户工作状态,root权限,用于系统维护,禁止远程登陆,像Windows下的安全模式登录
-
2:多用户状态,没有NFS支持
-
3:完整的多用户模式,有NFS,登陆后进入控制台命令行模式
-
4:系统未使用
-
5:X11控制台,登陆后进入图形GUI模式,XWindow系统
-
6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动,运行init6机器就会重启
2.5.11 crontab命令
crontab被用来提交和管理用户的需要周期性执行的任务,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务
语法:
crontab -e:编辑当前用户的cron表
crontab -l:查看当前用户的cron表
crontab -r:删除当前用户的cron表
crontab -u <user> -l:查看其它用户计划任务
crontab配置文件说明:
(一)crontab被用来提交和管理用户的需要周期性执行的任务,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务
crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,可以在以下文件夹内找到相关配置文件
-
/var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名
-
/etc/crontab 文件负责调度各种管理和维护任务
-
/etc/cron.d/ 目录用来存放任何要执行的crontab文件或脚本
-
还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期/月执行一次
(二)编辑cron的格式为:
分 时 日 月 周 命令
-
*:代表任意时间
-
,:代表不联系的时间点,2,3 表示2和3
-
-:代表连续的时间段,如:2-4表示2,3,4
-
*/n:代表每隔单位时间
(三)例如:
(例1)每隔一分钟往1文本里输入一条hello 的信息
*/1 * * * * echo "hello" >> /root/1
(例2)每小时的第一分钟执行一次
1 * * * * echo "hello" >> /root/1
(例3)每小时的第一分钟跟第二分钟执行
1,2 * * * * echo "hello" >> /root/1
(例4)每1分钟执行一次myCommand
* * * * * myCommand
(例5)每小时的第3和第15分钟执行
3,15 * * * * myCommand
(例6)在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
(例7)每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * myCommand
(例8)每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
(例9)每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
(例10)每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
(例11)每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
(例12)每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
(例13)每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
(例14)每一小时重启smb
0 */1 * * * /etc/init.d/smb restart
(例15)晚上11点到早上7点之间,每隔一小时重启smb
0 23-7/1 * * * /etc/init.d/smb restart
2.5.12 systemctl命令
设置服务开机自启命令,在systemctl命令中,enable代表开机自启,disable代表取消开机自启
语法:
systemctl enable [服务名]:设置某服务开机自启
例如:
[root@centos ~]# systemctl enable nginx
说明,老版本的系统中,控制服务启动的命令还有如下内容:
chkconfig
/etc/init.d/
/etc/rc.d/init.d
开机自启文件说明:
/etc/rc.d/rc.local 用于添加开机启动命令,/etc/rc.local是/etc/rc.d/rc.local的软链接,软连接相当于windows的快捷方式,系统开机后会自动执行/etc/rc.local,换句话说,只要将你想执行的命令写入这个文件(vi /etc/rc.local),就可以做到开机自动执行
例如:
-
此处写入echo 'hello' >> /root/hello
-
如果你是第一次使用这个文件,需要对其加上执行权限:chmod +x /etc/rc.local
-
然后重启服务器,发现写入/etc/rc.local 的命令在开机时被执行了
2.5.13 netstat命令
netstat命令用来打印Linux中网络系统的状态信息,可得知整个Linux系统的网络情况
语法:
netstat [参数]
参数:
-
-a或--all:显示所有连线中的Socket
-
-l或--listening:显示监控中的服务器的Socket
-
-n或--numeric:直接使用ip地址,而不通过域名服务器
-
-t或--tcp:显示TCP传输协议的连线状况
-
-p或--programs:显示正在使用Socket的程序识别码和程序名称
例如:
[root@centos ~]# netstat -an [root@centos ~]# netstat -anltp
说明:
Proto | Recv-Q | Send-Q | Local Address | Foreign Address | State | PID/Program name |
---|---|---|---|---|---|---|
协议 | 网络接收队列 | 网路发送队列 | 本地地址 | 外部地址 | 端口状态 | 进程ID/程序名 |
(1)协议:
主要有tcp协议与udp协议, 网络协议是通信计算机双方必须共同遵从的一组约定
如怎么样建立连接、怎么样互相识别等,只有遵守这个约定,计算机之间才能相互通信交流
(2)recv-Q:
表示网络接收队列收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走
如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击
(3)send-Q:
表示网路发送队列,对方没有收到的数据或者说没有Ack的,还是本地缓冲区。
如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快
(4)本地地址与外部地址:
分别以本地IP+端口,外部IP+端口的形式表达
-
IP地址:IP协议提供的一种统一的地址格式,是由4组从0到255的数字组成,以0.0.0.0至255.255.255.255的形式表达,可以表示计算机的网络位置(地址)的地址格式
-
端口(port):可以认为是设备与外界通讯交流的出口,如果把IP地址比作一间房子,端口就是出入这间房子的门,计算机上的各类服务借由此“门”与外界通信。一个IP可以有65535(2^16^)个端口,在一个计算机上,每个服务都会启用一个端口
(5)state(当前端口状态)有以下几种状态:
端口状态 | 意义 |
---|---|
LISTEN | 侦听来自远方的TCP端口的连接请求 |
SYN-SENT | 再发送连接请求后等待匹配的连接请求 |
SYN-RECEIVED | 再收到和发送一个连接请求后等待对方对连接请求的确认 |
ESTABLISHED | 代表一个打开的连接 |
FIN-WAIT-1 | 等待远程TCP连接中断请求,或先前的连接中断请求的确认 |
FIN-WAIT-2 | 从远程TCP等待连接中断请求 |
CLOSE-WAIT | 等待从本地用户发来的连接中断请求 |
CLOSING | 等待远程TCP对连接中断的确认 |
LAST-ACK | 等待原来的发向远程TCP的连接中断请求的确认 |
TIME-WAIT | 等待足够的时间以确保远程TCP接收到连接中断请求的确认 |
CLOSED | 没有任何连接状态 |
2.5.14 which命令
which用于查找并显示给定命令的绝对路径,可以看到某个系统命令是否存在
语法:
which [命令]
例如:
[root@centos ~]# which cd
2.5.15 xargs命令
xargs是给其它命令传递参数的一个过滤器,也是组合多个命令的一个工具,xargs擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数,xargs可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行,xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代,xargs是构建单行命令的重要组件之一
语法:
[命令] | xargs [命令]
参数:
-
-P:可以使xargs参数同时执行多个线程,使执行时间变短
例如:
[root@centos ~]# cat kalpa | xargs -n3 #将内容进行排序,每行三个字段
[root@centos ~]# ls * | xargs -n1 cat #将前面的结果传递作为子参数传递给后面的命令
[root@centos ~]# cat kalpa | xargs -n1 echo 'hello'
[root@centos ~]# time cat kalpa | xargs -P 9 -n1 echo 'hello'
2.2.16 rdesktop命令
rdesktop命令用于在linux下链接windows远程桌面
语法:
rdesktop [ip]
例如:
[root@centos ~]# rdesktop 192.168.0.9
2.2.17 获取帮助参数
使用-h,–help和man参数可以查看命令的帮助文件
例如:
[root@centos mail]# ping -h
[root@centos mail]# cp --help
[root@centos mail]# man cp
2.2.18 systemctl命令
在 Centos8上使用systemctl命令管理防火墙
语法:
systemctl status firewalld.service #查看防火墙状态
systemctl start firewalld.service #启动防火墙服务
systemctl stop firewalld.service #关闭防火墙服务
systemctl restart firewalld.service #重启防火墙服务
systemctl is-enabled firewalld.service #查看开机时是否启用防火墙服务
systemctl enable firewalld.service #开机时启用防火墙服务
systemctl disable firewalld.service #开机时禁用防火墙服务
systemctl list-unit-files|grep enabled #查看开机启动服务列表
systemctl --failed #查看开机启动失败服务列表
2.2.19 getenforce命令
查看selinux状态。SELINUX=enforcing为打开;SELINUX=disabled为关闭
语法:
getenforce
说明:
/etc/selinux/config配置文件查看selinux状态
二、系统配置与管理
1 用户和用户组
1.1 用户账户和组群
概念 | 描述 |
---|---|
用户名 | 用来标识用户的名称,可以是字母、数字组成的字符串,区分大小写 |
密码 | 用于验证用户身份的特殊验证码 |
用户标识(UID) | 用来表示用户的数字标识符 |
用户目录 | 用户的私人目录,也是用户登录系统后默认所在的目录 |
登录shell | 用户登录后默认使用的shell程序,默认为/bin/bash |
组群 | 具有相同属性的用户属于同一个组群 |
组群标识(GID) | 用来表示组群的数字标识符 |
root用户的UID为0,系统用户的UID从1到999;普通用户的UID可以在创建时由管理员指定,如果不指定,用户的UID默认从1000开始顺序编号。在Linux系统中,创建用户账户的同时也会创建一个与用户同名的组群,该组群是用户的主组群。普通组群的GID默认也是从1000开始编号。
1.2 用户账户文件和组群文件
1.2.1 /etc/passwd文件
/etc/passwd文件中保存系统中所有的用户和用户主要信息,每行代表一个用户,每行有七个字段,以:为分隔符,每个字段所代表的含义不同
/etc/passwd文件内容:
用户名:加密口令:UID:GID:用户的描述信息:主目录:命令解释器(登录shell)
/etc/passwd文件字段说明:
字段 | 说明 |
---|---|
第一字段:用户名 | 用户账号名称,用户登录时所使用的用户名 |
第二字段:加密口令 | 用户口令,考虑系统的安全性,现在不使用该字段保存口令,而用字母“x”来填充字段,真正的密码保存在/etc/shadow文件中 |
第三字段:UID | 用户号,唯一表示某用户的数字标识 |
第四字段:GID | 用户所属的私有组号,该数字对应group文件的GID |
第五字段:用户的描述信息 | 可选的关于用户全名、用户电话等描述性信息 |
第六字段:主目录 | 用户的宿主目录,用户成功登陆后的默认目录 |
第七字段:命令解释器,可以理解为用户登录之后所拥有的权限 | 用户所使用的shell,默认为“/bin/bash” |
1.2.2 /etc/shadow文件
/etc/shadow是用户保存密码的文件,每行代表一个用户,以:为分隔符,分为九个字段
/etc/shadow文件字段说明:
字段 | 说明 |
---|---|
第一字段 | 用户登录名 |
第二字段 | 该用户加密后的密码,*表示非登录用户,!!表示没有密码的用户 |
第三字段 | 密码何时修改过,这里显示的数字是从1970 年 1 日 1 日作为标准时间算的,每过去一天时间戳加1。如果是10000,那么就是1970年1月1日后的第10000天 |
第四字段 | 两次修改密码的时间间隔。如果是5,密码修改后5天内不能再更改;如果是0,随时都可修改 |
第五字段 | 密码的有效期,是从第三字段之后开始算的,默认是99999 |
第六字段 | 密码到期修改前的警告天数,根据第五个字段算的。默认为7,是到期前的7天开始警告 |
第七字段 | 密码到期后的宽限天数。为0是到期立马失效;-1是永远不失效 |
第八字段 | 用户失效的时间,同样是以时间戳表示 |
第九字段 | 保留域,用于功能拓展(暂时没有功能) |
1.2.3 /etc/group文件
linux用户组的所有信息都存放在/etc/group文件中,也就是passwd文件中GID来源,以:为分隔符,将文件每行分为四个字段
/etc/group文件内容:
组群名称:组群口令(一般为空,用x占位):GID:组群成员列表
/etc/group文件字段说明:
字段 | 说明 |
---|---|
第一字段 | 用户组名称 |
第二字段 | 用户组密码 |
第三字段 | 对应的GID |
第四字段 | 用户列表,本字段可以为空 |
1.2.4 /etc/gshadow文件
/etc/passwd文件存储用户基本信息,同时考虑到账户的安全性,将用户的密码信息存放另一个文件 /etc/shadow中。/etc/gshadow文件也是如此,组用户信息存储在/etc/group文件中,而将组用户的密码信息存储在/etc/gshadow 文件中,每行代表一个组用户的密码信息,各行信息用:作为分隔符分为4个字段
/etc/gshadow文件内容:
组群名称:加密后的组群口令(没有就用!):组群的管理员:组群成员列表
/etc/gshadow文件字段说明:
字段 | 说明 |
---|---|
第一字段 | 用户组名称 |
第二字段 | 用户组密码,通常不会设置 |
第三字段 | 组管理员 |
第四字段 | 用户列表,本字段可以为空 |
1.2.5 用户登录信息文件(/var/log/wtmp)
wtmp文件是二进制文件,该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加的速度取决于系统用户登录的次数,日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前
1.3 管理用户账户
1.3.1 新建用户(useradd命令)
useradd命令用来建立用户帐号,再用passwd命令设定帐号的密码,可用userdel删除帐号,使用useradd指令所建立的帐号,保存在/etc/passwd文本文件中
语法:
useradd [参数] [username]
参数:
-
-u [UID]:指定用户的UID,它必须是唯一的,且大于999
例如:
[root@centos ~]# useradd kalpa #创建用户kalpa
[root@centos ~]# useradd -o -u 0 kalpa #建立UID为0的用户kalpa
[root@centos ~]# cat /etc/passwd | grep kalpa #查看
[root@centos ~]# useradd -u 0 -g 1111 -d /home/kalpa -s /bin/bash -p xxx -f -1 kalpa #新建用户kalpa,UID为0,指定其所属的私有组为zero(zero组的标识符为1111),用户的主目录为/home/kalpa,用户的Shell为/bin/bash,用户的密码为xxx,账户永不过期
说明:
-
建立UID为0的用户,实际上是建立的是root用户的别名用户
-
UID与GID的数字可以相同,但是UID与GID为0,只分配给root用户及root组
-
1-499是属于系统用户的,500以后可以分配给普通用户,一般新建用户默认是从1000开始的
1.3.2 设置用户账户口令(passwd命令)
passwd命令用于修改或添加用户的密码
语法:
passwd [参数] [username]
例如:
[root@centos ~]# passwd #root用户修改自己的口令
[root@centos ~]# passwd kalpa #root用户修改kalpa用户的口令
说明:
-
当以root用户登录时,可以修改系统内任意用户的密码,且无需遵守密码复杂度要求
-
当以普通用户登录时,只能修改自己的密码,且必须遵守密码复杂度要求
-
当passwd命令不跟用户名时,代表修改当前用户密码
1.3.3 修改用户账户(usermod命令)
usermod命令可以更改用户的各项信息
语法:
usermod [参数] [用户名]
参数:
-
-l [帐号名称]:修改用户帐号名称
-
-c [备注]:修改用户帐号的备注文字
-
-g [群组]:#修改用户所属的群组
-
-G [群组]:修改用户所属的附加群组
-
-d [登入目录]:修改用户登入时的目录
-
-e [有效期限]:修改帐号的有效期限
-
-f [缓冲天数]:修改在密码过期后多少天即关闭该帐号
-
-L:锁定用户密码,使密码无效
-
-s [shell]:修改用户登入后所使用的shell
-
-u [uid]:修改用户ID
-
-U:解除密码锁定,允许其登录系统
例如:
[root@centos ~]# usermod -l zero kalpa #将kalpa用户名修改为zero
[root@centos ~]# usermod -d /home/zero zero #修改家目录
1.3.4 禁用和恢复用户账户(passwd命令、usermod命令、修改用户账户配置文件)
(1)使用passwd命令
[root@centos ~]# passwd -l kalpa #使用passwd命令禁用kalpa账户
[root@centos ~]# passwd -u kalpa #利用passwd命令的-u参数解除账户锁定,重新启动kalpa用户
(2)使用usermod命令
[root@centos ~]# usermod -L kalpa #禁用kalpa账户
[root@centos ~]# usermod -U kalpa #解除kalpa账户的锁定
(3)直接修改用户账户配置文件
-
/etc/passwd文件把第一字段前加“!”禁用用户,删除“!”恢复用户账户
-
禁用账户登录系统,只需修改启动shell,设置为/bin/false或者/dev/null即可
1.3.5 删除用户账户(userdel命令)
要删除一个账户,可以直接删除/etc/passwd和/etc/shadow文件中要删除的用户所对应的行,或者用userdel命令删除用户
语法:
userdel [参数] [用户名]
参数:
-
-r:删除用户账户的同时,将用户主目录以及其下的所有文件和目录全部删除掉,如果用户使用E-mail,同时也将/var/spool/mail目录下的用户文件删掉
例如:
[root@centos ~]# userdel -r kalpa
1.4 管理组群
1.4.1 创建组群(groupadd命令)
语法:
groupadd [组名]
例如:
[root@centos ~]# groupadd zero #新建一个zero的用户组
[root@centos ~]# useradd kalpa -g zero #新建一个kalpa的用户,并加入到zero组里
[root@centos ~]# cat /etc/passwd | grep kalpa #查看
1.4.2 删除组群(groupdel命令)
使用groupdel命令可以删除用户组
例如:
[root@centos ~]# groupdel zero
1.4.3 修改组群(groupmod命令)
groupmod命令可以修改用户组的各项信息
语法:
groupmod [参数] [组名]
参数:
-
-g [GID],--gid [GID]:将组ID改为 GID
-
-h, --help:显示此帮助信息并推出
-
-n [NEW_GROUP],--new-name [NEW_GROUP]:改名为NEW_GROUP
-
-o, --non-unique:允许使用重复的 GID
-
-p, --password PASSWORD:将密码更改为(加密过的) PASSWORD
-
-R,--root CHROOT_DIR:chroot 到的目录
-
-P, --prefix PREFIX_DIR:prefix directory where are located the /etc/* files
例如:
[root@centos ~]# groupmod -g 5258 zero
[root@centos ~]# groupmod --new-name new_kalpa kalpa #修改组名称
[root@centos ~]# groupmod -n new_zero zero #修改组名称
1.4.4 组群添加用户(gpasswd命令)
不带任何参数的useradd命令创建用户时,会同时创建一个和用户账户同名的组群,称为主组群。当一个组群中必须包含多个用户时,则需要使用附属组群。在附属组群中增加、删除用户都用gpasswd命令。
语法:
gpasswd [参数] [用户] [组名]
选项:
-
-a:把用户加入组
-
-d:把用户从组中删除
-
-r:取消组的密码
-
-A:给组指派管理员
例如:
[root@centos ~]# gpasswd -a kalpa zero #将kalpa用户加入zero组
[root@centos ~]# gpasswd -A kalpa zero #指派kalpa用户为管理员
说明:
只有root用户和管理员才能够使用此命令。
1.5 su命令与sudo命令
1.5.1 su命令
su命令是切换用户的命令,不局限于sudo用户使用,任何用户想切换到其他用户都可以使用这个命令,切换用户时,需要验证要切换用户的密码
语法:
su [username]
su - [username]
说明:
-
su [username]切换后,使用原来的环境变量
-
su - [username]切换后,使用新用户的环境变量
1.5.2 sudo命令
可以使sudo用户以root权限执行一些命令,第一次执行需要验证sudo用户的密码
语法:
sudo [command]:sudo用户虽然使用了root权限执行了命令,但依然使用的是自己的环境
sudo -i:切换为root后,会切换到root的家目录,并使用root用户的环境,切换root用户时会校验sudo用户的密码
sudo -s:切换用户后,不会切换目录,仍然使用sudo用户自己的环境,切换root用户时需要验证sudo用户自己的密码
例如:
[root@centos ~]# sudo head -n1 /etc/shadow
sudo配置文件说明:
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,root用户需要设置普通用户的sudo权限,设置之后,普通用户在命令前加sudo即可使用管理员权限执行改命令,sudo配置文件存在于/etc/sudoers,root用户想赋予普通用户sudo权限,需要修改大概位于98行的内容:
97 ## Allow root to run any commands anywhere 98 root ALL=(ALL) ALL 99 100 ## Allows members of the 'sys' group to run networking, software, 101 ## service management apps and more. 102 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS 103 104 ## Allows people in group wheel to run all commands 105 %wheel ALL=(ALL) ALL 106 107 ## Same thing without a password 108 # %wheel ALL=(ALL) NOPASSWD: ALL
给kalpa用户添加sudo权限:
kalpa ALL=(ALL) ALL
给zero用户组添加sudo权限:
%zero ALL=(ALL) ALL
注:
(1)配置文件中规定的sudo用户和sudo用户组中的用户都可以借用root权限执行命令
(2)既不是sudo用户,也不在sudo用户组中,无法使用root权限,尝试使用高权限的行为会报告给root用户,记录存放在文件cat /var/spool/mail/root中
1.6 常用的账户管理命令
1.6.1 id命令
id命令用于显示一个用户的UID和GID以及用户所属列表
语法:
id [参数] [用户名]
例如:
[root@centos ~]# id #显示当前用户的ID信息
[root@centos ~]# id kalpa #显示kalpa用户的UID、GID信息
1.6.2 whoami命令
whoami命令用于显示当前用户的名称。whoami命令与id -un命令的作用相同
例如:
[root@centos ~]# whoami #显示当前用户
2 文件系统
2.1 文件系统目录结构
2.1.1 文件存储结构
Linux系统中的各类文件被Linux使用目录树进行管理,所谓的目录树就是以根目录/为主,向下呈现分支状的一种文件结构
2.1.2 常见的目录名称以及相应内容
目录名称 | 应放置文件内容 |
---|---|
/ | Linux文件的最上层根目录 |
/boot | 开机所需文件——系统启动过程中所需要的所有内容(内核、开机菜单以及所需配置文件等) |
/dev | 设备及接口文件或者专有文件的存放位置 |
/etc | 系统的配置文件 |
/home | 用户家目录 |
/bin | Binary缩写,存放用户的可运行程序及命令文件(shell命令) |
/lib | 共享库和内核模块,在系统的启动阶段和运行根文件系统的各种命令时,都需要用到这些共享库,所以必须与根文件放在一起 |
/sbin | 开机过程中需要的命令 |
/media | /media与/mnt是常见的挂载点(用于挂载设备文件的目录) |
/opt | 系统附加软件的存放地址(放置第三方软件) |
/root | root用户(系统管理员)专有的家目录,对自己的家目录拥有绝对的控制权 |
/srv | 某些服务进程启动以后,它们需要读取的数据会放在此目录中(网络服务的数据文件目录) |
/tmp | 存放临时文件,任何程序都不用对此目录下的任何文件或目录负责(所有人均可使用的“共享”临时目录) |
/proc | 虚拟文件系统,如系统内核、进程、外部设备及网络状态等 |
/sbin /usr/sbin和/usr/local/sbin | 必备的系统软件存放处,用户系统维护的软件和某些只限root用户使用命令的存储 |
/usr/local | 用户自行安装的软件 |
/usr/sbin | Linux系统开机时不会使用到的软件/命令/脚本 |
/usr/share | 帮助与说明文件,也可存放共享文件 |
/var | 包含着系统中绝大多数的随时变化着的数据,比如系统日志。/var的某些内容是不能共享给其它系统的,典型的就是/var/logs /var/run;某些是可以共享的,如/var/spool/news |
/lost+found | 当文件系统发生错误时,将一些丢失的文件片段存放在这里 |
2.1.3 树形目录优缺点
Linux系统没有盘符,只有一个根目录(/),所有的文件(资源)都存储在以根目录(/)为树根的树形目录结构中
-
优点:
开发者仅需要使用一套 API 和开发工具即可调取 Linux 系统中绝大部分的资源。例:
Linux 中几乎所有读(读文件,读系统状态,读 socket,读PIPE)的操作都可以用read函数来进行;几乎所有更改(更改文件,更改系统参数,写 socket,写 PIPE)的操作都可以用write函数来进行
-
缺点:
使用任何硬件设备都必须与根目录下某一目录执行挂载操作,否则无法使用。例:
本身Linux具有一个以根目录为树根的文件目录结构,每个设备也同样如此,它们是相互独立的,如果我们想通过Linux上的根目录找到设备文件的目录结构,就必须将这两个文件系统目录合二为一,这就是挂载的真正含义
2.2 文件权限
2.2.1 文件后缀
Linux系统中文件后缀是没有作用的,后缀名只是为了能让自己能够更好的区别文件的作用
2.2.2 文件的各种属性信息
命令行输入ls -al显示文件权限对应七个字段,每个字段以空格为分隔,内容如下:
文件类型权限 连接数 文件拥有者 文件所属群组 文件容量 文件最后被修改的时间(月 日 时分) 文件名
(一)第一字段:分别是文件类型,属主、属组和其他人的读写执行权限
第一字段中,会出现drwxrwxrwx.形式,共是11个字符
(1)第一字符:常见的有d和-两种形式,为d代表为目录,为-代表为文件,此外其它形式:
-
-:常规文件
-
b:块特殊文件
-
c:字符特殊文件
-
C:高性能(”连续数据“)文件
-
d:目录
-
D:门(Solaris 2.5及以上版本)
-
l:符号链接
-
M:离线(”前已“)文件(Cray DMF)
-
n:网络专用文件(HP-UX)
-
p:FIFO(命名管道)
-
P:断开(Solaros 10及以上)
-
s:套接字
-
?:其他文件
(2)第二到第十个字符:共有9个字符,每三个为一组,代表属主 、属组 、其他人的权限,常见的权限有r w x,分别为读权限、写权限、执行权限
例如:-rwxrw-r--.
表示此文件是一个文件而非目录
文件的属主(拥有者/创建者)具备对其的读、写、执行权限
文件的属组(文件所有者同一个用户组的用户)具备读、写权限,而没有执行权限
文件属主与属组之外的用户,具有读权限,但无法修改与执行
第四、第七和第十个字符:常见的x为执行权限,还有其它情况:
-
S:设置了SUID或SGID,没有执行权限
-
s:设置了SUID或SGID,具有执行权限
-
T:设置了粘滞位,没有执行权限
-
t:设置了粘滞位,具有执行权限
说明:
模式 | 名字 | 说明 |
---|---|---|
r | 读 | 设置为可读权限 |
w | 写 | 设置为可写权限 |
x | 执行权限 | 设置为可执行权限 |
X | 特殊执行权限 | 只有文件为目录文件或者其它类型的用户有可执行权限时,才可将文件权限设置可执行 |
s | setuid/gid | 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限 |
t | 粘贴位 | 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位 |
(3)第十一个字符,含义:
-
.:没有任何其他替代访问方法的SELinux安全上下文(没有设置ACL)
-
+:具有任何其他组合访问方法的SELinux安全上下文(设置了ACL)
(二)第二字段:文件【文件内容被系统记录的次数】;【目录】目录中文件属性的字节数
(三)第三字段:属主,文件的所有者
(四)第四字段:属组,文件的所有组
(五)第五字段:内容大小
(六)第六字段:文件最后一次被修改的时间
(七)第七字段:文件名字
2.2.3 修改文件或目录权限(chmod命令)
chmod命令用来变更文件或目录的权限
(1)数字表示法
语法:
chmod [选项] [文件]
chmod [-R] [权限] [filename] #使用-R参数代表递归,将目录以下所有文件都赋予同样的权限
例如:
[root@centos ~]# chmod 755 kalpa
[root@centos ~]# chmod -R 755 kalpa
[root@centos ~]# chmod 777 kalpa
说明:
数字表示法是指读取(r)、写入(w)和执行(x)分别以数字4、2、1来标识,没有授权的部分就表示为0,然后把所授予的权限相加而成
r=4(可读);w=2(可写);x=1(执行)
可读可写可执行则为7(rwx)
可读可写则为6(rw-)
可读可执行则为5(r-x)
可写可执行则为3(-wx)
(2)文字表示法
语法:
chmod [选项] [文件]
chmod +[权限] [filename]
chmod [用户类型]=[权限] [filename]
例如:
[root@centos ~]# chmod +x kalpa [root@centos ~]# chmod a+r kalpa [root@centos ~]# chmod ug=rwx,o=x kalpa
说明:
operator | 说明 |
---|---|
+ | 为指定的用户类型增加权限 |
- | 去除指定用户类型的权限 |
= | 指定用户权限设置(将用户类型的所有权限重新设置) |
who | 用户类型 | 说明 |
---|---|---|
u | user | 文件所有者 |
g | group | 文件所有者所在组 |
o | others | 所有其它用户 |
a | all | 所有用户,相当于ugo |
2.3 文件所有者(chown命令)
chown命令用于设置文件所有者
语法:
chown [-R] [username]:[groupname] [filename]
例如:
[root@centos ~]# chown root:kalpa file [root@centos ~]# chown -R root:kalpa file #-R 递归,file目录及其下所有目录、文件
3 系统磁盘
3.1 常用磁盘管理命令
3.1.1 df命令
df命令用于显示磁盘分区上的可使用的磁盘空间(默认显示单位为KB),可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息
语法:
df [参数] [文件名]
参数:
-
-h:使用人类可读的格式
例如:
[root@centos ~]# df #列出各文件系统的占用情况
[root@centos ~]# df -h
3.1.2 du命令
du命令可查看文件使用空间
语法:
du [参数] [文件或目录名称]
参数:
-
-h:以K,M,G为单位,提高信息的可读性
例如:
[root@centos ~]# du -h /etc/passwd
4 ssh服务
4.1 RedHat设置网卡状态命令
4.1.1systemctl命令
语法:
systemctl restart/stop/start/status network #重启/停止/启动/查看状态
4.1.2 service命令
语法:
service network restart/stop/start/status #重启/停止/启动/查看状态
4.1.3 nmcli命令
语法:
nmcli c show #查看状态
nmcli c up/down [网卡名] #启动/关闭
nmcli c reload [网卡名] #重启
例如:
[root@centos ~]# nmcli c modify enp0s3 ipv4.addresses 192.168.0.90/24 [root@centos ~]# nmcli c modify enp0s3 ipv4.gateway 192.168.0.1 [root@centos ~]# nmcli c modify enp0s3 ipv4.dns 8.8.8.8
4.1.4 系统服务控制文件
centos7开始由systemctl命令替换之前版本的chkconfig与service指令,systemctl的服务的位置位于/usr/lib/systemd/system文件中
未来在应急响应的排查中,需要排查的目录需要依照操作系统的版本进行针对性的排查
4.2 Ubuntu设置网卡状态命令
Ubuntu上的网卡配置文件存储于/etc/network/interfaces
用法:
/etc/init.d/networking restart #重启网卡 /etc/init.d/networking start #启动网卡 /etc/init.d/networking stop #关闭网卡
4.3 RedHat网卡配置文件
Centos-Stream-9网卡配置文件存储于/etc/NetworkManager/system-connections/[网卡名].nmconnection,参数如下:
[connection] id=enp0s3 uuid=58bf3234-26ad-1773-9799-5324fba98f67 type=ethernet autoconnect-priority=-999 interface-name=enp0s3 timestamp=1652444249
[ethernet]
[ipv4] address1=10.4.66.90/24,10.4.66.1 dns=223.6.6.6; method=manual
[ipv6] addr-gen-mode=eui64 method=auto
[proxy]
4.4 Ubuntu网卡配置文件
Ubuntu上的网卡配置文件存储于/etc/network/interfaces,主要参数如下:
设置静态IP
auto [网卡名] iface [网卡名] inet static address 192.168.3.90 #ip地址 gateway 192.168.3.1 #网关 netmask 255.255.255.0 #子网掩码
设置动态IP
auto [网卡名] iface eth0 inet dhcp
4.5 ssh命令
ssh命令是Linux的远程连接工具
参数:
-
-l:指定用户,如ssh -l kalpa 192.168.0.6以kalpa用户远程登录,也可写成ssh kalpa@192.168.0.6
-
-p:指定端口号
例如:
ssh 192.168.0.9 #以当前终端用户身份远程连接IP为192.168.0.9的计算机
说明:
-
执行ssh的默认情况下,会使用本地的用户名连接对方的用户名
例如:本地的root连接对面服务器的root,如果两端用户名不一样,则需要使用-l username指定用户名
-
再确认密码后,方能登录成功,而同时变化的文件为:/root/.ssh/known_hosts
-
在第一次登录时,openssh将会提示不知道这台登录的主机,只要输入yes,就会把这台主机的“识别信息”添加到known_hosts文件中
-
第二次登陆后,则无须此步骤,但是如果出现错误,例如主机产生变化,则需要删除/root/.ssh/known_hosts内容
4.6 远程连接smb:
Smb服务为网络文件共享协议,它允许应用程序和终端用户从远端的文件服务器访问文件资源
例如:
kali文件–>其它位置-->连接到服务器处输入:
smb://192.168.0.9/share
三、vi编程与调试
1 vi程序编辑器与shell
1.1vi编辑器的使用
1.1.1 关于vi编辑器
vi编辑器:vi可以执行输出、删除、查找、替换、块操作等众多文本操作,而且可以根据需要进行定制。
vi编辑器具有三种模式:一般模式、编辑模式、指令模式。三种模式可以通过观察vi界面的左下角判断
-
命令行执行vi [文件名] 命令进入vi编辑器并编辑文件,如果没有同名文件则创建。此时,vi编辑器处于一般模式
-
从一般模式输入字母i进入编辑模式,特征是左下角有插入字样。在编辑模式下,可以用方向键移动光标,同时写入字符
-
编辑模式下按 ESC 回到一般模式,一般模式下按:进入命令模式,特征是右下角有:
1.1.2 命令模式常用按键
说明:
-
w #保存 write
-
q #退出 quit
-
wq #保存并退出
-
q! #不保存强制退出
-
set nu #显示行号
-
wq! #强制保存并退出
1.2.3 一般模式常用指令
说明:
-
/txt #搜索“txt”内容
-
gg #光标立马回到第一行
-
2 #光标向下跳2行,以此类推
-
G #移动到最后一行
-
dd #删除当前行
-
d2j #删除当前行和下两行
-
yy #复制一行
-
y2y #复制2行
-
p(小写) #粘贴到光标之后
-
P(大写) #粘贴到光标之前
1.2 管道操作符
使用管道操作符 | 可以把一个命令的标准输出传送到另一个命令的标准输入中,连续的 | 意味着第一个命令的输出为第二个命令的输入,第二个命令的输入为第一个命令的输出,依次类推
例如:
[root@centos ~]# head -n 5 /etc/passwd | tail -n 1 #只显示passwd文本的第五行
四、网络服务器配置与管理
4 DNS服务器
3.1 Ubuntu配置DNS命令
DNS配置文件存储于/etc/resolv.conf
例如:
nameserver 192.168.0.1
3.2 RedHat网络DNS配置文件
简单理解为,电脑想要访问网页,必要设定一个DNS服务器的IP(常见的有114.114.114.114等),这个DNS服务器负责将你输入的网址转换为你的电脑可以识别的IP。经过转换,电脑才能访问网页
Centos的DNS配置文件存储于/etc/resolv.conf nameserver 114.114.114.114
3.3 Ubuntu网络DNS配置文件
DNS配置文件存储于/etc/resolv.conf
nameserver 192.168.0.1
本文作者:HKalpa
本文链接:https://www.cnblogs.com/HKalpa/p/16395763.html
版权声明:本作品采用本人所有操作均在实验环境下进行,用于其它用途后果自负,作者不承担相应的后果。中国大陆许可协议进行许可。
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现