目录
一、Linux系统目录结构及启动过程
二、文件处理命令
1.ls命令 – 显示指定工作目录下的内容及属性信息
2.mkdir - 目录创建 (make directories)
3.rmdir - 删除空目录(不常用,经常用rm命令)
4.cp - 文件复制命令(copy)
5.mv – 移动或改名文件
6.rm – 移除文件或目录
7.touch – 创建文件
8.cat – 在终端设备上显示文件内容
9.more – 显示文本文件内容
10.less – 分页显示工具
11.tail – 查看文件尾部内容(经常用tail -f 查看实时日志输出)
12.ln - 链接命令
三、权限管理命令
1.chmod – 改变文件或目录权限
2.chown– 改变文件或目录用户和用户组
3.chgrp – 更改文件用户组
四、文件搜索命令
1.find - 查找和搜索文件
2.locate – 快速查找文件或目录
3.grep - 强大的文本搜索工具
五、压缩解压命令
1.gzip – 压缩和解压文件
2.tar – 打包和备份的归档工具
六、网络相关命令
1.netstat – 显示网络状态
七、软件包管理器
1.rpm – RPM软件包管理器
2.yum命令 – 基于RPM的软件包在线管理
八、shell编程基础
1.dos2unix命令 – 将DOS格式的文本文件转换成UNIX格式
2.命令常用技巧及快捷键
3.输出重定向
4.输入重定向
5.多命令顺序执行
6.通配符
7.特殊符号
8.变量
九、shell编程
1.cut命令 – 字符串截取命令(根据列分割文件显示)
2.printf 命令 – shell 输出 (主要用于在awk中输出)
3.awk命令 – 文本和数据进行处理的编程语言
4.sed 处理编辑文本文件 (针对行 字符追加,替换等操作)
5.字符处理命令
6.条件判断语句
7.if语句
8.case 语句
9.for循环语句
10.while 循环(类似java的while循环)
11.until循环
十、服务管理
1.服务分类
2.rpm独立服务管理
3.独立服务的启动
4.独立服务的自启动
5.源码包安装服务的管理
6.用systemctl管理服务(centos7以后)
7.防火墙常用命令
十一、进程管理
1.ps命令 – 显示进程状态
2.top命令 – 查看服务器的健康状况,实时显示进程动态(类似windows的任务管理器)
3.pstree命令 – 查看进程树
4.kill命令 – 杀死进程
5.工作管理
6.定时任务
十二、启动管理
以下是对这些目录的解释: /bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。 /dev : dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。 /etc: etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。 /home: 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。 /lib: lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。 /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。 /media: linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。 /mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。 /opt: opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 /proc: proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all /root: 该目录为系统管理员,也称作超级权限者的用户主目录。 /sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。 /selinux: 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。 /srv: 该目录存放一些服务启动之后需要提取的数据。 /sys: 这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。 sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。 该文件系统是内核设备树的一个直观反映。 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。 /tmp: tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。 /usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。 /usr/bin: 系统用户使用的应用程序。 /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。 /usr/src: 内核源代码默认的放置目录。 /var: var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 /run: 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
Linux(centos7)启动过程(参考CentOS7启动流程_Yonself的博客-CSDN博客_centos7 启动流程)
ls命令 – 显示指定工作目录下的内容及属性信息
语法格式: ls [选项] [文件] eg: ls -la /etc
常用参数:
-a | 显示所有文件及目录 (包括以“.”开头的隐藏文件) |
---|---|
-l | 使用长格式列出文件及目录信息 |
-r | 将文件以相反次序显示(默认依英文字母次序) |
-t | 根据最后的修改时间排序 |
-A | 同 -a ,但不列出 “.” (当前目录) 及 “..” (父目录) |
-S | 根据文件大小排序 |
-R | 递归列出所有子目录 |
-h | 以人性话的格式展示,大小转为kb,mb等 |
-d | 显示目录自身的信息,而不是显示其目录中文件内容 |
语法格式:mkdir [选项] [目录名] eg:mkdir -p /folderName
常用参数:
-p | 递归创建多级目录 eg: mkdir -p /tmp/book/newfolder |
---|---|
-m | 建立目录的同时设置目录的权限 eg: mkdir -m 777 cc |
-z | 设置安全上下文 |
-v | 显示目录的创建过程 eg: mkdir -v /tmp/newfolder |
语法格式:rmdir [选项] [目录名] eg:rmdir /tmp/dir
语法格式:cp [参数] [源文件] [目标文件] eg: cp -p /tmp/dir/1.txt /tmp/dir1/2.txt
常用参数:
-f | 若目标文件已存在,则会直接覆盖原文件 |
---|---|
-i | 若目标文件已存在,则会询问是否覆盖 |
-p | 保留源文件或目录的所有属性 |
-r | 递归复制文件和目录 |
-d | 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录 |
-l | 对源文件建立硬连接,而非复制文件 |
-s | 对源文件建立符号连接,而非复制文件 |
-b | 覆盖已存在的文件目标前将目标文件备份 |
-v | 详细显示cp命令执行的操作过程 |
-a | 等价于“dpr”选项 |
语法格式:mv [选项] [源文件] [目标文件] eg: mv - i /tmp/dir1/t1.txt /tmp/dir2/t2.txt
常用参数:
-i | 若存在同名文件,则向用户询问是否覆盖 |
---|---|
-f | 覆盖已有文件时,不进行任何提示 |
-b | 当文件存在时,覆盖前为其创建一个备份 |
-u | 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作 |
语法格式:rm [参数] [文件] eg: rm -f /tmp/t1.txt
常用参数:
-f | 忽略不存在的文件,不会出现警告信息 |
---|---|
-i | 删除前会询问用户是否操作 |
-r/R | 递归删除 |
-v | 显示指令的详细执行过程 |
语法格式:touch [参数] [文件] eg: touch file.txt 批量创建:touch file{1..5}.txt (同时创建file1.txt,file2.txt ...)
常用参数:
-a | 改变档案的读取时间记录 |
---|---|
-m | 改变档案的修改时间记录 |
-r | 使用参考档的时间记录,与 --file 的效果一样 |
-c | 不创建新文件 |
-d | 设定时间与日期,可以使用各种不同的格式 |
-t | 设定档案的时间记录,格式与 date 命令相同 |
语法格式:cat [参数] [文件] eg: cat -n file.txt
常用参数:
-n | 显示行数(空行也编号) |
---|---|
-s | 显示行数(多个空行算一个编号) |
-b | 显示行数(空行不编号) |
-E | 每行结束处显示$符号 |
-T | 将TAB字符显示为 ^I符号 |
-v | 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外 |
-e | 等价于”-vE”组合 |
-t | 等价于”-vT”组合 |
-A | 等价于 -vET组合 |
类似命令tac,倒着展示文件内容
语法格式:more [参数] [文件]
常用参数:
-num | 指定每屏显示的行数 |
---|---|
-l | more在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性 |
-f | 计算实际的行数,而非自动换行的行数 |
-p | 先清除屏幕再显示文本文件的剩余内容 |
-c | 与-p相似,不滚屏,先显示内容再清除旧内容 |
-s | 多个空行压缩成一行显示 |
-u | 禁止下划线 |
+/pattern | 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示 |
+num | 从第 num 行开始显示 |
命令内部操作:
Space键:显示文本的下一屏内容
Enter键:向下n行,需要定义,默认为1行
斜线符\:接着输入一个模式,可以在文本中寻找下一个相匹配的模式
H键:显示帮助屏
B键:显示上一屏内容
Q键:退出more命令
Ctrl+F、空格键:向下滚动一屏
Ctrl+B:返回上一屏
=: 输出当前的行号
:f:输出文件名和当前的行号
V:调用vi编辑器
!:调用Shell,并执行命令
less的作用与more十分相似,不同点为less命令允许用户向前或向后浏览文件,而more命令只能向前浏览 。
语法格式:less [参数] [文件]
常用参数:
-b | 置缓冲区的大小 |
---|---|
-e | 当文件显示结束后,自动离开 |
-f | 强迫打开特殊文件,例如外围设备代号、目录和二进制文件 |
-g | 只标志最后搜索的关键词 |
-i | 忽略搜索时的大小写 |
-m | 显示类似more命令的百分比 |
-N | 显示每行的行号 |
-o | 将less 输出的内容在指定文件中保存起来 |
-Q | 不使用警告音 |
-s | 显示连续空行为一行 |
-S | 在单行显示较长的内容,而不换行显示 |
-x | 将TAB字符显示为指定个数的空格字符 |
命令内部操作:
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
语法格式:tail [参数]
常用参数:
--retry | 即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用 |
---|---|
-c |
输出文件尾部的N(N为整数)个字节内容 |
-f |
--follow |
-F | 与选项“-follow=name”和“--retry”连用时功能相同 |
-n |
输出文件的尾部N(N位数字)行内容 |
--pid=<进程号> | 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令 |
ln命令,英文全称是“link”,即链接的意思,它的功能是为某一个文件在另外一个位置建立一个同步的链接。 一种是hard link,又称为硬链接;另一种是symbolic link,又称为符号链接或者软链接。
通俗一点理解,可以把硬链接当成源文件的副本,他和源文件一样的大小,但是事实上却不占任何空间。符号链接可以理解为类似windows一样的快捷方式。
符号链接 :
符号链接以路径的形式存在,类似于Windows操作系统中的快捷方式。
符号链接可以跨文件系统 ,硬链接不可以。
符号链接可以对一个不存在的文件名进行链接,硬链接不可以。
符号链接可以对目录进行链接,硬链接不可以。
硬链接:
1.硬链接以文件副本的形式存在,但不占用实际空间。
硬链接不允许给目录创建硬链接。
3.硬链接只有在同一个文件系统中才能创建。
语法格式: ln [参数] [源文件或目录] [目标文件或目录]
常用参数:
-b | 为每个已存在的目标文件创建备份文件 |
---|---|
-d | 此选项允许“root”用户建立目录的硬链接 |
-f | 强制创建链接,即使目标文件已经存在 |
-n | 把指向目录的符号链接视为一个普通文件 |
-i | 交互模式,若目标文件已经存在,则提示用户确认进行覆盖 |
-s | 对源文件建立符号链接,而非硬链接 |
-v | 详细信息模式,输出指令的详细执行过程 |
语法格式: chmod[选项] [参数] [文件] eg:chmod - R 777 /tmp/file.txt
常用参数:
-c | 若该文件权限确实已经更改,才显示其更改动作 |
---|---|
-f | 若该文件权限无法被更改也不显示错误讯息 |
-v | 显示权限变更的详细资料 |
-R | 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更) |
语法格式:chown [参数] [文件] eg:chown -R linuxcool:linuxcoolgroup * (将当前目录下所有文件的拥有者都改为 linuxcool,用户组改为 linuxcoolgroup)
常用参数:
-R | 递归处理,对目前目录下的所有文件与子目录进行相同的拥有者变更 |
---|---|
-c | 若该文件拥有者确实已经更改,才显示其更改动作 |
-f | 若该文件拥有者无法被更改也不要显示错误讯息 |
-h | 只对于连结(link)进行变更,而非该 link 真正指向的文件 |
-v | 显示拥有者变更的详细资料 |
语法格式: chgrp [参数] [目录]
常用参数:
-c | 效果类似”-v”参数,但仅回报更改的部分 |
---|---|
-f | 不显示错误信息 |
-h | 对符号连接的文件作修改,而不更动其他任何相关文件 |
-R | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-v | 显示指令执行过程 |
--reference | 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同 |
语法格式:find [搜索范围] [匹配条件] eg:find /etc -name '*.conf'
常用参数:
-name | 按名称查找 |
---|---|
-size | 按大小查找 |
-user | 按属性查找 |
-type | 按类型查找 |
-iname | 忽略大小写 |
locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,值得注意的是:版本不同,会有所不同。有的版本位置是 /var/lib/mlocate/mlocatedb ,还有的是/var/lib/slocate/slocate.db ,这个数据库中含有本地所有文件信息。
Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
语法格式:locate [文件名]
注:若要查找最新变动文件,再查找前应先用 updatedb名称更新数据库
语法格式: grep [参数] eg: grep -v '^#' guokk.txt 显示guokk.txt文件中不是#开头的文本
常用参数:
-i | 搜索时,忽略大小写 |
---|---|
-c | 只输出匹配行的数量 |
-l | 只列出符合匹配的文件名,不列出具体的匹配行 |
-n | 列出所有的匹配行,显示行号 |
-h | 查询多文件时不显示文件名 |
-s | 不显示不存在、没有匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行 |
-w | 匹配整词 |
-x | 匹配整行 |
-r | 递归搜索 |
-q | 禁止输出任何结果,已退出状态表示搜索是否成功 |
-b | 打印匹配行距文件头部的偏移量,以字节为单位 |
-o | 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位 |
注:该命令只能压缩文件,不可压缩目录;
语法格式:gzip [参数] eg:gzip file.txt
常用参数:
-a | 使用ASCII文字模式 |
---|---|
-d | 解压缩压缩文件 (也可用命令gunzip来解压文件) |
-f | 强行压缩文件 |
-l | 列出压缩文件的相关信息 |
-c | 把压缩后的文件输出到标准输出设备,不去更动原始文件 |
-r | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-q | 不显示警告信息 |
语法格式:tar [参数] [文件或目录] eg: 压缩tar -zcvf filename.tar.gz file.txt 解压缩:tar -zxvf filename
tar 是打包命令,可以与其他压缩命令一起使用,当与bzip2一起用时:
压缩tar -jcvf filename.tar.bz2 file.txt 解压缩:tar -jxvf filename
常用参数:
-A | 新增文件到以存在的备份文件 |
---|---|
-B | 设置区块大小 |
-c | 压缩文件 |
-C <目录> | 切换工作目录,先进入指定目录再执行压缩/解压缩操作,可用于仅压缩特定目录里的内容或解压缩到特定目录 |
-d | 记录文件的差别 |
-x | 从归档文件中提取文件 |
-t | 列出备份文件的内容 |
-z | 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz |
-Z | 通过compress指令处理备份文件 |
-f<备份文件> | 指定备份文件 |
-v | 显示指令执行过程 |
-r | 添加文件到已经压缩的文件 |
-u | 添加改变了和现有的文件到已经存在的压缩文件 |
-j | 通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2 |
-v | 显示操作过程 |
-l | 文件系统边界设置 |
-k | 保留原有文件不覆盖 |
-m | 保留文件不被覆盖 |
-w | 确认压缩文件的正确性 |
-p | 保留原来的文件权限与属性 |
-P | 使用文件名的绝对路径,不移除文件名称前的“/”号 |
语法格式:netstat [参数] eg: netstat -tlun (查询开了那些端口)
常用参数:
-a | 显示所有连线中的Socket |
---|---|
-p | 显示正在使用Socket的程序识别码和程序名称 |
-u | 显示UDP传输协议的连线状况 |
-i | 显示网络界面信息表单 |
-n | 直接使用IP地址,不通过域名服务器 |
-t | 或--tcp:仅显示tcp相关选项 |
-l | 或--listening:仅列出有在 Listen (监听) 的服務状态 |
rpm命令是Red-Hat Package Manager(RPM软件包管理器)的缩写, 该命令用于管理Linux 下软件包的软件。在 Linux 操作系统下,几乎所有的软件均可以通过RPM 进行安装、卸载及管理等操作。
概括的说,rpm命令包含了五种基本功能:安装、卸载、升级、查询和验证。
语法格式:rpm [参数] [软件包]
eg:安装软件 rpm -ivh packge.rpm 卸载:rpm -e package.rpm 升级:rpm -U file.rpm
常用参数:
-a | 查询所有的软件包 |
---|---|
-b或-t | 设置包装套件的完成阶段,并指定套件档的文件名称; |
-c | 只列出组态配置文件,本参数需配合”-l”参数使用 |
-d | 只列出文本文件,本参数需配合”-l”参数使用 |
-e或--erase | 卸载软件包 |
-f | 查询文件或命令属于哪个软件包 |
-h或--hash | 安装软件包时列出标记 |
-i | 显示软件包的相关信息 |
--install | 安装软件包 |
-l | 显示软件包的文件列表 |
-p | 查询指定的rpm软件包 |
-q | 查询软件包 |
-R | 显示软件包的依赖关系 |
-s | 显示文件状态,本参数需配合”-l”参数使用 |
-U或--upgrade | 升级软件包 |
-v | 显示命令执行过程 |
-vv | 详细显示指令执行过程 |
yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更新与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
yum源配置:系统默认配置里郁闷源,但是外网速度慢,可根据需要配置国内镜像yum源。配置文件路径为 /etc/yum.repos.d/CentOS-Base.repo
[base] #容器名称 name=CentOS-$releasever - Base #容器说明:随便写 mirrorlist=http://mirrorlist.centos.org/ #镜像站点 release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ #yum源服务地址 #rpm 数字证书是否生效 1为生效,0不生效 enabled=1 # 此容器是否生效,1为生效,0不生效 gpgcheck=1 # 数字证书文件保存位置 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
注意:使用yum -remove命令来卸载软件包会将该软件的所有依赖包都删除,如果删除的依赖包还有别的软件或者系统本身在使用。会导致系统奔溃。所以,不提倡使用yum来卸载软件;
语法格式:yum [参数]
常用参数:
-h | 显示帮助信息 |
---|---|
-y | 对所有的提问都回答“yes” |
-c | 指定配置文件 |
-q | 安静模式 |
-v | 详细模式 |
-t | 检查外部错误 |
-d | 设置调试等级(0-10) |
-e | 设置错误等级(0-10) |
-R | 设置yum处理一个命令的最大等待时间 |
-C | 完全从缓存中运行,而不去下载或者更新任何头文件 |
install | 安装rpm软件包 |
update | 更新rpm软件包 |
check-update | 检查是否有可用的更新rpm软件包 |
remove | 删除指定的rpm软件包 |
list | 显示软件包的信息 |
search | 检查软件包的信息 |
info | 显示指定的rpm软件包的描述信息和概要信息 |
clean | 清理yum过期的缓存 |
shell | 进入yum的shell提示符 |
resolvedep | 显示rpm软件包的依赖关系 |
localinstall | 安装本地的rpm软件包 |
localupdate | 显示本地rpm软件包进行更新 |
deplist | 显示rpm软件包的所有依赖关系 |
如命令不存在可用yum安装 yum install -y dos2unix
dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。
DOS格式的文本文件在Linux下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件。如果是个shell脚本,而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。
语法格式:dos2unix [参数] [文件]
常用参数:
-k | 保持输出文件的日期不变 |
---|---|
-q | 安静模式,不提示任何警告信息 |
-V | 查看版本 |
-c | 转换模式:ASCII 7bit ISO Mac |
-o | 写入到源文件 |
-n | 写入到新文件 |
!! | 执行上一条命令 |
---|---|
!n | 重复执行第n条历史命令 |
!字符串 | 重复执行最后一条以该字符串开头的命令 |
命令符号格式 | 作用 |
---|---|
命令 < 文件 | 将指定文件作为命令的输入设备 |
命令 << 分界符 | 表示从标准输入设备(键盘)中读入,直到遇到分界符才停止(读入的数据不包括分界符),这里的分界符其实就是自定义的字符串 |
命令 < 文件 1 > 文件 2 | 将文件 1 作为命令的输入设备,该命令的执行结果输出到文件 2 中。 |
多命令执行符 | 格式 | 作 用 |
---|---|---|
; | 命令1 ;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1 && 命令2 | 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| | 命令1 || 命令2 | 逻辑或 当命令1 执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 |
通配符 | 作 用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符。例如:[abc]代表一定匹配 一个字符,或者是a,或者是b,或者是c。 |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z] 代表匹配一个小写字母。 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如:[ ^0- 9 ]代表匹配一个不是数字的字符; |
作用 | 符号 |
---|---|
' ' | 单引号。在单引号中所有的特殊符号,如“$”和“`”(反引号)都 没有特殊含义。 |
" " | 双引号。在双引号中特殊符号都没有特殊含义,但是“$” 、 “`” 和“\”是例外,拥有“调用变量的值” 、 “引用命令”和“转义 符”的特殊含义。 |
`` | 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。 和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。 |
$() | 和反引号作用一样,用来引用系统命令。 |
# | 在Shell脚本中,#开头的行代表注释。 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name 的方式得到变量的值。 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。 如$将输出“$”符号,而不当做是变量引用。 |
用户自定义变量
环境变量:这种变量中主要保存的是和系统操 作环境相关的数据。
位置参数变量:这种变量主要是用来向脚本当 中传递参数或数据的,变量名不能自定义,变 量作用是固定的。
预定义变量:是Bash中已经定义好的变量,变 量名不能自定义,变量作用也是固定的。
8.1 用户自定义变量
变量名称可以由字母、数字和下划线组成 ,但是不能以数字开头。如果变量名是 “2name”则是错误的。
在Bash中,变量的默认类型都是字符串型 ,如果要进行数值运算,则必修指定变量 类型为数值型。
变量用等号连接值,等号左右两侧不能有 空格。 变量的值如果有空格,需要使用单引号或 双引号包括。
在变量的值中,可以使用“\”转义符。
如果需要增加变量的值,那么可以进行变 量值的叠加。不过变量需要用双引号包含 “$变量名”或用${变量名}包含。
如果是把命令的结果作为变量值赋予变量 ,则需要使用反引号或$()包含命令。
环境变量名建议大写,便于区分。
常用命令:
变量定义 [root@localhost ~]# name="123"
变量叠加 [root@localhost ~]# aa=123 ; [root@localhost ~]# aa="$aa"456 ; [root@localhost ~]# aa=${aa}789
变量调用 [root@localhost ~]# echo $name
变量查看 [root@localhost ~]# set
变量删除 [root@localhost ~]# unset name
8.2.环境变量
用户自定义变量只在当前的Shell中生效, 而环境变量会在当前Shell和这个Shell的所 有子Shell当中生效。如果把环境变量写入 相应的配置文件,那么这个环境 变量就会 在所有的Shell中生效
常用命令:
声明:export name=abc 也可以用【export 变量名】将普通变量声明为环境变量
查询:env
删除:unset name
PS1:定义系统提示符的变量 (即命令前的这个部分:[root@localhost ~]#)
\d:显示日期,格式为“星期 月 日”
\h:显示简写主机名。如默认主机名“localhost”
\t:显示24小时制时间,格式为“HH:MM:SS”
\T:显示12小时制时间,格式为“HH:MM:SS”
\A:显示24小时制时间,格式为“HH:MM”
\u:显示当前用户名 \w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\ #:执行的第几个命令
$:提示符。如果是root用户会显示提示符为“#”,如果是普通用户 会显示提示符为“$”
8.3.位置参数变量
这种变量主要是用来向脚本当 中传递参数或数据的,变量名不能自定义,变 量作用是固定的。
位置参数变量 | 作 用 |
---|---|
$n | n为数字,$0代表命令本身,$1-$9代表第一 到第九个参数,十以上的参数需要用大括号 包含,如${10}. |
$* | 这个变量代表命令行中所有的参数,$*把所 有的参数看成一个整体 |
$@ | $@ 这个变量也代表命令行中所有的参数,不过 $@把每个参数区分对待 |
$# | 这个变量代表命令行中所有参数的个数 |
#将输入的两个参数相加 #!/bin/bash num1=$1 num2=$2 num3=$(($num1+$num2)) echo $num3
8.4.预定义变量
是Bash中已经定义好的变量,变 量名不能自定义,变量作用也是固定的。
预定义变量 | 作 用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变 量的值为0,证明上一个命令正确执行;如果 这个变量的值为非0(具体是哪个数,由命令 自己来决定),则证明上一个命令执行不正确 了 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
接收键盘输入
Linux read命令用于从标准输入读取数值。read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。
语法格式:read [选项] [变量名]
常用参数:
-a | 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符 |
---|---|
-- d | 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志 |
-- p | 后面跟提示信息,即在输入前打印提示信息 |
-- e | 在输入的时候可以使用命令补全功能 |
-- n | 后跟一个数字,定义输入文本的长度 |
-- r | 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了 |
-- s | 安静模式,在输入字符时不再屏幕上显示 |
-- t | 后面跟秒数,定义输入字符的等待时间 |
-- u | 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的 |
#求两个数之和 #!/bin/bash read -t 30 -p 'input first number ' num1 read -t 30 -p 'input second number ' num2 echo "sum is $(($num1+$num2))"
8.5.数值运算
Linux中定义的变量默认都是字符串类型的,如果要进行数值运算,则需要用专门的格式来进行运算
1.declare命令 – 声明shell变量
语法格式: declare [选项] [参数]
常用参数:
-a | 声明数组变量 |
---|---|
-f | 仅显示函数 |
-F | 不显示函数定义 |
-i | 先计算表达式,把结果赋给所声明变量 |
-p | 显示给定变量的定义的方法和值,当使用此选项时,其他的选项将被忽略 |
-r | 定义只读变量 |
-x | 将指定的Shell变量转换成环境变量 |
用declare -i 可以用来计算数值。eg:declare -i c=$a+$b
2.expr或let数值运算工具 : dd=$(expr $aa + $bb)
*注意:dd的值是aa和bb的和。注意“+”号左右两 侧必须有空格
3.“$((运算式))”或“$[运算式]” :eg:$(($a+$b)) 或者$[$a+$b]
习惯上经常使用方式三来进行数值运算;
8.6.变量测试与内容替换
当我们判断系统中是否存在一个变量,并且针对存在与不存在分别该新变量或者原变量赋值时,可用以下表达式
8.7.环境变量配置文件
1.source命令:
source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是个点符号,(从Bourne Shell而来)是source的另一名称。 source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。source返回文件最后一个命令的返回值,如果文件不能读取则会失败。
eg:source /etc/bash_profile 可使改变后的profile文件立即生效
2.配置文件
/etc/profile , 对所有用户生效
/etc/profile.d/*.sh ,对所有用户生效
~/.bash_profile ,当前用户专用
~/.bashrc ,当前用户专用
/etc/bashrc, 不登陆用户的环境变量;
配置文件的加载过程,后面加载的文件会覆盖前面的文件;
若不指定file参数,该命令将读取标准输入。 必须指定 -b、-c 或 -f 标志之一。
语法格式:cut [参数] [文件] eg:cut -f 2 student.txt 显示student.txt文件的第2列
注意:如果每列之间的分隔符是不确定的 (比如任意空格,就不能使用cut命令)
常用参数:
-b | 以字节为单位进行分割 ,仅显示行中指定直接范围的内容 |
---|---|
-c | 以字符为单位进行分割 , 仅显示行中指定范围的字符 |
-d | 自定义分隔符,默认为制表符”TAB” |
-f | 显示指定字段的内容 , 与-d一起使用 |
-n | 取消分割多字节字符 |
--complement | 补足被选择的字节、字符或字段 |
--out-delimiter | 指定输出内容是的字段分割符 |
printf 使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认printf不会像 echo 自动添加换行符,我们可以手动添加 \n。
语法格式: printf [格式控制字符串] [参数]
常用参数:
\a | 警告字符,通常为ASCII的BEL字符 |
---|---|
\n | 换行 |
\r | 回车 |
\t | 制表符 |
\0ddd | 表示1到3位的八进制值字符 |
\ddd | 表示1到3位数八进制值的字符。仅在格式字符串中有效 |
输出类型:
%ns: 输出字符串。n是数字指代输出几个字符,
%ni: 输出整数。n是数字指代输出几个数字
%m.nf: 输出浮点数。m和n是数字,指代输出的整数 位数和小数位数。如%8.2f代表共输出8位数, 其中2位是小数,6位是整数。
awk主要用于弥补cut命令 无法正确格式化分隔符不确定的文本
awk ‘条件1{动作1} 条件2{动作2}…’ 文件名
条件(Pattern):
一般使用关系表达式作为条件
x > 10 判断变量 x是否大于10
x>=10 大于等于
x<=10 小于等于
动作(Action): 格式化输出 流程控制语句
eg:awk '{printf $2"\t"$4"\n"}' student.txt 输出student.txt文件中的第二列和第四列;
eg:df -h |awk '{printf $2"\t"$4"\n"}' 输出文件信息的第二列和第四列(cut命令就无法完成此操作)
FS:指定分隔符 eg: cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
BEGIN:指定在正式读取数据前做的事情;
END:指定在数据读取结束后做的事情;
关系运算:cat student.txt | grep -v Name | awk '$6 >= 87 {printf $2 "\n" }' 输出第六列大于87的数据的第二列;
sed [选项] ‘[动作]’ 文件名
选项:
-n: 一般sed命令会把所有数据都输出到屏幕 , 如果加入此选择,则只会把经过sed命令处 理的行输出到屏幕。
-e: 允许对输入数据应用多条sed命令编辑
-i: 用sed的修改结果直接修改读取数据的文件, 而不是由屏幕输出
动作:
a \: 追加,在当前行后添加一行或多行。添加多行时,除最后 一行 外,每行末尾需要用“\”代表数据未完结。
eg:
sed '2a xixi' test.txt #在test.txt文件第2行后追加一行xixi sed '2a xixi \ haha' test.txt #在test.txt文件第2行后追加两行xixi、hah
c \: 行替换,用c后面的字符串替换原数据行,替换多行时,除最 后一行外,每行末尾需用“\”代表数据未完结。
sed '2c haha' test.txt #将test.txt 的第二行替换为haha
i \: 插入,在当期行前插入一行或多行。插入多行时,除最后 一行 外,每行末尾需要用“\”代表数据未完结。
sed '2i xixi' test.txt #在test.txt文件第2行前插入一行xi sed '2i xixi \ haha' test.txt #在test.txt文件第2行后插入一行xixi、hah
d: 删除,删除指定的行。
sed '2,3d' test.txt #删除test.txt文件的第二行和第三行
p: 打印,输出指定的行。
sed -n '2,3p' test.txt #打印第2、3行
s: 字串替换,用一个字符串替换另外一个字符串。格式为“行范 围s/旧字串/新字串/g”(和vim中的替换格式类似)。
sed '2s/xixi/haha/g' test.txt #将文件第二行的xixi替换为haha,如果不写行号则全文替换 sed 's/xixi/haha/g' test.txt
1.sort– 排序文件并输出
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。
语法格式:sort [参数] [文件]
常用参数:
-b | 忽略每行前面开始出的空格字符 |
---|---|
-c | 检查文件是否已经按照顺序排序 |
-d | 排序时,处理英文字母、数字及空格字符外,忽略其他的字符 |
-f | 排序时,将小写字母视为大写字母 |
-i | 排序时,除了040至176之间的ASCII字符外,忽略其他的字符 |
-m | 将几个排序号的文件进行合并 |
-M | 将前面3个字母依照月份的缩写进行排序 |
-n | 依照数值的大小排序 |
-o <输出文件> | 将排序后的结果存入制定的文件 |
-r | 以相反的顺序来排序 |
-t <分隔字符> | 指定排序时所用的栏位分隔字符 |
-k | 指定需要排序的栏位 |
2.wc命令 – 统计文件的字节数、字数、行数
语法格式:wc [参数] [文件]
常用参数:
-w | 统计字数,或--words:只显示字数。一个字被定义为由空白、跳格或换行字符分隔的字符串 |
---|---|
-c | 统计字节数,或--bytes或--chars:只显示Bytes数 |
-l | 统计行数,或--lines:只显示列数 |
-m | 统计字符数 |
-L | 打印最长行的长度 |
Linux中条件判断用test(test -e /tmp/test.txt)或者[ -e /tmp/test.txt ]来标识,根据该命令的返回状态来判断是否为真,如果返回0表示真,非0表示假;
注意:如果用[ -e /tmp/test.txt ]形式,[ ]和命令之间一定要有空格; 常用 [ -d test ] && echo true || echo false 来查看判断结果;
1.按照文件类型进行判断
2.按照文件权限进行判断
3.两个文件之间进行比较
4.两个整数之间比较
5.字符串的比较
6.多重条件判断
eg:[ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"
单分支if
if [ 条件判断式 ];then 程序 fi #结束标识 或者 if [ 条件判断式 ] then 程序 fi
if-else
#if - else if [ 条件判断式 ] then 条件成立时,执行的程序 else 条件不成立时,执行的另一个程序 fi
多分支if
if [ 条件判断式1 ] then 当条件判断式1成立时,执行程序1 elif [ 条件判断式2 ] then 当条件判断式2成立时,执行程序2 „省略更多条件… else 当所有条件都不成立时,最后执行此程序 fi
例子(根据参数的值输出不同的字符)
#!/bin/bash name=$1 echo $name if [ $name == 'hehe' ] then echo '第一个if' elif [ $name == 'xixi' ] then echo '第二个if' else echo 'else' fi
语法
case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;; esac
例子
#!/bin/bash read -p 'please input your chosse yes or no: ' choose case $choose in "yes") echo 'yes';; "no") echo 'no' ;; *) echo 'error' ;; esac
语法一
for 变量 in 值1 值2 值3… do 程序 done #eg: #!/bin/bash for i in 1 2 3 4 ; do echo $i; done;
语法二
for 变量 in $list变量 do 程序 done #eg:(将tmp目录下的以sh结尾的文件复制一份) #!/bin/bash list=$(ls /tmp|grep "sh$") for i in $list; do cp /tmp/$i /tmp/$i".new" done;
语法三
for (( 初始值;循环控制条件;变量变化 )) #该方式跟Java 的for循环差不多; do 程序 done #eg: #!/bin/bash #从1加到100 s=0 for (( i=1;i<=100;i++)) do s=$(( $s+$i )) done echo "The sum of 1+2+...+100 is : $s"
while [ 条件判断式 ] #注意while后面要有空格 do 程序 done #eg:计算1+2+.....+100的和 #!/bin/bash count=1; sum=0; while [ $count -le 100 ] do sum=$(($sum+$count)); count=$(($count+1)); done echo sum is $sum
until循环,和while循环相反,until循环时 只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止 循环。
until [ 条件判断式 ] do 程序 done #eg: 计算1+2+.....+100的和 #!/bin/bash count=1; sum=0; until [ $count -gt 100 ] #满足该条件退出循环 do sum=$(($sum+count)); count=$(($count+1)); done echo sum is $sum
查看RPM包安装的服务 :
chkconfig --list #查看服务自启动状态,可以看到所有RPM包安装的服务
查看源码包安装的服务
查看服务安装位置,一般是/usr/local/下
chkconfig 命令--检查与设置系统的各种服务
语法格式:chkconfig [参数]
注意:能被chkconfig管理的服务都存在于 /etc/rc.d/rc*.d 目录下 *为数字,代表运行级别
常用参数:
--add | 增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据(/etc/rc.d/rc*.d) |
---|---|
--del | 删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据(/etc/rc.d/rc*.d) |
--level | 指定读系统服务要在哪一个执行等级中开启或关毕 |
RPM安装服务和源码包安装服务的区别
RPM安装服务和源码包安装服务的区别 就是安装位置的不同
源码包安装在指定位置,一般是/usr/local/
RPM包安装在默认位置中
/etc/init.d/:启动脚本位置 ,一般服务都保存该文件下,service命令默认就是找的该文件夹。要想将源码安装的服务用service来管理,可将服务软链接到该目录下;
/etc/sysconfig/:初始化环境配置文件位置
/etc/:配置文件位置
/etc/xinetd.conf:xinetd配置文件
/etc/xinetd.d/:基于xinetd服务的启动脚本
/var/lib/:服务产生的数据放在这里
/var/log/:日志
/etc/init.d/独立服务名 start|stop|status|restart|
service 独立服务名 start|stop|restart||status
chkconfig [--level 运行级别] [独立服务名] [on|off] eg:chkconfig --level 2345 httpd on 或者 chkconfig httpd on/off
修改/etc/rc.d/rc.local文件 该文件中的所有命令,会在系统启动时自动执行,如果将服务启动的命令写入该文件,也可达到开机自启动的目的
使用ntsysv命令管理自启动 图形化管理自启动
源码包安装服务的启动
使用绝对路径,调用启动脚本来启动。不 同的源码包的启动脚本不同。可以查看源 码包的安装说明,查看启动脚本的方法
/usr/local/apache2/bin/apachectl start|stop
源码包服务的自启动
在vi /etc/rc.d/rc.local 目录中加入服务的启动命令
/usr/local/apache2/bin/apachectl start
让源码包服务被服务管理命令识别
让源码包的apache服务能被service命令管理 : 只需要将该服务的软连接到/ect/init.d目录
eg:ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apache
让源码包的apache服务能被chkconfig与 ntsysv命令管理自启动
(1).在服务的脚本中添加如下两行’注释‘
'# chkconfig: 35 86 76 '
''# description: source package apache #说明,内容随意''
vi /etc/init.d/apache # chkconfig: 35 86 76 #指定httpd脚本可以被chkconfig命令管理。 格式是: chkconfig: 运行级别 启动顺序 关闭顺序 # description: source package apache #说明,内容随意
(2). 执行chkconfig --add apache 命令
在 Centos7 中 systemctl 是设置系统服务(service)的命令,它融合之前service和chkconfig的功能于一体。 可以使用它永久性或只在当前会话中启用/禁用服务。
entOS7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system目录下. CentOS7的每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service] 和 [Install]
常用命令
# 查看开机自启的服务 systemctl list-unit-files | grep enabled # 查看某个服务是否自启动 systemctl is-enabled *.service systemctl list-unit-files | grep * # 设置某个服务自启动 systemctl enable *.service (在运行级别3和5开启自启动) # 取消服务自启动 systemctl disable *.service(在运行级别3和5关闭自启动) # 启动服务 systemctl start *.service # 停止服务 systemctl stop *.service # 重启服务 systemctl restart *.service # 重新加载服务配置文件 systemctl reload *.service # 查询服务运行状态 systemctl status *.service # 显示启动失败的服务 systemctl list-unit-files | grep failed
防火墙的配置文件位置在 /etc/firewalld/zones/域名.xml目录下
1.firwall-cmd:是Linux提供的操作firewall的一个工具;
2、–permanent:表示设置为持久;
3、–add-port:标识添加的端口;
另外,firewall中有Zone(域)的概念,默认域为zone=public 可以将具体的端口制定到具体的zone配置文件中。
1)查看防火墙的版本。 firewall-cmd --version 2)查看firewall的状态。 firewall-cmd --state 3)查看firewall服务状态(普通用户可执行)。 systemctl status firewalld 4)查看防火墙全部的信息。 firewall-cmd --list-all 5)查看防火墙已开通的端口。 firewall-cmd --list-port 6)查看防火墙已开通的服务。 firewall-cmd --list-service 7)查看全部的服务列表(普通用户可执行)。 firewall-cmd --get-services 8)查看防火墙服务是否开机启动。 systemctl is-enabled firewalld 2、配置防火墙的命令 1)启动、重启、关闭防火墙服务。 # 启动 systemctl start firewalld # 重启 systemctl restart firewalld # 关闭 systemctl stop firewalld 2)开放、移去某个端口。 # 开放80端口 firewall-cmd --zone=public --add-port=80/tcp --permanent # 移去80端口 firewall-cmd --zone=public --remove-port=80/tcp --permanent #添加规则,对指定ip开放指定端口 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.0.29 port port=3306 protocol=tcp accept' #移除以上规则(accept) firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address=192.168.0.29 port port=3306 protocol=tcp accept' #禁止某个ip访问某个端口(reject) firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port=8080 reject' #禁止某个ip访问 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.42 drop' #允许某个ip访问 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.169 accept' 3)开放、移去范围端口。 # 开放5000-5500之间的端口 firewall-cmd --zone=public --add-port=5000-5500/tcp --permanent # 移去5000-5500之间的端口 firewall-cmd --zone=public --remove-port=5000-5500/tcp --permanent 4)开放、移去服务。 # 开放ftp服务 firewall-cmd --zone=public --add-service=ftp --permanent # 移去http服务 firewall-cmd --zone=public --remove-service=ftp --permanent 5)重新加载防火墙配置(修改配置后要重新加载防火墙配置或重启防火墙服务)。 firewall-cmd --reload 6)设置开机时启用、禁用防火墙服务。 # 启用服务 systemctl enable firewalld # 禁用服务 systemctl disable firewalld
除以上命令外 ,可直接修改配置文件修改配置(/etc/firewalld/zones/public.xml)
Public For use in public areas.
放通指定ip,指定端口、协议 放通任意ip访问服务器的9527端口
语法格式:ps [参数]
常用参数:
-a | 显示所有终端机下执行的程序,除了阶段作业领导者之外 |
---|---|
a | 显示现行终端机下的所有程序,包括其他用户的程序 |
-A | 显示所有程序 |
-c | 显示CLS和PRI栏位 |
c | 列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示 |
-C <指令名称> | 指定执行指令的名称,并列出该指令的程序的状况 |
-d | 显示所有程序,但不包括阶段作业领导者的程序 |
-e | 此选项的效果和指定”A”选项相同 |
e | 列出程序时,显示每个程序所使用的环境变量 |
-f | 显示UID,PPIP,C与STIME栏位 |
f | 用ASCII字符显示树状结构,表达程序间的相互关系 |
常用:
ps aux #查看系统中所有进程,使用BSD操作系统格式
各个列参数介绍:
USER:该进程是由哪个用户产生的; PID:进程的ID号; %CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源; %MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源; VSZ:该进程占用虚拟内存的大小,单位KB; RSS:该进程占用实际物理内存的大小,单位KB; TTY:该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端。 STAT:进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台 START:该进程的启动时间 TIME:该进程占用CPU的运算时间,注意不是系统时间 COMMAND:产生此进程的命令名
语法格式:top [参数]
常用参数:
-d | 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s |
---|---|
-q | 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行 |
-c | 切换显示模式 |
-s | 安全模式,将交谈式指令取消, 避免潜在的危机 |
-i | 不显示任何闲置 (idle) 或无用 (zombie) 的行程 |
-n | 更新的次数,完成后将会退出 top |
-b | 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内 |
在top命令的交互模式当中可以执行的命令:
?或h: 显示交互模式的帮助 P: 以CPU使用率排序,默认就是此项 M: 以内存的使用率排序 N: 以PID排序 q: 退出top
语法格式: pstree [参数]
常用参数:
-a | 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示 |
---|---|
-c | 不使用精简标示法 |
-G | 使用VT100终端机的列绘图字符 |
-h | 列出树状图时,特别标明现在执行的程序 |
kill [参数] [进程号]
kill -1(数字1) pid 重启进程
kill -9 pid 强制终止进程
kill -15 pid 默认值 正常终止进程;
1.把进程放入后台
命令后面加&符号 eg:redis-server & 这种方式放入后台,任务在后台仍然运行
在任务执行的过程种按ctrl+z,这种方式放入后台,任务暂停
2.查看后台工作
语法格式: jobs [参数] [目录]
常用参数:
-l | 显示作业列表时包括进程号 |
---|---|
-n | 显示上次使用jobs后状态发生变化的作业 |
-p | 显示作业列表时仅显示其对应的进程号 |
-r | 仅显示运行的(running)作业 |
-s | 仅显示暂停的(stopped)作业 |
3.将后台暂停的工作恢复到前台执行
fg %工作号 参数:%工作号: %号可以省略,但是注意工作号和PID的区别
4.把后台暂停的工作恢复到后台执行
bg %工作号 注:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行
一次性计划任务at
Linux中的 at 命令就是用来创建一次性计划任务的,at 命令有一个服务 atd 会以后台模式运行,检查当前的时间来决定是否运行“计划”。
默认情况下,atd 服务每 60 秒检查一次目录,有“计划”时,会检查“计划”运行时间,如果“计划运行”的时间与当前时间匹配,则运行此“计划”。 (1)创建任务
# 下面命令中的是提交 at 的计划任务,使用ctrl+d即可出现.ctrl+d 保存退出,ctrl+c不保存 [root@localhost ~]# at 5:00PM #创建一个下午五点的计划任务 at> touch /tmp/test.hs #计划内容 at> # 提交 job 5 at Wed Dec 1 17:00:00 2021 #提交成功后提示任务创建成功 # atq 查看一次性计划任务 [root@localhost ~]# atq 查看定时任务 5 Wed Dec 1 17:00:00 2021 a root [root@localhost ~]# at 2022-04-26 # 只有日期没有时间表示在指定日期的当前时间(创建任务的时间执行任务) [root@localhost ~]# at 12:12 2022-04-26 指定具体时间 [root@localhost ~]# at 9:15 + 5 days 五天后的9点15执行 [root@localhost ~]# at monday #在周一执行
(2)任务编辑(增删查)--at命令
语法格式:at [选项][任务id] 常用参数: #一下id表示任务id,可用atq查看 atq 查看系统中的等待作业 -d 删除系统中的等待作业(等效于atrm命令) at -d id或者atrm id -c 打印任务的内容 at-c id -q 使用指定的列队 -f 将指定脚本提交等待作业 # at -f test.sh now; 马上执行 # at -f linuxcool.sh now+25 min;25分钟后执行; # at -f test_for.sh 14:37 2022-04-26 指定时间执行
(3)一次性计划任务使用控制 at.allow (/etc/at.allow) at.deny (/etc/at.deny)
用户可以使用 at 命令设置一次性计划任务,那么 也可以控制哪些用户可以使用计划任务(在白名单中),哪些用户不可以使用计划任务
at 一次性计划任务的白名单是 at.allow ,黑名单是 at.deny 。不建议既使用白名单,又使用黑名单。 建议使用白名单,at.allow 的优先级高于 at.deny。即:wang 既在白名单,又在黑名单,则 wang 可以执行at
周期性定时任务crontab
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。/etc/crontab文件是系统任务调度的配置文件。用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。
语法格式:crontab [参数]
常用参数:
-e | 编辑该用户的计时器设置 |
---|---|
-l | 列出该用户的计时器设置 |
-r | 删除该用户的计时器设置 |
-u | 指定要设定计时器的用户名称 |
crontab -e -u username :编辑 username 用户的计划任务。只有 root 用户可以编辑其他人的计划任务,非 root 用户只能编辑自己的计划任务。 crontab -l :列出当前用户的所有计划任务 crontab -l -u username :列出 username 的所有计划任务
* * * * * command/script #上面的 * 从左到右依次表示:分、时、日、月、周,后面是要执行的脚本或命令; 每分钟一次 脚本 * * * * * /shell/test.sh 每小时的整点一次 0 * * * * /shell/test.sh 每天凌晨 2 点准时运行 0 2 * * * /shell/test.sh 每天凌晨 1 点这个小时中的每分钟运行一次 * 1 * * * /shell/test.sh 每个月的第一天的每分钟运行一次 * * 1 * * /shell/test.sh 1 月份中的每一分钟都运行一次 * * * 1 * /shell/test.sh 每周第0天,即周日的每分钟 * * * * 0 /shell/test.sh 每 5 分钟一次 0/5 * * * * /shell/test.sh 每个小时的第15分钟~第20分钟每分钟运行一次,总共一小时运行 6 次 15-20 * * * * /shell/test.sh 每年 4 月~ 6 月,4,5,6月的10号和15号这 2 天,从0点开始,包括 0 点,每两小时的第1分钟和第2分钟,第5~8分钟分别运行一次 1,2,5-8 0/2 10,15 4-6 * /shell/test.sh # 按照crontab命令创建的定时任务脚本都保存在 /var/spool/cron/username下
3. 周期性计划任务配置文件
除了可以 crontab 创建计划任务之外,还可以使用 vim 直接编辑crontab 的配置文件来创建计划任务,和crontab 命令进入的界面编辑的格式有一处不同,就是要在最开始的分时日月周后面加上一个执行用户,此文件只有 root 可编辑。
# * * * * * user-name command to be executed
除了 /etc/crontab 之外,还有cron.daily/ cron.hourly cron.weekly cron.monthly 等目录,下面存放的是每天,每小时,每周,每月自动执行的脚本,里面存放着系统默认的周期性计划任务,可以自己写脚本加到指定目录中,并加上执行权限,让他们自动执行。
/etc/cron.d/ 目录下存放的文件格式和 /etc/crontab 的格式是一样的,是一个 crontab 配置文件的扩展目录,默认情况下也会读取这个目录里面定义的周期性计划任务。
和一次性计划任务 at 一样,cron 计划任务也在 /etc/ 下有cron.deny 和 cron.allow 可以对使用计划任务的用户实现控制。白名单要强于黑名单,建议使用白名单。
4.精确到秒级的 cron 任务
* * * * * command_or_script_to_execute * * * * * sleep 5 command_or_script_to_execute * * * * * sleep 10 command_or_script_to_execute * * * * * sleep 15 command_or_script_to_execute * * * * * sleep 20 command_or_script_to_execute * * * * * sleep 25 command_or_script_to_execute * * * * * sleep 30 command_or_script_to_execute * * * * * sleep 35 command_or_script_to_execute * * * * * sleep 40 command_or_script_to_execute * * * * * sleep 45 command_or_script_to_execute * * * * * sleep 50 command_or_script_to_execute * * * * * sleep 55 command_or_script_to_execute
和一次性计划任务 at 一样,cron 计划任务也在 /etc/ 下有cron.deny 和 cron.allow 可以对使用计划任务的用户实现控制。白名单要强于黑名单,建议使用白名单。
1.启动级别
(在centos7和centos6种,运行级别管理有一些变化,在centos6种主要是init进程,而7中是systemd进程)
CentOS7运行级别简化为(常用):
init级别 | systemctl target |
---|---|
0 | shutdown.target |
1 | emergency.target |
2 | rescure.target |
3 | multi-user.target(多用户有网,无GUI) |
4 | 无 |
5 | graphical.target(多用户有网,有GUI) |
6 | 无 |
设置运行级别:
systemctl get-default 获取当前运行级别 (runlevel )
systemctl set-default xxx.target 设置默认的运行级别为xxx (centos6中修改/etc/inittab文件)
systemctl isolate xxx.target 在不重启的情况下,切换到xxx下 (centos6中 用init +init级别切换)
2.文件备份还原
备份
dump [选项] 备份之后的文件名 原文件或目录 选项: -level: 就是我们说的0-9十个备份级别 -f 文件名: 指定备份之后的文件名 -u: 备份成功之后,把备份时间记录在/etc/dumpdates文件 -v: 显示备份过程中更多的输出信息 -j: 调用bzlib库压缩备份文件,其实就是把备份文件压缩为.bz2格式,默认压缩等级是2 -W: 显示允许被dump的分区的备份等级及备份时间
#备份分区 可进行差量备份 dump -0uj -f /root/boot.bak.bz2 /boot/ #备份命令。先执行一次完全备份,并压缩和更新备份时间 cat /etc/dumpdates #查看备份时间文件 cp install.log /boot/ #复制日志文件到/boot分区 dump -1uj -f /root/boot.bak1.bz2 /boot/ #增量备份/boot分区,并压缩 dump –W #查询分区的备份时间及备份级别的 #备份文件或目录 无法进行差量备份 dump -0j -f /root/etc.dump.bz2 /etc/ #完全备份/etc/目录,只能使用0级别进行完全备份,而不再支持增量备份
restore命令用来还原由dump操作所备份下来的文件或整个文件系统(一个分区)。
语法格式:restore [参数] [文件]
常用参数:
-b | 设置区块大小,单位是Byte |
---|---|
-c | 不检查dump操作的备份格式,仅准许读取使用旧格式的备份文件 |
-C | 使用对比模式,将备份的文件与现行的文件相互对比 |
-D | 允许用户指定文件系统的名称 |
-f | <备份文件> 从指定的文件中读取备份数据,进行还原操作 |
-h | 仅解出目录而不包括与该目录相关的所有文件 |
-i | 使用互动模式,在进行还原操作时,restore指令将依序询问用户 |
-m | 解开符合指定的inode编号的文件或目录而非采用文件名称指定 |
-r | 进行还原操作 |
-R | 全面还原文件系统时,检查应从何处开始进行 |
-s | 当备份数据超过一卷磁带时,您可以指定备份文件的编号 |
-t | 指定文件名称,若该文件已存在备份文件中,则列出它们的名称 |
-v | 显示指令执行过程 |
-x | 设置文件名称,且从指定的存储媒体里读入它们,若该文件已存在在备份文件中,则将其还原到文件系统内 |
-y | 不询问任何问题,一律以同意回答并继续执行指令 |