Linux学习记录(二)

2024-01-09 16:57:30

组管理和权限管理

组的基本介绍

在Linux中每个用户必须属于一个组,不能独立于组外;

在Linux中每个文件有所有者、所在组、其他组的概念。

一般来说谁创建了文件,谁就是文件的所有者,用户所在组就是该文件的所在组。

  • 查看文件的所有者

    • 指令:ls -ahl
  • 修改文件的所有者

    • 指令:chown 用户名 文件名
    • 同时修改文件所有者和所有组:chown 用户名:组名 文件/目录名
    • 加上选项-R,会修改某目录及其所有子目录和文件的所有者

image-20240103163308437

  • 修改文件的所在组

    • 指令:chgrp 组名 文件/目录名
    • 加上选项-R,会修改某目录及其所有子目录和文件的所在组,如chgrp -R group1 /home/test1,会将test1和他的所有子目录和文件的所有组都改为group1。

    image-20240103164924514

  • 改变用户所在组

    • 指令: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)
    • (文件)被执行,前提是可执行文件
    • (目录)可以进入该目录

image-20240103171539038

修改权限

基本指令: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是土匪。

  1. 创建组

    [root@localhost ~]# groupadd police
    [root@localhost ~]# groupadd bandit
    
  2. 创建用户(直接放到对应组)

    [root@localhost ~]# useradd jack -g police
    [root@localhost ~]# useradd jerry -g police
    [root@localhost ~]# useradd xh -g bandit
    [root@localhost ~]# useradd xq -g bandit
    
  3. 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
    
  4. 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
    
  5. xh投靠警察

    [root@localhost ~]# usermod -g police xh
    [root@localhost ~]# id xh
    uid=1004(xh) gid=1004(police) groups=1004(police)
    
  6. 测试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 ~]$ 
    

    image-20240103191620404

    可见xh虽然有文件jack.txt的读写权限,但是没有目录/jack的访问权限依旧无法修改jack.txt

  7. 解决方案: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—>周期任务

任务调度分类:

  1. 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等;
  2. 个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份。

image-20240104111224683

基本语法:crontab [选项]

选项作用
-e编辑 crontab 任务
-l查询 crontab 任务
-r删除当前用户所有的 crontab 任务
快速入门

每小时的每分钟执行 ls -l /etc/ > /tmp/to.txt命令

  1. 设置任务调度文件:/etc/crontab
  2. 设置个人任务调度,执行crondtab -e命令
  3. 接着输入任务到调度文件,*/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分钟就执行一遍命令

一些执行时间案例

image-20240106181949850

案例:每隔1分钟,将当前日期和日历都追加到/home/mycal文件中

  • 方法1:

    • crontab -e
    • */1 * * * * date >> /home/mycal
    • */1 * * * * cal >> /home/mycal
  • 方法2:写shell脚本

    • vim mycal.sh

    • 脚本内容为:

      image-20240106190656127

    • crontab -e编辑定时任务执行脚本*/1 * * * * /home/mycal.sh

image-20240106190403867

相关指令
  • crontab -r:终止任务调度
  • crontab -l:列出当前有哪些任务调度
  • service crond restart:重启任务调度

image-20240107105034942

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 指定时间的方法
  1. 接受在当天的 hh : mm ( 小时 : 分钟 ) 式的时间指定。假如该时间已过去,那么就放在第二天执行,例如04:00
  2. 使用 midnight (深夜),noon (中午),teatime (饮茶时间,一般是下午4点) 等比较模糊的词语来指定时间
  3. 采用12小时计时制,即在时间后面加上AM (上午) 或 PM (下午) 来说明是上午还是下午。例如:12pm
  4. 指一命令执行的具体日期,指定格式为 month day(月 日) 或 mm/dd/yy (月 / 日 / 年) 或 dd.mm.yy(日.月.年) ,指定的日期必须跟在指定时间的后面。例如:04:00 2021-03-1
  5. 使用相对计时法。指定格式为:now + count time-units,now 就是当前时间,time-units 是时间单位。这里能够是 minutes (分钟)、hours (小时)、days (天)、weeks (星期)。count 是时间的数量,几天、几小时。例如:now + 5 minutes
  6. 直接使用 today (今天)、tomorrow (明天) 来指定完成命令的时间

案例:两天后的下午5点执行 /bin/ls /home

image-20240107161922490

执行指令atrm 3就可以删除上述定时任务。

磁盘分局与挂载

Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是组成整个文件系统的一部分。

Linux采用了一种叫"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得

image-20240107164036005

硬盘说明

Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。

  1. 对于 IDE硬盘,驱动器标识符为 “hdx~”。其中 “hd” 表明分区所在设备的类型,这里是指IDE硬盘;“x” 为盘号 ( a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘);“~” 代表分区,前四个分区用数字1~4表示,他们是主分区或扩展分区,从5开始就是逻辑分区。
    例:hda3 表示为第一个 IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个 IDE硬盘上的第二个主分区或扩展分区
  2. 对于 SCSI硬盘则标识为 “sdx~”,SCSI硬盘是用 “sd” 来表示分区所在设备的类型的,其余则和 IDE硬盘的表示方法一样
查看所有设备挂载情况

基本指令:lsblklsblk -f

image-20240107164721159

给虚拟机添加硬盘

image-20240109120200050

可以看到新加的硬盘sdb已经有了,但是还没有分区

image-20240109120712129

硬盘分区

分区命令:fdisk /dev/sdb

命令操作:

  • m 显示命令列表
  • p 显示磁盘分区 相当于fdisk -l
  • n 新增分区
  • d 删除分区‘/
  • w 写入并退出

文章来源:https://blog.csdn.net/weixin_44320429/article/details/135482130
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。