<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux通用 on 菜鸟程序员</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/</link><description>Recent content in Linux通用 on 菜鸟程序员</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/index.xml" rel="self" type="application/rss+xml"/><item><title>apt包管理器</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/apt%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/apt%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>dpkg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>***************************************************
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dpkg -l 查看当前系统中的已经安装软件包的信息 相当于：rpm -qa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dpkg -L 查询系统中已经安装的软件包的文件详细列表 相当于： rpm -ql
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dpkg -s 查询已安装的指定软件包的详细信息 相当于： rpm -qi
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dpkg -S 查询系统中的某个文件属于哪个软件包 rpm -qf
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dpkg -i 安装deb软件包
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>卸载deb软件包
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dpkg -r
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dpkg -P 彻底的卸载 包括软件的配置文件等等
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看没有安装的deb包命令
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dpkg -c 查询deb包文件中所包含的文件 rpm -qlp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dpkg -I 查询deb包的详细信息-
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>***************************************************
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Linux基础</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/linux%E5%9F%BA%E7%A1%80/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/linux%E5%9F%BA%E7%A1%80/</guid><description>&lt;h2 id="linux-启动">Linux 启动&lt;a class="td-heading-self-link" href="#linux-%e5%90%af%e5%8a%a8" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>
******************************************************************
1.bios找到磁盘上的mbr主引导扇区
2.进入grub界面选择相应的启动内核
3.读取kernel内核文件-/boot/vmlinuz-*
4.读取init的镜像文件-/boot/initrd-*
5.init去读取/etc/inittab
 设置运行级别 0关机 3字符界面 5图形界面 6重启
6.读取启动级(id:3:initdefault)
7.读取/etc/rc.d/rc.sysinit,
 读取系统主机名 识别加载硬件驱动
 读取selinux防火墙 设置系统字体 
 进入一个简单的小欢迎页面 设置系统时钟 
 设置文件和目录权限 加载映射分区
8.读取/etc/rc.d/rc脚本，通过该脚本吸收3级别，然后启动/etc/rc.d/rc3.d下所有以S开头的服务,不启动该目录下以K开头的服务
9.进入登录界面
*****************************************************************

/***********************************************************************************
一.BIOS 加电自检
 当你按电源开关开机时,电脑会首先去启动BIOS(基本输入输出系统),BIOS一般是集成在主板上的.
 BIOS 的工作
 1.检测连接硬件,比如显卡,内存,磁盘等等,检测的目的是以后把这些设备信息提供给操作系统
 2.寻找启动磁盘,每一种BIOS都会有开机启动菜单,可以在菜单里设置以哪个设备启动系统
 比如:光驱,硬盘,网络等等,这个菜单可以设置多个选项,依照设置次序在设备上寻找启动信息
 3.找到了启动硬盘,接着BIOS就会在磁盘上寻找第一个启动扇区,也就是主引导记录MBR(Master Boot Record)
 但是MBR中,存储操作系统的空间只有446字节;MBR总共是512字节（=stage1）（其中引导程序占446字节+分区表占64字节，每16个字节记录一个分区，标识符占2个字节，以55.aa结尾）
 如果没有在MBR中找到操作系统的内核,那么BIOS就无法继续启动工作.
 而我们的内核往往会大于446个字节,存放在磁盘的其他位置上,既然446装不下内核,又为了能顺利的找到放在其他位置上的内核,人们想出了一个办法就在446字节里写了一个小程序,当BIOS试着启动操作系统时就会执行这个小程序,然后再由小程序来载入位于其他位置的内核.这个小程序就是启动载入器(boot loader)

二.BOOT Loader
 linux的boot loader(上文提到的小程序) 常见的有两种:lilo grub
 因为lilo存在着一个1024柱面的限制,并且更改了磁盘上的启动信息文件后需要重新启动系统才能同步446字节的内容,因为lilo的缺陷,已经被grub所取代.现在的绝大多数类linux系统都采用grub做boot loader;
 grub则没有了lilo各种限制,而且方便到能修改系统文件的启动内容就可以立刻与446内容同步.
 那么我们就看看grub的内容 它存在于 /boot/grub中
 GRUB有几个重要的文件，STAGE1、STAGE1.5、STAGE2
 STAGE1：它只有512字节，通常放在MBR中，它的作用很简单，就是在系统启动时用于装载STAGE2并将控制权交给它。
 STAGE2：GRUB的核心，所有的功能都是由它实现。
 STAGE1.5：介于STAGE1和STAGE2之间，是它们的桥梁，因为STAGE2较大，通常都是放在一个文件系统当中的，但是STAGE1并不能识别文件系统格式，所以才需要STAGE1.5来引导位于某个文件系统当中的STAGE2。根据文件系统格式的不同，STAGE1.5也需要相应的文件，如：e2fs_stage1_5，fat_stage1_5，分别用于识别ext和fat的文件系统格式。它存放于1-63的柱面之间.
 引导顺序如下：STAGE1-&amp;gt;;STAGE1.5-&amp;gt;;STAGE2，
 主要的配置文件时 grub.conf
 里面选项含义:
 title:一个操作系统引动的标头,可以使多个
 root :指明所需文件存在于哪个磁盘哪个分区上 (hd0,0)表示第一个硬盘,第一个分区
 kernel:内核文件的名字,并且会有一些加载内核时的参数
 initrd:包含一些附加的驱动程序
 _____________________
 #cat /boot/grub/grub.conf grub配置文件
 default=0 默认启动项，选择启动条目第一个为0号
 timeout=5 默认超时时间
 splashimage=(hd0,0)/grub/splash.xpm.gz 登陆时默认图片
 hiddenmenu 隐藏菜单

 title CentOS (2.6.32-220.el6.x86_64) 启动菜单名字
 root (hd0,0) hd0代表第一块硬盘，0代表第一个分区
 kernel /vmlinuz-2.6.32-220.el6.x86_64 内核文件名
 initrd /initramfs-2.6.32-220.el6.x86_64.img 

三.内核启动 
 内核启动后会向bios查询电脑的所有硬件信息,然后自己接手下来管理这些设备,以便提供给linux使用
 内核会试着驱动这些设备,这些设备的驱动一部分包含在内核中,叫做静态驱动,一部分以模块的方式(动态)存放文件系统中,由于此时还未挂载任何文件系统,因此还不能使用文件系统中的模块,这里只能驱动在内核中存在的硬件驱动程序的对应设备.想驱动内核中未包含的硬件驱动就需要加载文件系统.
 
四.启动INIT服务
 顺利的挂载了根文件系统后,就会启动init服务，init内核启动的第一个用户级进程
 内核会按 /sbin/init /etc/init /bin/init 顺序寻找init程序,
 如果找不到则内核报错
 启动init的目的就是为了初始化系统环境,启动了init就证明了内核已经顺利启动,接下来就由init服务来建立linux使用环境
 init做了什么?它会读取 /etc/inittab 文件,根据这个文件的信息来进行初始化工作.
 会执行三个脚本 /etc/rc.d/rc.sysinit /etc/rc.d/rc[0-6]/* /etc/rc.d/rc.local(万能配置文件，系统启动完毕后，最后运行此文件内的命令)
 rc.sysinit 主要的功能用来建立系统的基本环境，比如：
 启动udev selinux子系统
 udev负责产生 /dev中的文件,selinux负责增强系统的安全性
 设定核心参数 sysctl -p 加载 /etc/sysctl.conf
 设定系统时间 将硬件时间设定为系统时间
 加载键盘和交换分区 swapon -a -e
 设置主机名,挂载文件系统,并将根重新挂载为可读写的.
 加载动态驱动模块
 USB设备与RAID &amp;amp; LVM
 
 rc 脚本设置启动级别 linux中有许多不同的启动级别,不同的启动级别会制定不同的服务
 根据指定rc的参数会对应执行 /etc/rc.d/rc[0-6].d/ 中的连接脚本文件 以S开头的则启动，K开头的不随机自启动
 rc.local 前两个脚本都是系统至关重要的脚本,如果我们想在启动过程中放置一些其他程序
 应该使用rc.local脚本中
 三个RC脚本执行完毕后,就会建立虚拟主控制台 执行 /bin/login 就提供了用户登陆界面了
 如果是图形 L5级别的话,会启动X window登录界面
 所有的启动就都已经完毕
 
 初始化/sbin/init
 #vime/etc/inittab 初始化配置文件

 # Default runlevel. The runlevels used by RHS are:
 # 0 - halt (Do NOT set initdefault to this) 关机
 # 1 - Single user mode 单用户模式
 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 多用户模式，无网络模式,也就是不能远程登录
 # 3 - Full multiuser mode 全部都用户模式
 # 4 - unused 保留参数
 # 5 - X11 图形界面模式
 # 6 - reboot (Do NOT set initdefault to this) 重起模式
 #
 id:3:initdefault: 定义默认启动级别
#ls /etc/rc.d
 init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit(启动初始化)
 rc rc1.d rc3.d rc5.d rc.local (rc0~6为运行级别脚本，启动或关闭的控制文件,S启动，K关闭，启动或关闭顺序S后面的数字越小、优先级越高)
 
五.登陆，加载用户环境变量
 输入用户名和密码系统验证,然后会执行
 /etc/profile 
 /etc/bashrc
 $HOME/.bash_profile
 $HOME/.bashrc 
查看当前启动级别
 # runlevel
 N 5
 N是上次的级别,5是当前级别 也就是说64机器开机就是5级别
************************************************************************************************/
&lt;/code>&lt;/pre>&lt;h2 id="运行级别">运行级别&lt;a class="td-heading-self-link" href="#%e8%bf%90%e8%a1%8c%e7%ba%a7%e5%88%ab" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span> 0表示关机，
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 1表示单用户，
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 2表示没有网络的命令行级别，
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 3命令行级别（大多服务器都用这个级别），
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 4为保留级别，
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 5为图形化级别，
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 6为重启。
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Linux知识体系</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/linux%E7%9F%A5%E8%AF%86%E4%BD%93%E7%B3%BB/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/linux%E7%9F%A5%E8%AF%86%E4%BD%93%E7%B3%BB/</guid><description/></item><item><title>rpm包管理器</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/rpm%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/rpm%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>软件安装命令
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>***************************************************
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rpm&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>redhat package management&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>软件安装
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>1. 查看系统中安装的所有rpm包
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rpm -qa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2. 查看rpm是否被安装
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rpm -qa&lt;span style="color:#000;font-weight:bold">|&lt;/span>grep httpd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>3. 安装rpm包
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rpm -ivh httpd-0.0.0.conetos.i386.rpm
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>4. 强制卸载rpm包
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rpm -e httpd-0.0.0.conetos.i386.rpm --force --nodeps&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>nodeps可以截断rpm包的依赖性&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>5.查看rpm安装了一些什么&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>主要为了查看依赖包&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rpm -qpl httpd-0.0.0.conetos.i386.rpm &lt;span style="color:#000;font-weight:bold">|&lt;/span>more
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>6. yum查看已经安装的rpm包河yum源中的rpm包
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> yum list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>7. yum 安装rpm包
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> yun -y install rpm包名称&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>或者httpd*&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>8. yum卸载rpm包&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>会卸载依赖包&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> yum -y remove httpd*
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">#谨慎使用,请使用 rpm -e&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>9. rpm安装软件的三个重要目录
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 1&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 应用程序目录 /usr/sbin/httpd&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>应用程序名称&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 2&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 配置文件 /etc/应用程序名称的目录/.......
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 3&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 服务脚本 /etc/init.d/应用程序名的文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>10. 只下载，并指定下载路径
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> yum reinstall vim-enhanced --downloadonly --downloaddir&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/tmp/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>11. yum设置源优先级
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 1&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 安装 yum-priorities
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> yum install yum-priorities
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 2&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> priorities的配置文件是/etc/yum/pluginconf.d/priorities.conf，确认其是否存在。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 其内容为:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>main&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">enabled&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#8f5902;font-style:italic"># 0禁用 1启用&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 3&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>编辑 /etc/yum.repos.d/目录下的*.repo 文件来设置优先级。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 参数为：
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">priority&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>N &lt;span style="color:#8f5902;font-style:italic"># N的值为1-99&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 推荐的设置为：
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>base&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>, &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>addons&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>, &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>updates&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>, &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>extras&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> … &lt;span style="color:#000">priority&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>centosplus&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>,&lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>contrib&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> … &lt;span style="color:#000">priority&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Third Party Repos such as rpmforge … &lt;span style="color:#000">priority&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>N &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>where N is &amp;gt; &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> and based on your preference&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 数字越大,优先级越低
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>根据需要查看要安装的包 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> yum whatprovides libstdc++.so.6
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>***************************************************
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>配置yum默认为光盘
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>***************************************************
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 1. &lt;span style="color:#204a87">cd&lt;/span> /etc/yum.repos.d/ 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 2. mv CentOS-Base.repo CentOS-Base
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 3. vi CentOS-Media.repo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">baseurl&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>file:///media/ -----这里要填写具体挂在目录
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">#光盘挂在目的地&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">gpgcheck&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#8f5902;font-style:italic">#关闭gpg签名&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">enabled&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#8f5902;font-style:italic">#开启本光盘yum源&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>配置光盘默认加载到/media&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>就是修改挂载表文件&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> vi /etc/fstab
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> /dev/cdrom /media iso9660 defaults &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 挂载源 目标地址 执行标准
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>配置计算机开机即执行的程序或者命令&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>例如默认开机启动httpd程序&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> vi /etc/rc.d/rc.local &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>/etc/rc.local 是一个快捷方式&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 添加 service httpd start
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>***************************************************
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>SAR命令</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/sar%E5%91%BD%E4%BB%A4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/sar%E5%91%BD%E4%BB%A4/</guid><description>&lt;p>sar
-u cpu使用率
-r 内存使用率
-d 磁盘使用率
-n net 网络流量&lt;/p>
&lt;h2 id="cpu使用率">CPU使用率&lt;a class="td-heading-self-link" href="#cpu%e4%bd%bf%e7%94%a8%e7%8e%87" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>sar -u(-p) 间隔 次数&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>czhn@czhn:~/download$ sar -u &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Linux 5.15.0-136-generic &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>czhn&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 05/21/2025 _x86_64_ &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">8&lt;/span> CPU&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>02:07:11 AM CPU %user %nice %system %iowait %steal %idle
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>02:07:12 AM all 1.13 0.00 0.00 0.00 0.00 98.87
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>02:07:13 AM all 0.62 0.00 0.38 0.00 0.00 99.00
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>02:07:14 AM all 2.62 0.00 0.50 0.00 0.00 96.88
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Average: all 1.46 0.00 0.29 0.00 0.00 98.25
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>输出项&lt;/th>
 &lt;th>详细说明&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>CPU&lt;/td>
 &lt;td>all 表示统计信息为所有 CPU 的平均值。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>%user&lt;/td>
 &lt;td>显示在用户级别(application)运行使用 CPU 总时间的百分比。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>%nice&lt;/td>
 &lt;td>显示在用户级别，用于nice操作，所占用 CPU 总时间的百分比。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>%system&lt;/td>
 &lt;td>在核心级别(kernel)运行所使用 CPU 总时间的百分比。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>%iowait&lt;/td>
 &lt;td>显示用于等待I/O操作占用 CPU 总时间的百分比。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>%steal&lt;/td>
 &lt;td>管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>%idle&lt;/td>
 &lt;td>显示 CPU 空闲时间占用 CPU 总时间的百分比。&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="内存使用率">内存使用率&lt;a class="td-heading-self-link" href="#%e5%86%85%e5%ad%98%e4%bd%bf%e7%94%a8%e7%8e%87" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>sar -r 间隔 次数&lt;/p></description></item><item><title>shell编程</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/shell%E7%BC%96%E7%A8%8B/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/shell%E7%BC%96%E7%A8%8B/</guid><description>&lt;h2 id="ssh">ssh&lt;a class="td-heading-self-link" href="#ssh" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;ol>
&lt;li>免密登录&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 先生成私钥 公钥&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ssh-keygen
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ssh-copy-id &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>-p 端口号&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> user@host 
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>配置服务器别名&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 1. 编辑 ~/.ssh/config&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 输入内容&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Host server-alias &lt;span style="color:#8f5902;font-style:italic"># server-alias为SSH链接的服务器别名&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> HostName server-ip &lt;span style="color:#8f5902;font-style:italic"># 服务器地址&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Port &lt;span style="color:#0000cf;font-weight:bold">22&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> User username &lt;span style="color:#8f5902;font-style:italic"># 目标服务器端用户名&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> PreferredAuthentications publickey 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># 私钥地址，默认为 ~/.ssh/id_rsa&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> IdentityFile ~/.ssh/id_rsa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ssh server-alias 进行连接
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="shell脚本编程">shell脚本编程&lt;a class="td-heading-self-link" href="#shell%e8%84%9a%e6%9c%ac%e7%bc%96%e7%a8%8b" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;ol>
&lt;li>变量&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 执行器定义&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 在脚本的第一行定义 #!/bin/bash # 定义脚本执行器，表示使用bash来执行当前脚本&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 变量&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 1. 变量的 k=v 之间不能有空格&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 2. 变量名只能由英、数字以及下划线组成，而且不能以数字开头&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 3. 变量名区分大小写&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 4. 单引号和双引号都可以表示一个字符串。但是双引号可以引用变 &amp;#34;${VARNAME}其他内容&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 但是单引号的优势是不论什么字符，都不会被转义，除了单引号自己&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 5. 用反引号表示命令执行结果，`ls` `pwd` `date` `echo $?` 可以赋值给一个变量 lsres=`ls`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 本地变量：作用域为整个bash进程&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">VARNAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;value&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 局部变量： 作用域为当前代码段&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">local&lt;/span> &lt;span style="color:#000">VARNAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;value&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 环境变量： 作用域为当前shell进程及子进程&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">VARNAME&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;value&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 位置变量：$1, $2 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 当前脚本或者函数的位置参数 按顺序&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 特殊变量 , $#, $?, $!&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">$0&lt;/span>: 当前脚本名
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">$#&lt;/span>: 参数个数
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#?: 退出状态&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">$!&lt;/span>: 最后一个后台进程的进程号
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">$RANDOM&lt;/span>： 随机数，系统内置的
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># declare 定义&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 定义一个数字类型的变量 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">declare&lt;/span> -i &lt;span style="color:#000">a&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 定义一个只读变量&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">declare&lt;/span> -r &lt;span style="color:#000">b&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 显示变量定义&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">declare&lt;/span> -p a b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 定义一个数组&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">declare&lt;/span> -a &lt;span style="color:#000">arr&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;a&amp;#34;&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;b&amp;#34;&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;c&amp;#34;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 声明一个环境变量 和 export 一样&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">declare&lt;/span> -x &lt;span style="color:#000">PATH&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;/usr/local/bin:&lt;/span>&lt;span style="color:#000">$PATH&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 将变量值存储到目标变量（引用变量）&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># declare -n 用于创建引用变量 ref_var，它将指向 var。修改 var 的值，ref_var 会自动反映这个变化。&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">declare&lt;/span> -n &lt;span style="color:#000">ref_var&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>var
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">var&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;This is a reference&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#000">$ref_var&lt;/span> &lt;span style="color:#8f5902;font-style:italic"># 输出 &amp;#39;This is a reference&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 显示或设置函数属性。&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">function&lt;/span> my_function&lt;span style="color:#ce5c00;font-weight:bold">()&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;This is a function&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 他会把这个函数的全部内容打印出来&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">declare&lt;/span> -f my_function
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 这个东西多少年也没用过了&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/dir1/dir2/dir3/my.file.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">#*/&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：删掉第一个 / 及其左边的字符串：dir1/dir2/dir3/my.file.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">##*/&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：删掉最后一个 / 及其左边的字符串：my.file.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">#*.&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：删掉第一个 . 及其左边的字符串：file.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">##*.&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：删掉最后一个 . 及其左边的字符串：txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">%/*&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：删掉最后一个 / 及其右边的字符串：/dir1/dir2/dir3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">%%/*&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：删掉第一个 / 及其右边的字符串：&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>空值&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">%.*&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：删掉最后一个 . 及其右边的字符串：/dir1/dir2/dir3/my.file
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">%%.*&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：删掉第一个 . 及其右边的字符串：/dir1/dir2/dir3/my
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>记忆的方法
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 是 去掉左边（键盘上#在 $ 的左边）&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>%是去掉右边（键盘上% 在$ 的右边）
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>单一符号是最小匹配；两个符号是最大匹配
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">5&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：删除最左边的 &lt;span style="color:#0000cf;font-weight:bold">5&lt;/span> 个字节：/dir2/dir3/my.file.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">0&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">5&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：提取最左边的 &lt;span style="color:#0000cf;font-weight:bold">5&lt;/span> 个字节：/dir1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">5&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#000">5&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：提取第 &lt;span style="color:#0000cf;font-weight:bold">5&lt;/span> 个字节右边的连续5个字节：/dir2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>也可以对变量值里的字符串作替换
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">/dir/path&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：将第一个dir 替换为path：/path1/dir2/dir3/my.file.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">file&lt;/span>&lt;span style="color:#000;font-weight:bold">//dir/path&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：将全部dir 替换为 path：/path1/path2/path3/my.file.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">parameter&lt;/span>&lt;span style="color:#204a87;font-weight:bold">:-&lt;/span>&lt;span style="color:#000">word&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：如果parameter为空或未定义，则变量展开为“word”；否则，展开为parameter的值；
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">parameter&lt;/span>&lt;span style="color:#000;font-weight:bold">:+word&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：如果parameter为空或未定义，不做任何操作；否则，则展开为“word”值；
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">parameter&lt;/span>&lt;span style="color:#000;font-weight:bold">:=word&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>：如果parameter为空或未定义，则变量展开为“word”，并将展开后的值赋值给parameter；
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>数据类型&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>数值、
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">num&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>字符串、
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">str&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;hello&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>布尔、
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">bool&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>数组、
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">arr&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=(&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">2&lt;/span> 3&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>字典
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">declare&lt;/span> -A &lt;span style="color:#000">dict&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=([&lt;/span>name&lt;span style="color:#ce5c00;font-weight:bold">]=&lt;/span>zhangsan &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>age&lt;span style="color:#ce5c00;font-weight:bold">]=&lt;/span>18&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>遍历数组
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">for&lt;/span> i in &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">arr&lt;/span>&lt;span style="color:#000;font-weight:bold">[@]&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#000">$i&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">done&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>遍历字典
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">for&lt;/span> key in &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000;font-weight:bold">!dict[@]&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$key&lt;/span>&lt;span style="color:#4e9a06"> = &lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">dict&lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#000">$key&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">done&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>代码块&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 函数 先声明后使用&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">function&lt;/span> func_name&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>args&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 函数调用&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>func_name&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>args&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 对于无参的函数可以不用加括号 直接写函数名&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># {}代码块 实际上是一个匿名函数。其内部的变量会提升作用域到当前shell进程&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># ()代码块，将作为一个子进程来执行，所以其内部的变量只在()内部有效&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="4">
&lt;li>条件测试&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>整数测试
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -eq: 测试两个整数是否相等；比如 &lt;span style="color:#000">$A&lt;/span> -eq &lt;span style="color:#000">$B&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -ne: 测试两个整数是否不等；不等，为真；相等，为假；
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -gt: 测试一个数是否大于另一个数；大于，为真；否则，为假；
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -lt: 测试一个数是否小于另一个数；小于，为真；否则，为假；
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -ge: 大于或等于
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -le：小于或等于
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">字符测试&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">==&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> !&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -n：字符串非空
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -z：字符串为空
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>文件测试
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -e： 文件存在
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -f： 是文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -d： 是目录
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -r： 是可读文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -w： 是可写文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -x： 是可执行文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-a: 与关系
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-o: 或关系
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>!： 非关系 -not
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>判断java命令是否存在
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">hasjava&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">`&lt;/span>&lt;span style="color:#204a87">command&lt;/span> -v java &lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span>&amp;gt; /dev/null&lt;span style="color:#4e9a06">`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span> &lt;span style="color:#000">$?&lt;/span> -eq &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;java 信息&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> java -version
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;java command has found&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>判断 hostname 为空或者等于&lt;span style="color:#4e9a06">&amp;#39;(none)&amp;#39;&lt;/span> 就赋值为 localhost 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>这个功能有点类似于c语言定义常量的 检查后赋值的语法
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span> -z &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$hostname&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> -o &lt;span style="color:#4e9a06">&amp;#34;hostname&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">==&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;(none)&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#000">hsotname&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>localhost
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="5">
&lt;li>分支&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># while循环&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">declare&lt;/span> -i &lt;span style="color:#000">I&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">declare&lt;/span> -i &lt;span style="color:#000">SUM&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">while&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span> 判断 &lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 循环体
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">done&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># for循环&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">for&lt;/span> 变量 in 列表&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">do&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 循环体
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">done&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">for&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">((&lt;/span> expr1 &lt;span style="color:#000;font-weight:bold">;&lt;/span> expr2 &lt;span style="color:#000;font-weight:bold">;&lt;/span> expr3 &lt;span style="color:#ce5c00;font-weight:bold">))&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">do&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 循环体
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">done&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>支持 &lt;span style="color:#204a87">break&lt;/span> &lt;span style="color:#204a87;font-weight:bold">continue&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">case&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$varname&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> in
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>a-z&lt;span style="color:#ce5c00;font-weight:bold">])&lt;/span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;abc&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>0-9&lt;span style="color:#ce5c00;font-weight:bold">])&lt;/span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;123&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">esac&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">case&lt;/span> &lt;span style="color:#000">$1&lt;/span> in
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;status&amp;#39;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;`basename &lt;/span>&lt;span style="color:#000">$0&lt;/span>&lt;span style="color:#4e9a06">` stats&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">;;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;start&amp;#39;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;`basename &lt;/span>&lt;span style="color:#000">$0&lt;/span>&lt;span style="color:#4e9a06">` start...&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">;;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;stop&amp;#39;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;`basename &lt;/span>&lt;span style="color:#000">$0&lt;/span>&lt;span style="color:#4e9a06">` stop ...&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">;;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>*&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;Unkonw options&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">;;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">esac&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#表示把第n+1个参数移到第1个参数, 即命令结束后$1的值等于$n+1的值 #&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#有点像二进制的左移指令。把第n+1 移动n个位置到最左侧。&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 不写n 默认为1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">shift&lt;/span> n
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># shift 应用的一个案例&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">function&lt;/span> main&lt;span style="color:#ce5c00;font-weight:bold">(){&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># arg parsing&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">while&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span> &lt;span style="color:#000">$#&lt;/span> -gt &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;当前参数1=&amp;#39;&lt;/span>&lt;span style="color:#000">$1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">case&lt;/span> &lt;span style="color:#000">$1&lt;/span> in
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -h&lt;span style="color:#000;font-weight:bold">|&lt;/span>--help&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;./bootstrap [-r|--region &amp;lt;region&amp;gt;] [-p|--path &amp;lt;pkg&amp;gt;] [-y|--yes] [-d|--debug]&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">exit&lt;/span> 0&lt;span style="color:#000;font-weight:bold">;;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># 通过 -d 或 --debug 开启 DEBUG 模式 这个不要删 是此模板的默认参数&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -d&lt;span style="color:#000;font-weight:bold">|&lt;/span>--debug&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">DEBUG&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">;;&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># 以下两个位置参数自己随便改&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># 接收 &amp;#34;-r 值&amp;#34; 或 &amp;#34;--region 值&amp;#34; 赋值给变量 REGION&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -r&lt;span style="color:#000;font-weight:bold">|&lt;/span>--region&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">REGION&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$2&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">shift&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">;;&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic"># 接收 &amp;#34;-p 值&amp;#34; 或 &amp;#34;--path 值&amp;#34; 赋值给变量 PKG_PATH&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -p&lt;span style="color:#000;font-weight:bold">|&lt;/span>--path&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">PKG_PATH&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$2&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">shift&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">;;&lt;/span> &lt;span style="color:#8f5902;font-style:italic">#同上&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>--&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> shift&lt;span style="color:#000;font-weight:bold">;&lt;/span> break&lt;span style="color:#000;font-weight:bold">;;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>-*&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$0&lt;/span>&lt;span style="color:#4e9a06">: error - unrecognized option &lt;/span>&lt;span style="color:#000">$1&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> 1&amp;gt;&lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span>2&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#204a87">exit&lt;/span> 1&lt;span style="color:#000;font-weight:bold">;;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>*&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> break&lt;span style="color:#000;font-weight:bold">;;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">esac&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">shift&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">done&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">DEBUG&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">REGION&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">PKG_PATH&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="6">
&lt;li>shell expect&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>Expect是一个基于Tcl语言的工具，主要用于自动化控制那些需要交互的命令行程序。它通过模拟标准输入来与程序进行交互，从而自动化执行那些通常需要人工干预的任务。Expect的主要功能包括：
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>‌spawn‌：启动一个进程。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>‌expect‌：等待特定的输出（字符串）出现。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>‌send‌：发送响应或输入到进程中。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>‌interact‌：允许用户与进程交互。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>‌timeout‌：设置超时时间。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect一般需要单独安装 sudo apt-get install expect sudo yum install expect
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>它存在的意义
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect可以让我们实现自动登录远程机器，并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>但当不能使用密钥验证的时候，我们就没有办法了。所以，这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>例如脚本 expect_command.sh
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>使用方法 chmod +x expect_command.sh
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect_command.sh 用户名 密码 目标主机ip 要执行的命令
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#!/usr/bin/expect&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> user &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 0&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> password &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 0&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> host &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 1&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> cmd &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 2&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spawn ssh &lt;span style="color:#000">$user&lt;/span>@&lt;span style="color:#000">$host&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;*yes/no&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span> send &lt;span style="color:#4e9a06">&amp;#34;yes\r&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> exp_continue &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;password:&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span> send &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$password&lt;/span>&lt;span style="color:#4e9a06">\r&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect &lt;span style="color:#4e9a06">&amp;#34;]*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>send &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$cmd&lt;/span>&lt;span style="color:#4e9a06">\r&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect &lt;span style="color:#4e9a06">&amp;#34;]*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>send &lt;span style="color:#4e9a06">&amp;#34;exit\r&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>其他示例参考脚本和示例.md
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="控制台操作和一些命令">控制台操作和一些命令&lt;a class="td-heading-self-link" href="#%e6%8e%a7%e5%88%b6%e5%8f%b0%e6%93%8d%e4%bd%9c%e5%92%8c%e4%b8%80%e4%ba%9b%e5%91%bd%e4%bb%a4" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>清空历史命令 ----- &lt;span style="color:#204a87">history&lt;/span> -c
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>强制正在执行的程序中断 ----- ctrl+c
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>清空当前屏幕 ----- clear
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>清空当前命令行 ----- ctrl+u
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>命令补全 ----- tab
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>列出可补全的全部 ----- 双击tab
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>调用历史命令中离你最近一次的以ser开头的命令 ----- !ser
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>给命令起别名 ----- &lt;span style="color:#204a87">alias&lt;/span> &lt;span style="color:#000">ddd&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;df -Th&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>取消命令别名 ----- &lt;span style="color:#204a87">unalias&lt;/span> ddd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看当前系统中所有的别名 ----- &lt;span style="color:#204a87">alias&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查找某个命令的绝对路径 ----- 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>root@localhost ~&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#8f5902;font-style:italic"># which rmdir&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> /bin/rmdir
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>root@localhost ~&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#8f5902;font-style:italic"># command -v rmdir&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> /bin/rmdir
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>root@localhost ~&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#8f5902;font-style:italic"># whereis rmdir&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rmdir: /usr/bin/rmdir /usr/share/man/man1/rmdir.1.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看用户所在的终端 ----- w 或者 who 命令 &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>本地终端一般是ttyn，ssh连接的终端是pts/n&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>踢出pts/4用户 ----- pkill -kill -t pts/4
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>远程同步目录 ----- rsync -avP &lt;span style="color:#4e9a06">&amp;#39;-e ssh -p 1024&amp;#39;&lt;/span> root@155.254.33.138:/data/admin /data
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rsync 也可以用于同步本地目录 用法和cp差不多
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ssh免密码登录 ----- ssh-copy-id -i id_rsa.pub &lt;span style="color:#4e9a06">&amp;#34;-p 1024 root@155.254.33.138&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>密码交互重定向 ----- &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;密码&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> passwd --stdin 用户名 &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>设置用户名的密码&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>将运行的脚本 变成父进程 ----- &lt;span style="color:#204a87">exec&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看当前目录下一级子目录的大小 du -h --max-depth&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>使用（&lt;span style="color:#000;font-weight:bold">;&lt;/span>）: 可以在一行运行多个命令。 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>使用（&lt;span style="color:#ce5c00;font-weight:bold">&amp;amp;&amp;amp;&lt;/span>）: 可以在一行运行多个命令，并且只有前面命令执行成功，后面命令才会执行
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>使用（&lt;span style="color:#ce5c00;font-weight:bold">||&lt;/span>）: 可以在一行运行多个命令，并且只有前面命令执行失败，后面命令才会执行。它和 &lt;span style="color:#ce5c00;font-weight:bold">&amp;amp;&amp;amp;&lt;/span> 刚好相反
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>使用（&lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span>）: 命令后添加&lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span> ，可以让命令到后台执行。一个正在运行的命令可以用 ctrl+z 将其放入到后台。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 然后使用 &lt;span style="color:#204a87">jobs&lt;/span> 查看这些后台进程。系统会为每个后台进程分配一个编号。使用 &lt;span style="color:#204a87">fg&lt;/span> 编号，可以将 后台命令调到前台
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> czhn@czhn:~/download$ vim &lt;span style="color:#0000cf;font-weight:bold">123&lt;/span> &lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>1&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">97676&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> czhn@czhn:~/download$ &lt;span style="color:#204a87">jobs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>1&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>+ Stopped vim &lt;span style="color:#0000cf;font-weight:bold">123&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> czhn@czhn:~/download$ &lt;span style="color:#204a87">fg&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#8f5902;font-style:italic"># 将vim 123激活到前台进入vim窗口进行编辑&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>花括号的使用&lt;span style="color:#ce5c00;font-weight:bold">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>a,b&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span> 代表a和b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>a..b&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span> 代表a到b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>a..b..c&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span> a到b，步长为c
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>root@arthur test&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#8f5902;font-style:italic"># echo {1,10} 输出1和10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>root@arthur test&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#8f5902;font-style:italic"># mkdir -p /data/{1..10} # 则创建 /data/1 /data/2 ... /data/10 一共10个目录&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>启动&lt;span style="color:#000;font-weight:bold">|&lt;/span>重启&lt;span style="color:#000;font-weight:bold">|&lt;/span>停止名称为aaa的系统服务 ----- service aaa start&lt;span style="color:#000;font-weight:bold">|&lt;/span>restart&lt;span style="color:#000;font-weight:bold">|&lt;/span>stop
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> systemctl start&lt;span style="color:#000;font-weight:bold">|&lt;/span>stop&lt;span style="color:#000;font-weight:bold">|&lt;/span>restart aaa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看系统当前时间 ----- date
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>按照固定格式0000-00-00 00:00显示系统时间 ----- date &lt;span style="color:#4e9a06">&amp;#34;%Y-%m-%d %H:%M:%S&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>设置系统时间 ----- date -s &lt;span style="color:#4e9a06">&amp;#34;2010-10-10 10:10:10&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示2008年的日历表 ----- cal &lt;span style="color:#0000cf;font-weight:bold">2008&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>需要安装ncal&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>将时间修改保存到 BIOS ----- clock -w 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看当前主机名称 ----- hostname
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>临时修改主机名称为myPc ----- hostname myPc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>永久修改主机名称 ----- vi /etc/sysconfig/network
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看当前运行级别 ----- runlevel
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>修改当前运行级别 ----- telinit &lt;span style="color:#0000cf;font-weight:bold">3&lt;/span> 或 init &lt;span style="color:#0000cf;font-weight:bold">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 0表示关机，
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 1表示单用户，
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 2表示没有网络的命令行级别，
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 3命令行级别（大多服务器都用这个级别），
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 4为保留级别，
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 5为图形化级别，
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 6为重启。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看计算机ip信息 ifconfig -a&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>-a可以显示所有网卡地址&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>临时修改计算机eth0网卡ip地址 ifconfig eth0 192.168.100.136
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>实时查看系统详细信息 ----- top 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> htop （需要单独安装）
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看系统一分钟,五分钟,十五分钟平均负载 ----- uptime
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看在线用户 ----- who
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看最近一段时间谁操作过系统重要命令,并有ip信息 ----- last
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看系统内存使用情况 ----- free -m -- &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>-m参数显示以兆为单位&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看环境变量 ----- &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#000">$PATH&lt;/span> &lt;span style="color:#8f5902;font-style:italic">#这个环境变量决定了你能在那些路径下直接找到执行程序&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>向屏幕输出 hello word ----- &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;hello word&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看httpd相关进程表 ----- ps -ef &lt;span style="color:#000;font-weight:bold">|&lt;/span>grep httpd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看进程树 ----- pstree &lt;span style="color:#000;font-weight:bold">|&lt;/span>grep httpd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看pid号&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>进程号&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> ----- pstree -p &lt;span style="color:#000;font-weight:bold">|&lt;/span>grep httpd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看80端口是否开放 ----- netstat -tunpl &lt;span style="color:#000;font-weight:bold">|&lt;/span>grep :80
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看httpd程序占用端口号 ----- netstat -tunpl &lt;span style="color:#000;font-weight:bold">|&lt;/span>grep httpd*
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>强制杀掉一个pid ----- &lt;span style="color:#204a87">kill&lt;/span> -9 pid
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>一次性杀掉所有httpd进程 ----- pkill httpd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> kelladd httpd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>关机 ----- 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> shutdown -h now 关闭系统&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>1&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> init &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> 关闭系统&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>2&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> telinit &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> 关闭系统&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>3&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> shutdown -h hours:minutes &lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span> 按预定时间关闭系统
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> shutdown -c 取消按预定时间关闭系统
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> shutdown -r now 重启&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>1&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> reboot 重启&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>2&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">logout&lt;/span> 注销
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示机器的处理器架构 ----- uname -m 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示正在使用的内核版本 ----- uname -r 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>罗列一个磁盘的架构特性 ----- hdparm -i /dev/hda 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>在磁盘上执行测试性读取操作系统信息 ----- hdparm -tT /dev/sda 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示机器的处理器架构 ----- arch 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示硬件系统部件 ----- dmidecode -q 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示CPU info的信息 ----- cat /proc/cpuinfo 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示中断 ----- cat /proc/interrupts 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>校验内存使用 ----- cat /proc/meminfo 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示哪些swap被使用 ----- cat /proc/swaps 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示内核的版本 ----- cat /proc/version 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示网络适配器及统计 ----- cat /proc/net/dev 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示已加载的文件系统 ----- cat /proc/mounts 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>罗列 PCI 设备 ----- lspci -tv 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示 USB 设备 ----- lsusb -tv 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>显示PID进程占用得文件句柄 ----- lsof – p PID
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="bash中设置ps1是数字1而不是字母l">bash中设置PS1（是数字1而不是字母l）&lt;a class="td-heading-self-link" href="#bash%e4%b8%ad%e8%ae%be%e7%bd%aeps1%e6%98%af%e6%95%b0%e5%ad%971%e8%80%8c%e4%b8%8d%e6%98%af%e5%ad%97%e6%af%8dl" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>每个版本bash的PS1变量内的特殊符号可能有些小的差异，你可以先man bash 一下。下面是FC4环境下默认的特殊符号所代表的意义：
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\d&lt;/span> ：代表日期，格式为weekday month date，例如：&lt;span style="color:#4e9a06">&amp;#34;Mon Aug 1&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\H&lt;/span> ：完整的主机名称。例如：我的机器名称为：fc4.linux，则这个名称就是fc4.linux
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\h&lt;/span> ：仅取主机的第一个名字，如上例，则为fc4，.linux则被省略
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\t&lt;/span> ：显示时间为24小时格式，如：HH：MM：SS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\T&lt;/span> ：显示时间为12小时格式
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\A&lt;/span> ：显示时间为24小时格式：HH：MM
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\u&lt;/span> ：当前用户的账号名称
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\v&lt;/span> ：BASH的版本信息
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\w&lt;/span> ：完整的工作目录名称。家目录会以 ~代替
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\W&lt;/span> ：利用basename取得工作目录名称，所以只会列出最后一个目录
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\#&lt;/span> ：下达的第几个命令
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">\$&lt;/span> ：提示字符，如果是root时，提示符为：# ，普通用户则为：$
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>默认的PS1内容为： &lt;span style="color:#4e9a06">&amp;#39;[\u@\h \W]\$ &amp;#39;&lt;/span> ，所以默认的提示符就是： &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>root@localhost ~&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#8f5902;font-style:italic"># 。&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>但设置PS1的时候需要稍微处理一下
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">PS1&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;[\\u@\\h \\W]\\&lt;/span>$&lt;span style="color:#4e9a06"> &amp;#34;&lt;/span> 这样显示的结果才是正确的。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>设置颜色
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>颜色表 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>前景&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>F&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 背景&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>B&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 颜色
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>---------------------------------------
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">30&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">40&lt;/span> 黑色
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">31&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">41&lt;/span> 红色
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">32&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">42&lt;/span> 绿色
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">33&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">43&lt;/span> 黄色
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">34&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">44&lt;/span> 蓝色
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">35&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">45&lt;/span> 紫红色
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">36&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">46&lt;/span> 青蓝色
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">37&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">47&lt;/span> 白色
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>模式&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>M&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 意义
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-------------------------
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> OFF
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> 高亮显示
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">4&lt;/span> underline
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">5&lt;/span> 闪烁
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">7&lt;/span> 反白显示
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">8&lt;/span> 不可见
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>使用前缀 &lt;span style="color:#4e9a06">&amp;#34;\e[M;F;Bm&amp;#34;&lt;/span> 可更改其后的所有内容，MFB非必填
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>M的默认值是0,则原始样式为&lt;span style="color:#4e9a06">\e&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>m
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>ssh管理</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/ssh/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/ssh/</guid><description>&lt;h2 id="白名单形式">白名单形式&lt;a class="td-heading-self-link" href="#%e7%99%bd%e5%90%8d%e5%8d%95%e5%bd%a2%e5%bc%8f" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>要求： 只允许 192.168.0.1 和 192.168.0.10 登陆 其他全部禁止&lt;/p>
&lt;p>实现：&lt;/p>
&lt;ol>
&lt;li>vim /etc/hosts.allow //增加如下内容&lt;/li>
&lt;/ol>
&lt;p>sshd: 192.168.0.1, 192.168.0.10&lt;/p>
&lt;ol start="2">
&lt;li>vim /etc/hosts.deny //增加如下内容&lt;/li>
&lt;/ol>
&lt;p>sshd: ALL&lt;/p>
&lt;h2 id="黑名单形式">黑名单形式&lt;a class="td-heading-self-link" href="#%e9%bb%91%e5%90%8d%e5%8d%95%e5%bd%a2%e5%bc%8f" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>要求： 只限制192.168.0.1登陆上来，其他全部放行&lt;/p>
&lt;p>实现：&lt;/p>
&lt;p>vim /etc/hosts.deny //增加如下内容&lt;/p>
&lt;p>sshd: 192.168.0.1&lt;/p>
&lt;p>保存配置文件后就可以啦，不用重启。 不用再去编辑 /etc/hosts.allow 了&lt;/p>
&lt;p>我们可以这样理解这两个文件工作原理：&lt;/p>
&lt;p>当客户端的IP登陆服务器的时候，先去匹配hosts.allow，&lt;/p>
&lt;p>如果这里面有这个IP，则直接放行，如果没有这个IP，则看hosts.deny，&lt;/p>
&lt;p>如果这里面有该IP（ALL包括一切IP）则拒绝，如果deny中也没有匹配，则也会放行。&lt;/p>
&lt;p>也就是说，如果这两个文件中都没有限定的IP，则会放行！&lt;/p>
&lt;h2 id="请思考">请思考：&lt;a class="td-heading-self-link" href="#%e8%af%b7%e6%80%9d%e8%80%83" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>如果两个文件中都是 sshd: ALL 会出现什么情况？&lt;/p>
&lt;h2 id="免密登录">免密登录&lt;a class="td-heading-self-link" href="#%e5%85%8d%e5%af%86%e7%99%bb%e5%bd%95" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>ssh-copy-id -i ~/.ssh/id_rsa.pub &lt;a href="mailto:root@192.168.1.10">root@192.168.1.10&lt;/a>&lt;/p>
&lt;h2 id="生成私钥">生成私钥&lt;a class="td-heading-self-link" href="#%e7%94%9f%e6%88%90%e7%a7%81%e9%92%a5" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>ssh-keygen -t rsa -b 4096 -C &amp;ldquo;&lt;a href="mailto:your_email@example.com">your_email@example.com&lt;/a>&amp;rdquo;&lt;/p></description></item><item><title>Vim编辑器</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/vim%E7%BC%96%E8%BE%91%E5%99%A8/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/vim%E7%BC%96%E8%BE%91%E5%99%A8/</guid><description>&lt;blockquote>
&lt;p>vimtutor vim自带的联系教程&lt;/p>&lt;/blockquote>
&lt;p>获取帮助:
:help
:help subject&lt;/p>
&lt;h2 id="中文版快捷键">中文版快捷键&lt;a class="td-heading-self-link" href="#%e4%b8%ad%e6%96%87%e7%89%88%e5%bf%ab%e6%8d%b7%e9%94%ae" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>&lt;img src="https://www.azhw.com.cn/content/%E7%BC%96%E7%A8%8B/%E6%9D%82%E8%B0%88/vim%E5%BF%AB%E6%8D%B7%E9%94%AE/vim%E5%BF%AB%E6%8D%B7%E9%94%AE%E5%9B%BE%E7%89%872.gif" alt="中文版快捷键" title="中文版快捷键">&lt;/p>
&lt;h2 id="linux编辑器的种类">Linux编辑器的种类&lt;a class="td-heading-self-link" href="#linux%e7%bc%96%e8%be%91%e5%99%a8%e7%9a%84%e7%a7%8d%e7%b1%bb" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>行编辑器： sed
全屏编辑器： nano，vi
vi： Visual Interface
vim：是VI Improved 他是一个高级的实现&lt;/p>
&lt;h2 id="vim模式介绍">Vim模式介绍&lt;a class="td-heading-self-link" href="#vim%e6%a8%a1%e5%bc%8f%e4%bb%8b%e7%bb%8d" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>正常模式：可以使用快捷键命令。
插入模式（输入模式）：可以输入文本，在正常模式下，按i、a、o等都可以进入插入模式。
可视模式：正常模式下按v可以进入可视模式， 在可视模式下，移动光标可以选择文本。按V进入可视行模式， 总是整行整行的选中。ctrl+v进入可视块模式。
替换模式：正常模式下，按R进入。
末行模式：正常模式下，按:进入末行模式。
所有模式按esc退出到正常模式
&lt;/code>&lt;/pre>&lt;h2 id="打开关闭另存为">打开关闭另存为&lt;a class="td-heading-self-link" href="#%e6%89%93%e5%bc%80%e5%85%b3%e9%97%ad%e5%8f%a6%e5%ad%98%e4%b8%ba" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>1. 从命令行启动
vim -c cmd file: 在打开文件前，先执行指定的命令。
vim -r file: 恢复上次异常退出的文件。
vim -R file: 以只读的方式打开文件，但可以强制保存。
vim -M file: 以只读的方式打开文件，不可以强制保存。
vim -y num file: 将编辑窗口的大小设为num行。
vim + file: 从文件的末尾开始。
vim +num file: 从第num行开始。
vim +/string file: 打开file，并将光标停留在第一个找到的string上。
vim --remote file: 用已有的vim进程打开指定的文件。 如果你不想启用多个vim会话，这个很有用。但要注意， 如果你用vim，会寻找名叫VIM的服务器。如果你已经有一个gvim在运行了， 你可以用gvim --remote file在已有的gvim中打开文件。

2. 从vim退出
1. 在正常模式中
ZZ

2. 在末行模式

:x -- 保存并退出。
:q ——退出当前窗口。
:q! -- 退出当前窗口，不保存修改。
:wq -- 保存并退出。


3. 在当前窗口操作
:e file --关闭当前编辑的文件，并开启新的文件。 如果对当前文件的修改未保存，vi会警告。
:e! file --放弃对当前文件的修改，编辑新的文件。
:e+file -- 开始新的文件，并从文件尾开始编辑。
:e+n file -- 开始新的文件，并从第n行开始编辑。
:enew --编译一个未命名的新文档。(CTRL-W n)
:e -- 重新加载当前文档。
:e! -- 重新加载当前文档，并丢弃已做的改动。
:e#或ctrl+^ -- 回到刚才编辑的文件，很实用。

:f或ctrl+g -- 显示文档名，是否修改，和光标位置。
:f filename -- 改变编辑的文件名，这时再保存相当于另存为。
gf -- 打开以光标所在字符串为文件名的文件。(这个就是没有冒号)

:n1,n2w filename -- 选择性保存从某n1行到另n2行的内容。
:w -- 保存修改。
:w /PATH/TO/FILE --&amp;gt;写入到文件(另存为)

:saveas newfilename -- 另存为

:browse e -- 会打开一个文件浏览器让你选择要编辑的文件。 如果是终端中，则会打开netrw的文件浏览窗口。 如果是gvim，则会打开一个图形界面的浏览窗口。 实际上:browse后可以跟任何编辑文档的命令，如sp等。 用browse打开的起始目录可以由browsedir来设置：

:set browsedir=last -- 用上次访问过的目录（默认）。
:set browsedir=buffer -- 用当前文件所在目录。
:set browsedir=current -- 用当前工作目录。
:Sex -- 水平分割一个窗口，浏览文件系统。
:Vex -- 垂直分割一个窗口，浏览文件系统。
&lt;/code>&lt;/pre>&lt;h2 id="正常模式">正常模式&lt;a class="td-heading-self-link" href="#%e6%ad%a3%e5%b8%b8%e6%a8%a1%e5%bc%8f" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;h3 id="基本移动">基本移动&lt;a class="td-heading-self-link" href="#%e5%9f%ba%e6%9c%ac%e7%a7%bb%e5%8a%a8" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>
1. 字符跳转
数字 (h|j|k|l), 对应数字的左下上右
j: 下。
k: 上。
h或退格: 左。
l或空格: 右。

2. 单词跳转
w: 前移一个单词，光标停在下一个单词开头。
W: 移动下一个单词开头，但忽略一些标点。
e: 前移一个单词，光标停在下一个单词末尾。
E: 移动到下一个单词末尾，如果词尾有标点，则移动到标点。
b: 后移一个单词，光标停在上一个单词开头。
B: 移动到上一个单词开头，忽略一些标点。
上面的操作都可以配合n(表示一个数字)使用，比如在正常模式(下面会讲到)下输入3h， 则光标向左移动3个字符。

3. 行跳转
+或Enter: 把光标移至下一行第一个非空白字符。
-: 把光标移至上一行第一个非空白字符。

0: 移动到行首。
^: 移动到本行第一个非空白字符。
$: 移动到行尾。



4. 行间跳转
:n 回车: 移动到第n行。
nG: 到文件第n行。(n表示一个数字)

5. 屏幕跳转
g0: 移到光标所在屏幕行行首。
H: 把光标移到屏幕最顶端一行。
M: 把光标移到屏幕中间一行。
L: 把光标移到屏幕最底端一行。


6. 列跳转
n|: 把光标移到递n列（字符L）上。(n表示一个数字)


7.文档跳转
gg: 到文件头部。
G: 到文件尾部。
:$ 回车: 到文件尾部。
)： 后一句
(： 前一句
{： 前一个段落
}： 后一个段落
&lt;/code>&lt;/pre>&lt;h3 id="翻屏">翻屏&lt;a class="td-heading-self-link" href="#%e7%bf%bb%e5%b1%8f" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>ctrl+f: 下翻一屏。
ctrl+b: 上翻一屏。
ctrl+d: 下翻半屏。
ctrl+u: 上翻半屏。
ctrl+e: 向下滚动一行。
ctrl+y: 向上滚动一行。
n%: 到文件n%的位置。
zz: 将当前行移动到屏幕中央。
zt: 将当前行移动到屏幕顶端。
zb: 将当前行移动到屏幕底端。
&lt;/code>&lt;/pre>&lt;h3 id="标记">标记&lt;a class="td-heading-self-link" href="#%e6%a0%87%e8%ae%b0" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>使用标记可以快速移动。到达标记后，可以用Ctrl+o返回原来的位置。 Ctrl+o和Ctrl+i 很像浏览器上的 后退 和 前进 。

m{a-z}: 标记光标所在位置，局部标记，只用于当前文件。
m{A-Z}: 标记光标所在位置，全局标记。标记之后，退出Vim， 重新启动，标记仍然有效。
`{a-z}: 移动到标记位置。
&amp;#39;{a-z}: 移动到标记行的行首。
`{0-9}：回到上[2-10]次关闭vim时最后离开的位置。
``: 移动到上次编辑的位置。&amp;#39;&amp;#39;也可以，不过``精确到列，而&amp;#39;&amp;#39;精确到行 。如果想跳转到更老的位置，可以按Ctrl+o，跳转到更新的位置用Ctrl+i。
`&amp;#34;: 移动到上次离开的地方。
`.: 移动到最后改动的地方。
:marks 显示所有标记。
:delmarks a b -- 删除标记a和b。
:delmarks a-c -- 删除标记a、b和c。
:delmarks a c-f -- 删除标记a、c、d、e、f。
:delmarks! -- 删除当前缓冲区的所有标记。
:help mark-motions 查看更多关于mark的知识。
&lt;/code>&lt;/pre>&lt;h3 id="正常模式切换输入模式插入模式">正常模式切换输入模式（插入模式）&lt;a class="td-heading-self-link" href="#%e6%ad%a3%e5%b8%b8%e6%a8%a1%e5%bc%8f%e5%88%87%e6%8d%a2%e8%be%93%e5%85%a5%e6%a8%a1%e5%bc%8f%e6%8f%92%e5%85%a5%e6%a8%a1%e5%bc%8f" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>i: 在光标前插入。一个小技巧：按8，再按i，进入插入模式，输入=， 按esc进入命令模式，就会出现8个=。 这在插入分割线时非常有用，如30i+&amp;lt;esc&amp;gt;就插入了36个+组成的分割线。
I: 在当前行第一个非空字符前插入。
gI: 在当前行第一列插入。
a: 在光标后插入。
A: 在当前行最后插入。
o: 在下面新建一行插入。
O: 在上面新建一行插入。
&lt;/code>&lt;/pre>&lt;h2 id="插入文本">插入文本&lt;a class="td-heading-self-link" href="#%e6%8f%92%e5%85%a5%e6%96%87%e6%9c%ac" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>
:r filename在当前位置插入另一个文件的内容。
:[n]r filename在第n行插入另一个文件的内容。
:r !date 在光标处插入当前日期与时间。同理，:r !command可以将其它shell命令的输出插入当前文档。
5.2 改写插入
c[n]w: 改写光标后1(n)个词。
c[n]l: 改写光标后n个字母。
c[n]h: 改写光标前n个字母。
[n]cc: 修改当前[n]行。
[n]s: 以输入的文本替代光标之后1(n)个字符，相当于c[n]l。
[n]S: 删除指定数目的行，并以所输入文本代替之。
注意，类似cnw,dnw,ynw的形式同样可以写为ncw,ndw,nyw。
&lt;/code>&lt;/pre>&lt;h2 id="剪切复制和寄存器">剪切复制和寄存器&lt;a class="td-heading-self-link" href="#%e5%89%aa%e5%88%87%e5%a4%8d%e5%88%b6%e5%92%8c%e5%af%84%e5%ad%98%e5%99%a8" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;h3 id="剪切和复制粘贴">剪切和复制、粘贴&lt;a class="td-heading-self-link" href="#%e5%89%aa%e5%88%87%e5%92%8c%e5%a4%8d%e5%88%b6%e7%b2%98%e8%b4%b4" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>[n]x: 剪切光标右边n个字符，相当于d[n]l。
[n]X: 剪切光标左边n个字符，相当于d[n]h。

y: 复制在可视模式下选中的文本。
yy or Y: 复制整行文本。
y[n]w: 复制一(n)个词。
y[n]l: 复制光标右边1(n)个字符。
y[n]h: 复制光标左边1(n)个字符。
y$: 从光标当前位置复制到行尾。
y0: 从光标当前位置复制到行首。
:m,ny&amp;lt;cr&amp;gt; 复制m行到n行的内容。
y1G或ygg: 复制光标以上的所有行。
yG: 复制光标以下的所有行。
yaw和yas：复制一个词和复制一个句子，即使光标不在词首和句首也没关系。

d: 删除（剪切）在可视模式下选中的文本。
d$ or D: 删除（剪切）当前位置到行尾的内容。
d[n]w: 删除（剪切）1(n)个单词
d[n]l: 删除（剪切）光标右边1(n)个字符。
d[n]h: 删除（剪切）光标左边1(n)个字符。
d0: 删除（剪切）当前位置到行首的内容
[n] dd: 删除（剪切）1(n)行。
:m,nd&amp;lt;cr&amp;gt; 剪切m行到n行的内容。
d1G或dgg: 剪切光标以上的所有行。
dG: 剪切光标以下的所有行。
daw和das：剪切一个词和剪切一个句子，即使光标不在词首和句首也没关系。
d/f&amp;lt;cr&amp;gt;：这是一个比较高级的组合命令，它将删除当前位置 到下一个f之间的内容。

p: 在光标之后粘贴。
P: 在光标之前粘贴。
&lt;/code>&lt;/pre>&lt;h3 id="文本对象">文本对象&lt;a class="td-heading-self-link" href="#%e6%96%87%e6%9c%ac%e5%af%b9%e8%b1%a1" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>aw：一个词
as：一句。
ap：一段。
ab：一块（包含在圆括号中的）。
y, d, c, v都可以跟文本对象。
&lt;/code>&lt;/pre>&lt;h3 id="寄存器">寄存器&lt;a class="td-heading-self-link" href="#%e5%af%84%e5%ad%98%e5%99%a8" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>a-z：都可以用作寄存器名。&amp;#34;ayy把当前行的内容放入a寄存器。
A-Z：用大写字母索引寄存器，可以在寄存器中追加内容。 如&amp;#34;Ayy把当前行的内容追加到a寄存器中。
:reg 显示所有寄存器的内容。
&amp;#34;&amp;#34;：不加寄存器索引时，默认使用的寄存器。
&amp;#34;*：当前选择缓冲区，&amp;#34;*yy把当前行的内容放入当前选择缓冲区。
&amp;#34;+：系统剪贴板。&amp;#34;+yy把当前行的内容放入系统剪贴板。
&lt;/code>&lt;/pre>&lt;h2 id="查找与替换">查找与替换&lt;a class="td-heading-self-link" href="#%e6%9f%a5%e6%89%be%e4%b8%8e%e6%9b%bf%e6%8d%a2" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;h3 id="查找">查找&lt;a class="td-heading-self-link" href="#%e6%9f%a5%e6%89%be" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>/something: 在后面的文本中查找something。
?something: 在前面的文本中查找something。
/pattern/+number: 将光标停在包含pattern的行后面第number行上。
/pattern/-number: 将光标停在包含pattern的行前面第number行上。
n: 向后查找下一个。
N: 向前查找下一个。
可以用grep或vimgrep查找一个模式都在哪些地方出现过，
其中:grep是调用外部的grep程序，而:vimgrep是vim自己的查找算法。
用法为： :vim[grep]/pattern/[g] [j] files
g的含义是如果一个模式在一行中多次出现，则这一行也在结果中多次出现。
j的含义是grep结束后，结果停在第j项，默认是停在第一项。
vimgrep前面可以加数字限定搜索结果的上限，如
:1vim/pattern/ % 只查找那个模式在本文件中的第一个出现。
 
其实vimgrep在读纯文本电子书时特别有用，可以生成导航的目录。
比如电子书中每一节的标题形式为：n. xxxx。你就可以这样：
:vim/^d{1,}./ %
然后用:cw或:copen查看结果，可以用C-w H把quickfix窗口移到左侧，
就更像个目录了。
&lt;/code>&lt;/pre>&lt;h3 id="替换">替换&lt;a class="td-heading-self-link" href="#%e6%9b%bf%e6%8d%a2" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;blockquote>
&lt;p>g 全局替换 i 忽略大小写&lt;/p></description></item><item><title>磁盘管理</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86/</guid><description>&lt;h2 id="lvm概念简述">LVM概念简述&lt;a class="td-heading-self-link" href="#lvm%e6%a6%82%e5%bf%b5%e7%ae%80%e8%bf%b0" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>‌LVM（Logical Volume Manager）是Linux环境下对磁盘分区进行管理的一种机制，它通过在硬盘和分区之上建立一个逻辑层，提高了磁盘分区管理的灵活性‌‌。&lt;/p>
&lt;p>LVM的主要目的是通过逻辑卷的方式对磁盘进行动态管理，使得磁盘空间的分配和管理更加灵活和高效‌。&lt;/p>
&lt;h3 id="lvm的基本概念和组成部分">LVM的基本概念和组成部分&lt;a class="td-heading-self-link" href="#lvm%e7%9a%84%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5%e5%92%8c%e7%bb%84%e6%88%90%e9%83%a8%e5%88%86" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;ol>
&lt;li>‌物理卷（PV）‌：物理卷是LVM管理的最底层存储单元，可以是实际的物理硬盘或硬盘分区。每个物理卷被划分为多个物理范围（PE），PE是LVM寻址的最小单位‌。&lt;/li>
&lt;li>‌卷组（VG）‌：卷组由一个或多个物理卷组成，相当于一个存储池。卷组中的空间可以被划分为多个逻辑范围（LE），用于创建逻辑卷‌。&lt;/li>
&lt;li>‌逻辑卷（LV）‌：逻辑卷建立在卷组之上，用于存储数据。逻辑卷的大小可以动态调整，而不会丢失数据‌。&lt;/li>
&lt;/ol>
&lt;h3 id="lvm的工作原理">LVM的工作原理&lt;a class="td-heading-self-link" href="#lvm%e7%9a%84%e5%b7%a5%e4%bd%9c%e5%8e%9f%e7%90%86" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;p>LVM通过将底层的物理硬盘封装起来，以逻辑卷的方式呈现给上层应用。这种方式使得磁盘管理更加灵活，例如可以动态地增加或减少逻辑卷的空间，而不需要重新格式化或移动数据‌。LVM的最大特点是其动态管理能力，允许在不丢失数据的情况下调整逻辑卷的大小，并且可以方便地添加新的物理硬盘到系统中‌。&lt;/p>
&lt;h3 id="lvm的优点和应用场景">LVM的优点和应用场景&lt;a class="td-heading-self-link" href="#lvm%e7%9a%84%e4%bc%98%e7%82%b9%e5%92%8c%e5%ba%94%e7%94%a8%e5%9c%ba%e6%99%af" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;ol>
&lt;li>
&lt;p>‌灵活的存储管理‌：LVM允许动态调整逻辑卷的大小，无需重新格式化或移动数据‌。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>‌高效的存储利用‌：通过将多个物理硬盘整合为一个卷组，LVM可以提高存储资源的利用率和管理的便捷性‌。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>‌易于扩展‌：当需要增加存储容量时，只需向卷组中添加新的物理硬盘，而不需要改变现有的逻辑卷‌&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="raid详细解说">Raid详细解说&lt;a class="td-heading-self-link" href="#raid%e8%af%a6%e7%bb%86%e8%a7%a3%e8%af%b4" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>奇偶校验信息和相对应的数据分别存储于不同的磁盘上，其中任意N-1块磁盘上都存储完整的数据，
也就是说有相当于一块磁盘容量的空间用于存储奇偶校验信息。
因此当RAID5的一个磁盘发生损坏后，不会影响数据的完整性，从而保证了数据安全。
当损坏的磁盘被替换后，RAID还会自动利用剩下奇偶校验信息去重建此磁盘上的数据，来保持RAID5的高可靠性。
做raid 5阵列所有磁盘容量必须一样大，当容量不同时，会以最小的容量为准。
最好硬盘转速一样，否则会影响性能，而且可用空间=磁盘数n-1,其中有一块是专门用来校验的，
在存储数据的时候，校验盘里面是不会被存入数据的
RAID 0 条带化，增加速度（最少2块盘）
RAID 1 镜像，增加数据安全（最少2块盘）
RAID 5 奇偶校验 既增加速度，又增加安全性（最少3块盘）&lt;/p>
&lt;h2 id="磁盘相关命令速查">磁盘相关命令速查&lt;a class="td-heading-self-link" href="#%e7%a3%81%e7%9b%98%e7%9b%b8%e5%85%b3%e5%91%bd%e4%bb%a4%e9%80%9f%e6%9f%a5" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>查看磁盘和磁盘分区： sudo fdisk -l [设备名]&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># -l 后不加设备， 会列出所有磁盘和分区信息&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>root@localhost ~&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#8f5902;font-style:italic"># fdisk -l&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Disk /dev/sda: 17.2 GB, &lt;span style="color:#0000cf;font-weight:bold">17179869184&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">255&lt;/span> heads, &lt;span style="color:#0000cf;font-weight:bold">63&lt;/span> sectors/track, &lt;span style="color:#0000cf;font-weight:bold">2088&lt;/span> cylinders
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">Units&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> cylinders of &lt;span style="color:#0000cf;font-weight:bold">16065&lt;/span> * &lt;span style="color:#000">512&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">8225280&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Sector size &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>logical/physical&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>: &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes / &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>I/O size &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>minimum/optimal&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>: &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes / &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Disk identifier: 0x00018d63
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Device Boot Start End Blocks Id System
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/dev/sda1 * &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">13&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">102400&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">83&lt;/span> Linux
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Partition &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> does not end on cylinder boundary.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/dev/sda2 &lt;span style="color:#0000cf;font-weight:bold">13&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">274&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">2097152&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">82&lt;/span> Linux swap / Solaris
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Partition &lt;span style="color:#0000cf;font-weight:bold">2&lt;/span> does not end on cylinder boundary.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/dev/sda3 &lt;span style="color:#0000cf;font-weight:bold">274&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">2089&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">14576640&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">83&lt;/span> Linux
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Disk /dev/sdb: &lt;span style="color:#0000cf;font-weight:bold">8589&lt;/span> MB, &lt;span style="color:#0000cf;font-weight:bold">8589934592&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">255&lt;/span> heads, &lt;span style="color:#0000cf;font-weight:bold">63&lt;/span> sectors/track, &lt;span style="color:#0000cf;font-weight:bold">1044&lt;/span> cylinders
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">Units&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> cylinders of &lt;span style="color:#0000cf;font-weight:bold">16065&lt;/span> * &lt;span style="color:#000">512&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">8225280&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Sector size &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>logical/physical&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>: &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes / &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>I/O size &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>minimum/optimal&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>: &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes / &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Disk identifier: 0x00000000
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 指定设备&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>root@localhost ~&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#8f5902;font-style:italic"># fdisk -l /dev/sda&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Disk /dev/sda: 17.2 GB, &lt;span style="color:#0000cf;font-weight:bold">17179869184&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#0000cf;font-weight:bold">255&lt;/span> heads, &lt;span style="color:#0000cf;font-weight:bold">63&lt;/span> sectors/track, &lt;span style="color:#0000cf;font-weight:bold">2088&lt;/span> cylinders
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">Units&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> cylinders of &lt;span style="color:#0000cf;font-weight:bold">16065&lt;/span> * &lt;span style="color:#000">512&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">8225280&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Sector size &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>logical/physical&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>: &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes / &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>I/O size &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>minimum/optimal&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>: &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes / &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> bytes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Disk identifier: 0x00018d63
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Device Boot Start End Blocks Id System
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/dev/sda1 * &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">13&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">102400&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">83&lt;/span> Linux
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Partition &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> does not end on cylinder boundary.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/dev/sda2 &lt;span style="color:#0000cf;font-weight:bold">13&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">274&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">2097152&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">82&lt;/span> Linux swap / Solaris
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Partition &lt;span style="color:#0000cf;font-weight:bold">2&lt;/span> does not end on cylinder boundary.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/dev/sda3 &lt;span style="color:#0000cf;font-weight:bold">274&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">2089&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">14576640&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">83&lt;/span> Linux可以看到刚才阿铭加的一块磁盘 /dev/sdb 的信息。
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>分区工具工作台 sudo fdisk 设备名&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>czhn@czhn:~$ sudo fdisk /dev/nvme0n1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Welcome to fdisk &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>util-linux 2.37.2&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Changes will remain in memory only, &lt;span style="color:#204a87;font-weight:bold">until&lt;/span> you decide to write them.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Be careful before using the write command.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>This disk is currently in use - repartitioning is probably a bad idea.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>It&lt;span style="color:#a40000">&amp;#39;&lt;/span>s recommended to umount all file systems, and swapoff all swap
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>partitions on this disk.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 控制台帮助， 列出了所有的操作&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Command &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>m &lt;span style="color:#204a87;font-weight:bold">for&lt;/span> &lt;span style="color:#204a87">help&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>: m
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Help:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> GPT
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> M enter protective/hybrid MBR
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Generic
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> d delete a partition 删除一个分区
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> F list free unpartitioned space 列出未分区的空间
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> l list known partition types 列出已知的分区类型
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> n add a new partition 添加一个新的分区
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> p print the partition table 打印分区表（也就是查看已分区的信息）
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> t change a partition &lt;span style="color:#204a87">type&lt;/span> 修改分区类型
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> v verify the partition table 验证分区表
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> i print information about a partition 查看分区信息
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Misc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> m print this menu
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> x extra functionality &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>experts only&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Script
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> I load disk layout from sfdisk script file
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> O dump disk layout to sfdisk script file
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Save &lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span> Exit
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> w write table to disk and &lt;span style="color:#204a87">exit&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> q quit without saving changes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Create a new label
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> g create a new empty GPT partition table
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> G create a new empty SGI &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>IRIX&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> partition table
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> o create a new empty DOS partition table
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> s create a new empty Sun partition table
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>查看文件系统挂载详情： df -hT&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>czhn@czhn:~$ df -hT &lt;span style="color:#8f5902;font-style:italic"># 加T参数会添加Type列 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Filesystem Type Size Used Avail Use% Mounted on
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tmpfs tmpfs 3.2G 3.6M 3.2G 1% /run
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/dev/sda4 ext4 75G 22G 50G 31% /
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tmpfs tmpfs 16G 1.2M 16G 1% /dev/shm
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tmpfs tmpfs 5.0M &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> 5.0M 0% /run/lock
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/dev/sda3 ext4 2.0G 246M 1.6G 14% /boot
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/dev/sda1 vfat 1.1G 6.1M 1.1G 1% /boot/efi
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/dev/nvme0n1p1 ext4 458G 88G 347G 21% /data
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tmpfs tmpfs 3.2G 4.0K 3.2G 1% /run/user/1000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>临时挂载和卸载&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">umask&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">000&lt;/span> &lt;span style="color:#8f5902;font-style:italic"># 临时设置umask为000 让用户可写&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">iocharset&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>gb2312 &lt;span style="color:#000">codepage&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">936&lt;/span> &lt;span style="color:#8f5902;font-style:italic"># 临时设置编码为gb2312 如果挂载后里面乱码&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mount –o &lt;span style="color:#000">umask&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>000, &lt;span style="color:#000">iocharset&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>gb2312 &lt;span style="color:#000">codepage&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">936&lt;/span> /dev/sda4 /data
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>umount /data
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>查看目录大小 du&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>如果不加参数， 他会便利所有的目录文件然后输出出来，目录小还好， 如果目录大没法看&lt;/p></description></item><item><title>定时任务</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1/</guid><description>&lt;h2 id="at">at&lt;a class="td-heading-self-link" href="#at" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;blockquote>
&lt;p>一次性计划任务&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>安装： apt install at&lt;/p>&lt;/blockquote>
&lt;pre tabindex="0">&lt;code>一次性计划任务AT
 at队列
用来存储尚未执行的任务,一旦执行了就从队列中将任务删除
队列的保存位置/var/spool/at/
 at服务
用来检测和执行任务,每间隔1一分钟就会检查队列中是否有到时的任务. 
 at工具
用来添加,查看,删除定时任务的工具
at服务的启动和停止
 service atd status
 
at 参数 echo 00000 &amp;gt; /var/spool/at/.SEQ 清除任务id
-l 查看任务列队
-d 删除任务
建立任务
 [root@gw ~]# date
 2009年 05月 29日 星期五 20:23:36 CST
 [root@gw ~]# at 20:26(一个时间)
 at&amp;gt; touch /root/zuihouyiye.log 
 at&amp;gt; &amp;lt;EOT&amp;gt; （ctrl+d）
 job 1 at 2013-12-20 20:26
查看一次性计划任务 atq
 at -l
删除一次性计划任务 atrm job号(atq可以看到job号)
 at -dq
&lt;/code>&lt;/pre>&lt;h2 id="周期性计划任务cron">周期性计划任务cron&lt;a class="td-heading-self-link" href="#%e5%91%a8%e6%9c%9f%e6%80%a7%e8%ae%a1%e5%88%92%e4%bb%bb%e5%8a%a1cron" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>cron格式 （man 5 crontab）
min hour day mon week commands
min: 分 00-59
hour: 时 00-23
day: 日 1-31
mon: 月 1-12
week: 周 0-7 0和7都是周日
command:要执行的任务--计划任务的命令要写清楚命令完整路径


添加计划任务

创建计划任务:crontab -e
查看计划任务:crontab -l
删除计划任务:crontab -r

示例：
使用方法
 分 时 日 月 周
1. 00 03 * * * cmd ----- 单一时间,每天3点
2. 30 23 *** cmd ----- 每天23:30
3. 00 9,12,22 * * * cmd ----- 多个时间
4. 00 9-12 * * * cmd ----- 9-12点,连续时间
59 23 ** 1-5 cmd ----- 周一到周五
6. * * * * * cmd ----- 所有时间
7. */5 * * * * cmd ----- 每间隔5分钟
8. 59 23 ** 1,3,5 cmd ----- 每个周一,周三,周五的23:59

1. 每隔两分钟向/mnt/error.log中写入一行aaa
 */2 **** /bin/echo &amp;#34;aaa&amp;#34;&amp;gt;&amp;gt;/mnt/error.log 
2. 每天19:20重启服务器
 20 19 *** /sbin/init 6
3. 每周一,周三,周五晚上23:00重启服务器
 00 23 ** 1,3,5 /sbin/init 6
4. 周一到周五每天00:00重启服务器
 59 23 ** 1-5 /sbin/init 6
5.每天凌晨3:00把网站制作一个压缩包,并且拷贝到/mnt下,而且压缩包的名字中必须要有日期
{
思路:考虑基本命令
具体操作方法
创建一个执行脚本 vi web.sh
内容如下
#!/bin/bash
DATE=`date +%Y-%m-%d`
file=web-${DATE}.tar.gz
tar czf /tmp/$file /var/www/html
mv -a /tmp/$file /mnt
}
00 03 * * 0 web.sh 计划任务执行这个脚本
&lt;/code>&lt;/pre></description></item><item><title>脚本和示例</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E8%84%9A%E6%9C%AC%E5%92%8C%E7%A4%BA%E4%BE%8B/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E8%84%9A%E6%9C%AC%E5%92%8C%E7%A4%BA%E4%BE%8B/</guid><description>&lt;h2 id="shell使用其他用户执行命令">shell使用其他用户执行命令&lt;a class="td-heading-self-link" href="#shell%e4%bd%bf%e7%94%a8%e5%85%b6%e4%bb%96%e7%94%a8%e6%88%b7%e6%89%a7%e8%a1%8c%e5%91%bd%e4%bb%a4" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;密码&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> su - 用户名 -c &lt;span style="color:#4e9a06">&amp;#34;ls /&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="更新当前目录下所有的git">更新当前目录下所有的git&lt;a class="td-heading-self-link" href="#%e6%9b%b4%e6%96%b0%e5%bd%93%e5%89%8d%e7%9b%ae%e5%bd%95%e4%b8%8b%e6%89%80%e6%9c%89%e7%9a%84git" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#000">dir_list&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>ls&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">current_dir&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>&lt;span style="color:#204a87">cd&lt;/span> &lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>dirname &lt;span style="color:#000">$0&lt;/span>&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#204a87">pwd&lt;/span>&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">for&lt;/span> dir in &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">dir_list&lt;/span>&lt;span style="color:#000;font-weight:bold">[@]&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span> -d &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">current_dir&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>/&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">dir&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">if&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span> -d &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">current_dir&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>/&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">dir&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>/.git &lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">cd&lt;/span> &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">current_dir&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>/&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">dir&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87">echo&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;正在更新目录&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">current_dir&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">/&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">dir&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> git config --add core.filemode &lt;span style="color:#204a87">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> git pull
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">done&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="shell-expect-传参方式-远程执行命令后退出">shell expect 传参方式 远程执行命令后退出&lt;a class="td-heading-self-link" href="#shell-expect-%e4%bc%a0%e5%8f%82%e6%96%b9%e5%bc%8f-%e8%bf%9c%e7%a8%8b%e6%89%a7%e8%a1%8c%e5%91%bd%e4%bb%a4%e5%90%8e%e9%80%80%e5%87%ba" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;blockquote>
&lt;p>path/脚本 koala abc123 192.168.10.10 ls&lt;/p>&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#!/usr/bin/expect
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#204a87">set&lt;/span> user &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 0&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> password &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 1&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> host &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 2&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> cmd &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 3&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spawn ssh &lt;span style="color:#000">$user&lt;/span>@&lt;span style="color:#000">$host&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;*yes/no&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span> send &lt;span style="color:#4e9a06">&amp;#34;yes\r&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> exp_continue &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;password:&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span> send &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$password&lt;/span>&lt;span style="color:#4e9a06">\r&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect &lt;span style="color:#4e9a06">&amp;#34;]*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>send &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$cmd&lt;/span>&lt;span style="color:#4e9a06">\r&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect &lt;span style="color:#4e9a06">&amp;#34;]*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>send &lt;span style="color:#4e9a06">&amp;#34;exit\r&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="shell-expect-传参方式-远程执行命令后保持登录状态">shell expect 传参方式 远程执行命令后保持登录状态&lt;a class="td-heading-self-link" href="#shell-expect-%e4%bc%a0%e5%8f%82%e6%96%b9%e5%bc%8f-%e8%bf%9c%e7%a8%8b%e6%89%a7%e8%a1%8c%e5%91%bd%e4%bb%a4%e5%90%8e%e4%bf%9d%e6%8c%81%e7%99%bb%e5%bd%95%e7%8a%b6%e6%80%81" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#!/usr/bin/expect
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#204a87">set&lt;/span> timeout -1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> user &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 0&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> password &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 1&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> host &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 2&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spawn ssh &lt;span style="color:#000">$user&lt;/span>@&lt;span style="color:#000">$host&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;*yes/no&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span> send &lt;span style="color:#4e9a06">&amp;#34;yes\r&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> exp_continue &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;password:&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span> send &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$password&lt;/span>&lt;span style="color:#4e9a06">\r&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect &lt;span style="color:#4e9a06">&amp;#34;]*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>interact
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="shell-expect-结合-rsync-进行远程同步文件或目录">shell expect 结合 rsync 进行远程同步文件或目录&lt;a class="td-heading-self-link" href="#shell-expect-%e7%bb%93%e5%90%88-rsync-%e8%bf%9b%e8%a1%8c%e8%bf%9c%e7%a8%8b%e5%90%8c%e6%ad%a5%e6%96%87%e4%bb%b6%e6%88%96%e7%9b%ae%e5%bd%95" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#!/usr/bin/expect
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#204a87">set&lt;/span> user &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 0&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> password &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 1&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> host &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 2&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">set&lt;/span> cmd &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>lindex &lt;span style="color:#000">$argv&lt;/span> 3&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 把远程的/tmp/12.txt 同步到本地的当前目录下&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spawn rsync &lt;span style="color:#000">$user&lt;/span>@&lt;span style="color:#000">$host&lt;/span>:/tmp/12.txt ./
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;*yes/no&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span> send &lt;span style="color:#4e9a06">&amp;#34;yes\r&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span> exp_continue &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;password:&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">{&lt;/span> send &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#000">$password&lt;/span>&lt;span style="color:#4e9a06">\r&amp;#34;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ce5c00;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>expect eof
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="shell脚本模板">shell脚本模板&lt;a class="td-heading-self-link" href="#shell%e8%84%9a%e6%9c%ac%e6%a8%a1%e6%9d%bf" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>&lt;a href="https://gitee.com/azhw/rookiedev-example/tree/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Linux/Linux%E9%80%9A%E7%94%A8/%E8%84%9A%E6%9C%AC%E5%92%8C%E7%A4%BA%E4%BE%8B/shell%E8%84%9A%E6%9C%AC%E6%A8%A1%E6%9D%BF">shell脚本模板&lt;/a>&lt;/p></description></item><item><title>进程管理</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>Linux在执行每一个程序时，就会在内存中为这个程序建立一个进程，以便让内核可以管理这个运行中的进程，进程是系统分配各种资源，进程调度的基本单位。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>怎么查看进程
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>一.ps 命令
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># ps aux|head -n 2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>root &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> 0.0 0.2 &lt;span style="color:#0000cf;font-weight:bold">2064&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">624&lt;/span> ? Ss 10:28 0:00 init &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>3&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>USER:程序的执行者
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>PID:进程的ID号
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>%CPU:占用CPU的百分比
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>%MEM:占用内存的百分比
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>VSZ:预分配的内存量,也就是程序所能使用的内存数量 KB单位
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RSS:真实内存占用大小&lt;span style="color:#000;font-weight:bold">;&lt;/span>在预分配的范围中已经使用的大小 单位KB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>TTY:控制台打开的位置 （？）为没有打开
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>STAT:进程运行的状态
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> R 进程正在运行
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> T 进程的暂停状态,一般都是由运行状态状态转换而来,等待某种特殊处理,如调试跟踪的程序,每执行到一个断点,就转入暂停状态,等待新的输入信号.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> S 进程可中断的睡眠模式 &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>可中断,就是程序接收到一种信号后可以改变到另一种状态&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Z 代表改进程目前为 zombie 状态.&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>僵尸状态&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> D 进程进入无法中断的睡眠模式.&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>不可中断,是因为硬件资源无法满足,不能被信号唤醒.必须等到所等 到等待的资源得到之后才能被唤醒&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> IO引起的
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt; 代表为高优先级
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> N 代表为低优先级
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> l 多线程
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> L 锁在内存中,防止和虚拟内存交换
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> s 会话,后台进程组
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> + 前台进程组
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>START:进程启动时间
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>TIME:进程占用CPU的时间
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>COMMAND:进程名字
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>init:内核启动的第一个用户级进程
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>二.pstree
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查询进程的层次关系
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>三.top 时时监视进程状态
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>PRI 内核调度的优先级（不可随意调整）
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NI nice值（我们管理员用调整NI的值来影响PRI的值）
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>怎么管理进程
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># kill -l&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看信号量
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 1&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> SIGHUP 9&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> SIGKILL 15&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> SIGTERM 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>1.重新开始运行该进程
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>9.强制杀死
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>15.正常退出，正常结束
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">kill&lt;/span> PID kill后接的是进程id
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>killall mysqld killall后接的是进程名字
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo fuser -k 80/tcp 关闭占用80端口的程序
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>进程的前后台切换
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sleep &lt;span style="color:#0000cf;font-weight:bold">500&lt;/span> &lt;span style="color:#000;font-weight:bold">&amp;amp;&lt;/span> 把进程放到后台
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">jobs&lt;/span> 查看后台有哪些进程
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CTRL+Z 暂停前台进程放到后台
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">bg&lt;/span> %1 启动后台进程
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">fg&lt;/span> %1 将后台进程切换到前台
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>1是后台进程顺序号 可以用jobs查看
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">kill&lt;/span> %1 杀死后台任务号为1的进程
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>权限</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E6%9D%83%E9%99%90/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E6%9D%83%E9%99%90/</guid><description>&lt;h2 id="chmod">chmod&lt;a class="td-heading-self-link" href="#chmod" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>权限常用人群代替字母
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>u 用户
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>g 组内其他用户
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>o 其他用户
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>a 所有人群
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>单独指定某一类用户权限例如
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod u+x,o+x file1 给用户添加执行权限,给用户同组用户添加执行权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+x表示添加执行权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-x表示删除执行权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>a+x 表示 u g o 都添加执行权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>r: &lt;span style="color:#0000cf;font-weight:bold">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>w: &lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>x: &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod rwxrwxrwx &lt;span style="color:#000">file2&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> chmod &lt;span style="color:#0000cf;font-weight:bold">777&lt;/span> file3 给所有人设置777权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>推荐前面的方式，不用算数字避免出错
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="acl权限">acl权限&lt;a class="td-heading-self-link" href="#acl%e6%9d%83%e9%99%90" aria-label="Heading self-link">&lt;/a>&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>1.设置权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setfacl -m u:user1:rwx feil1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 给用户--user1分配读写执行权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setfacl -m o:user1:rwx file1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 给user1组成员设置rwx权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>实际的一个例子
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Setfacl –m u:mysql:rwx –R /usr/local/mysql 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Setfacl –m d:u:mysql:rwx –R /usr/local/mysql
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>用acl来让mysql用户对/usr/local/mysql目录具有所有权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>因为mysql目录是数据库来操作只需要让这个目录的执行者具有权限即可
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2.获得指定文件权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> getfacl -e file 或者&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>getfacl 文件名/目录名&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>3.删除某一个acl权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setfacl -x u:user1 file1--对user1用户删除当前目录下file1文件的权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>4.删除所有acl权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setfacl -b file
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>5.设置acl的默认权限
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> setfacl -m d:u:user1:rwx &lt;span style="color:#204a87">test&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#8f5902;font-style:italic">#当前目录的子目录会集成目录的acl权限&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="特殊权限">特殊权限&lt;a class="td-heading-self-link" href="#%e7%89%b9%e6%ae%8a%e6%9d%83%e9%99%90" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>前面我们学习过linux的基本权限,但如果只有基本权限,可能无法满足各式各样的要求&lt;/p></description></item><item><title>时间日期</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E6%97%B6%E9%97%B4%E6%97%A5%E6%9C%9F/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E6%97%B6%E9%97%B4%E6%97%A5%E6%9C%9F/</guid><description>&lt;h1 id="查看时间">查看时间&lt;a class="td-heading-self-link" href="#%e6%9f%a5%e7%9c%8b%e6%97%b6%e9%97%b4" aria-label="Heading self-link">&lt;/a>&lt;/h1>
&lt;p>timedatectl status&lt;/p>
&lt;p>date （只查看本地事件）&lt;/p>
&lt;h2 id="设置时区">设置时区&lt;a class="td-heading-self-link" href="#%e8%ae%be%e7%bd%ae%e6%97%b6%e5%8c%ba" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>找到相应的时区文件 /usr/share/zoneinfo/Asia/Shanghai，用这个文件替换当前的/etc/localtime文件。&lt;/p>
&lt;p>cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime&lt;/p>
&lt;p>或&lt;/p>
&lt;p>timedatectl set-timezone Asia/Shanghai （立即生效）&lt;/p>
&lt;h2 id="日期设定成2007年6月28日">日期设定成2007年6月28日&lt;a class="td-heading-self-link" href="#%e6%97%a5%e6%9c%9f%e8%ae%be%e5%ae%9a%e6%88%902007%e5%b9%b46%e6%9c%8828%e6%97%a5" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>date -s 06/28/2007&lt;/p>
&lt;h2 id="系统时间设定成下午4点40分0秒">系统时间设定成下午4点40分0秒&lt;a class="td-heading-self-link" href="#%e7%b3%bb%e7%bb%9f%e6%97%b6%e9%97%b4%e8%ae%be%e5%ae%9a%e6%88%90%e4%b8%8b%e5%8d%884%e7%82%b940%e5%88%860%e7%a7%92" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>date -s 16:40:00&lt;/p>
&lt;h2 id="日期时间设置到-2007年6月28日-下午4点40分0秒">日期时间设置到 2007年6月28日 下午4点40分0秒&lt;a class="td-heading-self-link" href="#%e6%97%a5%e6%9c%9f%e6%97%b6%e9%97%b4%e8%ae%be%e7%bd%ae%e5%88%b0-2007%e5%b9%b46%e6%9c%8828%e6%97%a5-%e4%b8%8b%e5%8d%884%e7%82%b940%e5%88%860%e7%a7%92" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>date -s &amp;ldquo;2007-06-28 16:40:00&amp;rdquo;&lt;/p>
&lt;h2 id="同步bios时钟强制把系统时间写入cmos没试过">同步BIOS时钟，强制把系统时间写入CMOS，没试过&lt;a class="td-heading-self-link" href="#%e5%90%8c%e6%ad%a5bios%e6%97%b6%e9%92%9f%e5%bc%ba%e5%88%b6%e6%8a%8a%e7%b3%bb%e7%bb%9f%e6%97%b6%e9%97%b4%e5%86%99%e5%85%a5cmos%e6%b2%a1%e8%af%95%e8%bf%87" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>命令：#clock -w&lt;/p>
&lt;h2 id="本地时间写入硬件时间立即生效">本地时间写入硬件时间（立即生效）&lt;a class="td-heading-self-link" href="#%e6%9c%ac%e5%9c%b0%e6%97%b6%e9%97%b4%e5%86%99%e5%85%a5%e7%a1%ac%e4%bb%b6%e6%97%b6%e9%97%b4%e7%ab%8b%e5%8d%b3%e7%94%9f%e6%95%88" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>timedatectl set-local-rtc 1&lt;/p>
&lt;h2 id="同步时间服务器">同步时间服务器&lt;a class="td-heading-self-link" href="#%e5%90%8c%e6%ad%a5%e6%97%b6%e9%97%b4%e6%9c%8d%e5%8a%a1%e5%99%a8" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>ntpdate time.windows.com&lt;/p>
&lt;h2 id="ntp时间服务器">NTP时间服务器：&lt;a class="td-heading-self-link" href="#ntp%e6%97%b6%e9%97%b4%e6%9c%8d%e5%8a%a1%e5%99%a8" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>#最常见、熟知的就是，www.pool.ntp.org/zone/cn&lt;/p>
&lt;h1 id="cnntporgcn-中国">cn.ntp.org.cn #中国&lt;a class="td-heading-self-link" href="#cnntporgcn-%e4%b8%ad%e5%9b%bd" aria-label="Heading self-link">&lt;/a>&lt;/h1>
&lt;h1 id="eduntporgcn-中国教育网">edu.ntp.org.cn #中国教育网&lt;a class="td-heading-self-link" href="#eduntporgcn-%e4%b8%ad%e5%9b%bd%e6%95%99%e8%82%b2%e7%bd%91" aria-label="Heading self-link">&lt;/a>&lt;/h1>
&lt;h1 id="ntp1aliyuncom-阿里云">ntp1.aliyun.com #阿里云&lt;a class="td-heading-self-link" href="#ntp1aliyuncom-%e9%98%bf%e9%87%8c%e4%ba%91" aria-label="Heading self-link">&lt;/a>&lt;/h1>
&lt;h1 id="ntp2aliyuncom-阿里云">ntp2.aliyun.com #阿里云&lt;a class="td-heading-self-link" href="#ntp2aliyuncom-%e9%98%bf%e9%87%8c%e4%ba%91" aria-label="Heading self-link">&lt;/a>&lt;/h1>
&lt;h1 id="cnpoolntporg-最常用的国内ntp服务器">cn.pool.ntp.org #最常用的国内NTP服务器&lt;a class="td-heading-self-link" href="#cnpoolntporg-%e6%9c%80%e5%b8%b8%e7%94%a8%e7%9a%84%e5%9b%bd%e5%86%85ntp%e6%9c%8d%e5%8a%a1%e5%99%a8" aria-label="Heading self-link">&lt;/a>&lt;/h1>
&lt;h1 id="查看硬件时间好像centos有效ubuntu无效">查看硬件时间（好像centos有效，ubuntu无效）&lt;a class="td-heading-self-link" href="#%e6%9f%a5%e7%9c%8b%e7%a1%ac%e4%bb%b6%e6%97%b6%e9%97%b4%e5%a5%bd%e5%83%8fcentos%e6%9c%89%e6%95%88ubuntu%e6%97%a0%e6%95%88" aria-label="Heading self-link">&lt;/a>&lt;/h1>
&lt;p>hwclock &amp;ndash;show&lt;/p></description></item><item><title>网络管理</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E7%BD%91%E7%BB%9C%E7%AE%A1%E7%90%86/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E7%BD%91%E7%BB%9C%E7%AE%A1%E7%90%86/</guid><description>&lt;ul>
&lt;li>下载&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>wget -P path http://url
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>流量监控 nload&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 会监控所有网卡， 下一页 右方向、pageDown、回车 上一页 左方向、pageUp&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo nload 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 只监控单个网卡&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo nload 网卡名称
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>防火墙&lt;/li>
&lt;/ul>
&lt;ol>
&lt;li>关闭selinux&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo vi /etc/selinux/config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">SELINUX&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>disabled
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 重启&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2. iptables
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">```&lt;/span>shell
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看状态 ----- iptables -L
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>清空防火墙策略 ----- iptables -F
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>保存防火墙策略 ----- service iptables save
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>开放docker0网卡的所有访问？ ----- firewall-cmd --permanent --zone&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>trusted --change-interface&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>docker0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>开放端口 ----- firewall-cmd --zone&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>public --add-port&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>8888/tcp --permanent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>配置静态ip Ubuntu netplan&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># ip 地址示例 192.168.44.10/24&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">IPADDR&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>192.168.44.11/24
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 网关示例 192.168.44.2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">GATEWAY&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>192.168.11.2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 网卡名称&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">ETH&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>ens33
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 配置网络&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo tee /etc/netplan/00-installer-config.yaml &lt;span style="color:#4e9a06">&amp;lt;&amp;lt; EOF
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">network:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> ethernets:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> ${ETH}:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> addresses:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> - ${IPADDR}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> nameservers:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> addresses:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> - 114.114.114.114
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> - 8.8.8.8
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> search: []
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> routes:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> - to: default
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> via: ${GATEWAY}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> version: 2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> renderer: networkd
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo netplan apply
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>文本操作</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E6%96%87%E6%9C%AC%E6%93%8D%E4%BD%9C/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E6%96%87%E6%9C%AC%E6%93%8D%E4%BD%9C/</guid><description>&lt;blockquote>
&lt;p>sed、awk、grep，这也是linux命令过滤转换输出最精华的三条命令&lt;/p>&lt;/blockquote>
&lt;h2 id="三剑客之一-grepegrep">三剑客之一 grep/egrep&lt;a class="td-heading-self-link" href="#%e4%b8%89%e5%89%91%e5%ae%a2%e4%b9%8b%e4%b8%80-grepegrep" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;h3 id="语法-grep---cinvabc--word--filename">语法： grep [-cinvABC] &amp;lsquo;word&amp;rsquo; filename&lt;a class="td-heading-self-link" href="#%e8%af%ad%e6%b3%95-grep---cinvabc--word--filename" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;p>-c ：打印符合要求的行数&lt;/br>
-n ：在输出符合要求的行的同时连同行号一起输出 &lt;/br>
-v ：打印不符合要求的行(就相当于取反输出) &lt;/br>
-A ：后跟一个数字（有无空格都可以），例如 –A2则表示打印符合要求的行以及下面两行
-B ：后跟一个数字，例如 –B2 则表示打印符合要求的行以及上面两行&lt;br>
-C ：后跟一个数字，例如 –C2 则表示打印符合要求的行以及上下各两行 &lt;/br>
-r : 会把目录下面所有的文件全部遍历&lt;/br>
-w : 精确匹配&lt;/br>&lt;/p>
&lt;h3 id="例子介绍">例子介绍&lt;a class="td-heading-self-link" href="#%e4%be%8b%e5%ad%90%e4%bb%8b%e7%bb%8d" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 过滤出带有某个关键词的行并输出行号 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep -n &lt;span style="color:#4e9a06">&amp;#39;root&amp;#39;&lt;/span> 1.txt 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 过滤出不带有某个关键词的行并输出行号 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep -n -v &lt;span style="color:#4e9a06">&amp;#39;root&amp;#39;&lt;/span> 1.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 过滤出所有包含数字的行 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep &lt;span style="color:#4e9a06">&amp;#39;[0-9]&amp;#39;&lt;/span> 1.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 过滤出所有不包含数字的行 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep -v &lt;span style="color:#4e9a06">&amp;#39;[0-9]&amp;#39;&lt;/span> 1.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 去除所有以&amp;#39;#&amp;#39;开头的行 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep ----- -v &lt;span style="color:#4e9a06">&amp;#39;^#&amp;#39;&lt;/span> 1.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 去除所有空行和以&amp;#39;#&amp;#39;开头的行 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep -v &lt;span style="color:#4e9a06">&amp;#39;^$&amp;#39;&lt;/span> 1.txt&lt;span style="color:#000;font-weight:bold">|&lt;/span>grep -v &lt;span style="color:#4e9a06">&amp;#39;^#&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 过滤出以英文字母开头的行 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep &lt;span style="color:#4e9a06">&amp;#39;^[a-zA-Z]&amp;#39;&lt;/span> 1.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 过滤出以非数字开头的行 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep &lt;span style="color:#4e9a06">&amp;#39;^[^0-9]&amp;#39;&lt;/span> 1.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 过滤任意一个或多个字符 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># . 表示任意一个字符；&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># *表示零个或多个前面的字符 ；&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># .*表示零个或多个任意字符，空行也包含在内 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep &lt;span style="color:#4e9a06">&amp;#39;r.o&amp;#39;&lt;/span> 1.txt&lt;span style="color:#000;font-weight:bold">;&lt;/span> grep &lt;span style="color:#4e9a06">&amp;#39;r*t&amp;#39;&lt;/span> 1.txt&lt;span style="color:#000;font-weight:bold">;&lt;/span> grep &lt;span style="color:#4e9a06">&amp;#39;r.*t&amp;#39;&lt;/span> 1.txt 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 指定过滤字符次数 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep &lt;span style="color:#4e9a06">&amp;#39;o\{2\}&amp;#39;&lt;/span> 1.txt
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 过滤域名 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep -o &lt;span style="color:#4e9a06">&amp;#39;(http://|https://)(\w+\.){2}\w+&amp;#39;&lt;/span> 文件名
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 同时过滤单双引号 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep &lt;span style="color:#4e9a06">&amp;#34;\&amp;lt;src\&amp;gt;&amp;#34;&lt;/span> index.html &lt;span style="color:#000;font-weight:bold">|&lt;/span>grep -o &lt;span style="color:#4e9a06">&amp;#34;\&amp;lt;src=[&amp;#39;|\&amp;#34;]([^[:space:]])*[^[:space:]][&amp;#39;|\&amp;#34;]&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 精确匹配 ----- &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep filename -w root
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>grep filename &lt;span style="color:#4e9a06">\&amp;lt;&lt;/span>root&lt;span style="color:#4e9a06">\&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 文件内容如下
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> root
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> file1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> file2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> root2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> root3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="egrep">egrep&lt;a class="td-heading-self-link" href="#egrep" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;p>egrep工具 是grep工具的扩展&lt;/br>
egrep &amp;lsquo;o+&amp;rsquo; 1.txt 表示1个或1个以上前面字符&lt;/br>
egrep &amp;lsquo;o?&amp;rsquo; 1.txt 表示0个或者1个前面字符&lt;/br>
egrep &amp;lsquo;roo|body&amp;rsquo; 1.txt 匹配roo或者匹配body&lt;/br>
egrep &amp;lsquo;r(oo)|(at)o&amp;rsquo; 1.txt 用括号表示一个整体&lt;/br>
egrep &amp;lsquo;(oo)+&amp;rsquo; 1.txt 表示1个或者多个 &amp;lsquo;oo&amp;rsquo; &lt;/br>&lt;/p></description></item><item><title>文件和目录</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95/</guid><description>&lt;h2 id="查lscatmorelessheadtailrevtacfind-stat">查：（ls，cat，more，less，head，tail，rev，tac，find， stat）&lt;a class="td-heading-self-link" href="#%e6%9f%a5lscatmorelessheadtailrevtacfind-stat" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span> ls -a 查看目录中所有的文件，包括隐藏文件（以.开头的） 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ls -l 查看目录中文件的详细信息
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ls -t 以时间先后顺序显示结果
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ls -h 显示文件大小
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ls -d 查看目录信息
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ls -i 显示inode节点
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> cat 查看文件文件，只显示最后一页，例如cat /etc/passwd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> more 分屏显示，按空格键翻页，无法前翻
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> less 可上下滚动查看文件内容
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> head 默认只显示前10行
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> head -20 /etc/passwd 显示前20行
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tail 默认显示最后10行
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tail -20 /etc/passwd 显示最后20行
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rev 使文件内容左右颠倒
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tac 使文件内容前后颠倒
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ls -l /bin/bash
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-rwxr-xr-x &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> root wheel &lt;span style="color:#0000cf;font-weight:bold">430540&lt;/span> Dec &lt;span style="color:#0000cf;font-weight:bold">23&lt;/span> 18:27 /bin/bash
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>第一部分需要拆开 这里只讲第一个 短横线， 后面的九个字符查看权限部分 - rwx r-x r-x
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-: 文件类型
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>d: 目录
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>l：链接文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>c: 专门设备文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>b: 块设备文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>p: 先进先出
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>s: 套接字文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查找find
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查找文件或目录 ----- find 目标目录 -name 文件名
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>一次查找多个文件&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>添加-o参数&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> ----- find / -name 1.txt -o -name 2.txt -o -name 3.txt ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查找指定类型 ----- find /tmp/ -type d&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>f, b, c, d, l, s&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查找指定大小 ----- find /root/ -size 1M 注意文件要大写
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> +1M 显示大于1M
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> -1M 显示小于1M
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查找指定拥有者&lt;span style="color:#000;font-weight:bold">|&lt;/span>组 ----- find /root/ -user jingwang 查找jingwang的文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> find /root/ -group 运行维护 查找运行维护组的文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>访问或执行时间大于/小于n天的文件 ----- find 目标目录 -atime +n/-n
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>写入、更改inode属性（例如更改所有者、权限或者链接）时间大于/小于n天的文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ----- find 目标目录 -ctime +n/-n
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>写入时间大于/小于n天的文件 ----- find 目标目录 -mtime +n/-n
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/var/ 目录下，最近一天内变更的文件 ----- find /var/ -type f -mtime -1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/root/ 目录下一小时内变更的文件 改变了的是默认天time为分min&lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>还有 -maxdepth -mindepth -mmin -mount -mtime&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ----- find /root/ -type f -mmin -60 同样是m修改 改变了的是默认天time为分min
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>搜索以 &lt;span style="color:#4e9a06">&amp;#39;.rpm&amp;#39;&lt;/span> 结尾的文件，忽略光驱、捷盘等可移动设备 ----- find / -xdev -name &lt;span style="color:#4e9a06">\*&lt;/span>.rpm 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查找结果执行指令连用
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>find /path/ -name &lt;span style="color:#4e9a06">&amp;#34;param&amp;#34;&lt;/span> -exec rm -f &lt;span style="color:#ce5c00;font-weight:bold">{}&lt;/span> &lt;span style="color:#4e9a06">\；&lt;/span> 注意这里的是反斜杠
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>find /path/ -name &lt;span style="color:#4e9a06">&amp;#34;param&amp;#34;&lt;/span> -ok rm -f &lt;span style="color:#ce5c00;font-weight:bold">{}&lt;/span> &lt;span style="color:#4e9a06">\;&lt;/span> 更有好的交互方式
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>查看文件&lt;span style="color:#000;font-weight:bold">|&lt;/span>目录属性 ----- stat 目录&lt;span style="color:#000;font-weight:bold">|&lt;/span>文件
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 文件的 Access time也就是 ‘atime’ 是在读取文件或者执行文件时更改的。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 文件的 Modified time也就是 ‘mtime’ 是在写入文件时随文件内容的更改而更改的。
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 文件的 Create time也就是 ‘ctime’ 是在写入文件、更改所有者、权限或链接设置时随inode的内容更改而更改的。 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 因此，更改文件的内容即会更改mtime和ctime，但是文件的ctime可能会在 mtime 未发生任何变化时更改，
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 例如，更改了文件的权限，但是文件内容没有变化。
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="增mkdir-touchvim">增：（mkdir ，touch，vim）&lt;a class="td-heading-self-link" href="#%e5%a2%9emkdir-touchvim" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code> mkdir aminglinux 创建一个aminglinux目录
 mkdir a b c 依次在当前目录下创建a b c 同级目录
 mkdir -p aa/bb/cc 递推创建aa bb cc目录，aa目录包含bb，bb目录包含cc
 touch a.txt 创建一个a.txt文件
&lt;/code>&lt;/pre>&lt;h2 id="删cp-mvrm">删：（cp， mv，rm）&lt;a class="td-heading-self-link" href="#%e5%88%a0cp-mvrm" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code> cp a b 将文件a复制一份成b
 cp -r 复制目录，默认不加-r只能复制文件
 mv 移动或改名
 rm 删除文件
 rm -r 删除目录，默认不加-r只能删除文件
 rm -f 强制删除，不提示
&lt;/code>&lt;/pre>&lt;h2 id="改查看权限部分chown">改（查看权限部分）：（chown）&lt;a class="td-heading-self-link" href="#%e6%94%b9%e6%9f%a5%e7%9c%8b%e6%9d%83%e9%99%90%e9%83%a8%e5%88%86chown" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>语法： chown [ -R ] 账户名 文件名 chown [ -R ] 账户名：组名 文件名&lt;/p></description></item><item><title>压缩解压缩</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E5%8E%8B%E7%BC%A9%E8%A7%A3%E5%8E%8B%E7%BC%A9/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E5%8E%8B%E7%BC%A9%E8%A7%A3%E5%8E%8B%E7%BC%A9/</guid><description>&lt;p>压缩和解压&lt;/p>
&lt;h2 id="gz">.gz&lt;a class="td-heading-self-link" href="#gz" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>压缩：gzip FileName&lt;/p>
&lt;p>解压缩：gunzip FileName.gz&lt;/p>
&lt;h2 id="bz2">.bz2&lt;a class="td-heading-self-link" href="#bz2" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>压缩：bzip2 FileName&lt;/p>
&lt;p>解压缩：bunzip2 FileName.bz2&lt;/p>
&lt;p>.zip&lt;/p>
&lt;p>压缩：zip file.zip FileName | 针对目录 zip -r tmp.zip /tmp&lt;/p>
&lt;p>解压缩： unzip FileName.zip&lt;/p>
&lt;h2 id="tar">tar&lt;a class="td-heading-self-link" href="#tar" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>压缩： tar -cvf lei.tar passwd fstab shadow&lt;/p>
&lt;p>解包： tar -xvf lei.tar&lt;/p>
&lt;p>解压到指定目录： tar -xvf lei.tar -C /tmp&lt;/p>
&lt;p>查看打包文件中的内容 tar tvf lei.tar&lt;/p>
&lt;p>tar已经集成了gzip bzip2 的压缩格式&lt;/p>
&lt;p>打包 xxx.tar.gz 的命令 tar -zcvf xxx.tar.gz /etc/init.d/&lt;/p>
&lt;p>打包 xxx.tar.bz2 的命令 tar -jcvf xxx.tar.bz2 /etc/init.d/&lt;/p>
&lt;p>但是也可以直接 简单的用 程序会自己判断后缀使用相应的方式&lt;/p></description></item><item><title>用户管理</title><link>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/linux/linux%E9%80%9A%E7%94%A8/%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86/</guid><description>&lt;h2 id="用户和用户组分类">用户和用户组分类&lt;a class="td-heading-self-link" href="#%e7%94%a8%e6%88%b7%e5%92%8c%e7%94%a8%e6%88%b7%e7%bb%84%e5%88%86%e7%b1%bb" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>用户分为三种以UID来区分&lt;/p>
&lt;pre>&lt;code>超级用户 UID = 0 在系统中拥有至高无上的权限.

系统用户 UID 1-499 bin,ftp,mail等,不具备登录系统的权利,却是系统运行不可缺少的.

普通用户 UID 500以上 管理员建立的用户.密码和权限都由管理员制定.

超级组 GID = 0

系统组 GID = 1-499

普通组 GID = 500以上
&lt;/code>&lt;/pre>
&lt;h2 id="用户相关文件文件位置">用户相关文件文件位置&lt;a class="td-heading-self-link" href="#%e7%94%a8%e6%88%b7%e7%9b%b8%e5%85%b3%e6%96%87%e4%bb%b6%e6%96%87%e4%bb%b6%e4%bd%8d%e7%bd%ae" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;ol>
&lt;li>用户信息 /etc/passwd&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>早起的linux 在密码列会存储一个加密后的密码，但是现在只是一个标记列了，实际的密码不放在这里了&lt;/p>&lt;/blockquote>
&lt;p>用户名 密码控位键 用户UID 组GID 用户描述信息 用户家目录 用户默认shell
root :x :0 :0 :root :/root :/bin/bash
man :x :6 :12 :man :/var/cache/man:/usr/sbin/nologin
czhn :x :1000 :1000 :czhn :/home/czhn :/bin/bash&lt;/p>
&lt;ol start="2">
&lt;li>
&lt;p>用户组信息 /etc/group
用户名 密码密码空位 组id 附属组（加入的其他组）
koala :x :1000 :
infra :x :1002 :prometheus,grafana,loki,pigstyuser,dba&lt;/p></description></item></channel></rss>