兄弟连Linux常用命令
1.1命令格式
Linux命令格式
命令 [-选项] [参数]
ctrl
+l
清屏
1.2目录处理命令
ls----显示目录文件
| 命令名称:ls |
| |
| 命令英文原意:list |
| |
| 命令所在路径:/bin/ls |
| |
| 执行权限:所有用户 |
| |
| 功能:显示目录文件 |
语法:ls [选项] [文件或目录]
-a 显示所有文件,包括隐藏文件
-l 详细信息显示(+h为人性化显示)
| ls -l |
| -------------所有者---所属组---文件大小(默认字节)--------最后一次修改时间 -----文件名 |
| drwxr-xr-x 2 yangyubo yangyubo 4096 10月 23 01:24 公共 |
| drwxr-xr-x 2 yangyubo yangyubo 4096 10月 23 01:24 模板 |
| drwxr-xr-x 2 yangyubo yangyubo 4096 10月 23 01:24 视频 |
| drwxr-xr-x 2 yangyubo yangyubo 4096 10月 23 01:24 图片 |
| drwxr-xr-x 2 yangyubo yangyubo 4096 10月 23 01:24 文档 |
| drwxr-xr-x 2 yangyubo yangyubo 4096 10月 23 01:24 下载 |
| drwxr-xr-x 2 yangyubo yangyubo 4096 10月 23 01:24 音乐 |
| drwxr-xr-x 2 yangyubo yangyubo 4096 10月 30 16:13 桌面 |
| |
| ls -lh |
| ------------------------------------------- |
| drwxr-xr-x 2 yangyubo yangyubo 4.0K 10月 23 01:24 公共 |
| drwxr-xr-x 2 yangyubo yangyubo 4.0K 10月 23 01:24 模板 |
| drwxr-xr-x 2 yangyubo yangyubo 4.0K 10月 23 01:24 视频 |
| drwxr-xr-x 2 yangyubo yangyubo 4.0K 10月 23 01:24 图片 |
| drwxr-xr-x 2 yangyubo yangyubo 4.0K 10月 23 01:24 文档 |
| drwxr-xr-x 2 yangyubo yangyubo 4.0K 10月 23 01:24 下载 |
| drwxr-xr-x 2 yangyubo yangyubo 4.0K 10月 23 01:24 音乐 |
| drwxr-xr-x 2 yangyubo yangyubo 4.0K 10月 30 16:13 桌面 |
| |
| -rw-r--r-- |
| -:代表文件 |
| d:代表目录 |
| l:软链接 |
| rw- r-- r-- |
| u所有者 g所属组 o其他人 |
| r读 w写 x执行者 |
组里每个成员都享有这个组的权限
-d 查看目录属性 显示目录本身,而不显示目录下的数据
| └─$ ls -ld /etc |
| --------------------- |
| drwxr-xr-x 174 root root 12288 11月 9 19:15 /etc |
| |
-i 显示文件的索引
mkdir----创建新目录
| 命令名称:mkdir |
| |
| 命令英文原意:make directories |
| |
| 命令所在路径:/bin/mkdir |
| |
| 执行权限:所有用户 |
| |
| 语法:mkdir -p[目录名] |
| |
| 功能描述:创建新目录 |
| |
| -p 递归创建 |
范例:
cd----切换目录
| 命令名称:cd |
| |
| 命令英文原意:change directory |
| |
| 命令所在路径:shell内置命令 |
| |
| 执行权限:所有用户 |
| |
| 语法:cd /目录 |
| |
| 功能描述:切换目录 |
| |
| cd ..上级目录 .代表当前目录 ..代表上级目录 |
pwd----显示当前目录
| 命令名称:pwd |
| |
| 命令英文原意:print working directory |
| |
| 命令所在路径:/bin/pwd |
| |
| 执行权限:所有用户 |
| |
| 语法:pwd |
| |
| 功能描述:显示当前目录 |
rmdir----删除空目录
| 命令名称:rmdir |
| |
| 命令英文原意:remove empty directories |
| |
| 命令所在路径:/bin/rmdir |
| |
| 执行权限:所有用户 |
| |
| 语法:rmdir[目录名] |
| |
| 功能描述:删除空目录 |
| 范例:rmdir /qe/yang |
| |
| |
cp----复制文件或目录
| 命令名称:cp |
| |
| 命令英文原意:copy |
| |
| 命令所在路径:/bin/cp |
| |
| 执行权限:所有用户 |
| |
| 语法:cp -rp[原文件或目录][目标目录] |
| -r 复制目录 |
| -p 保留文件属性 |
| 功能描述:复制文件或目录 |
| 范例 : cp -r /qe/qwe/yang /qe |
| cp -r / qe/qwe/yang /qe/yu |
| cp -r /qe/qwe/yang /qe/qwe/yu /qe/qwe/bo /king |
| |
| |
| |
mv----剪切文件、改名
| 命令名称:mv |
| |
| 命令英文原意:move |
| |
| 命令所在路径:/bin/mv |
| |
| 执行权限:所有用户 |
| |
| 语法:mv[原文件或目录][目标目录] |
| 改名:mv 文件名 新文件名 |
| |
| 功能描述:剪切文件、改名 |
rm----删除文件
| 命令名称:rm |
| |
| 命令英文原意:remove |
| |
| 命令所在路径:/bin/rm |
| |
| 执行权限:所有用户 |
| |
| 语法:rm [文件或目录] |
| -r删除目录 |
| -f 强制执行 |
| -rf 强制删除目录 |
| |
| 功能描述:删除文件 |
1.3文件处理命令
touch----创建空文件/刷新文件时间标记
| 命令名称:touch |
| |
| 命令所在路径:/bin/thoch |
| |
| 执行权限:所有用户 |
| |
| 语法:touch [文件名] |
| |
| 功能描述:创建空文件 |
| |
| 范例:touch Japanlovestory.list |
cat---- 显示文件内容
| 命令名称:cat |
| |
| 命令所在路径:/bin/cat |
| |
| 执行权限:所有用户 |
| |
| 语法:cat [文件名] |
| |
| 功能描述:显示文件内容 |
| -n显示行号 |
| 范例:cat /etc/issue |
| cat -n /etc/services |
tac----显示文件内容(反向列示)
| 命令名称:tac |
| |
| 命令所在路径:/usr/bin/tac |
| |
| 执行权限:所有用户 |
| |
| 语法:tac [文件名] |
| |
| 功能描述:显示文件内容(反向列示) |
| |
| 范例:tac /etc/issue |
| |
more----分页显示文件内容
| 命令名称:more |
| |
| 命令所在路径:/bin/more |
| |
| 执行权限:所有用户 |
| |
| 语法:more [文件名] |
| (空格)或f 翻页 |
| (Enter) 换行 |
| q或Q 退出 |
| 上下方向键也可切换 |
| |
| 功能描述:分页显示文件内容 |
| 范例:more /etc/services |
| 结束自动跳出 |
| +num 从第 num 行开始显示 |
| 显示百分比 |
| more -s :空行的话会统一变为一行 |
| /可以搜索,但是没有对应的回执 |
less----分页显示文件内容(可上下翻页,推荐使用)
| 命令名称:less |
| |
| 命令所在路径:/bin/less |
| |
| 执行权限:所有用户 |
| |
| 语法:less [文件名] |
| 可以加 / 搜索 |
| n为下一条 |
| |
| 功能描述:分页显示文件内容 |
| 范例:less /etc/services |
| 看完以后不会退出,支持关键词搜索 /查找内容() |
head----显示文件前面几行
| 命令名称:head /tail(文件后) |
| |
| 命令所在路径:/usr/bin/head |
| yin |
| 执行权限:所有用户 |
| |
| 语法:head [文件名] |
| |
| 功能描述:显示文件前面几行 |
| 范例:head -n 20 /etc/services |
| head -5 /etc/passwd |
1.4链接命令
ln----生成链接文件
| 命令名称:ln |
| |
| 命令所在路径:/bin/ln |
| |
| 执行权限:所有用户 |
| |
| 语法:ln [原文件][目标文件] |
| -s 创建软链接 |
| 功能描述:生成链接文件 |
| 范例:ln -s /etc/issue /tmp/issue.soft |
| |
| ln /etc/issue /tmp/issue.hard |
| |
软链接的特点
| 特征:类似Windows的快捷方式 |
| 1.lrwxrwxrwx |
| 2.文件较小 |
| 3.有箭头指向源文件 |
硬链接的特点
| 1.拷贝cp -p + 同步更新 |
| 2.通过i节点识别 |
| 一个i节点不一定对应一个软件 |
| 硬链接的i节点和原文件一样,所以可以同步更新 |
| 3.不能跨分区 |
| 4.不能针对目录使用 |
| 5.原文件被删除,新文件依旧存在 |
2.1权限管理命令chmod
权限数字表示
chmod----改变文件或目录权限
| 命令名称:chmod |
| |
| 命令英文原意:change the permissions mode of a file |
| |
| 命令所在路径:/bin/chmod |
| 执行权限:所有用户 |
| |
| 语法:chmod [{ugoa}{+-=}{rwx}][文件或目录] |
| [mode=421][文件或目录] |
| -R 递归修改 |
| 功能描述:改变文件或目录权限 |
| 范例:chmod u+x /king/love.txt |
| chmod u+x o- /king/love.txt |
| chmod o=rwx /king/love.txt |
| chmod -R 777 /king |
| |
权限类别
| file r:cat/more/head/tail/less |
| w:vim |
| x:script command |
| directory r: ls |
| w:touch/mkdir/rmdir/rm |
| x:cd |
删除一个文件不是对此文件有删除权限,而是对此文件所在的目录有写权限才可以
代表字符 | 权限 | 对文件的含义 | 对目录的含义 |
---|
r | 读权限 | 可以查看文件内容 | 可以列出目录中的内容 |
w | 写权限 | 可以修改文件内容 | 可以在目录中创建、删除文件 |
x | 执行权限 | 可以执行文件 | 可以进入目录 |
2.2其他权限管理命令
权限管理命令----chown----改变文件或目录的所有者
| 命令名称:chown |
| |
| 命令英文原意:change file ownership |
| |
| 命令所在路径:/bin/chown |
| 执行权限:所有用户 |
| |
| 语法:chown [用户][文件或目录] |
| 功能描述:改变文件或目录的所有者 |
| 范例:chown yangyubo /king |
chgrp----改变文件或目录的所属组
| 命令名称:chgrp |
| |
| 命令英文原意:change file group ownership |
| |
| 命令所在路径:/bin/chgrp |
| 执行权限:所有用户 |
| |
| 语法:chgrp [用户组][文件或目录] |
| 功能描述:改变文件或目录的所属组 |
| 范例:chgrp yangyubo /king |
umask----显示、设置文件的缺省权限
| 命令名称:umask |
| |
| 命令英文原意:the user file-creation mask |
| |
| 命令所在路径:Shell内置命令 |
| 执行权限:所有用户 |
| 语法:umask[-S] |
| -S 以rwx形式显示新建文件缺省权限 |
| 功能描述:显示、设置文件的缺省权限 |
| 范例:umask — S |
| ------------------------ |
| mkdir创建的目录默认:u=rwx,g=rx,o=rx |
| touch创建的文件默认:u=rw-,g=r--,o=r-- |
| |
| umask |
| --------------- |
| 0022 |
| 0 : 特殊权限 |
| 022:---,-w-,-w- |
| --------------------- |
| rwx,r-x,r-x |
| 默认权限做逻辑异或运算 |
3.1文件搜索命令
find----文件搜索
| 命令名称:find |
| 命令所在路径:/bin/find |
| 执行权限:所有用户 |
| 语法:find [搜索范围][匹配条件] |
| 功能描述:文件搜索 |
| 范例:umask — S |
| ------------------------ |
| mkdir创建的目录默认:u=rwx,g=rx,o=rx |
| touch创建的文件默认:u=rw-,g=r--,o=r-- |
find /etc -name init ------------在目录/etc中查找文件init
| find /etc -name init |
| find /etc -iname init |
| ------------------------------------ |
| /etc/apparmor/init |
| |
| └─ |
| ------------------------------------- |
| /etc/darkstat/init.cfg |
| /etc/systemd/system/sysinit.target.wants |
| /etc/kernel/postrm.d/initramfs-tools |
| /etc/kernel/postinst.d/initramfs-tools |
| /etc/initramfs-tools |
| /etc/initramfs-tools/initramfs.conf |
| /etc/initramfs-tools/update-initramfs.conf |
| /etc/initramfs-tools/scripts/init-premount |
| /etc/initramfs-tools/scripts/init-bottom |
| /etc/initramfs-tools/scripts/init-top |
| /etc/gdb/gdbinit.d |
| /etc/gdb/gdbinit |
| /etc/dradis/initializers |
| /etc/cryptsetup-initramfs |
| /etc/apparmor/init |
| /etc/init.d |
| /etc/X11/xinit |
| /etc/X11/xinit/xinitrc |
| /etc/security/namespace.init |
| /etc/alternatives/initdb.1.gz |
| /etc/wireshark/init.lua |
| /etc/xdg/xfce4/xinitrc |
| /etc/default/grub.d/init-select.cfg |
| |
find /etc -size +204800 ------------在目录/etc中查找大于204800的文件
| find / -size +204800 |
| |
| ---------------------------------------------- |
| /usr/bin/burpsuite |
| /usr/lib/oracle/19.6/client64/lib/libociei.so |
| /usr/lib/jvm/java-11-openjdk-amd64/jmods/java.base.jmod |
| /usr/lib/jvm/java-11-openjdk-amd64/lib/modules |
| /usr/lib/firefox-esr/libxul.so |
| find: ‘/run/user/1000/gvfs’: 权限不够 |
| /proc/kcore |
| find: ‘/proc/2032/task/2032/fd/5’: 没有那个文件或目录 |
| find: ‘/proc/2032/task/2032/fdinfo/5’: 没有那个文件或目录 |
| find: ‘/proc/2032/fd/6’: 没有那个文件或目录 |
| find: ‘/proc/2032/fdinfo/6’: 没有那个文件或目录 |
| /sys/devices/pci0000:00/0000:00:0f.0/resource1 |
| /sys/devices/pci0000:00/0000:00:0f.0/resource1_wc |
| |
| |
| |
| |
| |
find /home -user yangyubo-----------在home目录下查找所有者为yangyubo的文件
find /home -group yangyubo-------------在home目录下查找所属组为yangyubo的文件
find /home -cmin -5-------------------在home目录下查找5分钟内被修改过属性的文件和目录
| -amin 访问时间 access |
| -cmin 文件属性 change |
| -mmin 文件内容 modify |
find /etc -size +163840 -a -size -204800 ---------在etc目录下,查找大于80mb小于100mb的文件
| -a 两个条件同时满足 and |
| -o 两个条件满足一条 or |
find /etc -name ini -exec ls -l {} ;-------------------在etc文件夹下查找名字为ini的文件并显示详细信息
-ok为进一步确认
| find /king -name james -exec ls -ld {} \; |
| ---------------------------------- |
| dr---w---x 2 root root 4096 11月 9 22:44 /king/james |
| |
-inum------根据节点查找
| find /king -inum 28835844 -exec rm {} \; |
| |
-type-----根据文件类型查找
locate----在文件资料库中查找文件
| 命令名称:locate |
| |
| 命令所在路径:/usr/bin/locate |
| 执行权限:所有用户 |
| 语法:locate 文件名 |
| 功能描述:在文件资料库中查找文件 |
| 范例:locate inittab |
| ------------------------ |
| └─ |
| /usr/share/terminfo/a/ansi+inittabs |
| /usr/share/vim/vim82/syntax/inittab.vim |
| |
which----搜索命令所在目录及别名信息
| 命令名称:which |
| |
| 命令所在路径:/usr/bin/which |
| 执行权限:所有用户 |
| 语法:which 命令 |
| 功能描述:搜索命令所在目录及别名信息 |
| 范例:which ls |
| ------------------------ |
| └─ |
| /usr/bin/cp |
| |
whereis----搜索命令所在目录及帮助文档路径
| 命令名称:whereis |
| 命令所在路径:/usr/bin/whereis |
| 执行权限:所有用户 |
| 语法:whereis 命令 |
| 功能描述:搜索命令所在目录及帮助文档路径 |
| 范例:whereis rm |
| ------------------------ |
| |
| rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz |
Linux及操作系统介绍
一、操作系统的作用
1、五大基本功能
- 进程和线程的管理:进程线程的状态、控制、同步互斥、通信调度等
- 存储管理:分配/回收、地址转换、存储保护等
- 文件管理:文件目录、文件操作、磁盘空间、文件存取控制
- 设备管理:设备驱动、分配回收、缓冲技术等
- 用户接口:系统命令、编程接口
2、三个作用


SSH默认端口号为22
使用Xshell

SSH
| 可以使用window连接,也可以使用Linux连接 |
| 方式一 |
| ssh root@192.168.184.133 |
| 方式二 |
| ssh -l root 192.168.184.133 |
SCP
| 上传 |
| scp Windows文件路径 root@192.168.184.133:Linux路径 |
| 下载 |
| scp root@192.168.184.133:Linux路径 Windows文件路径 |
Linux的文件系统
一、文件系统目录
/bin:
bin是Binary的缩写, 这个目录存放着最经常使用的命令。
/boot:
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :
dev是Device(设备)的缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问
文件的方式是相同的。
/etc:
这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:
这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用
程序都需要用到这些共享库。
/lost+found:
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media:
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目
录下。
/mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目
录就可以查看光驱里的内容了。
/opt:
这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认
是空的。
/proc:
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,
比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root:
该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux:
这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但
是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv:
该目录存放一些服务启动之后需要提取的数据。
/sys:
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件
系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp:
这个目录是用来存放一些临时文件的。
/usr:
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的
program files目录。
**/usr/bin:**系统用户使用的应用程序。
/usr/sbin:
超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:
内核源代码默认的放置目录。
/var:
这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日
志文件。
/run:
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
如果你的系统上有 /var/run 目录,应该让它指向 run。
通常情况下,我们可以使用/opt和/home目录,保存数据,安装应用程序,这两个目录均是由用户自由处理,不存在敏感文件,默认情况下程序安装路径回在/usr/bin或/var/目录下。
二、Linux的启动级别
命令实例 | 作用 |
---|
文件/etc/inittab | 设置默认启动级别 |
0 | 代表halt,关机操作,这个0不能配置,否则机器将不能启动 |
1 | 代表单用户模式,采用这个设置,系统只能允许一个用户登录 |
2 | 代表多用户模式,但不支持网络工作 |
3 | 代表命令行界面,即文本界面,是企业中服务器通用的启动模式 |
4 | 系统预留,改级别目前还没有使用 |
5 | 代表图形界面,也是Linux系统启动时默认的启动模式 |
6 | 代表重启模式,这个6也不可设置,否则系统反复重启 |
init
三、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 | 重启 |
四、常见命令使用
1、top命令
类似于Windows的任务管理器,可以查看CPU和内存的使用情况,也可以查看每个进程所消耗的CPU和内存,及进程ID等信息

top命令是全屏输出结果,如果要退出该命令,可以按Q
键或Ctrl+C
退出
2、其他命令
命令 | 作用 |
---|
cd …/或者 cd … | 切换到上一层目录(相对目录) |
cd 目录名 | 切换到对应目录(绝对目录) |
pwd | 查看当前所在目录 |
du -sh | 查看文件或文件夹的大小 |
fdisk -l | 查看磁盘分区列表 |
free | 查看内存使用情况 |
cat 文件名 | 查看文本文件内容,如cat/etc/passwd可查看用户信息 |
cat /proc/meminfo | 查看内存信息 |
cat /proc/cpuinfo | 查看CPU信息 |
文本编辑器VI的使用
一、文本的创建和查看
功能项 | 命令实例 | 作用 |
---|
文件创建 | vi /opt/learn/hello.txt | 在目录/opt/learn下创建hello.txt并进入vi编辑界面 |
| touch /opt/learn/test | 在目录/opt/learn下创建空白文件test |
| cat > /opt/learn/catfile << EOF | 创建文件catflie并在屏幕上输入内容,最后输入EOF结束,如果不使用 <<EOF,则输入结束时直接按Ctrl+D也可 |
| | |
文件查看 | vi /etc/passwd | 在vi编辑器中输入文本内容 |
| cat /etc/passwd | 在屏幕上输入文本内容 |
| more /etc/passwd | 分屏输出文本内容 |
| less /etc/passwd | 分屏输出文本内容并按需加载文件(适合于大文件的查看),看一行加载一行 |
| head -n 10 /etc/passwd | 只输出文件的头10行 |
| tail -n 20 /etc/passwd | 只输出文件末尾的20行 |
| tail -f 文本文件 | 表示通过流的方式实时查看最新的文件内容 |
| strings /bin/ls | 查看二进制文件中的可打印字符 |

二、文本内容的编辑
默认两种模式:命令模式和编辑模式。默认模式输入i
或a
进入编辑模式,在编辑模式下,按ESC
进入命令模式
命令实例 | 作用 |
---|
vi filename | 生成新文件或者编辑查看文件 |
i或者a | 从命令模式进入编辑模式,i为插入文本,a为追加文本 |
Esc | 从编辑模式进入到命令模式 |
:w | 保存文本 |
:wq | 保存并退出 |
:wq! | 保存并强制退出 |
:q | 退出 |
:q! | 不保存,强制退出 |
o | 添加一行 |
O | 在光标所在行的上方添加一行 |
dd | 删除一行 |
D | 删除从当前光标到行尾的内容 |
x | 删除一个字符 |
s | 删除一个字符并切换到编辑模式 |
S | 删除一行并切换到编辑模式 |
:n | 光标移至文本第n行 |
$ | 光标移动到文本的行尾 |
A | 光标移动到文本的行尾并进入编辑模式 |
^ | 光标移动到文本的行首 |
G | 光标移动到文本的末尾 |
gg | 光标移动到文本的首行 |
ZZ | 存盘退出 |
/字符串 | 查找某个字符串 |
n | 继续查找 |
:u | 撤销 |
:redo | 重做 |
三、修改IP地址为静态IP
默认情况下,Linux的IP地址为动态分配,而面向服务器应用场景,通常建议设置为静态IP,操作步骤如下:
1、查看默认网关,运行ip route
命令
| [root@yyb ~]# ip route |
| default via 192.168.184.2 dev ens33 proto dhcp metric 100 |
| 192.168.184.0/24 dev ens33 proto kernel scope link src 192.168.184.134 metric 100 |
可以看出默认网关地址为:192.168.184.2
2、确认动态IP地址及网段等信息ip addr
| [root@yyb ~]# ip addr |
| 1: 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:a9:7f:78 brd ff:ff:ff:ff:ff:ff |
| inet 192.168.184.134/24 brd 192.168.184.255 scope global noprefixroute dynamic ens33 |
| valid_lft 979sec preferred_lft 979sec |
| inet6 fe80::aad0:e6bd:aff3:d0dd/64 scope link noprefixroute |
| valid_lft forever preferred_lft forever |
3、使用vi编辑静态IP地址
运行命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33
,其中ens33与ip addr看到的网卡编号保持一致,并修改网上的IP地址信息如下:
| TYPE="Ethernet" |
| PROXY_METHOD="none" |
| BROWSER_ONLY="no" |
| #BOOTPROTO="dhcp" |
| 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="a46aedd8-dcff-444b-8d94-cf4910ebc4fa" |
| DEVICE="ens33" |
| ONBOOT="yes" |
| |
| IPADDR="192.168.184.188" |
| NETMASK="255.255.255.0" |
| GATEWAY="192.168.184.2" |
| DNS1="192.168.184.2" |
| |
| DNS2="114.114.114.114" |
| BROADCAST="192.168.184.255" |
4、重启网卡,使配置生效
| systemctl restart network |
文件和文件夹操作
一、文件操作
功能项 | 命令或者格式 | 作用 |
---|
文件操作 | cp hello.txt /opt/test | 把文件hello.txt复制到文件夹/opt/test下 |
| cp hello.txt /opt/test/hello.cp | 把文件hello.txt复制到文件夹/opt/test下并重命名为hello.cp |
| mv hello.txt /opt/test | 把文件hello.txt移动到文件夹/opt/test下 |
| mv hello.txt /opt/test/hello.mv | 把文件hello.txt移动到文件夹/opt/test下并重命名为hello.mv |
| mv hello.txt hello.png | 重命名 |
| rm /opt/test/hello.txt | 删除文件 |
| rm -f /opt/test/hello.png | 强制删除文件,不会有提示信息 |
| du -sk hello.txt | 查看文件hello.txt的大小(以K为单位) |
| | |
连接 | ln -s hello.txt shello | 为hello.txt文件创建一个名为shello的软链接(类似于快捷方式) |
| ln -d hello.txt dhello | 为hello.txt文件创建一个名为dhello的硬链接,硬链接表示所有文件中任意更改一个,其他文件的所有属性会跟着变化,如大小、更新时间、权限等 |
二、文件夹操作
功能项 | 命令或格式 | 作用 |
---|
ls / tree | ls [option] [file/directory] | 显示指定目录下的所有文件或文件夹 |
| ls | 显示当前目录的内容 |
| ls -l | 显示当前目录的详细内容 |
| ls -a | 显示所有文件,包括隐藏文件 |
| ls*.txt | 显示目前目录下所有以.txt为后缀名的文件 |
| ls /opt/888 | 显示/opt/888下的内容 |
| ls -R /opt/ | 列出所有/opt目录及子目录的内容 |
| tree /opt | 用树状图显示目标及文件 |
| | |
pwd | pwd | 显示当前所在目录 |
| | |
cd | cd directory | 切换到指定目录 |
| cd ~ | 切换到当前用户的主目录 |
| cd … | 返回当前目录的上一级目录 |
| cd /opt/learn | 用绝对路径切换到/opt/learn目录下 |
| cd …/…/ | 使用相对路径切换到当前目录的上一级的上一级目录下 |
| | |
mkdir | mkdir [option] [directory1] [directory2]… | 创建目录 |
| mkdir /opt/learn/other | 在目录/opt/learn/下创建目录other |
| mkdir dir2 dir3 dir4 | 同时创建dir2 dir3 dir4三个目录 |
| mkdir -p /dir2/dir3/dir4 | 同时创建多层目录 |
| | |
rmdir | rmdir dir1 | 删除一个空目录 |
| | |
其他操作 | cp -r /opr/learn /opt/learn2 | 拷贝文件夹 |
| mv /opr/learn2 /opt/learn3 | 重命名文件夹 |
| rm -rf /opt/learn3 | 强制删除文件夹 |
用户与用户权限
一、用户与用户组
功能项 | 命令实例 | 作用 |
---|
用户组 | cat /etc/group | 查看当前系统存在的用户组 |
| groupadd testing | 添加一个新的用户组testing |
| cat /etc/group | 查看组是否被新增成功 |
| groupmod -n test testing | 将testing重命名成test |
| groupdel test | 删除组test |
| groups root | 查看用户root所在的所有组 |
| | |
useradd | cat /etc/passwd | 查看当前系统的用户 |
| useradd yang | 新增一个用户yang(默认将新增一个对应的名为yang的组) |
| useradd -g test yang | 新增一个用户yang并将其加入test组 |
| useradd -g test -G dev yang | 新增一个用户yang,起主组为test,并附加到组dev中 |
| | |
usermod | usermod -g dev yang | 将用户yang切换到dev组 |
| usermod -G 502 yang | 将用户yang附加到gid为502的这个组 |
| usermod -d /home/temp/mary | 将mary的主目录从/home/mary改为/home/mary |
| | |
userdel | userdel yang | 删除用户yang |
| userdel -f yang | 强制删除用户yang(即使用户已登录) |
| userdel -r yang | 删除用户yang并删除其主目录 |
二、文件与文件夹权限
功能项 | 命令实例 | 作用 |
---|
chmod | chmod [权限] [文件或目录] | 更改文件或目录的权限 |
用户授权问题 | ls -l hello.txt | 查看文件的详细属性,对其进行解释 |
| 左边10位中的第一位代表文件类型 | d------目录,------普通文件,l----链接文件 |
| 左边10位的后9位代表权限 | 前三位代表文件所有者的权限(用u表示)中间3位代表文件所在组的权限(用g表示)后三位代表其他组的权限(用o表示) |
| 权限rwx的含义 | r----4----可读,w----2----写,x----1----可执行 |
| chmod u+x hello.txt | 为hello.txt文件的所有者添加可执行权限 |
| chmod u-w hello.txt | 为hello.txt文件的所有者去除可执行权限 |
| chmod g-r hello.txt | 为hello.txt文件的所在组去除可读权限 |
| chmod o+w hello.txt | 为hello.txt文件的所在组的其他组添加可写权限 |
| chmod a+w hello.txt | 为所有三种角色添加可写权限 |
| chmod a+wx hello.txt | 为所有三种角色添加可写权限 |
| chmod a-rwx hello.txt | 去除hello.txt的所有权限(此时仅有root可以编辑) |
| chmod 777 hello.txt | 将hello.txt的权限设置为rwxrwxrwx |
| chmod 643 hello.txt | 将hello.txt的权限设置为rw-,r–,-wx |
| chmod 777 /opt/test | 将目录/opt/test的权限更改为777 |
| chmod -R 755 /opt/test | 将目录/opt/test及其下所有的文件和子目录的权限更改为755 |
| | |
chown | chown yang hello.txt | 将hello.txt的文件所有者改为yang |
文件所归属的所有者 | chown yang /opt/test | 将目录/opt/test的所有者改为yang |
| chown -R yang /opt/test | 将目录/opt/test及其下所有的文件和子目录的所有者改为yang |
| | |
chgrp | chgrp yang hello.txt | 将hello.txt所在组改为yang |
文件组的问题 | chgrp yang /opt/test | 将/opt/test所在组改为yang |
| chgrp -R mary /opt/test | 将目录/opt/test及其所有子目录和文件所在组改为yang |
| | |
passwd | passwd yang | 修改yang 的密码 /etc/shadow保存了所有用户的密码,默认只有root可以查看 |
文件内容查找与归档压缩
一、文件查找
功能项 | 命令实例 | 作用 |
---|
find | find 起始目录 查找类型 查找条件 | 查找其实目录及所有子目录下的文件及文件夹 |
| find . -name “hello.txt” | 查找当前目录下文件名为hello.txt的文件或文件夹 |
| find . -name “hello” | 查找当前目录下文件名包含hello的文件或文件夹 |
| find /home -name “bash” | 查找目录/home下文件名包含bash的文件或文件夹 |
| find . -name “*” | 查找当前目录下的所有文件或文件夹(作用同-ls -R) |
| find . -name “[h]*” | 查找当前目录下以h开头的文件或文件夹 |
| find . -name “[h|f]*” | 查找当前目录下所有以h或f开头的文件或文件夹,|可以省略 |
| find . -name “[a-z]*” | 查找当前目录下所有以小写字母开头的文件或文件夹 |
| find . -name “[A-Z]*” | 查找当前目录下所有以大写字母开头的文件或文件夹 |
| find . -name “[a-Z]*” | 查找当前目录下所有以字母开头的文件或文件夹 |
| find . -name “[0-9]*” | 查找当前目录下所有以数字开头的文件或文件夹 |
| find . -name “h?llo*” | 查找当前目录下所有以h后面带一个字符再加llo开头的文件或文件夹 |
| find . -name “[ ^ a-b]*” | 查找当前目录下不以a-b开头的文件或文件夹 |
| find . -name ’ \ \’ | 查找当前目录下包含特殊字符\的文件夹(注意使用单引号) |
| | |
| find . -perm 777 | 查找当前目录下权限为777的文件或文件夹 |
| find . -path “./test” -prune -o -name “hello” | 查找当前目录下除test目录的其他所有目录中包含hello的文件或文件夹 |
| find . -user yang | 查找当前目录下文件所有者为yang的文件或文件夹 |
| find . group yang | 查找当前目录下文件或所属组为yang的内容 |
| find . -mtime -3 | 查找当前目录下在3天内更新过的文件或文件夹 |
| find . -mtime +3 | 查找当前目录下在3天前更新过的文件或文件夹 |
| find . -newer hello.txt | 查找当前目录下比hello.txt新的文件或文件夹 |
| find . !-newer hello.txt | 查找当前目录下比hello.txt旧的文件或文件夹 |
| find . -type d | 查找当前目录下所有的文件夹(普通文件的类型为f),了解Linux文件夹类型: 1)f:普通文件,如文本文件,可执行文件 2)c:字符设备,如终端、磁带机等 3)b:块设备,如光盘、硬盘等
|
| find . -type l | 查找当前目录下所有的软连接文件 |
| find . -size 200c | 查找当前目录下文件大小为200字节的文件(c表示byte) |
| find. -size +200c | 查找当前目录下文件大小大于200字节的文件(用-表示小于) |
| find . -name “hello*” -exec ls -l {} ; | 查找当前目录下所有以hello开头的文件并将其细节显示出来,如果查找出了目录,那么此时目录也会被ls -l列出来 |
| find . -name “hello*” -exec rm {} ; | 查找当前目录下所有以hello开头的文件并将其删除 |
| find . -name “hello” | xargs ls -l | 查找当前目录下所有以hello开头的文件并将其细节显示出来,xargs可以查找文件内容里面的东西 |
| Linux里的| | 管道,前面内容的输出就是后面内容的输入 |
二、内容查找
功能项 | 命令实例 | 作用 |
---|
grep | grep[选项]匹配模式 目标文件 | 基于行对目标文件的内容进行查找 |
| grep “root” /etc/passwd | 查找到/etc/passwd文件中包含root的行 |
| grep -n “root” /etc/passwd | 查找到/etc/passwd文件中包含root的行,并显示行号 |
| grep “^root” /etc/passwd | 查找以root为行首的行 |
| grep “root$” /etc/passwd | 查找以root为行尾的行 |
| grep “” /etc/passwd | 查找以a或者b为行首的行 |
| grep -v “abc” | 排除包含abd的行 |
| ls | grep test | 从ls 的输出中过滤包含test的文件名 |
| grep -r games /etc | 在/etc目录下查找所有包含games的文件 |
| grep “^s.*login$” ./passwd | 从passwd下查找s开头,login结尾的行 |
| | |
find 与grep结合 | find ./ -name “*” | xargs grep word | 遍历某个目录下的所有文件中包含word的文件 |
wc | wc -l | 统计文件行数或输出的个数,-c只显示Bytes数。-l显示行数 |
三、文档归纳压缩
功能项 | 命令实例 | 作用 |
---|
tar /gzip | tar -cvf hello.tar hello.txt | 把hello.txt归档并命名为hello.tar |
| tar -cvf test.tar /opt/test | 把/opt/test归档并命名成test.tar |
| tar -tf test.tar | 将归档文件test.tar中的文件显示出来 |
| tar -xvf test.tar | 提取归档文件中的内容 |
| gzip hello.tar | 将归档文件hello.tar压缩成hello.tar.gz |
| gzip -d hello.tar.gz | 解压缩文件成hello.tar |
| tar -zcvf hello.tar.gz hello.txt | 将hello.txt归档并压缩成hello.tar.gz |
| tar -zxvf hello.tar.gz | 解压缩 |
| | |
zip /unzip | zip hello.zip hello.txt | 将hello.txt压缩并命名成hello.zip |
| zip -r text.zip /opt/test | 将/opt/test目录压缩 |
| unzip -v hello.zip | 解压缩,并显示进度 |
| unzip hello.zip | 解压缩hello.zip |
进程与服务管理
课堂实验
- 使用
ps
命令查看进程,包括过滤进程信息 - 使用
systemctl
命令管理Linux服务
课堂引入
- 进程(Process):操作系统正在运行的应用程序,任意一个进程,都会有进程ID,都会消耗CPU和内存资源。
- 服务(Service):通过服务控制面板或命令可以直接启动应用程序,也可能是操作系统启动时自动启动的后台应用程序。服务一旦运行,也是一个进程。
- 在Windows中,可以运行
services.msc
命令打开服务控制面板
一、进程相关命令
| ps:当前终端启动的进程 |
| ps -ef 或 ps aux :查看当前操作系统里面所有进程信息 |
| ps aux | grep sbin:查找进程里面包含sbin的进程信息 |
| ps aux | sort -k 3 -r | head -n 6:取出最消耗CPU的前5个进程信息 |
| -k表示第几列,默认为第一列 |
| -r表示反转,则降序排列 |
| top:查看进程信息和系统的性能情况 |
| top -n 1 | sort -k 9 -r | headd -n 6:取出最消耗CPU的前5个进程信息 |
| -n表示更新几次后关闭 |
| kill PID:结束进程 |
| kill -9 PID:强制结束进程 |
二、服务管理与运行
- service:在CentOS7以前的版本使用,另外,在其他Linux发行版中通常也使用service
- systemctl:在CentOS7以后的版本使用,当然也兼容service
| |
| service sshd status |
| systemctl status sshd |
| |
| |
| service sshd start |
| systemctl start sshd |
| |
| |
| service sshd stop |
| systemctl stop sshd |
| |
| |
| service sshd restart |
| sysemctl restart sshd |
| |
| |
| systemctl enable sshd |
| |
| |
| systemctl disable sshd |
| |
| |
| systemctl list-unit-files |
| systemctl list-unit-files | grep sshd |
| |
| |
| systemctl start firewalld |
三、Xampp安装
| 首先Xampp是一个自解压离线安装包,不需要下载,不需要额外命令,先确保上传,然后给安装包赋予可执行权限 |
| 默认情况下,即使是执行当前目录下的可执行程序,也不能直接写文件名,而是必须在文件名前面加./,才是表示执行当前目录下的可执行程序 |
| 如果不加./,Linux不会在当前目录下寻找,而是去系统预先配置好的环境变量中去寻找,但是找不到,所以会报错 |
| |
| ./xampp-linux-x64-7.3.29-1-installer.run |
| |
| 安装完成后,/opt/lampp/lampp start 启动Xampp的三个服务:Apache、MySQL、ProFTP |
| 第一次启动时会报错,修改 vi /opt/lampp/lampp ,将2.2.5的内核版本号修改为2.8.0以上 |
| 再次启动可能会报netstat:command not found |
| netstat时Linux中一个常规的网络相关的命令,用于查看系统中开启了那些端口,默认最小化安装时没有安装 |
| |
| |
| yum install net-tools |
| |
在Linux中安装应用
一、使用Rpm离线安装
先下载到本地,以.rpm文件名结尾,下载完成后,再安装
| rpm -qa | grep mysql |
| |
| rpm -ivh yyb.rpm |
| |
| rpm -e yyb.noarch |
利用rpm安装MySQL服务器版:
| error:Failed dependencies:失败的依赖 |
二、基于源代码安装应用
源码安装比较适用于专业人员,并不需要安装人员能看懂源码,但需要知道源代码的基本过程
| 解压后去源代码目录下找以下几个文件:configure setup.sh install.sh |
| ./configure |
| make |
| mkae install |
使用源码安装nginx,解压后的样子

| [root@yyb nginx-1.21.2]# ./configure |
| checking for OS |
| + Linux 3.10.0-1160.el7.x86_64 x86_64 |
| checking for C compiler ... not found |
| |
| ./configure: error: C compiler cc is not found |
| |
| |
| |
| yum install gcc -y |
| 安装完成后再次进行配置,如果提示缺少依赖pcre或zlib等库,则继续yum install pcre-devel |
| 通常情况下提示缺少什么库,一般先尝试yum install pcre,如果不行,再尝试yun install pcre-devel |
三、Yum命令操作
Yum(全称为Yellow dog Updater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有的依赖的软件包,无须繁琐地一次次下载、安装。
| yum list |
| yum search mysql |
| yum repolist |
| |
| yum install |
| yum install gcc -y |
| yum install gcc cmake gcc-c++ mysql wget -y : |
| |
| yum deplist curl |
| |
| yum erase wget |
| yum remove wget |
| |
| yum clera all |
| yum makecache |
| |
| yum update |
四、Yum配置源
默认配置文件:/etc/yum.repo.d/CentOS-Base.repo
| [base] |
| name=CentOS-$releasever - Base |
| mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra |
| |
| gpgcheck=1 |
| gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 |
| |
| mirrorlist并非镜像本身的地址,而是一堆镜像网址的集合,CentOS会自动选择速度最快的一个,每一个对应的就是具体的仓库,比如 |
| http://mirrors.163.com/centos/7.9.2009/os/x86_64/ |
| baseurl:对应的是具体的镜像地址,里面保存着仓库的各个安装包程序 |
http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra
| http://mirror.lzu.edu.cn/centos/7.9.2009/os/x86_64/ |
| http://mirrors.neusoft.edu.cn/centos/7.9.2009/os/x86_64/ |
| http://mirrors.cn99.com/centos/7.9.2009/os/x86_64/ |
| http://mirrors.bupt.edu.cn/centos/7.9.2009/os/x86_64/ |
| http://mirrors.163.com/centos/7.9.2009/os/x86_64/ |
| http://ftp.sjtu.edu.cn/centos/7.9.2009/os/x86_64/ |
| http://mirrors.huaweicloud.com/centos/7.9.2009/os/x86_64/ |
| http://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/ |
| http://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/os/x86_64/ |
| http://mirrors.bfsu.edu.cn/centos/7.9.2009/os/x86_64/ |

下载阿里云的Repo源配置文件http://mirrors.aliyun.com/repo/Centos-7.repo

替换CentOS-Base.repo
yum repolist
五、Apt安装
- 对于Redhat体系的Linux发行版本,目前主流的是Yum+Rpm的方式,可以在线安装依赖。在新的CentOS-8以后的版本中,引入了新的安装方式:dnf,本质上跟yum几乎没有区别
- 对于Debian体系的Linux发行版本,主要安装命令两个:apt-get,apt,优先考虑使用apt
常见的网络相关命令
一、常用的网络命令
1、ping命令
| ping www.baidu.com |
| ping -i 3 www.baidu.com |
| ping -c 5 www.baidu.com |
| ping -f www.baidu.com |
| ping -f -c 200 www.baidu.com |
| ping -s 1024 www.baidu.com |
2、ip route2命令
| ip addr |
| ifconfig |
| |
| ip neigh |
| arp -an |
| |
| ip link |
| ip -s link |
| ifconfig -s |
| |
| ip addr add 192.168.1.1/24 dev ens33 |
| ifconfig ens33 192.168.1.1 |
| |
| ip addr del 192.168.1.1/24 dev ens33 |
| |
| |
| ip route |
| route |
| netstat -r |
| route -n |
| |
| ip route add default via 192.168.1.1 |
| route add default gw 192.168.1.1 |
| |
| ip route del default via 192.168.1.1 |
| route del dafaule gw 192.168.1.1 |
| |
| ip route flush cache |
| |
| ip link set ens33 up |
| ifconfig ens33 up |
| ifconfig ens33 down |
| |
| ss -anl |
| netstat -anlop |

3、traceroute命令
| Linux: |
| tracertoute www.baidu.com |
| |
| windows: |
| tracert www.baidu.com |
4、curl命令
| curl http://www.baidu.com/ |
| curl -o baidu.html http://www.baidu.com/ |
| curl -O http://www.baidu.com/train/index.html |
5、wget
| wget http://cn.wordpress.org/wordpress.tar.gz |
| wget -O yyb.tar.gz http://cn.wordpress.org/wordpress.tar.gz |
| wget -c yyb.tar.gz http://cn.wordpress.org/wordpress.tar.gz |
| wget -b yyb.tar.gz http://cn.wordpress.org/wordpress.tar.gz |
TCPDump流量监控工具
一、流量监控概述
对于一个通信过程的分析,首先需要把握5个基本数据:
然后具体查看内容
二、安装tcpdump
| yum install -y tcpdump |
| |
| 正在安装: |
| tcpdump x86_64 14:4.9.2-4.el7_7.1 base 422 k |
| 为依赖而安装: |
| libpcap x86_64 14:1.5.3-12.el7 base 139 k |
| |
| libpcap 是Linux上标准的流量监控的库,大多数流量监控工具都是基于这个底层库进行开发 |
| 在Windows上,比较知名的是winpacap和npcap |
| 目前市场上主流的防火墙、IDS、IPS、包过滤工具,只要涉及到流量的产品或系统,底层均基于以上这些库 |
三、tcpdump使用
| tcpdump -i ens33 |
| tcpdump tcp and dst port 80 -i ens33 |
| tcpdump tcp and dst port 80 -i ens33 -w ./target.pcap |
| tcpdump tcp and dst port 80 -i ens33 -c 100 |
IPTables应用
一、IPTables防火墙介绍
一旦重启IPTables,所有规则均失效
IPTables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过IPTables这个代理,将用户的安全设定执行到对于的“安全框架”中,这个“安全框架”才是真正的防火墙,这个框架的名字叫netfilter,netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。IPTables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。netfilter/iptables(下文简称iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
iptables是一个基于命令行的防火墙工具,它使用规则链来允许/阻止网络流量。当一条网络连接试图在你的系统中建立时,iptables会查找对应的匹配规则。如果找不到,iptables将对其采取默认操作。
iptables的结构是由表(tables)组成,而tables是由链组成,链又是由具体的规划组成。因此我们在编写iptables规则时,要先指定表,再指定链。tables的作用是区分不同功能的规则,并储存这些规则
1、五张表:filter、nat、mangle、raw、security。主要用于将不同的规则存储在不同的表中
- filter表:默认表,负责过滤数据包(使用频率最高)
- nat表:用于网络地址转换(IP、端口)
- mangle表:主要应用在修改数据包、流量整形、给数据包打标识
- raw表:这个表很少用到,主要用于配置连接跟踪相关内容,使用频率较少
- security表:这个表用于安全Linux的防火墙规则,是iptables最近的新增表,使用频率较少
2、五条链:流量方向
- input:匹配目标IP是本机的数据包,入站
- output:出口数据包,出站
- forward:匹配流经本机的数据包
- prerouting:修改目的地址,用来做DNAT。如:把内网中的80端口映射到互联网端口
- postrouting:修改源地址,用来做SNAT。如:局域网共享一个公网IP接入internet。
3、规则
- 基于防火墙策略设置的各类防护规则,防火墙规则的执行顺序认为从前到后依次执行、遇到匹配的规则就不再继续向下检查、如果遇到不匹配的规则则会继续向下进行。
二、安装与配置IPTables
| systemctl stop firewalld |
| |
| yum install iptables iptables-services |
三、基本的命令使用


| iptables -nL |
| |
| iptables -A INPUT -j DROP |
| iptables -A OUTPUT -j DROP |
| -A代表追加 |
| -I代表插入到开头 |
| 上述两条命令一旦执行,所有流量无法进来,所有流量无法出去,为断网状态 |
| |
| iptables -I INPUT -j DROP |
| iptables -I OUTPUT -j DROP |
| |
| iptables -I INPUT -p tcp --dport 22 -j ACCEPT |
| iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT |
| --dport代表目的地 |
| |
| iptables -I INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT |
| |
| iptables -I INPUT -p icmp -j DROP |
| iptables -I INPUT -p icmp -j REJECT |
| iptables -I OUTPUT -p icmp -j DROP |
| |
| |
| iptables -L OUTPUT --line-numbers |
| iptables -D OUTPUT 3 |
| |
| service iptables save |
| cat /etc/sysconfig/iptables |
| |
| iptables -F |
| |
| |
| |
| iptabels -I INPUT -i ens33 -p tcp -s 192.168.112.153 --sport 8088 -j ACCEPT |
| iptables -I OUTPUT -o ens33 -p tcp -d 192.168.112.153 --dport 8088 -j ACCEPT |
| |
| |
| |
| iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT |
| |
| |
| |
| |
1、端口转发

四、命令参数表
参数 | 说明 |
---|
-A | 在最后添加一条规则 |
INPUT | 链名、常用、大写 |
PREROUTING | 链名、大写 |
OUTPUT | 链名、大写 |
-I | 在最前面插入一条规则 |
-s | 指定源地址,可以是IP地址,也可以是网段“192.168.109.10/24”;“-s为空”代表所有 |
-d | 目标地址 |
-p | 协议 |
–dport | 指定主机端口(目的端口,本机开放或拒绝端口) |
–sport | 指定主机端口(禁止连接对方某些接口) |
-i | 指定网卡名,表示报文流入端口 |
-j | 指定所需要的操作 |
ACCEPT | 允许 |
REJECT | 拒绝,拒绝提供服务 |
DROP | 拒绝,丢弃数据包不回应 |
–src-range | 源地址范围(如:拒绝某IP段访问) |
–dsc-range | 目标地址的范围 |
–mac-source | 源主机的mac地址 |
-t | 指定表名,默认是filter |
-v | 查看详细信息 |
-nvL --line-numbers | 查看filter表中规则的顺序 |
-nvL -t mangle | 查看mangle表中的防火墙规则 |
-F | 清空filter表 |
-R | 替换规则 |
-m | 指定模块 |
Firewalld防火墙应用
Linux防火墙是通过netfiler来处理的,他是内核级别的框架。iptables被作为netfiler的用户态抽象层,iptables将包通过一系列的规则进行检查,如果包与特定的IP/端口/协议的组合匹配,规则就会被应用到这个包上,以决定包是否被通过、拒绝或丢弃。firewalld是最新的netfiler用户态抽象层。filewalld可以通过定义源IP和端口网络将入站流量分类到不同区域zone。每个区域基于指定的准则按自己配置去通过或拒绝包。另外的改进是基于iptables进行语法简化。firewalld通过使用服务名而不是它的端口和协议去指定服务,使它更易于使用。例如,是使用samba而不是使用UDP端口137和138和TCP端口139和445.它进一步简化语法,消除了iptables中对语句顺序的依赖
一、firewalld的基本使用
| systemctl start firewalld |
| systemctl status firewalld |
| systemctl disable firewalld |
| systemctl stop firewalld |
| systemctl restart firewalld |
二、区域
在不同的区域下,可以设置不同的防火墙策略,以便在需要的时候可以实现快速切换,而不需要从0开始配置一套。对于一套服务器环境来说,通常情况下,没有那么多需要去切换。drop、public、常用
| drop |
| |
| block |
| |
| public |
| |
| external |
| |
| work |
| |
| home |
| |
| internal |
| |
| trusted |
1、配置firewalld-cmd
运行firewalld-cmd --list-all查看基础配置信息:
| [root@yyb ~]# firewall-cmd --list-all |
| public (active) |
| target: default |
| icmp-block-inversion: no |
| interfaces: ens33 |
| sources: |
| services: dhcpv6-client ssh |
| ports: |
| protocols: |
| masquerade: no |
| forward-ports: |
| source-ports: |
| icmp-blocks: |
| rich rules: |
| default |
| firewall-cmd --get-services得到一个防火墙预定义服务的详细列表 |
运行一下命令理解firewall规则用法:
| firewall-cmd --zone=public --list-port |
| firewall-cmd --reload |
| firewall-cmd --get-zones |
| firewall-cmd --get-active-zones |
| firewall-cmd --set-default-zone=public |
| firewall-cmd --get-zone-of-interface=ens33 |
| firewall-cmd --list-all |
永久修改
| firewall-cmd --permanent <some modification> |
| firewall-cmd --reload |
| firewall-cmd |
| firewall-cmd |
2、常见使用场景
| firewall-cmd --panic-on |
| firewall-cmd --panic-off |
| firewall-cmd --query-panic |
| firewall-cmd --add-service=ftp |
| firewall-cmd --add-service=ftp --permanent |
| firewall-cmd --query-service=ftp |
| firewall-cmd --remove-service=http |
| firewall-cmd --list-services |
| cd /usr/lib/firewalld/services |
| firewall-cmd --add-port=3306/tcp |
| firewall-cmd --remove-port=3306/tcp |
| |
| firewall-cmd --zone=public --query-port=80/tcp |
| firewall-cmd --zone=public --list-ports |
| |
| firewall-cmd --zone=public --add-port=80/tcp --permanent |
| firewall-cmd --zone=public --remove-port=80/tcp --permanent |
允许http服务通过1分钟
| firewall-cmd --zone=public --add-service=http --timeout=1m |
| |
| firewall-cmd --get-active-zone |
3、富规则
与iptables一致,富规则中的动作可以设置为:accept、drop、reject(小写)
-
添加指定ip访问端口规则:
| firewall-cmd --permanent -add-rich-rule 'rule family=ipv4 source address="192.168.184.1" port protocol="tcp" port=80 accept' |
-
删除指定某个IP访问特定端口规则
| firewall-cmd --remove-rich-rule 'rule family=ipv4 source address="192.168.184.1" port protocol="tcp" port="80" accept' |
-
允许ping
| firewall-cmd --add-rich-rule='rule family="ipv4" protocol value="icmp" source address="192.168.184.1" accept' |
-
端口转发
| iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 |
-
接受192.168.184.0网段所有的IP访问SSH服务
| firewall-cmd --add-rich-rule='rule family=ipv4 source address="192.168.184.0/24" service name=ssh accept' |
-
直接模式(使用iptables语法)
| firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 192.168.184.1 -j ACCEPT |
| |
| firewall-cmd --direct --get-all-rules |
| firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 192.168.184.1 -j ACCEPT |
4、端口转发
注意问题
- 比如我将80端口转发至8080端口,首先检查本地80和8080端口是否开放监听
- 其次检查是否允许伪装IP,没有的话要开启
| |
| firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80 |
| firewall-cmd --remove-forward-port=port=8888:proto=tcp:toport=80 |
三、扩展
在linux中,配置文件通常是在/etc/目录下;日志文件一般在/var/log目录下
可以使用find /etc/ -name "*frewall*"
查找配置文件
Shell环境和变量
一、Shell基础用法
1、Shell的类型
命令 | 作用r |
---|
Bourne Shell | 是贝尔实验室开发的,Unix普遍使用的Shell,在编程方面比较优秀,但在用户交互方面没有其他Shell优秀 |
Korn Shell | 是对Bourne Shell的发展,在大部分内容上与Bourne Shell兼容,集成了C Shell和Bourne Shell的优点 |
C Shell | 是SUN公司Shell的BSD版本,语法与c语言相似,比bourne shell更适合编程 |
BASH | 是GUN的Bourne Again Shell,是GUN操作系统默认的Shell,在Bourne Shell基础上增加了很多特性,如命令补全、命令历史表 |
2、Shell操作
命令 | 作业 |
---|
cat /etc/shells | 列出系统中所有的Shell |
ksh/csh/zsn/basn | 切换到其他Shell |
chsh yang | 使用命令chsh更改用户yang的默认Shell |
cat /etc/passwd | 查看用户使用的默认Shell |
echo &SHELL | 查看当前环境变量&SHELL的值 |
3、Bash基本操作
命令 | 作用 |
---|
TAB键 | 命令补全 |
history | 命令的历史记录 |
alias gohome=“shutdown -h now” | 命令别名功能(给关机起gohome),来执行一些复杂命令 |
crontab | 作业控制功能 |
shell脚本编程 | 非常灵活的脚本编程能力 |
ls;cat /etc/passwd;mount | 三个命令放在一起通过;分隔,一次性执行完 |
4、echo命令
命令 | 作用 |
---|
echo “HelloWorld” | 在屏幕输出HelloWorld |
echo “Hello\nWorld” | 在屏幕输出Hello\nWorld |
echo -e “Hello\nWorld” | 在屏幕输出Hello World |
\a | 蜂鸣 |
\b | 退格,覆盖前一个字符 |
\c | 不带换行符打印一行 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 制表符 |
\v | 纵向制表符 |
\\ | 反斜杠 |
\0nnn | ASCII码是nnn(八进制)的字符 |
5、环境变量
命令 | 作用 |
---|
set | 显示当前shell的变量,包括当前用户的变量 |
env | 显示当前用户的变量 |
export | 显示当前导出成用户变量的shell变量 |
cat /etc/profile | 全局的环境变量,对任何用户生效,开机自动启动 |
cat ~/.bash_profile | 用户主目录下的环境变量,仅对当前用户生效(本地变量定义在此) |
export NAME=yang | 定义一个NAME环境变量并且赋值为yang |
echo $NAME | 输出环境变量的值 |
unset NAME | 删除环境变量 |
echo $USER | 当前登录的用户名 |
echo $UID | 当前登录的用户ID号 |
echo $SHELL | 当前所使用的SHELL |
echo $HOME | 当前用户的主目录 |
echo $PWD | 当前命令行所在的目录 |
echo $PATH | 当前可执行程序的路径(设定了PATH,执行命令就不需要输入命令的绝对路径) |
echo $PS1 | 命令的提示字符串(重启会失效,如想永久生效,则保存到profile) |
echo $PS2 | 命令一行未写完时换行提示符 |
6、普通变量
命令 | 作用 |
---|
read NAME Bill Gates | 从终端将值读入并赋值给变量NAME |
read NAME SURNAME Bill Gates | 此时会将BIll赋值给NAME,而Gates赋值给SURNAME |
NAME=yang echo $NAME | 在命令行定义变量NAME并取得其值 |
SOURCE=/etc/passwd DEST=/opt/ cp SOURCE DEST | 利用变量代替对应值进行操作 |
NAME=yang readonly NAME | 设置只读变量,此时变量的值不能修改 |
7、管道及重定向
命令 | 作用 |
---|
set | grep USER | 从set的输出中查找包含USER的行 |
ls | wc -l | 根据ls输出的行数来统计该文件夹下的文件数量 |
tail /etc/passwd >> passwd.txt | 在文件passwd.txt后面累加 |
cat < /etc/passwd | 将/etc/passwd文件作为cat的输入 |
cat < /etc/passwd >passwd2.txt | 将/etc/passwd文件作为cat的输入,并将输出结果重定向到passwd2.txt中 |
ifconfig | tee ifconfig.tee | 将ficonfig的内容输出到屏幕同时重定向到ifconfig.tee中 |
ifconfig | tee -a ifconfig.tee | 以追加的方式输出到文件ifconfig.tee中 |
ifconfig 1> ifconfig.out | 标准输出重定向到文件ifconfig.out中(报错的话不输入) |
ifconfig 2> ifconfig.error | 标准错误重定向到文件ifconfig.error中(正确的不会输入,报错才会输入) |
ls /opt/optt 1>cat.error 2>&1 | 标准输出和标准错误一起重定向到一个文件 |
ls /opt/optt 2> /dev/null | 标准错误信息会输送到系统垃圾箱,不会输出到屏幕和任何地方 |
ls /opt /oppp 2>ls.err 1>ls.out | 正确的输出和错误的输出分别重定向到不同的文件 |
命令1 && 命令2 | 命令1执行成功后才会执行命令2 |
命令1 || 命令2 | 命令1执行失败后才会执行命令2 |
tty | 查看当前终端设备编号 |
Shell脚本基础应用
一、脚本运行
1、最基础的脚本
| #!/usr/bin/bash |
| #这是Shell的注释,用 |
| echo "Hello World" |
| echo "一共有 $# 个参数" |
| echo "参数一的值为:$1" |
| echo "参数二的值为: $2" |
| echo "参数九的值为: $9" |
| #在Shell中,最多只接受9个参数 |
2、使用如下命令运行helloworld.sh
| . helloworld.sh |
| sh helloworld.sh |
| bash helloworld.sh |
| source helloworld.sh |
| chmod u+x helloworld.sh |
| ./helloworld.sh |
3、引号的特殊用法
命令 | 作用 |
---|
echo “$1” | 输出第一个参数的值 |
echo ‘$1’ | 输出$1,变量不会被替换 |
echo ‘date’ | 输出date |
| now=`date "+%Y-%m-%d %H:%M:%S"` #使用``反引号,使它称为独立的代码 |
| echo $now |
| ----------------------------- |
| 2022-02-11 16:33:20 |
完善脚本,明确提醒用户,如果输入错误参数,则给予及时帮助
| #!/usr/bin/bash |
| #通过参数来决定对某个文件进行查找,并输出对相应的行数和行号,只接受一个参数 |
| filename=$1 |
| grep -n root $filename |
二、特殊用法
1、特殊变量
命令 | 作用 |
---|
$# | 传递到脚本的参数个数 |
$0 | 脚本的名称 |
$* | 以一个单字符串的形式显示所有向脚本传递的参数,与位置变量不同,此项参数可超过9个 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的进程id号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数 |
$? | 显示最后命令的退出状态,0表示正确,其他任何值表示错误 特别的:在脚本中可以自定义0~255的退出状态码 |
$_ | 代表上一个命令的最后一个参数 |
*理解
@
和
@和
@和的区别
| bash helloworld.sh 11 22 33 44 55 66 77 88 |
| |
| echo "使用 $ * 的结果为:$*" |
| echo "使用 $ @ 的结果为:$@" |
| |
| 上述脚本的结果为 |
| 使用 $ * 的结果为:11 22 33 44 55 66 77 88 #其结果是所有的参数构成一个字符串:"11 22 33 44 55 66 77 88" |
| 使用 $ @ 的结果为:11 22 33 44 55 66 77 88 #其结果是每一个参数单独加上引号:"11" "22" "33" "44" "55" "66" "77" "88" |
| #通过函数+参数的方式进行验证 |
| function testargs |
| { |
| echo "There is $# args" |
| echo $10 |
| } |
| testargs "$*" |
| testargs "$@" |
2、expr表达式
命令 | 作用 |
---|
expr 10 + 10 | expr作为一个手工计算器,此处会输出20(注意空格) |
expr 10+10 | 输出10+10 |
expr 10.1 + 10 | expr不能处理小数 |
expr “hello” = “hello” | 成功返回1,失败返回0 |
练习 | 使用echo命令输出一句话:300/56=360 |
三、test命令
1、test文件
命令 | 作用 |
---|
test -e /etc/passwd | 测试passwd文件是否存在,存在$*则返回0,否则返回1 |
[ -e /etc/passwd ] | 与上条命令一样,注意空格 |
-d file | 如果文件为一个目录,则为真 |
-e | 如果文件存在,则为真 |
-f | 如果一个文件为普通文件,则为真 |
-r | 如果文件为可读,则为真 |
-w | 如果文件为可写,则为真 |
-x | 如果文件可执行,则为真 |
-s | 如果文件的长度不为零,则为真 |
-L | 如果文件为符号文件,则为真 |
2、逻辑处理
命令 | 作用 |
---|
[ -e /etc/passwd -a -r /etc/passwd ] | 逻辑与,两边都为真,结果为真 |
-o | 逻辑或 |
[ ! -e /etc/passwd ] | 逻辑否 |
3、test字符串
命令 | 作用 |
---|
[ $USER = “root”] | 字符串比较 |
[ “$USER” = “root”] | 建议用此方式 |
= | 等于 |
!= | 不等于 |
-z | 为空字符串 |
-n | 非空字符串 |
4、test数值
命令 | 作用 |
---|
[ $$ -eq 1231] | 对数值的测试 |
-eq | 数值相等 |
-ne | 数值不相等 |
-le | 第一个数小于等于第二个数 |
-ge | 第一个数大于等于第二个数 |
-gt | 第一个数大于第二个数 |
-lt | 第一个数小于第二个数 |
分支与循环语句
一、分支语句
| if 或 elif #后面跟的条件,事实上是一条可执行程序,判断条件是该程序是否成功执行 |
| |
| if 条件 |
| then |
| 命令 |
| fi #结束 |
| |
| #如果脚本的个数少于三个,则提示用户至少需要3个参数 |
| #方式一 |
| if [ $# -lt 3] |
| then |
| echo "Sorry, it need 3 args" |
| fi |
| #方式二 |
| if [ $# -lt 3]; then |
| then |
| echo "Sorry, it need 3 args" |
| fi |
| |
| if 条件; then |
| 命令1 |
| else |
| 命令2 |
| fi |
-
提示用户输入他的账号,并显示欢迎信息。如果为空则提示:
echo "Please input your name:"
| read NAME |
| if [ "$NAME" = "" ]; then |
| echo "Your name is null" |
| else |
| echo "Welcome,$NAME" |
| fi |
-
多重分支语句
| if 条件1; then |
| 命令1 |
| elif 条件2; then |
| 命令2 |
| else |
| 命令3 |
| fi |
-
分支语句case
| $num=$1 |
| case $num in |
| 1) |
| echo "Monday" |
| ;; |
| 2) |
| echo "Tuesday" |
| ;; |
| 3) |
| echo "Wednesday" |
| ;; |
| 4) |
| echo "Thursday" |
| ;; |
| 5) |
| echo "Friday" |
| ;; |
| 6) |
| echo "Saturday" |
| ;; |
| 7) |
| echo "Sunday" |
| ;; |
| *) |
| echo "erro" |
| esac |
-
求和
| #计算从1加到10的结果 |
| sun=0 |
| for i in 1 2 3 4 5 6 7 8 9 10; do |
| sum=`expr $sum + $i` |
| done |
| echo "sum=$sum" |
| sun=0 |
| for i in 1 2 3 4 5 6 7 8 9 10; do |
| let sum=sum+i // let sum+=i // ((sum+=i)) |
| done |
| echo "sum=$sum" |
| for i in {1..100}; #范围简写 |
| for i in {1..100..1}; #默认的步长为1 |
| for ((i=1;i<=100;i+=1)) |
-
while循环
| i=0 |
| while [ $i -lt 10 ] |
| do |
| i=`expr $i + 1` |
| if [ $i -eq 5 ];then |
| break |
| fi |
| echo $1 |
| done |
函数与数组
一、函数的定义与调用
1、函数的调用
函数可以将一个专门的功能进行封装,用于解决一个特定的问题,并且可以通过传递不同的参数给某个函数,实现处理不同数据的能力。函数的参数跟脚本的参数比较类似。
2、函数的使用
函数名、参数、返回结果,其中函数名必须的,参数和返回结果可选,根据需要进行处理。
| function 函数名() #建议使用这种方式 |
| { …… } |
| |
| 或 |
| |
| 函数名() |
| { 命令1 } |
| #定义一个函数 |
| function add(){ |
| let sum=$1+$2 |
| echo $sum |
| } |
| |
| #调用add函数 |
| result=`add 100 26` |
| 等价于 result=$(add 100 200) |
| echo "结果为$result" |
-
关于括号的几个特殊用法
| (()) 双圆括号,用于运算,可代替expr,也可以用于for循环条件 for ((i=1;i<=100;i++)) |
| ${} 可以取特定参数或变量的值,比如${1},${username} |
| $() 可以代替反引号执行圆括号中的命令 |
| $[] 用于整数运算,也可代替 expr |
-
检查参数是否是一个目录
| function is_directory(){ |
| if [ -d $1 ]; then |
| echo "Great,$1 is a directory ..." |
| else |
| echo "Sorry,$1 is not a dirctory ..." |
| fi |
| } |
| echo "check if the input is a directory ..." |
二、数组
1、定义数组的方式有两种
| declare -a weekday |
| #给数组的每个元素赋值 |
| weekday[1]=Monday |
| weekday[2]=Tuesday |
| weekday[3]=Wednesday |
| weekday[4]=Thursday |
| weekday[5]=Fridat |
| weekday[6]=Saturday |
| weekdat[7]=Sunday |
| #数组的取值 |
| echo ${weekday[@]} #输出所有数 |
| |
| for day in ${weekday[@]}; do #遍历输出 |
| echo $day |
| done |
| echo ${weekday[3]} #输出下标为3的元素 |
| echo ${#weekday[@]} #一共有多少个元素 |
| |
| let len=${#weekday[@]}-1 |
| for i in {0..$len};do |
| echo ${weekday[i]} |
| done |
| weekday=(Monday Tuesday "Yang Yubo") |
| echo ${weekday[@]} |
| for i in ${weekday[@]}; do |
| echo $i |
| done |
CronTab及定时任务
一、定时任务的基本原理
| # 每5秒向文本中输出一次时间 |
| for i in {1..10}; do |
| date "+%Y-%m-%d %H:%M:%S" >> /opt/learn/date.txt |
| date "+%Y-%m-%d %H:%M:%S" |
| sleep 5 |
| done |
二、Cron定时任务
命令实例 | 作用 |
---|
crontab | 每个用户都可以有一个crontab文件来保存调度信息,通过该命令运行任意一个shell脚本或者命令 |
/var/spool/cron | 保存所有用户的crontab文件 |
/etc/cron.deny /etc/cron.allow | 系统管理员可以通过cron.deny和cron.allow这两个文件夹来禁止或允许用户拥有自己的crontab文件(crontab.allow需要自己创建) |
crontab的域 | * * * * * command 第1列 分钟 0~50 第2列 小时 0~23(0表示子夜)第3列 日 1~31 第4列 月 1~12 第5列 星期0~6 (星期0代表周日)执行的用户名 第6列 要运行的命令 |
常用规则 | *: 匹配任何值 */n:匹配每n个单位 1-9:匹配从1-9的值 1,2,3:匹配123 |
crontab[ -u user ] -e -l -r | -u:用户名 -e:编辑文件 -l 列出crontab文件中的内容 -r 删除crontab的值 |
systemctl start crond | 启动crond进程 |
不发送邮件 | 在-e状态下编辑任务的时候,在第一行添加:MAILTO=“”,则不会发送邮件 |
查看日志 | 可通过/var/log/cron查看执行的日志 |
提示:编写定时任务时,确定好定时规则后,要执行的指令建议直接卸载Shell脚本中,让Cron直接执行脚本即可,尽量避免在定时规则文件中直接调用命令,比如
| */1 * * * * /opt/learn/crondate.sh |
一定要保证Shell是有执行权限的,并且在Cron文件中指定的时绝对路径
| crontab -l #查看当前系统有那些定时任务 |
| crontab -e #编辑定时任务 |
| 20 * * * * >> /opt/crontab.txt #每小时的20分钟时执行一次,并重定向到/opt/crontab.txt |
| */2 * * * * >> /opt/crontab.txt #每2分钟时执行一次,并重定向到/opt/crontab.txt |
| 20,25,30 * * * * >> /opt/crontab.txt #每小时的20分钟,25分钟,30分钟时执行一次,并重定向到/opt/crontab.txt |
| 20,25,30 5-8 * * * >> /opt/crontab.txt #5点到8点的20分钟,25分钟,30分钟时执行一次,并重定向到/opt/crontab.txt |
三、其他补充命令
命令实例 | 作用 |
---|
at | 单次定时任务。yum install -y at; systemctl start atd; |
at 时间 | 指定某一特定时间去做某件事情 |
at HH:MM | at 16:00 |
at HH:MM YYYY-MM-DD | at 19:00 2022-09-16 |
at now + 5 minutes | 从现在开始5分钟后 |
退出at编辑模式 | Ctrl+D |
atq | 查询现有任务 |
atrm id | 删除某个任务 |
| |
command & | 后台运行,如果有输出,会输出到前台 |
nuhup command & | 后台运行,所有输出将会转存到当前目录下的nuhup.out文件中,nohup输出是输出到屏幕的内容 |
| |
sleep n | 让Shellp脚本暂停n秒,n秒运行一次 |
usleep n | 让Shellp脚本暂停n纳秒,10的-9此方秒 |
| |
time command | 计算某一个命令或脚本运行所花的时间(精确到毫秒):如time ls ;time sh myshell.sh |
站点可用性监测
利用Crontab来判断Web服务器是否可用,如果不可用,则自动启动,并且将过程的操作写入到日志文件中
-
一个站点无法访问的原因可能有两个
-
Web服务器没有正常启动:如何使用Shell进行判断
| 使用curl直接访问对应网页,如果成功 $? 为0,否则非零 |
| 使用 netstat -ant | grep :80 进行查询,如果端口被打开,则 $? 为0,表示成功启动80端口 |
| 也可用过 ps -ef 查询对应的进程 |
-
防火墙没有允许80端口通过:让Shell执行firewall-cmd --add-port=80/tcp添加端口通过命令即可
| firewall-cmd --list-port | grep 80 |
具体步骤
😘编写脚本
| curl http://192.168.184.138/dashboard/ > /dev/null |
| if [ $? -ne 0 ]; then |
| /opt/lampp/lampp start |
| echo "检测到lampp未启动,已自动完成启动 - "`date "+%Y-%m-%d %H:%M:%S"` >> /opt/learn/site_check.log |
| fi |
| |
| firewall-cmd --list-port | grep 80 |
| if [ $? -ne 0 ];then |
| firewall-cmd --add-port=80/tcp |
| echo "检测到80端口没有通过,已完成添加 - "`date "+%Y-%m-%d %H:%M:%S"` >> /opt/learn/site_check.log |
| fi |
😘启动定时任务
| crontab -e |
| * * * * * /opt/learn/site_check.sh |
字符串处理及awk与sed
一、字符串处理
| 假设有变量 url="http://www.baidu.com/index.html",以下用法及结果输出,/只是变量 |
| |
| *// 从左边开始删除第一个 // 号及左边的所有字符: |
| echo ${url#*//} 输出结果:www.baidu.com/index.html |
| |
| # |
| echo ${url##*/} 输出结果:index.html |
| |
| %/* 表示从右边开始,删除第一个/号及右边的字符: |
| echo ${url%/*} 输出结果:http://www.baidu.com |
| |
| %%/* 表示从右边开始,删除最后(最左边)一个/号及右边的字符: |
| echo ${url%%/*} 输出结果:http: |
| 假设有变量:phone=“18222362661”,利用:进行字符串截取: |
| echo ${phone:0:5} #从第1个位置开始往后截取5个字符,输出为:18222 |
| echo ${phone:6} #从第7个位置开始往后知道结束,输出为:362661 |
| echo ${phone:0-7:5} #从右边第7个字符开始,截取5个,输出为:23626 |
| echo ${phone:0-7} #从右边第7个字符开始,直到结束,输出为:2362661 |
| echo ${#phone} #取得phone的字符数量,即字符串长度 |
二、AWK
对文本进行逐行处理的编程语言,awk是一种样式扫描与处理工具,但其功能却强于sed和grep
| awk 选项 处理逻辑 文件或脚本 #如果要针对命令执行结果进行过滤,则必须使用管道 |
| |
| echo "Hello woniuxy welcome Shanxi" | awk '{print $2}' #默认按照空格隔开,并输出第2列的内容: woniuxy |
| |
| #从awk的处理视角看,任意一段文本,均可以按照行列(二维表)的形式进行理解 |
| echo -e "Hello Woniuxy Welcome Shanxi\nA B C D" | awk '{print $2}' |
| ------------------------------------- |
| Woniuxy |
| B |
| |
| echo "http://www.baidu.com/index.html" | awk '{print $2}' #无第2列 |
| echo "http://www.baidu.com/index.html" | awk -F '.' '{print $2}' #以.作为分隔符 |
| ------------------------------------- |
| baidu |
| |
| echo "http://www.baidu.com/index.html" | awk -F '[./]' '{print $3}' #同时以/和.作为分隔符 |
| ------------------------------------- |
| www |
| |
| |
| -F '[/.]' #多个分隔符同时使用 |
- 通过 ping www.baidu.com -c 1结合awk或其他已经学过的知识,输出其ip地址
| ping -c 1 www.baidu.com | head -n 1 | awk -F '[ ()]' '{print $4}' |
| ------------------------------ |
| 180.101.49.11 |
| |
| ping -c 1 www.baidu.com | grep ^PING | awk -F [\(\)] '{print $2}' |
| ------------------------------ |
| 180.101.49.12 |
| |
| ping -c 1 www.baidu.com | head -n 2 | tail -n 1 | awk -F [\(\)] '{print $2}' #如果没有规则可以grep的情况下,则head 和tail联合使用 |
| ------------------------------ |
| 180.101.49.12 |
- 正则表达式格式 ‘$1~/格式/’. 1代表第几列
| #查找/etc/passwd下面第一个域为root的行并将其第一个域打印出来(-F:表示以冒号分割域) |
| awk -F : '$1~/root/ {print $1}' /etc/passwd |
| |
| #查找/etc/passwd中不包含root的行并统计一个有多少行 |
| awk -F : 'BEGIN {sum=0} $0!~/root/ {sum+=1} END {print sum}' /etc/passwd |
| |
| #文件/etc/passwd中如果第一个域包含root则打印它,否则打印第三个域的值 |
| awk -F : '{if ($1=="root") print $1; else print $3}' /etc/passwd |
| |
| #打印文件中不包含bin或者root的行(特别的$0表示整行) |
| awk -F : '$0!~/(bin|root)' /etc/passwd |
| |
| #查找进程中包含yes的进程并打印出其cpu的使用率 |
| top -d 1 | awk '$0~/yes/ {print $10}'shell |
| |
| ps -aux|sort -k 3 -r|head -n 5|awk '{print "%-10s %-10s\n",$2,$3}' |
| |
| cpu=`tcp -n 1 | grep "^%Cpu" | awk -F " " '{print int($8)}'` |
三、sed
sed可依照脚本的指令来处理、编辑文件。
1、sed的基本用法
常用的三个选项:
- -e 指定脚本 或 进行多点编辑
- -n 显示处理后的结果
- -i 永久将编辑文件保存到指定文件中
常用的6个动作:
| head /ect/passwd > test.txt |
| |
| sed '5a Hello' test.txt #在第5行后面添加 Hello 的新行 |
| sed '5i Hello' test.txt #在第5行前面添加 Hello 的新行 |
| sed '2d' test.txt #删除第2行 |
| sed '2,5d' test.txt #删除第2行到第5行 |
| sed '2,$d' test.txt #删除第2行到最后 |
| sed '2,5c Good' test.txt #将第2行到第5行替换为Good |
| sed -n '/root/p' test.txt #搜索包含root的行 |
| sed '/root/d' test.txt #删除所有包含root的行 |
| sed 's/要被取代的字串/新的字串/g' #搜索并进行替换,支持正则表达式,其中g代表全局替换,可以不加,按行找第一个 |
| sed -e '' -e '' -e '' #多点编辑 |
| sed -i '4a Hello' test.txt #直接修改文件,永久生效 |
性能指标监控与通知
系统的性能指标监控是比较常见的针对系统的管理场景,比如系统有挖矿程序,或者系统本身存在高CPU进程(正常应用),除了CPU之外,也可以监控内存、硬盘、网络流量等使用情况。通过监控和发送通知,可以及时对系统的运行情况进行把控进而实现正确的处置。如果发现某些异常CPU消耗,甚至可以直接结束到进程。
- 通过相应的命令能够输出需要的指标。
- 通过awk对输出结果进行过滤,找到对应的值
- 根据对应的值进行判断,进而决定后续处理方式
一、使用yes程序监控CPU
| cpu=$(top -n 1 | grep ^%Cpu | awk '{print int($8)}') |
| 或 |
| cpu=$(top -n 1 | grep ^%Cpu | awk '{print int($8)}') |
| ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 |
| ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print $3}' |
| ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print $2}' |
| cpu=`ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print int($3)}'` |
| echo $cpu / 2 | bc #计算单核CPU的使用率,与总CPU使用率才有可比性 |
| top -n 1 | grep "^KiB Mem" | awk '{print $6} |
| #或者可以使用free采集 |
| free | grep Mem | awk '{print $4}' |
| df -h | grep ^/dev/mapper |
😁编写脚本
| cpu=$(top -n 1 | grep ^%Cpu | awk '{print int($8)}') |
| if [ $cpu -lt 50 ]; then |
| echo "CPU is lower" |
| pcpu=$(ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print int($3)}') |
| ppcup=$(echo $pcpu / 2 | bc) |
| pid=$(ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print int($2)}') |
| echo "CPU is lower,$pid consume $ppcup% CPU" |
| else |
| echo "CPU is ok" |
| fi |
二、发送邮件通知
1、安装mailx邮件客户端
2、向本地系统用户发送邮件
使用mail命令可以直接查看邮件,输入序号查看邮件正文,输入q退出,输入h回到邮件列表
| #确保postfix邮件发送服务启动 |
| systemctl status postfix |
| |
| #echo后面是内容,管道后面mail -s "标题" 用户 |
| echo "Hello Boy" | mail -s "Test Email" root |
| |
| #清空邮件 |
| cp /dev/null /var/spool/mail/root |
| mail -s "Test Email" root < /etc/passwd |
3、向外部邮箱发送邮件
- 确定邮件账号的SMTP信息,可以使用QQ邮箱账号
- 编辑/etc/mail.rc ,将上述SMTP信息输入
| set from=qqYikJiang-bs@163.com #发件人的邮箱地址 |
| set smtp=smtp.163.com #邮件服务器 |
| set smtp-auth-user=qqYikJiang-bs@163.com #邮箱账号 |
| set smtp-auth-password=ZOXHAITKPXDUKGYV #授权码 |
| set smtp-auth=login #认证方式通过密码登录 |
| mail -s "HaHa" YikJiang-bs@qq.com < /etc/passwd |
| mail -s "HaHa" -a /opt/learn/1 YikJiang-bs@qq.com < /etc/passwd #携带附件发送 |
三、使用sysbench
| curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | bash |
| yum install -y sysbench |
| sysbench cpu run --threads=20 --time=100 #--threads代表线程数 --time代表持续时间单位s, |
| sysbench memory run --threads=20 |
敏感文件监控
一、敏感文件监控原理
判断一个文件是否被篡改,可以使用md5sum命令记录文件的md5的数字指纹。md5是一种摘要算法,是不可逆的加密,主要用于标识某个文件是否被篡改,或者用于保存密码。
系统的性能指标监控是比较常见的针对系统的管理场景,比如系统有挖矿程序,或者系统本身存在高CPU进程(正常应用),除了CPU之外,也可以监控内存、硬盘、网络流量等使用情况。通过监控和发送通知,可以及时对系统的运行情况进行把控进而实现正确的处置。如果发现某些异常CPU消耗,甚至可以直接结束到进程。
- 通过相应的命令能够输出需要的指标。
- 通过awk对输出结果进行过滤,找到对应的值
- 根据对应的值进行判断,进而决定后续处理方式
一、使用yes程序监控CPU
| cpu=$(top -n 1 | grep ^%Cpu | awk '{print int($8)}') |
| 或 |
| cpu=$(top -n 1 | grep ^%Cpu | awk '{print int($8)}') |
| ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 |
| ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print $3}' |
| ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print $2}' |
| cpu=`ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print int($3)}'` |
| echo $cpu / 2 | bc #计算单核CPU的使用率,与总CPU使用率才有可比性 |
| top -n 1 | grep "^KiB Mem" | awk '{print $6} |
| #或者可以使用free采集 |
| free | grep Mem | awk '{print $4}' |
| df -h | grep ^/dev/mapper |
😁编写脚本
| cpu=$(top -n 1 | grep ^%Cpu | awk '{print int($8)}') |
| if [ $cpu -lt 50 ]; then |
| echo "CPU is lower" |
| pcpu=$(ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print int($3)}') |
| ppcup=$(echo $pcpu / 2 | bc) |
| pid=$(ps -aux | sort -k 3 -r | head -n 2 | tail -n 1 | awk '{print int($2)}') |
| echo "CPU is lower,$pid consume $ppcup% CPU" |
| else |
| echo "CPU is ok" |
| fi |
二、发送邮件通知
1、安装mailx邮件客户端
2、向本地系统用户发送邮件
使用mail命令可以直接查看邮件,输入序号查看邮件正文,输入q退出,输入h回到邮件列表
| #确保postfix邮件发送服务启动 |
| systemctl status postfix |
| |
| #echo后面是内容,管道后面mail -s "标题" 用户 |
| echo "Hello Boy" | mail -s "Test Email" root |
| |
| #清空邮件 |
| cp /dev/null /var/spool/mail/root |
| mail -s "Test Email" root < /etc/passwd |
3、向外部邮箱发送邮件
- 确定邮件账号的SMTP信息,可以使用QQ邮箱账号
- 编辑/etc/mail.rc ,将上述SMTP信息输入
| set from=qqYikJiang-bs@163.com #发件人的邮箱地址 |
| set smtp=smtp.163.com #邮件服务器 |
| set smtp-auth-user=qqYikJiang-bs@163.com #邮箱账号 |
| set smtp-auth-password=ZOXHAITKPXDUKGYV #授权码 |
| set smtp-auth=login #认证方式通过密码登录 |
| mail -s "HaHa" YikJiang-bs@qq.com < /etc/passwd |
| mail -s "HaHa" -a /opt/learn/1 YikJiang-bs@qq.com < /etc/passwd #携带附件发送 |
三、使用sysbench
| curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | bash |
| yum install -y sysbench |
| sysbench cpu run --threads=20 --time=100 #--threads代表线程数 --time代表持续时间单位s, |
| sysbench memory run --threads=20 |
敏感文件监控
一、敏感文件监控原理
判断一个文件是否被篡改,可以使用md5sum命令记录文件的md5的数字指纹。md5是一种摘要算法,是不可逆的加密,主要用于标识某个文件是否被篡改,或者用于保存密码。
md5sum
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!