目录
Linux目录结构
-
在Linux世界里,一切皆文件。包括硬件设备。
-
Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“ / ”,然后在此目录下再创建其它目录。
-
Linux目录解释:
系统目录:- /boot:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
- /etc:所有的系统管理所需要的配置文件和子目录 .conf
- /lib:系统开机所需要的最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到执行共享库
- /sys:存放系统的系统文件(慎动!)
- /proc:这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录可以获取系统信息(慎动!)
- /srv:service的缩写,该目录存放一些服务启动之后需要提取的数据(慎动!)
- /var:这个目录存放着不断扩充的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
- /selinux:(security-enhanced Linux)SELinux是一种安全的子系统,它能操作程序只能访问特定文件。当黑客入侵到服务器就会触发/selinux安全系统
- /usr/src:内核源代码默认的放置目录。
指令目录:
- /bin:binary的缩写,存放常用的指令。
- /sbin:s是super user的意思,存放系统管理员使用的系统管理程序。
设备挂载目录:
- /dev:类似Windows的设备管理器,把所有硬件映射成文件存放在此目录
- /media:Linux系统会自动识别一些设备,如U盘、光驱等等。当识别后,系统会把识别到的设备挂载到这个目录下
- /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/,然后进入该目录就可以查看里面的内容了。可实现磁盘扩容。
临时文件目录:
- /tmp:存放临时文件
- /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
- /lost+found:一般情况下是空的,当系统非法关机后,这里存放了一些文件
用户目录:
- /home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
- /root:该目录是系统管理员,也称超级权限者的用户主目录
- /usr:用户的很多应用程序和文件都放在这个目录下,类似于Windows下的program files目录。把它理解为Unix System Resource更准确。
- /usr/bin:系统用户使用的应用程序。
- **/usr/sbin:**超级用户使用的比较高级的管理程序和系统守护程序。
软件安装目录:
- /opt:这是给主机额外安装软件(之前)所摆放的目录,默认为空
- /usr/local:这是给主机额外安装软件(过后)所安装的目录,一般是通过编译源代码方式安装的软件(/usr/local/mysql)
vi和vim编辑器
- i(当前光标插入),a(把光标定位到当前当前字符的下一个字符),o(下一行插入):进入编辑模式,插入内容
- ::进入命令行模式,可以输入命令
- :wq(存盘保存退出),:q(退出,不保存),:q!(强制退出):退出
- esc:返回正常模式
- yy:拷贝当前行。nyy:拷贝当前行向下n行。p:粘贴。(正常模式下操作)
- dd:删除当前行:dd。ndd:删除当前行向下n行。(正常模式下操作)
- u:撤销。[Ctrl]+r:重复。(正常模式下操作)
- /关键字:查找字符或字符串。n:查找下一个。N:查找上一个。
- :set nu / :set nonu:设置/取消文件行号。
- gg:到达首行。G:到达末行。(正常模式下操作)
- n shift+g / :n:移动到n行
- [home]:移动到该行最前面。[end]:移动到该行最后面(编辑模式下操作)
- :n1,n2s/word1/word2/g:在n1与n2行之间寻找word1这个字符串,并将该字符串用word2代替。(s不能掉)如 :1,$s/public/PUBLIC/g:将第一行到最后一行中的public替换为PUBLIC。
- :n1,n2s/word1/word2/gc:在n1与n2行之间寻找word1这个字符串,并将该字符串用word2代替。在取代前显示提示字符给用户确认。
关机、重启和用户登录注销
- shutdown -h now:立即关机。等于poweroff,断电源,十分危险。
- shutdown -h 1:1分钟后关机
- shutdown -r now:立即重启
- halt:关闭系统,不关电源,主板还是通电的
- reboot:重启
- sync:把内存的数据同步到磁盘上。当我们关机或者重启时,都应该先执行一下sync,防止数据丢失。
- logout:注销用户。在图形运行级别无效,在运行级别3有效。(远程登录退出)
用户管理
- Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
- Linux可以有很多个用户。Linux里面有很多个组。每一个用户至少属于一个组。(不同权限)
- /home/ 目录下有各个创建的用户对应的home目录,当用户登录时,会自动的进入自己的home目录。
useradd 用户名:添加用户。自动默认将用户放到和用户名相同的组,且在/home/下创建一个用户的home目录。 - useradd [-d 指定目录] 用户名:添加用户,并给新用户指定家目录。(指定的目录不应该存在)
- passwd 用户名:设置用户密码
- userdel 用户名:删除用户,但是要保存home目录
- userdel -r 用户名:删除用户及其home目录
- 一般在实际开发中删除用户会保留home目录,因为里面会有许多有用的东西,比如源代码。
- id 用户名:查询用户信息(uid=1000(hxp) gid=1000(hxp) 组=1000(hxp))。用户不存在返回no such user
- su - 用户名:切换用户(高权限到低权限不用输入密码,反之需要)
- exit:返回原先的用户
- whoami / who am I:查询当前用户是谁
- 用户组类似于角色,系统可以对有共性的多个用户进行统一的管理
- groupadd:创建用户组
- groupdel:删除用户组
- useradd -g 用户组 用户名:添加用户时直接指定对应的组
- usermod -g 用户组 用户名:修改用户组
用户和组的相关文件:
-
用户(user)配置文件:/etc/passwd
记录用户的各种信息含义:用户名:密码:用户标识符:组标识符:注释性描述:主目录:登录shell hxp :x:1000:1000::/home/hxp:/bin/bash
-
口令(密码)配置文件:/etc/shadow
含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 hxp:$6$uttuNCqU$dKz1s0YiMeVpbuGP1s.tLlnHIPOXUKKojVRHj7c8Y.M1gPs65AOxhw3Pa73TaXHZLJv.PfhWPCzxR10X8lBKX1:18300:0:99999:7:::
-
组配置文件:/etc/group
记录Linux包含的组的信息含义:组名:口令:组标识号:组内用户列表(看不到) hxp:x:1000:
实用指令
- Linux的运行级别:
0:关机
1:单用户【找回丢失的密码,该状态登录不需要密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务(命令行模式)
4:系统未使用,保留
5:图形界面
6:重启
常用运行级别3和5,要修改默认的运行级别可修改文件/etc/inittab的id:5:initdefault:这行中的数字 - init [0123456]:切换到指定的运行级别
- CentOS 7有2个默认运行级别:3(multi-user.target)和5(graphical.target)(查/etc/inittab文件)
- CentOS 7用 systemctl set-default runlevelx.target 指定默认运行级别
查看当前的默认运行级别:systemctl get-default - 修改root密码:(前提:不能远程,电脑必须在手上)
1.首先,启动CentOS 7系统,在选择进入系统的界面按 “e” 进入编辑页面。
2.往下滑,找到 “linux16” 开头的那一段,在最后添加 “ 3.init=/bin/sh”
4.按 “ctrl+X” 组合键进入单用户模式
5.输入“mount -o remount,rw /”,然后再输入 “passwd”,回车
6.输入两次要修改的密码
7.输入 “touch /.autorelabel”,回车
8.输入 “exec /sbin/init”,回车
等待几分钟就可以了。
帮助指令
- man:获得帮助信息
- help:获得shell内置命令的帮助信息
文件目录类
-
pwd:显示当前工作目录的绝对路径
-
ls [选项] [目录或者文件]:查看当前目录内容
-a:显示所有的文件和目录,包括隐藏的 . 开头的文件
-l:除文件名称外,亦将文件形态、权限、拥有者、文件大小等信息详细列出。相当于ll。
-r:将文件以相反次序显示(原定字典序)。
-t:将文件按建立时间的先后次序列出。
-A:同-a,但不列出 . (当前目录)及 .. (上一级目录)。
-F:在列出的文件名称后加一个符号。例如可执行文件加 *,目录则加 /。 -
ll:查看当前目录内容
-
cd [参数或目录]:change directory。切换目录
.:此层目录
..:回到当前目录的上一级目录
~ 或 (直接cd):回到家目录
-:返回上一个工作目录 -
mkdir [选项] 目录名:创建目录,如mkdir /home/dog
-p:创建多级目录,如mkdir -p /home/animal/tiger
-rmdir [选项] 目录名:删除空目录。如果目录下有内容时无法删除
如果要删除非空目录,可以使用rm -rf 目录(慎用!) -
touch:创建空文件。可一次性创建多个文件
-
cp [选项] source dest:拷贝文件到指定目录
-r:拷贝整个文件夹。cp -r hxp aaa -
\cp:当目的地有相同的文件,强制覆盖不提示,否则yyy
-
rm [选项] 目录或文件:删除文件或目录
-r:删除整个文件夹
-f:强制删除不提示 -
mv:移动文件与目录或重命名
mv oldNameFile newNameFile:重命名, 要带后缀
mv /temp/moveFile /targetFolder:移动文件 -
cat [选项] 文件名:以只读的方式查看文件内容
-n:显示行号
cat xxx.xxx | more:分页显示。cat Hello.java | more -
more 文件名:以全屏的方式分页显示内容
操作:[Enter]:下一行
空格键[space]:向下翻一页
b / Ctrl+b:向上翻一页
q:立即离开more,不再显示文件内容
Ctrl+f:向下滚动一屏
=:输出当前行的行号
:f:输出文件名和当前行的行号 -
less:分屏查看文件的内容,功能与more类似,但比more更加强大,支持各种显示终端。less在显示文件内容时,根据显示需要加载内容,对显示大型文件具有较高的效率。
操作:空格键[space] / [pagedown]:向下翻一页
[pageup]:向上翻一页
b / Ctrl+b:向上翻一页
[Enter]:下一行
/字符串:向下查找字符串,n:向下查找,N:向上查找
?字符串:向上查找字符串,n:向上查找,N:向下查找
q:离开less程序 -
>:输出重定向(覆盖原文件内容,如果不存在则创建文件),>>:追加(如果不存在则创建文件)
ls -l >文件:将列表内容写入文件中(覆盖写)
ls -al >>文件:将列表内容追加到文件的末尾
cat 文件1 >文件2:将文件1的内容写到到文件2
echo “内容” >>文件:将内容写入文件
cal >> 文件:将日历追加写入文件 -
echo:输出内容到控制台
echo $PATH:输出当前环境变量
echo hello:输出hello -
head:显示文件的开头部分内容,默认情况下显示文件的前10行内容
head 文件:查看文件前10行内容
head -n 5 文件:查看文件前5行内容,5是任意行数 -
tail:输出文件中尾部的内容,默认情况下显示文件的后10行内容(重要,文件都是在尾部修改)(Ctrl+Z退出)
tail 文件:显示文件后10行内容
tail -n 5 文件:查看文件最后5行内容,5是任意行数
tail -f 文件:实时追踪(监控)该文档的所有更新 -
ln:软链接又叫符号链接,类似Windows里的快捷方式,主要存放了链接其它文件的路径
ln -s [文件或目录] [软链接名]:给文件创建一个软链接
rm -rf 软链接:删除软链接[root@icu ~]# pwd /root [root@icu ~]# ln -s /home linkToHome [root@icu ~]# cd linkToHome [root@icu linkhome]# pwd /root/linkhome
当我们用pwd查看目录时,仍然看到的是软链接所在的目录
- history:查看已经执行过的历史命令,也可以执行历史命令
history n:查看最近执行的n条命令
!n:执行第n条历史命令,!5执行第五条历史指令
时间日期类
- date [+%]:显示时间日期
显示年月日时分秒:date “+%Y-%m-%d %H:%M:%S”
参数 | 参数含义 |
---|---|
%a | 当前区域的星期几的简写 (Sun…Sat) |
%A | 当前区域的星期几的全称 (不同长度) (Sunday…Saturday) |
%b | 当前区域的月份的简写 (Jan…Dec) |
%B | 当前区域的月份的全称(变长) (January…December) |
%d | (月份中的)几号(用两位表示) (01…31) |
%D | 月日年(04/18/20) |
%H | 小时(按 24 小时制显示,用两位表示) (00…23) |
%m | 月份(用两位表示) (01…12) |
%M | 分钟数(用两位表示) (00…59) |
%S | 秒数(用两位表示)(00…60) |
%Y | 年(用 4 位表示) (1970…) |
- cal [年]:显示当前日历
搜索查找类
- find [搜索范围] [选项] 要搜索的字符串:将从指定的目录向下递归遍历其各个子目录,将满足条件的文件或者目录显示在终端。
-name:按指定的文件名或目录名查找。find / -name Hello.java
-user:查找属于指定用户名的所有文件。Find / -user hxp
-size +xxM:按指定的大小查找文件
-mtime n:对文件数据的最近一次修改是在 n24 小时之前
-ctime n:对文件的最近一次访问是在 n24 小时之前
find /home -size +20M:搜索该目录下大于20M的文件(大于+n,小于-n,等于n) - locate:快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,程序速度较快,为了保证查询结果的准确度,管理员必须定期更新locate数据库
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库 - grep和管道符号 |:可在文件内部查找关键字
grep过滤查找,管道符号|表示将前一个命令的处理结果输出传递给后面的命令处理。
grep [选项] 查找内容 源文件
-n:显示匹配行及行号
-i:忽略字母大小写
cat Hello.java | grep -ni Hello:查找Hello.java中的Hello字符串
压缩和解压类
- gzip / gunzip:压缩 / 解压缩 *.gz文件(不保留原来的文件)
- zip / unzip [选项] 文件:压缩/解压缩 .zip文件(保留原文件)(这个在项目打包*发布中很有用)
zip -r 压缩文件名 要压缩的目录:压缩目录
zip -r package.zip /home/:将home目录下的所有文件压缩成package.zip
upzip -d 解压到目录 文件:指定解压后文件的存放目录
upzip -d /home package.zip:将package.zip解压到home目录下 - tar [选项] 文件:打包指令,最后打包的文件是 *.tar.gz(保留原文件)压缩:-zcvf。解压:-zxvf。
-c:产生tar打包文件
-v:显示详细信息
-f:指定压缩后的文件名
-z:打包同时压缩
-x:解包tar文件
tar -zcvf shit.tar.gz a.txt b.txt(压缩多个文件)
tar -zcvf shit.tar.gz /home/(压缩目录)
tar -zxvf shit.tar.gz(解压到当前目录)
tar -zxvf shit.tar.gz -C /opt/tmp(解压到指定目录)(目录必须存在)
组管理和权限管理
-
在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其它组的概念:
- 文件/目录所有者:一般为文件的创建者,谁创建了该文件,谁就是改文件的所有者。
查看文件的所有者:ls -ahl。
-rw-r–r--. 1 tom(文件所有者) police(文件所在组) 0 2月 12 20:00 ok.txt
修改文件的所有者:chown 用户名 文件名 - 文件/目录所在组:当某个用户创建了一个文件后,默认这个文件的所在组就是该用户的所在组。
查看文件的所在组:ls -ahl。
修改文件的所在组:chgrp 组名 文件名 - 其它组:除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。
- 文件/目录所有者:一般为文件的创建者,谁创建了该文件,谁就是改文件的所有者。
-
usermod -g 组名 用户名:修改用户所在组(用户的文件也会改变所在组)(root)
[root@icu ~]# id tom uid=1001(tom) gid=1001(police) 组=1001(police) [root@icu ~]# ll /home/tom/ 总用量 0 -rw-r--r--. 1 tom police 0 2月 12 20:00 ok.txt [root@icu ~]# usermod -g thief tom [root@icu ~]# id tom uid=1001(tom) gid=1002(thief) 组=1002(thief) [root@icu ~]# ll /home/tom/ 总用量 0 -rw-r--r--. 1 tom thief 0 2月 12 20:00 ok.txt
-
usermod -d 目录名 用户名:修改用户登录的初始目录(root)
- 组:权限不同,例如董事组、领导组。员工组
- 文件类型:-:普通文件
d:目录
l:软链接
c:字符设备【键盘、鼠标】
b:块文件【硬盘】 - rwx权限详解:(r=4,w=2,x=1)
- rwx作用到文件:
- [ r ]代表可读(read),可以读取、查看
- [ w ]代表可写(write),可以修改,但不代表可以删除该文件,删除一个文件的前提条件是对改文件所在的目录有写权限才能删除改文件。
- [ x ]代表可执行(execute),可以被执行
- rwx作用到目录:
- [ r ]代表可读(read),可以读取、查看
- [ w ]代表可写(write),可以修改,目录内创建、删除、重命名目录
- [ x ]代表可执行(execute),可以进入该目录
- 通过chmod可以修改文件或目录的权限
方式一:+ 、- 、= 变更权限
u:所有者;g:所在组;o:其它组;a所有用户(u、g、o的总和)
1.chmod u=rwx,g=rx,o=x 文件/目录名
2.chmod o+w 文件/目录名
3.chmod a-x 文件/目录名
方式二:通过数字变更权限
chmod 777 文件/目录名 - chown 用户名 文件名:修改文件的所有者
- chown -R 用户名 目录名:修改目录下的文件和目录的所有者(包括子目录)
- chown 用户名:用户组 文件名:修改用户的所有者和所在组
- chgrp 组名 文件名:修改文件的所在组
- chgrp -R 用户组 目录名:修改目录下的文件和目录的所在组(包括子目录)
- chmod -R 所有者:所在组 文件/目录名:同时修改所有者和所在组
定时任务调度
-
任务调度:指系统在某个时间执行的特定的命令和程序
任务调度分类:1.系统工作,有些重要的工作必须周而复始的执行,如病毒扫描。2.个别用户工作,个别用户可能希望执行某些程序,如数据库备份。 -
crontab [选项]:进行定时任务的设置
-e:编辑crontab定时任务
-l:查询crontab任务
-r:删除当前用户所有的crontab任务
案例:每小时的每分钟执行一次任务:cron -e, * /1 * * * * date >> /home/crontab.txt
5个占位符说明:
第一个*:一个小时中的第几分钟。范围 [0,59]
第二个*:一天中的第几个小时。范围 [0,23]
第三个*:一个月中的第几天。范围 [1,31]
第四个*:一年中的第几个月。范围 [1,12]
第五个*:一周中的星期几。范围 [0,7](0和7都是星期天)
特殊符号说明:
*:代表任何时间。比如第一个*就代表一个小时中的每分钟都执行一次的意思
,:代表不连续的时间。比如“0 8,12,16 * * * 命令”代表在每天的8:00,12:00,16:00都执行一次任务
-:代表连续的时间范围。比如“0 5 * * 1-6 命令”代表在星期一到星期六的凌晨5:00执行一次任务
*/n:代表每隔多久执行一次。比如“*/10 * * * * 命令”代表每隔10分钟执行一次命令
任务案例:
45 22 * * * 命令:每天在22:45执行命令
0 17 * * 1 命令:在每周一的17:00执行命令
0 5 1,15 * * 命令:在每月1号和15号的凌晨5:00执行命令
40 4 * * 1-5 命令:每星期一到星期五的凌晨4:40执行任务
*/10 4 * * * 命令:每天的凌晨4:00,每隔10分钟执行一次命令 -
每隔1分钟将当前的时间日期追加到/home/crontab.txt
1. 编写脚本文件task.sh date >> /home/crontab.txt 2. 给task.sh一个可执行权限 chmod 744 /home/task.sh 3. crontab -e 4. */1 * * * * /home/task.sh 5. 删除任务 crontab -r
Linux磁盘分区与挂载
- Linux至少要分3个区:/boot、swap、/
/boot:存放Linux启动的时候所需要的引导文件。(200M)
swap:swap分区没有挂载点。当系统内存不够用的时候,先将临时数据存放在swap分区,等待一段时间后,然后再将数据调入到内存中执行。所以说,虚拟内存只是暂时存放数据,在该空间内并没有执行。(虚拟内存)
/:根分区 - Windows和CentOS的虚拟机共享文件夹默认在CentOS的 /mnt/hgfs
- 分区的方式:
1.MBR分区:
① 最多支持4个分区
② 系统只能安装在主分区
③ 扩展分区要占一个主分区
④ 最大只支持2TB,但拥有最好的兼容性
2.GPT分区:
①支持无限多个分区(但操作系统可能限制,Windows下最多128个分区)
②最大支持18EB的大容量(1EB=1024PB 1PB=1024TB)
③Windows7 64位以后支持GPT分区 - Linux分区原理介绍:
1.Linux里无论多少个分区,分给哪一个目录使用,归根结底只有一个根目录,一个独立且唯一的文件结构。Linux中每一个分区都是组成整个文件系统的一部分。
2.Linux采用一种叫“载入/挂载”(mount)的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这是要载入的一个分区将使它的存储空间在一个目录下获得。 - Linux磁盘说明:
Linux磁盘分IDE磁盘和SCSI磁盘,目前基本是SCSI磁盘
对于IDE磁盘,驱动器标识符为“hdx~”。其中“hd”表明分区所在设备的类型,这里指IDE磁盘。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘)。“~”表示分区,前四个分区用数字1到4表示,他们是主分区或扩展分区,从5开始就是逻辑分区。例如,hda3表示第一个IDE磁盘上的第三主分区或扩展分区。hdb2表示第二个IDE磁盘上的第二个主分区或扩展分区。
对于SCSI磁盘,驱动器标识符为“sdx~”。其中“sd”表明分区所在设备的类型,其余则和IDE磁盘的表示方法一样 - lsblk -f:查看当前系统的分区和挂载情况。(list block)
- 给Linux系统增加一个新的硬盘,并且挂载到/home/newdisk
1.添加硬盘
2.分区:fdisk /dev/sdb
3.格式化:mkfs -t ext4 /dev/sdb1
4.挂载:新建目录:mkdir /home/newdisk;挂载:mount /dev/sdb1 /home/newdisk
5.设置可以自动挂载(永久挂载):重启系统后,仍然可以挂载。vim etc/fstab 增加挂载信息。mount -a:自动挂载
取消挂载:umount /dev/sdb1 - df -h:查询系统整体磁盘使用情况
- du [选项] /目录:查询指定目录的磁盘占用情况,默认为当前目录
-s:指定目录作用大小汇总
-h:带计量单位
-a:含文件
–max-depth=1:子目录深度
-c:列出明细的同时增加汇总值
查询 /opt 目录的磁盘占用情况,深度为1:du -ach --max-depth=1 /opt - 磁盘情况-工作实用指令
统计 /home 文件夹下文件的个数:ls -l /home | grep “^-” | wc -l
统计 /home 文件夹下目录的个数:ls -l /home | grep “^d” | wc -l
统计 /home 文件夹下文件的个数,包括子文件夹里的:ls -lR /home | grep “^-” | wc -l
统计文件夹下目录的个数,包括子文件夹里的:ls -lR /home | grep “^d” | wc -l
以树状显示目录结构:yum install tree,tree
网络配置与服务
- 虚拟机的网络连接的三种形式:
1.桥连接,虚拟机可以与其它的系统通信,但会造成IP冲突,因为共用同一个网段。
2.NAT:网络地址转换方式,虚拟机可以访问外网,不会造成IP冲突。
3.主机模式:IP地址独立,不能访问外网。
- CentOS 7网络配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33
- ifconfig:查询IP信息
- firewalld(CentOS7):
启动 :systemctl start firewalld
关闭:systemctl stop firewalld
查看状态:systemctl status firewalld
开机禁用:systemctl disable firewalld
开机启用:systemctl enable firewalld
iptables防火墙的操作方法与firewalld防火墙相同,只是在不同环境下可能需要将 systemctl 换成service - ntsysv:界面设置系统的各种服务
- systemctl status | start | stop | restart xxx
- service xxx status | start | stop | restart | reload:查看xxx服务的状态 | 开启 | 停止 | 重启 | 重载
- systemctl list-unit-files:查看所有服务状态
- systemctl list-dependencies [target]:查看在具体target启用的服务
- setup:设置工具
- chkconfig(弃用):可以给每个服务的各个运行级别设置自启动/关闭
查看xxx服务:chkconfig –list | grep xxx
查看服务的状态:chkconfig 服务名 --list
给服务的运行级别设置自启动:chkconfig –level 5 服务名 on/off
要所有运行级别关闭或开启:chkconfig 服务名 on/off
进程管理
- 在linux中,每个执行的程序(代码)都称为一个进程,每个进程分配一个ID号
- 每个进程对应一个父进程,而这个父进程可以复制多个子进程,例如www服务器
- 开机流程:开机–BIOS–/boot–init进程–运行级别–运行级别对应的服务
- ps [选项]:查看目前系统中进程执行的情况
-a:显示当前终端所有进程信息
-u:以用户的个数显示进程信息
-x:显示后台进程运行的参数
-e:显示所有进程
-f:全格式
ps -aux | more,ps -aux | grep xxx:筛选显示
ps -ef:查看父进程(PPID)
字段名 | 含义 |
---|---|
USER | 用户名称 |
PID | 进程号 |
%CPU | 进程占用CPU的百分比 |
%MEM | 进程占用物理内存的百分比 |
VSZ | 进程占用的虚拟内存大小(单位:KB) |
RSS | 进程占用的物理内存大小(单位:KB) |
TTY | 终端名称 |
STAT | 进程状态。其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵尸进程,T-被跟踪或被停止 |
STARTED | 进程的启动时间 |
TIME | 进程使用CPU的总时间 |
COMMAND | 启动进程所使用的命令和参数,如果过长会截断显示 |
C | CPU用于计算机执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高 |
- kill [选项] 进程号:通过进程号杀死进程
-9:强迫进程链接停止 - killall 进程名称:通过进程名称杀死进程,支持通配符,这在系统因负载过大而变得很慢时很有用
- pstree [选项]:查看进程树
-p:显示进程PID
-u:显示进程的所属用户 - top [选项]:动态显示正在执行的进程,与ps最大的不同之处在于top在执行一段时间可以更新正在运行的进程。
-d 秒数:指定top指令每隔几秒更新,默认是3秒刷新
-i:不显示任何闲置或僵死进程
-p:通过指定监控进程ID
交互操作:P:以CPU使用率排序,默认此项
u:显示指定用户进程
k:杀死指定进程
M:以内存使用率排序
N:以PID排序
q:退出top - netstat [选项]:查看系统网络情况
-an:按一定顺序排列输出
-p:显示哪个进程在调用
netstat -anp:查看所有的网络服务
RPM与YUM
- rpm:一种用于互联网下载包的打包及安装工具(Redhat Package Manager)
rpm -qa | grep xxx:查询已安装的rpm列表
rpm -q 软件名:查询软件是否安装
rpm -qi 软件包名:查询软件包信息
rpm -ql 软件包名:查询软件中的文件
rpm -qf 文件全路径名:查询文件所属的软件
rpm -e 软件包:删除软件
1.如果其他软件包依赖于要删除的让软件包,卸载时则会产生错误信息
Removing these packages would break dependencies:foo is needed by bar-1.0-1
2.如果要强制删除可以加参数 –nodeps。一般不推荐这么做,这样会导致依赖于该软件的程序可能无法运行。 - rpm -ivh rpm包全路径名
-i(install)安装
-v(verbose)提示
-h(hash)进度条 - YUM:是一个shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。使用yum的前提是联网。
yum list | grep xx:查询yum服务器是否有需要安装的软件
yum install xxx:安装指定的yum包
yum -y remove xx:卸载指定的yum包
Shell编程
-
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
-
shell脚本要求:以 #!/bin/bash 开头(解释器)。脚本要有可执行权限。
-
编写一个shell脚本输出“hello world”
1. vim shell.sh #!/bin/bash echo "hello world" 2. chmod 744 shell.sh 3. ./shell.sh
-
Linux shell中的变量分为:系统变量和用户自定义变量
系统变量:$HOME,$PWD,$SHELL,$USER等(echo “PATH=$PATH”)
自定义变量:
1.定义变量:变量=值。等号两边不能有空格。变量名一般为大写。变量名可有字母、数字和下划线组成,但不能以数字开头。引用shell变量要用$。(A=10,echo “A=$A”---->A=100)
2.撤销变量:unset 变量(unset A)
3.声明静态变量:readonly 变量,该变量不能unset -
显示shell中的所有变量:set
-
将命令的返回值赋给变量:
1.A=`ls -la`(反引号,左上角esc下面),运行里面的命令然后将结果赋给变量A
2.A=$(ls -la) 等价于反引号(推荐)#!/bin/bash A=`pwd` echo "A=$A" B=$(whoami) echo "B=$B"
-
设置环境变量:
1. export 变量名=变量值:将shell变量输出为环境变量
2. source 配置文件:将修改后的配置信息立即生效(或者选择重启系统或注销)
3. echo $变量名:输出环境变量的值1. 在/etc/profile定义环境变量 JAVA_HOME=/opt/Java export JAVA_HOME 2. 要用source /etc/profile更新 3. 在其他shell脚本就可以直接$JAVA_HOME
-
shell注释:
单行注释:#
多行注释::<<!,!(分别占一行) -
位置参数变量
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。比如: ./shell.sh 10 20,可以将参数10,20传入shell.sh脚本中。
基本语法:
$n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,10以上的参数需要用大括号包含,如${10}
$*:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$#:这个变量代表命令行中所有参数的个数#!/bin/bash | [root@icu home]# ./shell.sh 10 20 echo "$0 $1 $2" | ./shell.sh 10 20 echo "$*" | 10 20 echo "$@" | 10 20 echo "$#" | 2
-
预定义变量:
shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法:
$$:当前进程的进程号(PID)
$!:后台运行的最后一个进程的进程号(PID)
$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。
后台运行:./shell.sh &#!/bin/bash | echo "当前进程号=$$" | [root@icu home]# ./shell.sh ./task.sh & | 当前进程号=74175 echo "最后进程号=$!" | 最后进程号=74178 echo "执行的值=$?" | 执行的值=0
-
运算操作
1.“$[运算时]”(推荐)或 “$((运算式))”
2.expr m + n,注意expr数字与运算符间要有空格
expr \*,/,%,乘,除,取余A=$(((2+3)*4)) | [root@icu home]# ./shell.sh echo "A=$A" | A=20 B=$[(2+3)*4] | B=20 echo "B=$B" | C=20 TEMP=`expr 2 + 3` | C=`expr $TEMP \* 4` | echo "C=$C" | | RESULT=$[$1*$2] | [root@icu home]# ./shell.sh 20 30 echo "RESULT=$RESULT" | RESULT=600
-
条件判断
基本语法:[ condition ],注意condition前后有空格!非空返回true,可使用 $? 验证(0为true,>1为false)
常用判断条件:
两个整数比较
=:字符串比较
-lt:小于,[ 30 -lt 20 ]
-le:小于等于
-eq:等于
-gt:大于
-ge:大于等于
-ne:不等于
按照文件权限进行判断
-r:有读的权限,[ -r 文件 ]
-w:有写的权限
-x:有执行的权限
按照文件类型进行判断
-f:文件存在并且是一个常规的文件(不是隐藏文件)
-e:文件存在,[ -e 文件 ]
-d:文件存在并且是一个目录 -
流程控制if语句
if判断基本语法:if [ 条件判断式 ];then 程序 fi 或者: if [ 条件判断式 ] then 程序 elif [ 条件判断式 ] then 程序 fi
输入一个数,判断大小
#!/bin/bash
if [ $1 -ge 80 ] ; then
echo "big"
elif [ $1 -ge 60 ] ; then
echo "medium"
else
if [ $1 -lt 40 ] ; then
echo "tiny"
else
echo "samll"
fi
fi
-
流程控制case语句
case语句基本语法:case $变量名 in “值1”) 如果变量的值等于值1,则执行程序1 ;; “值2”) 如果变量的值等于值2,则执行程序2 ;; …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;; esac
判断输入的参数是什么。“zero”输出0,100输出“one hundred”,其它直接输出。
#!/bin/bash
case $1 in
"zero")
echo "0"
;;
100)
echo "one hundred"
;;
*)
echo "$1"
;;
esac
-
流程控制for循环
for循环基本语法:for 变量 in 值1 值2 值3… do 程序 done 或者 for ((初始值;循环控制条件;变量变化)) do 程序 done
遍历参数列表
for i in $@
do
echo "$i"
done
计算1到100的和
SUM=0
for ((i=1;i<=100;i++))
do
SUM=$[ $SUM + $i ]
done
echo "SUM=$SUM"
-
流程控制while循环
while循环基本语法:while [ 条件判断式 ] do 程序 done
计算1到100的和
#!/bin/bash
SUM=0
i=1
while [ $i -le 100 ]
do
SUM=$[ $SUM + $i ]
i=$[ $i + 1 ]
done
echo "SUM=$SUM"
-
read读取控制台的输入
read [选项] (参数)
-p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就退出程序。read -p "enter your name: " -t 10 NAME echo "NAME: $NAME"
- 系统函数
-
basename:返回完整路径最后 / 的部分,basename命令会删掉所有的前缀包括最后一个 / ,常用于获取文件名。
basename [pathname] [suffix]
basename [string] [suffix]
选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉 -
dirname:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname [pathname]:从给定的包含绝对路径的文件名中除去文件名(包括 / ),然后返回剩下的路径#!/bin/bash basename /home/shell.sh | shell.sh basename /home/shell.sh .sh | shell dirname /opt/mysql/share/dictionary.txt | /opt/mysql/share
-
自定义函数
基本语法:function funname() #括号不用写参数 { Action; [return int;] } #调用函数直接写函数名,不用写括号 funname 参数1 参数2...
从控制台输入两个数,计算它们的和
function getSum(){
SUM=$[ $ONE + $TWO ]
echo "SUM=$SUM"
}
read -p "press the first number: " ONE
read -p "press the second number: " TWO
getSum $ONE $TWO
备份数据库
1.每天凌晨1:00备份数据库db到/data/backup/db
2.备份开始和备份结束能够给出相应的提示信息
3.备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2020-04-20_164528.tar.gz
4.在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
[root@icu ~]# cd /usr/sbin
[root@icu /usr/sbin]# vim mysql_db_backup.sh
#!/bin/bash
#备份的路径
BACKUP=“/data/backup/db”
#当前的时间为文件名
DATE=$(date "+%Y-%m-%d_%H%M%S")
#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=123456
#备份数据库名
DB_NAME=db
#判断备份路径是否存在
# [ ! -d $BACKUP/$DATE ] && mkdir -p $BACKUP/$DATE
if [ ! -d $BACKUP/$DATE ] ; then
mkdir -p $BACKUP/$DATE
fi
echo "------开始备份------"
echo "数据库备份路径 $BACKUP/$DATE.tar.gz"
mysqldump -u$(DB_USER) -p$(DB_PWD) --host=$HOST $DA_NAME > $BACKUP/$DATE/$DATE.sql
cd $BACKUP
tar -zcvf $DATE.tar.gz $DATE
#删除临时文件夹
rm -rf $DATE
#删除10天前的备份
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "------备份成功------"
[root@icu /usr/sbin]# chmod 744 mysql_db_backup.sh
[root@icu /usr/sbin]# crontab -e
0 1 * * * /usr/sbin/mysql_db_backup.sh