Linux操作系统
更新一篇超长的Linux操作系统的学习笔记,主要是一些概念和基本操作。认真学完的话,离大佬也是更近一步了
Linux操作系统概述
一:Linux操作系统概述
Linux操作系统介绍及作用
目前业界客户端大多采用Windows系统,而服务端大多数使用的是Linux,究其根源主要是开源免费,安全性高,支持多用户,支持关闭任意不需要的功能和对硬件资源要求低等因素。同时,Linux也是众多开源产品首先支持的平台,也是实际意义上的服务器和云平台的标准,包括众多安全设备,其内置的也是Linux操作系统(如防火墙,路由器,交换机,IDS和IPS,网闸等产品),对于网络安全的学习来说,掌握Linux操作系统起着至关重要的作用。
操作系统的作用
- 五大基本功能
- 进程和线程的管理
- 存储管理
- 文件管理
- 设备管理
- 用户接口
- 三个作用
- 资源的管理者
- 向用户提供了一个服务
- 对硬件机器的扩展
内核(Kernel)
内核是操作系统的核心,是基于硬件的第一层软件扩充,提供操作系统的基本功能,是操作系统工作的基础。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
壳(Shell)
提供了命令接口,通俗点来说就是让用户直接操作内核的程序。通用的操作系统都要提供一个称为shell(外壳)的程序,用户使用这个程序来操作计算机系统进行工作。
应用程序(Application)
用户平时接触的程序。
Linux操作系统版本
Linux起源于Unix,因为开源免费的特性,吸引了很多厂商开发维护,渐渐形成了很多版本。
- RedHat:RHEL(Red Hat Enterprise Linux)是商业版Linux系统,多用于企业生产环境,提供完善的商业支持,在性能、稳定性方面有保障。
- Debian:Debian和Ubuntu是一个派系的,但界面可能没有Ubuntu那么华丽,比较稳定,适合用作服务器操作系统。Debian在开源圈子用得十分广泛,也有一大批开源爱好者活跃于其中。
- 中科红旗:红旗Linux由北京中科红旗软件技术有限公司开发,包括桌面版、工作站版、数据中心服务器版、HA集群版和红旗嵌入式Linux等产品。红旗Linux是中国较大、较成熟的Linux发行版之一,2014年被大连五甲万京信息科技产业集团收购。
- Ubuntu:Ubuntu界面比较华丽,包管理器很完善,社区也非常活跃,个人用户较多,从市面上看比较大众化。
- CentOS:CentOS基于RedHat商业版系统的社区编译重发布版,完全开源免费,相较于其他一些免费的Linux发行版会更加稳定,因此一般企业里常用作服务器操作系统。
- Fedora:Fedora与RedHat同属一个派系,背后的支撑企业也是红帽子公司。但Fedora是免费发行版,侧重于新技术的试验和加持,稳定性方面的考量较CentOS稍次要一些。
- SUSE:SUSE背后有大公司支持,目前主要多用于企业用户。
- Arch:Arch适合好奇心强的人尝鲜,官方Wiki做得好,AUR仓库繁荣,适合DIY玩家折腾,确实也吸引了不少粉丝。
- Manjaro:Manjaro可看成是Arch Linux的衍生分支,包含了Arch的常见优点,但对用户更友好,注重体验和稳定性。Manjaro的安装和使用都比较方便,目前使用用户非常多。
- Gentoo:Gentoo适合极客范化的折腾,也比较适合有特殊需要和特殊化定制的需求,总体来说比较小众。但用得很6的大佬们都说好,因为这些大佬们大多有系统洁癖,控制欲很强,什么都需要自己编译、自己定制,这个对他们来说简直就是天堂了。
- Kali:Kali是一个面向安全的基于Debian的Linux发行版,预装了大量的安全软件。其主要功能有三个:数字取证、安全审计、渗透测试。Kali首先是一个操作系统,更确切地说是一个基于Linux kernel的操作系统,从BackTrack发展而来。而BT是2006年推出的一个用于渗透测试及黑客攻防的专用平台,基于Knoppix(Linux的一个发行版)开发。Backtrack从2006年的起始版本BackTrack v.1.0Beta开始,到2012年推出最终版本BackTrack 5 R3 release。之后,2013年offensive Security的Mati Aharoni和Devon Kearns基于Debian重新实现了BackTrack,新的产品命名为Kali,从此Kali成为BackTrack的后继者。
通常情况下,服务器端操作系统(Windows, Linux)不会安装GUI界面,只有一个内核加Shell,再加少量命令行。
二:Linux系统安装
这里以安装CentOS7为例,具体安装过程可参考以下链接:
- https://www.bilibili.com/video/BV1SY411p7F9/?p=119&vd_source=7c5a0745447222c9296499649d0a816
- https://blog.csdn.net/qq_45743985/article/details/121152504
三:使用XShell远程连接Linux
SSH协议介绍
SSH(Secure Shell)是安全外壳协议,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。它通过在网络中创建安全隧道来实现SSH客户端和服务器之间的连接。SSH将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为所有操作系统的标准配置。
XShell使用
贴一篇参考文章: https://blog.csdn.net/weixin_47230291/article/details/126905158
在连接之前最好先配置一下要连接的Linux主机的IP。
Linux配置IP参考:https://blog.csdn.net/u010521062/article/details/114067036
进入XShell后点击新建,进行配置,就连接成功了。
SSH与SCP命令
- SSH命令
- Windows及Linux都自带了针对SSH远程连接的命令。如果电脑上没有安装XShell等工具,可以直接用系统自带的服务进行远程连接。
- Windows连接:
ssh -l 用户名 IP
或ssh root@192.168.2.112
,然后输入密码。 - Linux连接:
ssh root@192.168.2.112
- Windows连接:
- Windows及Linux都自带了针对SSH远程连接的命令。如果电脑上没有安装XShell等工具,可以直接用系统自带的服务进行远程连接。
- SCP命令
- 从Windows上传文件到Linux:
scp F:\Photo\ico\1.ico root@192.168.2.112:/opt
- 从Linux下载文件到Windows:
C:\Users\Denny>scp root@192.168.112.225:/opt/test.html E:\
- 从Windows上传文件到Linux:
移动端SSH客户端工具
- JuiceSSH
- Termius
- …
四:Linux系统操作
文件系统解读
在Linux下运行df -h
命令,可以查看目前Linux中存在的硬盘分区情况及每个分区的磁盘使用情况。例如:
1 | [root@mycentos mysql]# df -h |
filesystem
:文件系统size
:分区大小used
:已使用空间avail
:剩余空间use%
:使用率百分比mounted on
:挂载到哪个目录上
对上述挂载目录的简单说明:
/dev
:所有Linux系统使用的外部设备都以文件的形式存在这个目录中。/dev/shm
:存在于内存中,用于优化系统性能。该分区的大小通常是系统内存的一半大小,用于存储临时数据,速度比硬盘快。/run
:存放运行时数据,属于内核级文件。/sys/fs/cgroup
:存放关于运行过程中CPU、内存等资源的数据,属于内核级文件。/
:根目录,用于存储操作系统文件和其他用户数据。/boot
:存放内核和引导过程所需的文件。/home
:普通用户的根目录,类似Windows下的C:\Users
目录。/run/user/0
:保存用户ID为0(通常是root用户)在运行过程中产生的数据。
Linux目录说明
根目录是整个系统最重要的目录,所有目录都由根目录衍生而来。根目录与开机、还原、系统修复有关,因此FHS(Filesystem Hierarchy Standard)要求根目录保持较小,应用程序安装的软件应避免与根目录放在同一个分区。
根据FHS标准,根目录下应包含以下子目录:
目录 | 应放置文件内容 |
---|---|
/bin | 存放单用户维护模式下可用的指令,供root和普通用户使用,如cat、chmod、chown、date、mv、mkdir、cp、bash等常用命令 |
/boot | 存放开机所需的文件,包括Linux内核文件(如vmlinuz)和开机菜单及设置文件。若使用grub作为开机管理程序,则存在/boot/grub/目录 |
/dev | 所有设备和周边硬件都以文件形式存在此目录中,如/dev/null、/dev/zero、/dev/tty、/dev/lp、/dev/hd、/dev/sd*等 |
/etc | 存放系统主要配置文件,如用户账号密码文件、服务启动文件等。一般用户可查阅但只有root有修改权限。FHS建议不放置可执行文件于此目录。重要文件包括/etc/inittab、/etc/init.d/、/etc/modprobe.conf、/etc/X11/、/etc/fstab、/etc/sysconfig/等。重要目录有/etc/init.d/(所有服务的启动脚本)、/etc/xinetd.d/(super daemon管理服务设置文件)、/etc/X11/(X Window设置文件) |
/home | 系统默认的用户家目录。新增用户时,家目录默认在此创建。用~ 表示当前用户家目录,~guest 表示用户名为guest的家目录 |
/lib | 存放开机及/bin或/sbin目录下指令所需的函数库和内核模块。/lib/modules/存放内核相关模块(驱动程序) |
/media | 可移动设备(如软盘、光盘、DVD)的挂载点,常见挂载点如/media/floppy、/media/cdrom |
/mnt | 用于临时挂载额外设备,现代Linux中通常用于挂载可移动设备 |
/opt | 第三方软件的安装目录。如KDE桌面管理系统或用户自行安装的软件可放在此目录 |
/root | 系统管理员root的家目录,与根目录同分区,用于单用户维护模式下root用户操作 |
/sbin | 存放系统设置指令,如fdisk、fsck、ifconfig、init、mkfs等,供root用户使用 |
/srv | 网络服务启动后所需数据的存放目录,如WWW、FTP服务的数据 |
/tmp | 供用户和程序临时存储文件的目录,任何用户均可访问,需定期清理。FHS建议开机时删除/tmp下的数据 |
/lost+found | ext2/ext3文件系统格式下特有的目录,用于存放文件系统错误时的遗失片段 |
/proc | 虚拟文件系统,存放内存中的数据,如系统核心、进程信息、硬件状态及网络状态。不占硬盘空间,常用文件如/proc/cpuinfo、/proc/dma、/proc/interrupts、/proc/ioports、/proc/net/*、/proc/meminfo |
/sys | 与/proc类似,也是虚拟文件系统,记录核心相关的信息,如已加载的核心模块和硬件装置信息。同样不占硬盘容量 |
通常,可以使用/opt
和/home
目录,这两个目录由用户自由处理,不存在敏感文件,也可以将程序安装在/opt/
目录下,默认情况下,程序安装路径会在/usr/bin
或/var
目录下。
Linux的启动级别
Linux共有七个启动级别(0-6),使用init
命令切换启动级别。语法为:init 启动级别号
。/etc/inittab
文件用于设置默认启动级别。
启动级别说明:
级别号 | 级别名称 | 说明 |
---|---|---|
0 | 停机模式 | 系统默认运行级别不能设置为0,否则无法正常启动,机器处于关机状态 |
1 | 单用户模式 | 具有root权限,用于系统维护,禁止远程登录,无网络功能,类似Windows的安全模式 |
2 | 多用户模式 | 无NFS和网络支持 |
3 | 完整多用户文本模式 | 有NFS和网络支持,登录后进入命令行界面,是企业中服务器通用的启动模式 |
4 | 未使用 | 保留,一般不用,特殊情况下可做其他用途,如笔记本电脑电池快没电时切换至此模式进行设置 |
5 | 图形化模式 | 登录后进入图形GUI界面,是Linux系统带GUI的默认启动模式 |
6 | 重启模式 | 默认运行级别不能设置为6,否则系统会无限重启,无法正常启动。运行init 6 会使机器重启 |
Linux的关机与重启
命令实例 | 作用 |
---|---|
reboot | 重启 |
shutdown -r now | 现在立刻重启 |
shutdown -r 11:30 | 等到11:30进行重启 |
shutdown -r +1 | 等一分钟后重启 |
halt | 关机 |
shutdown -h now | 现在立刻关闭系统 |
shutdown -h 11:30 | 等到11:30关闭系统 |
init 0 | 关机 |
init 6 | 重启 |
Linux常见命令使用
top
命令:类似于Windows的任务管理器,可以查看CPU和内存使用情况,以及每个进程的资源消耗、进程ID等信息。按q
或Ctrl+c
退出。ls
命令:列出目录内容,可查看文件权限、目录信息等。1
2
3
4
5
6
7ls -a 列出目录所有文件,包含隐藏文件
ls -A 列出除.及..的其它文件
ls -r 反序排列
ls -t 以文件修改时间排序
ls -S 以文件大小排序
ls -h 以易读大小显示
ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来cd
命令:切换当前目录至指定目录。1
2
3
4cd / 切换到根目录
cd /home 切换到home目录
cd - 切换到上一次工作路径
cd !$ 把上个命令的参数作为cd参数使用注:
~
代表当前登录用户的主目录。pwd
命令:查看当前工作目录路径。1
2pwd 查看当前路径
pwd -P 查看软链接的实际路径mkdir
命令:创建文件夹。1
2
3mkdir [选项] 目录名
-m 对新建目录设置存取权限
-p 可以创建多级目录,若路径中某些目录不存在,则自动创建rm
命令:删除文件或目录。1
2
3
4rm [选项] 文件名
-i 删除前逐一询问确认
-f 即使文件为只读属性,也直接删除,无需确认
-r 将目录及子目录中的文件一并删除mv
命令:移动文件或重命名文件。1
2
3
4
5
6mv [选项] 源文件 目标文件
-b 删除目标文件前创建备份
-i 覆盖前询问
-f 直接覆盖
-n 不覆盖已有文件
-u 仅在源文件较新或目标文件不存在时移动命令格式及运行结果:
|命令格式|运行结果|
|—-|—-|
|mv source_file dest_file
|将源文件重命名为目标文件|
|mv source_file dest_directory
|将文件移动到目标目录|
|mv source_directory dest_directory
|若目标目录存在,将源目录移动到目标目录中;若目标目录不存在,则将源目录重命名为目标目录|
|mv source_directory dest_file
|出错|示例:
1
2
3mv aaa bbb 将文件aaa重命名为bbb
mv info/ logs 将info目录移动到logs目录中(若logs不存在,则将info重命名为logs)
mv /usr/runoob/* . 将/usr/runoob下的所有文件和目录移到当前目录cp
命令:复制文件或目录。1
2
3
4cp [选项] 源文件 目标文件或目录
-i 提示覆盖
-r 复制目录及内容
-a 保留文件时间属性示例:
1
2cp -ai a.txt test 复制a.txt到test目录下,保持原文件时间,若存在则提示覆盖
cp -s a.txt link_a.txt 为a.txt创建符号链接link_a.txtcat
命令:连接文件并打印到标准输出设备。1
2
3
4
5
6
7
8cat [选项] 文件名
-n 显示行号
-b 仅对非空白行显示行号
-s 将连续多个空行压缩为一行
-v 显示非打印字符
-E 在行尾显示$
-T 显示Tab为^I
-A 等同于-vET示例:
1
2
3cat -n textfile1 > textfile2 将textfile1的内容加上行号输出到textfile2
cat -b textfile1 textfile2 >> textfile3 将textfile1和textfile2的内容加上行号(忽略空白行)追加到textfile3
cat /dev/null > /etc/test.txt 清空/etc/test.txt文件内容more
命令:分页显示文件内容。常用参数:
1
2
3
4-n 定义屏幕大小为n行
+/pattern 从每个文件显示前搜索该字符串,并从该字符串前两行开始显示
-d 显示提示信息,禁用响铃
-s 将连续多个空行显示为一行常用操作命令:
1
2
3
4
5
6
7
8
9Enter 向下移动一行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行号
V 调用vi编辑器
!命令 调用Shell执行命令
q 退出more示例:
1
2more +3 text.txt 显示文件中从第3行起的内容
ls -l | more -5 通过管道使每次显示5行less
命令:与more类似,但可向前向后浏览。常用参数:
1
2
3
4-i 忽略搜索时的大小写
-N 显示每行行号
-o <文件名> 将less输出保存到指定文件
-s 显示连续空行为一行搜索用户名常用命令:
1
2
3
4
5
6
7
8
9
10
11
12/字符串 向下搜索
?字符串 向上搜索
n 重复前一个搜索
N 反向重复前一个搜索
x 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less
u 向前滚动半页
y 向前滚动一行
空格键 向下滚动一行
回车键 向下滚动一页示例:
1
2ps -aux | less -N 分页显示进程信息,并显示行号
less 1.log 2.log 查看多个文件,使用n查看下一个,p查看前一个head
命令:显示文件开头内容,默认前10行。常用参数:
1
-n <行数> 指定显示的行数
示例:
1
2
3head 1.log -n 20 显示1.log文件的前20行
head -c 20 log2014.log 显示1.log文件的前20字节
head -n -10 t.log 显示t.log文件除最后10行外的内容tail
命令:显示文件末尾内容,默认最后10行,常用于查看日志。常用参数:
1
2-f 循环读取,用于动态查看日志更新
-n <行数> 指定显示的行数示例:
1
2
3tail -f ping.log 循环读取ping.log文件的更新
ping 127.0.0.1 > ping.log & 将ping命令的输出重定向到ping.log文件并在后台运行
tail -f 文本文件 表示通过流的方式实时查看最新的文件内容which
、whereis
、locate
、find
命令:查找文件。which
:查找可执行文件的位置。whereis
:查找文件的位置,包括二进制文件、源代码文件、帮助文件等。locate
:基于数据库快速查找文件,数据库由updatedb
更新。find
:在文件系统中查找文件,并可执行相关操作。
示例:
1
2
3
4
5
6
7
8
9
10
11
12which ls 查找ls命令的可执行文件位置
which which 查找which命令的可执行文件位置(可能不存在,因为which是内置命令)
which cd 查找cd命令的位置(通常显示不存在,因为cd是shell内置命令)
whereis locate 查找locate程序的二进制文件、源代码文件和帮助文件
whereis -s locate 查找locate的源代码文件
whereis -m locate 查找locate的帮助文件
locate pwd 查找文件名中包含pwd的所有文件
locate /etc/sh 查找/etc目录下以sh开头的文件
locate -r '^/var.*reason$' 查找/var目录下以reason结尾的文件
find /opt -perm 777 查找/opt目录下权限为777的文件
find -size +1000c 查找大于1000字节的文件
find -name '*.log' -exec rm -f {} \; 查找并删除当前目录及其子目录下所有以.log结尾的文件chmod
命令:更改文件或目录的访问权限。权限表示方法:
r
:读权限,值为4w
:写权限,值为2x
:执行权限,值为1-
:无权限,值为0
示例:
1
2
3
4chmod a+x t.log 为所有用户添加执行权限
chmod u=r t.log 设置文件属主具有读权限
chmod 751 t.log 设置属主具有读写执行权限,属组具有读执行权限,其他用户具有执行权限
chmod u+r,g+r,o+r -R text/ 为text目录及其子目录中的所有文件添加读权限tar
命令:用于文件的打包和压缩。常用参数:
1
2
3
4
5
6
7
8
9-c 创建新的压缩文件
-f 指定压缩文件
-r 追加文件到压缩文件
-u 追加修改过的文件到压缩文件
-x 解压文件
-t 显示压缩文件中的内容
-z 支持gzip压缩
-j 支持bzip2压缩
-v 显示操作过程示例:
1
2
3
4tar -cvf log.tar 1.log 2.log 将1.log和2.log打包成log.tar
tar -zcvf /tmp/etc.tar.gz /etc 将/etc目录打包并使用gzip压缩,保存为/tmp/etc.tar.gz
tar -ztvf /tmp/etc.tar.gz 查看压缩文件内容
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc 排除/home/dmtsai目录,打包压缩/home和/etc目录chown
命令:更改文件或目录的所有者和所属组。1
2
3chown [选项] 用户名:组名 文件名
-c 显示更改信息
-R 递归处理目录及其内容示例:
1
2
3chown -c mail:mail log2012.log 更改log2012.log的所有者和组为mail,并显示更改信息
chown -c :mail t.log 仅更改文件组为mail
chown -cR mail: test/ 更改test目录及其子目录的所有者和组为maildf
命令:显示磁盘空间使用情况。1
2
3
4
5
6
7df [选项]
-a 显示所有文件系统
-h 以易读方式显示
-i 显示inode信息
-k 以KB为单位显示
-l 仅显示本地文件系统
-T 显示文件系统类型示例:
1
2df -l 显示本地文件系统的磁盘使用情况
df -haT 以易读方式显示所有文件系统及其类型du
命令:查看文件或目录的磁盘使用情况。1
2
3
4
5
6
7
8du [选项] 文件或目录
-a 显示所有文件大小
-k 以KB为单位显示
-m 以MB为单位显示
-g 以GB为单位显示
-h 以易读方式显示
-s 仅显示总计
-c 显示总计示例:
1
2
3
4du -h scf/ 查看scf目录及其子目录的大小
du -ah scf/ 查看scf目录中所有文件的大小
du -hc test/ scf/ 查看test和scf目录及其子目录的大小,并显示总和
du -hc --max-depth=1 scf/ 查看scf目录及其一级子目录的大小,并显示总和ln
命令:创建链接文件。链接类型:
- 软链接:类似Windows快捷方式,可跨文件系统,可对不存在的文件创建,可对目录创建。
- 硬链接:以文件副本形式存在,不占额外空间,不允许对目录创建,仅限同一文件系统。
常用参数:
1
2-s 创建软链接
-v 显示详细信息示例:
1
2
3ln -sv source.log link.log 创建source.log的软链接link.log,并显示详细信息
ln -v source.log link1.log 创建source.log的硬链接link1.log,并显示详细信息
ln -sv /opt/soft/test/test3 /opt/soft/test/test5 创建目录的软链接date
命令:显示或设置系统日期和时间。示例:
1
2
3
4
5
6
7
8date +%Y%m%d --date="+1 day" 显示明天的日期
date -d "nov 22" 显示今年11月22日是星期几
date -d '2 weeks' 显示两周后的日期
date -d 'next monday' 显示下周一的日期
date -d next-day +%Y%m%d 或 date -d tomorrow +%Y%m%d 显示明天的日期
date -d last-day +%Y%m%d 显示昨天的日期
date -d last-month +%Y%m 显示上个月的月份
date -d next-month +%Y%m 显示下个月的月份cal
命令:显示日历。常用参数:
1
2
3
4-3 显示前一月、当前月、后一月的三个月日历
-m 显示星期一为一周的第一天
-j 显示当前年中的第几天
-y 显示整年的日历示例:
1
2
3cal 9 2012 显示2012年9月的日历
cal -y 2013 显示2013年全年的日历
cal -3m 显示三个月的日历,以星期一为一周的第一天grep
命令:在文件中搜索指定的字符串。常用参数:
1
2
3
4
5
6
7
8-A n 显示匹配行之后的n行
-B n 显示匹配行之前的n行
-C n 显示匹配行前后各n行
-c 计算匹配行数
-i 忽略大小写
-l 仅列出包含匹配行的文件名
-n 显示行号
-R 递归搜索目录示例:
1
2
3
4grep test *file 查找当前目录中文件名包含file的文件,并显示包含test字符串的行
grep -r update /etc/acpi 查找/etc/acpi目录及其子目录中包含update字符串的文件
grep -v test *test* 查找文件名包含test的文件中不包含test字符串的行
grep -E 'ed|at' test.txt 查找test.txt文件中包含ed或at的行wc
命令:统计文件中的行数、单词数和字节数。常用参数:
1
2
3
4-c 统计字节数
-l 统计行数
-m 统计字符数
-w 统计单词数示例:
1
2wc text.txt 查看text.txt文件的行数、单词数和字节数
cat test.txt | wc -l 查看test.txt文件的行数ps
命令:查看当前运行的进程状态。Linux进程状态:
|状态码|状态名称|说明|
|—-|—-|—-|
|D|不可中断|进程处于等待状态,如等待IO操作完成,无法被中断|
|R|运行|进程处于运行队列中,等待CPU时间片或正在运行|
|S|中断|进程处于休眠状态,等待某个事件发生|
|T|停止|进程被停止,如通过调试信号或暂停命令|
|Z|僵死|进程已终止,但父进程尚未回收其资源|常用选项:
1
2
3
4
5-A 显示所有进程
-a 显示同一终端下的进程
-u 显示用户相关进程
-x 显示没有控制终端的进程
-aux 显示所有包含其他用户使用的进程示例:
1
2
3
4ps -ef 显示当前所有进程的详细信息
ps -A 显示所有进程
ps -aux | grep apache 查找与apache相关的进程
ps aux | grep '(cron|syslog)' 查找与cron或syslog相关的进程top
命令:实时显示系统中各个进程的资源使用情况。常用参数:
1
2
3
4-c 显示完整的进程命令
-s 保密模式
-p <进程号> 指定进程显示
-n <次数> 循环显示次数交互命令:
1
2
3
4
5
6
7h 显示帮助信息
c 切换显示命令名称和完整命令行
m 按内存使用率排序
P 按CPU使用率排序
T 按时间/累计时间排序
W 将当前设置保存到~/.toprc文件
o 或 O 改变显示项目的顺序kill
命令:向进程发送信号,终止或控制进程。常用参数:
1
2
3
4
5-l 列出所有信号名称
-a 不限制命令名和进程号的关系
-p 仅打印进程号而不发送信号
-s 指定发送的信号
-u 指定用户示例:
1
kill -9 $(ps -ef | grep pro1) 查找并强制终止名为pro1的进程
free
命令:显示系统内存使用情况。常用参数:
1
2
3
4
5
6-b 以字节显示
-k 以KB显示
-m 以MB显示
-g 以GB显示
-s <间隔秒数> 持续显示
-t 显示总和示例:
1
2
3
4
5free 显示内存使用情况
free -k 以KB显示内存使用情况
free -m 以MB显示内存使用情况
free -t 显示内存使用的总和信息
free -s 10 每10秒显示一次内存使用情况
五:文本编辑器vi的使用
文本文件的创建
在Linux上可以通过以下方式创建文件:
使用重定向符(
>
)创建空文件:1
> test.txt
使用
touch
命令创建文件:1
touch test2.txt
使用
echo
命令创建包含内容的文件:1
echo "111" > test3.txt
或:
1
2
3
4
5cat > test6.txt << end
1
2
3
end使用
cat
命令创建文件:1
2
3
4cat > test4.txt
111
222
333^C使用
vi/vim
命令创建文件:1
vi test5.txt
关于vi/vim的详细使用方法,参考:https://www.runoob.com/linux/linux-vim.html
vi/vim使用概述
vi/vim是一个功能强大的文本编辑器,主要用于编辑纯文本文件。它具有三种模式:命令模式、输入模式和底线命令模式。
命令模式:用于执行各种编辑命令,如移动光标、删除字符、进入其他模式等。默认情况下,启动vi后即进入命令模式。
常用命令:
|命令|说明|
|—-|—-|
|i|进入输入模式,在当前光标位置开始输入|
|x|删除当前光标所在处的字符|
|:|进入底线命令模式|输入模式:用于输入文本。在命令模式下按
i
、o
、a
等键可进入输入模式。常用操作:
|按键|功能|
|—-|—-|
|字符按键及Shift组合|输入字符|
|Enter|换行|
|Backspace|删除光标前一个字符|
|Del|删除光标后一个字符|
|方向键|移动光标|
|Home/End|移动光标到行首/行尾|
|Page Up/Page Down|上/下翻页|
|Insert|切换输入/替换模式|
|ESC|退出输入模式,返回命令模式|底线命令模式:用于执行更复杂的命令,如保存文件、退出编辑器等。在命令模式下按
:
进入。常用命令:
|命令|说明|
|—-|—-|
|q|退出vi|
|w|保存文件|
|wq|保存并退出|
|q!|强制退出,不保存修改|
vi/vim使用实例
使用
vi
创建文件runoob.txt
:1
vi runoob.txt
按
i
进入输入模式,开始编辑文件内容。输入完成后,按
ESC
返回命令模式。输入
:wq
保存并退出vi。
vi/vim按键说明
命令模式下的光标移动和文本编辑
按键 | 功能 |
---|---|
h或左箭头 | 光标左移 |
j或下箭头 | 光标下移 |
k或上箭头 | 光标上移 |
l或右箭头 | 光标右移 |
Ctrl+f | 向下移动一页 |
Ctrl+b | 向上移动一页 |
Ctrl+d | 向下移动半页 |
Ctrl+u | 向上移动半页 |
+ | 移动到非空白字符的下一行 |
- | 移动到非空白字符的上一行 |
0(数字0)或Home | 移动到行首 |
$或End | 移动到行尾 |
H | 移动到屏幕第一行 |
M | 移动到屏幕中间行 |
L | 移动到屏幕最后一行 |
G | 移动到文件最后一行 |
nG(n为数字) | 移动到文件第n行 |
gg | 移动到文件第一行 |
n(数字) | 向右移动n个字符 |
/word | 向下搜索word字符串 |
?word | 向上搜索word字符串 |
n | 重复前一个搜索 |
N | 反向重复前一个搜索 |
:n1,n2s/old/new/g | 在n1到n2行之间替换old为new |
:1,$s/old/new/g | 替换整个文件中的old为new |
:1,$s/old/new/gc | 替换整个文件中的old为new,并确认 |
xx | 删除光标所在处的字符 |
nx | 删除光标后n个字符 |
dd | 删除光标所在行 |
ndd | 删除光标后n行 |
d1G | 删除从光标到文件第一行的内容 |
dG | 删除从光标到文件最后一行的内容 |
d$ | 删除从光标到行尾的内容 |
d0 | 删除从光标到行首的内容 |
yy | 复制光标所在行 |
nyy | 复制光标后n行 |
y1G | 复制从光标所在行到文件第一行的内容 |
yG | 复制从光标所在行到文件最后一行的内容 |
y0 | 复制从光标到行首的内容 |
y$ | 复制从光标到行尾的内容 |
p/P | 在光标下/上一行粘贴 |
J | 合并光标所在行与下一行 |
u | 撤销上次操作 |
Ctrl+r | 重做上次操作 |
.(点) | 重复上次编辑命令 |
进入输入模式的命令
命令 | 说明 |
---|---|
i | 在当前光标位置开始输入 |
I | 在当前行的第一个非空白字符处开始输入 |
a | 在当前光标后的下一个字符处开始输入 |
A | 在当前行的末尾开始输入 |
o | 在当前光标行的下一行插入新行并进入输入模式 |
O | 在当前光标行的上一行插入新行并进入输入模式 |
r/R | 替换模式,r替换光标所在处的一个字符,R持续替换直至按ESC退出 |
底线命令模式的命令
命令 | 说明 |
---|---|
q | 退出vi |
w | 保存文件 |
wq | 保存并退出 |
q! | 强制退出,不保存修改 |
w filename | 将编辑的内容保存为指定的文件名 |
r filename | 读取指定文件的内容并插入到当前光标位置 |
n1,n2 w filename | 将n1到n2行的内容保存到指定文件 |
! command | 执行shell命令 |
set nu | 显示行号 |
set nonu | 取消显示行号 |
使用vi修改IP地址为静态IP
查看默认网关:
1
ip route
示例输出:
1
2default via 192.168.2.1 dev ens33 proto static metric 100
192.168.2.0/24 dev ens33 proto kernel scope link src 192.168.2.112 metric 100网关地址为
192.168.2.1
。查看动态IP地址及网段信息:
1
ip addr
示例输出:
1
2
3
4
5
6
7
8
9
10
11
121: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:e2:e2:23 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.112/24 brd 192.168.2.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::c94b:6002:cc54:64ca/64 scope link noprefixroute
valid_lft forever preferred_lft forever使用vi编辑网卡配置文件:
1
vi /etc/sysconfig/network-scripts/ifcfg-ens33
将内容修改为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="571e6521-373a-4fb4-a76f-e9cb7f85afe9"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.2.112"
NETMASK="255.255.255.0"
GATEWAY="192.168.2.1"
DNS1="192.168.2.1"
DNS2="114.114.114.114"重启网卡服务使配置生效:
1
systemctl restart network
测试网络连接:
1
ping www.baidu.com
六:文件和文件夹的操作
具体命令可参考上文的Linux系统操作部分。以下是几篇详细介绍Linux文件和文件夹操作的文章:
- https://blog.csdn.net/luorufeng/article/details/84765059
- https://blog.csdn.net/numbibi/article/details/8026841
- https://www.woniuxy.com/book/reading/214
七:用户与用户组权限
用户与用户组权限概述
在Linux中,root用户拥有最高权限,所有文件或文件夹的权限设定对root无效。在生产环境和服务器中,建议使用普通账户并授予必要权限,避免使用root账户以防止安全漏洞导致系统被恶意利用。对于操作系统和应用系统,应遵循零信任原则,始终使用最小权限进行操作。权限不足时再动态授予所需权限。
用户和用户组管理
Linux是一个多用户多任务的分时操作系统,每个使用系统资源的用户都必须有一个账号。用户账号管理包括用户账号的添加、删除和修改,以及用户口令的管理。
添加用户账号
使用useradd
命令添加新用户:
1 | useradd [选项] 用户名 |
常用选项:
1 | -c 添加注释性描述 |
示例:
1 | useradd -d /home/sam -m sam 创建用户sam,主目录为/home/sam |
删除用户账号
使用userdel
命令删除用户:
1 | userdel [选项] 用户名 |
常用选项:
1 | -r 删除用户的主目录 |
示例:
1 | userdel -r sam 删除用户sam及其主目录 |
修改用户账号
使用usermod
命令修改用户账号属性:
1 | usermod [选项] 用户名 |
常用选项与useradd
类似,可修改用户的主目录、用户组、Shell等。
示例:
1 | usermod -s /bin/ksh -d /home/z -g developer sam 修改用户sam的Shell、主目录和所属组 |
用户口令管理
使用passwd
命令设置或修改用户口令:
1 | passwd [选项] 用户名 |
常用选项:
1 | -l 锁定用户账户 |
示例:
1 | passwd sam 为用户sam设置口令 |
用户组管理
用户组管理包括添加、删除和修改用户组。
添加用户组
使用groupadd
命令添加新用户组:
1 | groupadd [选项] 用户组名 |
常用选项:
1 | -g 指定用户组的GID |
示例:
1 | groupadd group1 添加用户组group1 |
删除用户组
使用groupdel
命令删除用户组:
1 | groupdel 用户组名 |
示例:
1 | groupdel group1 删除用户组group1 |
修改用户组属性
使用groupmod
命令修改用户组属性:
1 | groupmod [选项] 用户组名 |
常用选项:
1 | -g 修改用户组的GID |
示例:
1 | groupmod -g 102 group2 将用户组group2的GID修改为102 |
与用户账号相关的系统文件
/etc/passwd
文件
记录系统中每个用户的基本信息,格式为每行一个用户,字段间以冒号分隔:
1 | 用户名:口令:用户ID:组ID:注释:主目录:登录Shell |
- 用户名:用户的登录名。
- 口令:早期存放加密后的口令,现代系统通常使用
/etc/shadow
文件存储口令,此处为x
或*
。 - 用户ID(UID):用户标识号,root为0,普通用户从500开始(不同发行版可能不同)。
- 组ID(GID):用户所属主组的组标识号。
- 注释:用户的真实姓名、电话等信息。
- 主目录:用户登录后的起始目录。
- 登录Shell:用户登录后使用的Shell程序。
示例:
1 | root:x:0:0:root:/root:/bin/bash |
/etc/shadow
文件
存储用户的加密口令及其他安全相关的信息,格式为每行一个用户,字段间以冒号分隔:
1 | 用户名:加密口令:最后修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:保留字段 |
示例:
1 | root:*:18372:0:99999:7::: |
/etc/group
文件
记录用户组的信息,格式为每行一个组,字段间以冒号分隔:
1 | 组名:口令:组ID:组内用户列表 |
示例:
1 | root::0:root |
批量添加用户
当需要批量创建大量用户时,可以使用以下步骤:
编辑一个用户列表文件,格式与
/etc/passwd
类似,如user.txt
:1
2
3user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
user003::602:100:user:/home/user003:/bin/bash使用
newusers
命令导入用户数据:1
newusers < user.txt
使用
vipw
或直接编辑/etc/passwd
检查用户数据是否正确。执行
pwunconv
命令,将/etc/shadow
中的口令信息转换回/etc/passwd
:1
pwunconv
编辑密码文件
passwd.txt
,格式为用户名:密码
:1
2user001:123456
user002:123456使用
chpasswd
命令设置用户密码:1
chpasswd < passwd.txt
执行
pwconv
命令,将口令信息重新转换为shadow格式:1
pwconv
完成后,检查/home
目录下是否生成了用户的主目录,并验证用户是否能正常登录。
文件和文件夹权限
Linux系统通过权限机制控制不同用户对文件和文件夹的访问。主要使用chown
、chgrp
和chmod
命令来管理文件的所有者、所属组和权限。
更改文件所有者和所属组
chown
:更改文件的所有者和所属组。1
chown [选项] 用户名:组名 文件名
常用选项:
1
-R 递归更改目录及内容的所有者
chgrp
:更改文件的所属组。1
chgrp [选项] 组名 文件名
常用选项:
1
-R 递归更改目录及内容的所属组
更改文件权限
chmod
:更改文件的权限。权限设置有两种方式:数字模式和符号模式。
数字模式:
权限对应数值:
|权限|数值|
|—-|—-|
|r(读)|4|
|w(写)|2|
|x(执行)|1|例如,权限
rwxr-xr--
对应的数值为754
。使用方法:
1
chmod 754 文件名
符号模式:
格式为
[ugoa][+-=][rwx]
,其中:u
:用户(文件所有者)g
:组(文件所属组)o
:其他用户a
:所有用户(u
、g
、o
的组合)
示例:
1
2chmod u=rwx,g=rx,o=r 文件名 设置文件权限为rwxr-xr--
chmod a-x 文件名 去掉所有用户的执行权限
八:文件查找与归档压缩
Linux文件查找命令find
find
命令用于在指定目录下查找文件。基本语法:
1 | find path -option [ -print ] [ -exec -ok command ] {} \; |
常用选项:
选项 | 说明 |
---|---|
-name | 按文件名查找 |
-type | 指定文件类型(d 目录,f 文件等) |
-mtime | 按文件修改时间查找 |
-size | 按文件大小查找 |
-exec | 对查找结果执行命令 |
-ok | 与-exec类似,但会提示确认 |
示例:
1 | find . -name "*.c" 查找当前目录及其子目录下所有.c文件 |
Linuxgrep
命令
grep
命令用于在文件中搜索指定的字符串。基本语法:
1 | grep [选项] 模式 文件 |
常用选项:
选项 | 说明 |
---|---|
-i | 忽略大小写 |
-r | 递归搜索目录 |
-n | 显示行号 |
-l | 仅列出包含匹配行的文件名 |
-v | 反向查找,显示不匹配的行 |
示例:
1 | grep test *file 查找当前目录中文件名包含file的文件,并显示包含test的行 |
Linuxtar
命令
tar
命令用于文件的打包和压缩。基本语法:
1 | tar [选项] [文件...] |
常用选项:
选项 | 说明 |
---|---|
-c | 创建新的压缩文件 |
-x | 解压文件 |
-t | 查看压缩文件内容 |
-z | 支持gzip压缩 |
-j | 支持bzip2压缩 |
-v | 显示操作过程 |
-f | 指定压缩文件 |
示例:
1 | tar -czvf test.tar.gz a.c 压缩a.c文件为test.tar.gz |
九:在Linux中安装应用
使用rpm
离线安装
rpm
(Red Hat Package Manager)是Red Hat系列Linux发行版的包管理工具,用于安装、卸载和查询软件包。
基本语法:
1 | rpm [选项] 包名 |
常用选项:
选项 | 说明 |
---|---|
-i | 安装软件包 |
-v | 显示详细信息 |
-h | 显示进度条 |
-e | 卸载软件包 |
-q | 查询软件包信息 |
示例:
1 | rpm -ivh package.rpm 安装软件包 |
基于源代码安装应用
许多Linux软件提供源代码,需要编译后才能使用。安装步骤通常包括:
- 下载源码并解压。
- 查看
INSTALL
或README
文件了解安装步骤。 - 执行
./configure
生成Makefile
。 - 执行
make
编译源码。 - 执行
make install
安装软件。
示例:安装memcached
1 | cd /usr/local/ |
使用yum
进行安装(优先级高)
yum
(Yellow dog Updater, Modified)是基于RPM的包管理器,自动处理依赖关系,简化软件安装过程。
基本语法:
1 | yum [选项] [命令] [包名...] |
常用命令:
命令 | 说明 |
---|---|
yum install | 安装软件包 |
yum update | 更新软件包 |
yum remove | 卸载软件包 |
yum list | 列出软件包 |
yum search | 搜索软件包 |
yum clean | 清理缓存 |
示例:
1 | yum install pam-devel 安装pam-devel软件包 |
国内常用的yum
源包括网易(163)、中科大和搜狐等。配置网易yum
源的步骤:
备份默认的
CentOS-Base.repo
文件:1
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载对应版本的repo文件:
1
2
3CentOS5: wget http://mirrors.163.com/.help/CentOS5-Base-163.repo
CentOS6: wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
CentOS7: wget http://mirrors.163.com/.help/CentOS7-Base-163.repo将下载的文件重命名为
CentOS-Base.repo
并移动到/etc/yum.repos.d/
目录:1
mv CentOS6-Base-163.repo CentOS-Base.repo
生成缓存:
1
2yum clean all
yum makecache
配置本地Yum
仓库的步骤:
将RHEL6光盘挂载到
/media
:1
mount /dev/cdrom /media/
配置本地Yum客户端:
1
2
3cd /etc/yum.repos.d/
cp rhel-source.repo rhel6.repo
vim rhel6.repo修改内容如下:
1
2
3
4
5
6[rhel-6]
name=Red Hat Enterprise Linux 6
baseurl=file:///media/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release验证Yum配置:
1
yum repolist
对于软件安装时提示缺失库的情况,可以使用yum provides
查找包含所需库的包:
1 | yum provides libstdc++.so.6 |
根据查询结果安装相应的包:
1 | yum install 包名 |
十:Docker基础命令与应用
查看Docker服务状态
使用systemctl
命令查看Docker服务是否开启:
1 | systemctl list-unit-files | grep docker |
示例输出:
1 | docker.service disabled |
disabled
表示Docker服务不会随系统启动自动运行。可以使用以下命令设置Docker开机自启:
1 | systemctl enable docker |
Docker镜像操作
拉取镜像
默认情况下,
docker pull
会拉取最新版本的镜像。若需拉取特定版本,可指定TAG
标签:1
docker pull mysql:5.6
列出镜像
使用
docker images
查看本地已有的镜像:1
docker images
示例输出:
1
2
3REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.6 dd3b2a5dcb48 13 months ago 303MB
hello-world latest feb5d9fea6a5 16 months ago 13.3kB搜索图像搜索
使用
docker search
查找公共仓库中的镜像:1
docker search mysql
示例输出:
1
2
3
4
5
6
7NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 13728 [OK]
mariadb MariaDB Server is a high performing open sou… 5238 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 726 [OK]
percona Percona Server is a fork of the MySQL relati… 599 [OK]
databack/mysql-backup Back up mysql databases to... anywhere! 80
bitnami/mysql Bitnami MySQL Docker Image 80 [OK]删除镜像
使用
docker rmi
删除本地镜像:1
docker rmi hello-world
容器操作
创建容器
使用
docker create
创建容器:1
docker create hello-world
或指定容器名:
1
docker create --name hello-docker hello-world
启动容器
使用
docker start
启动已创建的容器:1
docker start 容器名
示例:
1
docker start hello-docker
查看容器
查看所有容器(包括停止的):
1
docker container ls -a
查看正在运行的容器:
1
docker ps
停止容器
使用
docker stop
停止运行中的容器:1
docker stop 容器名
删除容器
使用
docker rm
删除容器:1
docker rm 容器名
创建并启动容器
使用docker run
命令创建并立即启动容器:
1 | docker run --name 容器名 镜像名 |
示例:
1 | docker run --name 111 hello-world |
输出:
1 | Hello from Docker! |
端口映射
将Docker容器的端口映射到宿主机的指定端口:
1 | docker run -p 宿主机端口:容器端口 -d 镜像名 |
示例:
1 | docker run -p 2023:80 -d mcc0624/ser:1.8 |
此命令将容器内的80端口映射到宿主机的2023端口,访问宿主机的2023端口即可访问Docker容器的服务。