周游Linux操作系统——指令实战3
作者:Rhythm_2019
Emial:rhythm_2019@163.com
学习时间:2021.02.07
上一篇文章主要讲述了一些常用的指令,今天主要整理一下Linux的权限管理、任务调度、磁盘管理和网络配置
权限管理
Linux的权限针对的是每一个文件/目录,大家可以使用指令ls -alh
查看文件所属的用户和组
一个文件被创建时,该文件属于创建者,同时归属于创建者当时所在组
在之前的用户管理章节中我们有说过下面几个指令
- 创建用户时归属到指定用户组
useradd -g 组名 用户名
,该组必须已存在 - 创建组
groupadd 组名
- 修改组名
groupmod -l 新名字 旧名字
查看文件权限
其实使用ls
命令的时候已经可以看到了,我们随便找一行款看
1 | drwxr-xr-x. 3 root root 18 Apr 10 2020 .config |
从前往后看
- 第0个字符:文件类型,
d
表示目录,-
表示普通文件,l
表示软连接,c
表示字符设备(键盘),b
表示快文件(硬盘) - 第1-3个字符:文件创建者所拥有权限
- 第4-6个字符:文件创建者所在组成员权限
- 第7-9个字符:其他组其他成员所有权限
权限相关就上面这些,其他的也说一下
- 紧跟后面的数字:如果是文件表示硬链接的个数,如果是目录则表示内部子目录的个数
- 所属用户
- 所属组
- 文件大小(如果是文件夹则固定是4096)
- 最新修改日期
- 文件名
大家会发现前面三个三个一组的权限是由字母r
、w
、x
组成的
rwx
作用于文件:- 【r】表示可查看
- 【w】表示可修改,但是不一定能删除,能不能删除得看用户对当前目录有没有写的操作
- 【x】表示可被执行
rwx
作用于目录- 【r】表示可读取,可以用ls查看文件结构
- 【w】表示可以在目录里面创建、删除文件,重命名目录
- 【x】表示可以进入目录
我尝试了一下,如果只有
x
只能进入目录不能ls
修改文件权限
我们可以使用chmod
修改文件的权限,当然了只有创建者才能修改。该命令有两种用法:
+ 、 -、 = 变更权限
u:所有者 g:所有组 o:其他人 a:所有人(u、 g、 o 的总和)
1
chmod u+r g=rx 文件名
通过数字变更权限
规则: r=4 w=2 x=1 ,rwx=4+2+1=7
1
chmod u=rwx,g=rx,o=x 文件目录名
相当于
1
chmod 751 文件目录名
修改文件拥有者
更改文件的拥有者
1 | chown newonwer file |
如果文件比较多可以使用-R
递归修改,该指令还可以修改文件所在组
1 | chown newowner:newgroup file |
修改文件所属组
修改文件所属组
1 | chgrp newgroup file |
一样的可以用R
递归修改
最佳实战
这是老师的课堂练习,大家可以敲一敲体验一下
建立四个用户 (唐僧,悟空,八戒,沙僧)
1 | useradd wukong |
设置密码
1 | passwd |
把悟空,八戒放入妖怪 唐僧,沙僧放在神仙
1 | groupadd yaoguai |
用悟空建立一个文件 ( monkey.java 该文件要输出 i am monkey)
1 | echo "i am monkey" >> monkey.java |
给八戒一个可以 r w 的权限
1 | chmod g=rw monkey.java |
八戒修改 monkey.java 加入一句话( i am pig)
1 | echo "i am pig" >> monkey.java |
把 沙僧 放入妖怪组
1 | usermod -g yaoguai shaseng |
让沙僧 修改 该文件 monkey, 加入一句话 (“我是沙僧,我是妖怪!”)
1 | echo "我是沙僧,我是妖怪" >> monkey.java |
任务调度
说到定时任务,大家应该会想到Spring Task
那些吧,我们先复习一下cron
表达式
普通cron
表达式
这部分内容纯属复习,我后来才发现crontab
里面的表达式好像不支持以秒为单位的
cron结构
corn从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份
字段 | 允许值 | 允许的特殊字符 |
---|---|---|
秒(Seconds) | 0~59的整数 | , - * / 四个字符 |
分(Minutes) | 0~59的整数 | , - * / 四个字符 |
小时(Hours) | 0~23的整数 | , - * / 四个字符 |
日期(DayofMonth) | 1~31的整数(但是你需要考虑你月的天数) | ,- * ? / L W C 八个字符 |
月份(Month) | 1~12的整数或者 JAN-DEC | , - * / 四个字符 |
星期(DayofWeek) | 1~7的整数或者 SUN-SAT (1=SUN) | , - * ? / L C # 八个字符 |
年(可选,留空)(Year) | 1970~2099 | , - * / 四个字符 |
特殊字符
*
:表示匹配该域的任意值。假如在Minutes域使用*, 即表示每分钟都会触发事件。?
:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用,如果使用表示不管星期几都会触发,实际上并不是这样。-
:表示范围。例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次/
:表示起始时间开始触发,然后每隔固定时间触发一次。例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次.,
:表示列出枚举值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。L
:表示最后,只能出现在DayofWeek和DayofMonth域。如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。W
:表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份 。LW
:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。#
:用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三。
例子
1 | (1)0 0 2 1 * ? * 表示在每月的1日的凌晨2点调整任务 |
参考:https://www.cnblogs.com/yanghj010/p/10875151.html
cron
指令
表达式如下,他是不支持秒的
1 | * * * * * ommand |
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
如果你想要用秒来执行可以这样
1 | # crontab -e |
我们可以通过该指令创建任务
1 | conrtab -e |
打开编辑器,写下任务
1 | cron表达式 命令或指定shell文件 |
保存后生效
conrtab -r
终止任务crontab -l
列出所有任务service crond restart
重启任务service crond start
//启动服务service crond stop
//关闭服务service crond reload
//重新载入配置
举两个例子吧
定时输出日期到文件中
1
*/1 * * * *; date >> /home/date.txt
定时备份MySQL,先编写Shell脚本
1
/usr/local/mysql/bin/mysqldump -u root -proot testdb > /tmp/mydb.bak
然后加入任务
1
0 2 * * *; /home/my.sh
磁盘管理
先说一下几个概念
分区
分区有两种模式:
- MBR分区
- 最多支持4个主分区(放操作系统的分区)
- 系统只能安装在主分区上
- 扩展分区要装在主分区上
- MBR最大只支持2TB,但拥有较好的兼容性
- GTP分区
- 支持无限多个主分区(但是操作系统还是会限制分区数量)
- 最大支持18EB大容量
- 需要操作系统支持
对于Linux来说,他的分区需要挂载到某一个目录使用的,会议Linux的目录结构,一切目录最后都是由根目录/来的,所以所有分区都是文件系统的一部分
硬盘
- Linux 硬盘分 IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘 2)对于 IDE 硬盘
- 驱动器标识符为
“hdx~”
,其中“hd”
表明分区所在设备的类型,这里是指IDE硬盘。 “x”为盘号( a 为基本盘, b为基本从属盘, c 为辅助主盘, d 为辅助从属盘) ,“~”代表分区,前四个分区用数字 1 到 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。例: hda3 表示为第一个 IDE 硬盘上的第三个主分区或扩展分区,hdb2 表示为第二个 IDE 硬盘上的第二个主分区或扩展分区 - 对于 SCSI 硬盘则标识为“sdx~”, SCSI 硬盘是用“sd”来表示分区所在设备的类型的,其余则 和 IDE 硬盘的表示方法一样
lsblk
指令
老师说这个指令叫做:老师不离开,他可以查看当前硬盘情况。带上f
参数可以看到UUID和挂载目录
1 | lsblk -f |
添加一块硬盘
主要是下面五个步骤即可
在虚拟机中加入硬盘
这个在虚拟机设置里面添加一块就好,添加完重启一下,就能看到那块硬盘了
对新硬盘进行分区
1
fdisk /dev/sdb
该指令由四个比较重要的选项
- m 显示命令列表
- p 显示磁盘分区 同 fdisk –l
- n 新增分区
- d 删除分区
- w 写入并退出
所以我们是先输入
n
,他会问我们是主分区还是拓展分区,我们选择主分区就好,剩下的默认选择就行然后就多了一块分区
格式化新的分区
1
mkfs -t ext4 /dev/sdb1
格式化后就会产生UUID了
挂载到文件系统
1
mount /dev/sdb1/ /home/newDisk
设置开机自动挂载
打开
/etc/fstab
,添加一行1
/dev/sdb1 /home/newDisk ext4 defaults 0 0
然后输入命令
1
mount -a
就可以了
对了,使用umount
可以解除挂载哈
1 | umount /dev/sdb1 |
df
指令
该指令可以查看硬盘的使用情况
1 | df -h |
这里h
还是让人看的意思
du
指令
查看当前目录占用硬盘的情况
1 | du -h /home |
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
例如
1 | du -ach --max-depth=1 /opt |
统计文件数
查看当前目录下文件夹的个数
1 | ls -al | grep "^-" | wc - |
如果需要包括子目录,在ls
后面带上r
即可
显示树形结构
和window一样
1 | tree |
如果没有这个指令就yum install tree
按照一下
网络配置管理
界面操作的化大家参考老师的视频吧,这里说两个
防火墙
搭建一些环境的时候就需要这个,以前防火墙是iptables
,现在用的是firewallD
服务操作
查看防火状态
1
2systemctl status firewalld
service iptables status暂时关闭防火墙
1
2systemctl stop firewalld
service iptables stop永久关闭防火墙
1
2systemctl disable firewalld
chkconfig iptables off重启防火墙
1
2systemctl enable firewalld
service iptables restart
关于iptables
大家可以参考这篇文章:https://www.cnblogs.com/datastart/p/10509184.html
端口操作
对于firewalld
,我们可以使用
1 | iptables -Ln |
查看所有端口的状态,在/etc/config/iptables
中添加
1 | -A INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT |
然后重启服务即可
对于firewalld
来说,打开某一个需要使用指令
1 | firewall-cmd --zone=public --add-port=80/tcp --permanent |
重新载入
1 | firewall-cmd --reload |
查看
1 | firewall-cmd --zone=public --query-port=80/tcp |
删除
1 | firewall-cmd --zone=public --remove-port=80/tcp --permanent |
这个在跑跑服务器的时候很有用
固定IP地址
有时候XShell突然连不上可能就是IP变了的原因,我们可以去/etc/sysconfig/network-scripts/ifcfg-ens33
修改一下,我的文件名和老师的不一样
这样就好了,我们再使用ifconfig
就能看到我们的IP
好啦,下一节讲述的是Linux的进程管理,感觉三天好像有点极限,还想着回家之前看完的