组管理和权限管理
组的基本介绍
在Linux中每个用户必须属于一个组,不能独立于组外;
在Linux中每个文件有所有者、所在组、其他组的概念。
一般来说谁创建了文件,谁就是文件的所有者,用户所在组就是该文件的所在组。
-
查看文件的所有者
- 指令:
ls -ahl
- 指令:
-
修改文件的所有者
- 指令:
chown 用户名 文件名
- 同时修改文件所有者和所有组:
chown 用户名:组名 文件/目录名
- 加上选项
-R
,会修改某目录及其所有子目录和文件的所有者
- 指令:
-
修改文件的所在组
- 指令:
chgrp 组名 文件/目录名
- 加上选项
-R
,会修改某目录及其所有子目录和文件的所在组,如chgrp -R group1 /home/test1
,会将test1和他的所有子目录和文件的所有组都改为group1。
- 指令:
-
改变用户所在组
- 指令:
usermod -g 组名 用户名
- 指令:
-
改变用户登录的初始目录
- 指令:
usermod -d 目录名 用户名
- 特别说明:用户需要有进入到新目录的权限才行
- 指令:
权限的基本介绍
ls -l
中显示的内容如下:
-rw-rw-r--. 1 admin admin 146 Jan 2 05:28 mytest2.tar.gz
-rw-rw-r--. 1 tom admin 342 Jan 2 05:13 mytest.zip
drwxrwxr-x. 2 admin admin 23 Jan 2 05:26 test2
drwxrwxr-x. 3 admin admin 19 Jan 2 05:29 test3
第1列的0-9 位说明:
-
第 0 位确定文件类型(d, - , l , c , b)
- d是目录,相当于 windows 的文件夹
- l 是链接,相当于 windows 的快捷方式
- c 是字符设备文件,比如鼠标,键盘 —> /dev/目录下可以看到
- b 是块设备,比如硬盘 —> /dev/目录下可以看到
- - 代表是普通文件,比如:.txt
-
第 1-3 位确定该文件的所有者对该文件的 权限。—User
-
第 4-6 位确定该文件所属的组和该组中的用户对该文件的 权限。—Group
-
第 7-9 位确定其他用户(不是所有者,也不是同一组的其他用户)对该文件的权限 。—Other
rwx权限说明
注意要区分是作用到文件还是作用到目录
- r:可读(read)
- (文件)可以读取,查看
- (目录)可以读取,可以用 ls 查看目录内容
- w:可写(write)
- (文件)可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件,删除文件相当于是要修改目录
- (目录)可以修改, 可以对目录进行创建、删除、重命名
- x:可执行(execute)
- (文件)被执行,前提是可执行文件
- (目录)可以进入该目录
修改权限
基本指令:chmod
-
方法1:+、-、=变更权限
- u:所有者,g:所有组,o:其他人,a:所有人
chmod u=rwx,g=rx,o=x 文件/目录名
,为用户赋予权限chmod o+w 文件/目录名
,+表示在原有的基础上追加权限chmod a-x 文件/目录名
,-表示撤销某权限
-
方法2:通过数字变更范围
- r=4,w=2,x=1,rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件/目录名
,相当于chmod 751 文件/目录名
最佳实践:警察-土匪游戏
有两个组:police组,bandit组;有四个用户:jack,jerry,xh,xq;其中jack和jerry是警察,xh和xq是土匪。
-
创建组
[root@localhost ~]# groupadd police [root@localhost ~]# groupadd bandit
-
创建用户(直接放到对应组)
[root@localhost ~]# useradd jack -g police [root@localhost ~]# useradd jerry -g police [root@localhost ~]# useradd xh -g bandit [root@localhost ~]# useradd xq -g bandit
-
jack创建一个文件,自己可以读写rw,本组人可以读r,其它组没人任何权限
[jack@localhost ~]$ touch jack.txt [jack@localhost ~]$ ll total 0 -rw-r--r--. 1 jack police 0 Jan 3 03:05 jack.txt [jack@localhost ~]$ chmod o-r jack.txt [jack@localhost ~]$ ll total 0 -rw-r-----. 1 jack police 0 Jan 3 03:05 jack.txt
-
jack修改该文件,让其它组人可以读,本组人可以读写
[jack@localhost ~]$ chmod o+r,g+w jack.txt [jack@localhost ~]$ ll total 0 -rw-rw-r--. 1 jack police 0 Jan 3 03:05 jack.txt
-
xh投靠警察
[root@localhost ~]# usermod -g police xh [root@localhost ~]# id xh uid=1004(xh) gid=1004(police) groups=1004(police)
-
测试xh和xq能不能对jack.txt文件进行读写
[root@localhost ~]# su - xh [xh@localhost ~]$ cd /home/jack -bash: cd: /home/jack: Permission denied [xh@localhost ~]$ ll /home total 4 drwx------. 16 admin admin 4096 Jan 2 05:11 admin drwx------. 5 jack police 144 Jan 3 03:08 jack drwx------. 3 jerry police 78 Jan 3 03:03 jerry drwx------. 3 tom group1 78 Jan 3 00:27 tom drwx------. 5 xh police 107 Jan 3 03:12 xh drwx------. 3 xq bandit 78 Jan 3 03:03 xq [xh@localhost ~]$
可见xh虽然有文件jack.txt的读写权限,但是没有目录/jack的访问权限依旧无法修改jack.txt
-
解决方案:jack修改其目录的权限为同组可访问
[jack@localhost ~]$ chmod g+rx /home/jack [jack@localhost ~]$ ll /home total 4 drwx------. 16 admin admin 4096 Jan 2 05:11 admin drwxr-x---. 5 jack police 144 Jan 3 03:08 jack drwx------. 3 jerry police 78 Jan 3 03:03 jerry drwx------. 3 tom group1 78 Jan 3 00:27 tom drwx------. 5 xh police 128 Jan 3 03:15 xh drwx------. 3 xq bandit 78 Jan 3 03:03 xq [jack@localhost ~]$ logout [root@localhost ~]# su - xh Last login: Wed Jan 3 04:03:08 PST 2024 on pts/0 [xh@localhost ~]$ cd /home/jack [xh@localhost jack]$ ll total 0 -rw-rw-r--. 1 jack police 0 Jan 3 03:05 jack.txt [xh@localhost jack]$ echo 'hello' >> jack.txt [xh@localhost jack]$ cat jack.txt hello
结论:如果要对目录内的文件进行操作,首先要有对该目录有访问权限
注意: rwx权限对于文件夹(目录) 的细节讨论和测试!
- x::表示可以进入到该目录,比如 cd
- r:表示可以使用指令
ls
,将目录的内容显示出来,有r权限没有x权限表示可以进到这个目录,但是不能看到有哪些东西 - w:表示可以在该目录下删除、创建或重命名文件
定时任务调度
crond定时任务
任务调度:是指系统在某个时间执行特定的命令或程序。 crond—>周期任务
任务调度分类:
- 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等;
- 个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。
基本语法:crontab [选项]
选项 | 作用 |
---|---|
-e | 编辑 crontab 任务 |
-l | 查询 crontab 任务 |
-r | 删除当前用户所有的 crontab 任务 |
快速入门
每小时的每分钟执行 ls -l /etc/ > /tmp/to.txt命令
- 设置任务调度文件:
/etc/crontab
- 设置个人任务调度,执行
crondtab -e
命令 - 接着输入任务到调度文件,
*/1 * * * * ls -l /etc/ > /tmp/to.txt
,意思就是每分钟执行一次ls -l /etc/ > /tmp/to.txt
命令
项目 | 含义 | 范围 |
---|---|---|
第一个 “ * ” | 一个小时当中的第几分钟 | 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分钟就执行一遍命令 |
一些执行时间案例
案例:每隔1分钟,将当前日期和日历都追加到/home/mycal文件中
-
方法1:
crontab -e
*/1 * * * * date >> /home/mycal
*/1 * * * * cal >> /home/mycal
-
方法2:写shell脚本
-
vim mycal.sh
-
脚本内容为:
-
crontab -e
编辑定时任务执行脚本*/1 * * * * /home/mycal.sh
-
相关指令
crontab -r
:终止任务调度crontab -l
:列出当前有哪些任务调度service crond restart
:重启任务调度
at定时任务
at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了。
at的守护进程atd会以后台模式运行,检查作业队列来运行。默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
因此,在使用 at 命令的时候,一定要保证atd进程的启动,可以使用指令ps -ef | grep atd
检测atd进程是否运行。
基本语法:at [选项] [时间]
,Ctrl + D结束at命令的输入
选项 | 含义 |
---|---|
-m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-I | 显示任务队列,atq 的别名 |
-d<编号> | 删除某任务,atrm 的别名 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q <队列> | 使用指定的队列 |
-f <文件> | 从指定文件读入任务而不是从标准输入读入 |
-t <时间参数> | 以时间参数的形式提交要运行的任务 |
at 指定时间的方法
- 接受在当天的 hh : mm ( 小时 : 分钟 ) 式的时间指定。假如该时间已过去,那么就放在第二天执行,例如04:00
- 使用 midnight (深夜),noon (中午),teatime (饮茶时间,一般是下午4点) 等比较模糊的词语来指定时间
- 采用12小时计时制,即在时间后面加上AM (上午) 或 PM (下午) 来说明是上午还是下午。例如:12pm
- 指一命令执行的具体日期,指定格式为 month day(月 日) 或 mm/dd/yy (月 / 日 / 年) 或 dd.mm.yy(日.月.年) ,指定的日期必须跟在指定时间的后面。例如:04:00 2021-03-1
- 使用相对计时法。指定格式为:now + count time-units,now 就是当前时间,time-units 是时间单位。这里能够是 minutes (分钟)、hours (小时)、days (天)、weeks (星期)。count 是时间的数量,几天、几小时。例如:now + 5 minutes
- 直接使用 today (今天)、tomorrow (明天) 来指定完成命令的时间
案例:两天后的下午5点执行 /bin/ls /home
执行指令atrm 3
就可以删除上述定时任务。
磁盘分局与挂载
Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是组成整个文件系统的一部分。
Linux采用了一种叫"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得
硬盘说明
Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
- 对于 IDE硬盘,驱动器标识符为 “hdx~”。其中 “hd” 表明分区所在设备的类型,这里是指IDE硬盘;“x” 为盘号 ( a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘);“~” 代表分区,前四个分区用数字1~4表示,他们是主分区或扩展分区,从5开始就是逻辑分区。
例:hda3 表示为第一个 IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个 IDE硬盘上的第二个主分区或扩展分区 - 对于 SCSI硬盘则标识为 “sdx~”,SCSI硬盘是用 “sd” 来表示分区所在设备的类型的,其余则和 IDE硬盘的表示方法一样
查看所有设备挂载情况
基本指令:lsblk
或 lsblk -f
给虚拟机添加硬盘
可以看到新加的硬盘sdb
已经有了,但是还没有分区
硬盘分区
分区命令:fdisk /dev/sdb
命令操作:
- m 显示命令列表
- p 显示磁盘分区 相当于
fdisk -l
- n 新增分区
- d 删除分区‘/
- w 写入并退出