linux基础 | 组、任务调度、磁盘、进程、服务管理、包管理

1、Linux组基本介绍

每一个用户必须属于一个组,Linux里面有所有者,所在组,其他组的概念

文件属于用户,用户属于组

一般来说谁创建了这个文件,这个文件就属于谁

文件/目录 所有者
查看文件的所有者

指令:ls -ahl

修改文件所有者

指令:chown 用户名 文件名

案例:使用root创建一个apple.txt,然后将其所有者修改成tom

touch apple.txt

chown tom apple.txt // 前提是tom这个用户必须存在

所在组

基本指令:

groupadd 组名

案例:

创建一个组monster,创建一个用户fox,并放入到monster组中

groupadd monster

useradd -g monster fox

id fox //检查一下

查看文件/目录所在组

也是ls -ahl

修改文件所在的组

chgrp 组名 文件名

案例:使用root用户创建文件 orange.txt 看看当前这个文件属于哪个组,然后将这个文件所在组,修改到fruit组

groupadd fruit

touch orange.txt

看看当前这个文件属于哪个组 -> root组

chgrp fruit orange.txt

其他组

除了文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组

改变用户所在组

在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组

改变用户所在组:

usermod -g 组名 用户名

usermod -d 目录名 用户名 改变该用户登录的初始目录 特别说明:用户需要有进入到新目录的权限

案例:将zwj这个用户从原来所在组,修改到wudang组

cat /etc/group 可以查看所有组

想具体查可以这么写 cat /etc/group | grep wudang

usermod -g wudang feifan

权限的基本介绍

ls -l 中显示的内容如下

-rw-r--r--. 1 root fruit 0 11月 25 12:32 orange.txt

0-9位说明

  1. 第0位确定文件类型(d,-,l,c,b)

    l是链接,相当于windows的快捷方式

    d是目录,相当于windows的文件夹

    c是字符设备文件,鼠标,键盘

    b是块设备,比如硬盘

  2. 第1-3位确定所有者(该文件的所有者)拥有该文件的权限 ---User

  3. 第4-6位确定所属组(同用户组的)拥有该文件的权限 ---Group

  4. 第7-9位确定其他用户拥有该文件的权限 ---Other

rwx权限详解
  • rwx作用到文件
  1. [r]代表可读(read):可以读取,查看
  2. [w]代表可写(write):可以修改,但是不代表可以删除文件,删除一个文件的前提条件是对该文件的所在目录具有写权限,才可以删除该文件
  3. [x]代表可执行(execute):可以被执行
  • rwx作用到目录
  1. [r]代表可读(read):可以读取,ls查看目录内容
  2. [w]代表可写(write):可以修改,对目录内创建+删除+重命名目录
  3. [x]代表可执行(execute):可以进入该目录

-代表没有对应的权限

文件及目录权限实际案例

ls -l中显示的内容如下

-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc

10个字符确定不同用户能对文件干什么

第一个字符代表文件类型 : -l d c b

其余字符每3个一组(rwx) 读(r) 写(w) 执行(x)

第一组rwx: 文件拥有者的权限是读、写和执行

第二组rw-: 与文件拥有者同一组的用户的权限是读、写但不能执行

第三组r-- : 不与文件拥有者同组的其他用户的权限是读不能写和执行

可用数字表示为: r=4,w=2,x=1 因此rwx=4+2+1=7

其它说明:

内容 作用
1 文件:硬连接数或 目录:子目录数
root 用户
root
1213 文件大小(字节),如果是文件夹,显示4096字节
Feb 2 09:39 最后修改日期
abc 文件名
修改权限-chmod

通过chmod指令,可以修改文件或者目录的权限

第一种方式:+、-、=变更权限

u:所有者 q:所有组 o:其他人 a:所有人(u,g,o的总和)

  • chmod u=rwx,g=rx,o=x 文件/目录名
  • chmod o+w 文件/目录名
  • chmod a-x 文件/目录名

案例:

  1. 给abc文件的所有者读写执行的权限,给所在组读执行权限,给其他组读执行权限

​ chmod u=rwx,g=rx,o=rx abc

  1. 给abc文件的所有者除去执行的权限,增加组写的权限

    chmod u-x,g+w abc

  2. 给abc文件的所有用户添加读的权限

    chmod a+r abc

第二种方式:通过数字变更权限

r=4 w=2 x=1 rwx=4+2+1=7

chmod u=rwx,g=rx,o=x 文件目录名

相当于chmod 751文件目录名

案例:将/home/abc.txt 文件的权限修改成rwxr-xr-x,使用给数字的方式实现

chmod 755 /home/abc.txt

修改文件所有者-chown

chown newowner 文件/目录 改变所有者

chown newowner:newgroup 文件/目录 改变所有者和所在组

-R 如果是目录 则使其下所有子文件或目录递归生效

案例:

请将/home/abc.txt 文件的所有者修改成tom

chown tom /home/abc.txt

请将/home/kkk 目录下的所有的文件和目录的所有者都修改成tom

chown -R tom /home/kkk

修改文件/目录所在组-chgrp

chgrp newgroup 文件/目录 改变所有组

案例:

请将/home/abc.txt 文件所在组修改成shaolin

groupadd shaolin

chgrp shaolin /home/abc.txt

请将/home/kkk 目录下的所有的文件和目录的所在组都修改成shaolin

chgrp -R shaolin /home/test

实践案例1:警察和土匪游戏

police,bandit

jack,jerry:警察

xh,xq:土匪

  1. 创建组

    groupadd police; groupadd bandit

  2. 创建用户

    useradd -g police jack; useradd -g police jerry;

    useradd -g bandit xh; useradd -g bandit xq;

  3. jack创建一个文件,自己可以读写,本组人可以读,其他组没人任何权限

    首先jack登录; vim jack.txt; chmod 640 jack.txt

    设置密码是passwd 用户名

  4. jack修改该文件,让其它组人可以读,本组人可以读写

    chmod 644 jack.txt 或者 chmod o-r,g=r jack.txt

  5. xh投靠警察,看看是否可以读写

    usermod -g police xh

  6. 测试,看看 xh 是否可以读写,xq是否可以

    结论:如果要对目录内的文件进行操作,需要先拥有对该目录的相应权限

实践案例2:
  1. 建立两个组(神仙(sx),妖怪(yg))

    groupadd sx; groupadd yg;

  2. 建立四个用户(唐僧、悟空、八戒、沙僧)

    useradd ts; useradd yg; useradd bj; useradd ss

  3. 设置密码

    passwd ts // 剩下四个分别设置密码

  4. 把悟空,八戒放入妖怪。唐僧沙僧在神仙

    usermod -g yg wk

    usermod -g yg bj

    usermod -g sx ts

    usermod -g sx ss

  5. 用悟空建立一个文件(monkey.java 该文件要输出 i am monkey)

    登录悟空的账号

    vim monkey.java

    写入 i am monkey

  6. 给八戒一个可以r w的权限

    cd /home/

    chmod g+r+w+x wk

  7. 八戒修改monkey.java 加入一句话(i am pig)

    切换到bj账号,cd /home/wk

    vim monkey.java

    添加之后保存

  8. 唐僧 沙僧 对该文件没有权限

  9. 把沙僧放入妖怪组

    usermod -g yg ss

  10. 让沙僧 修改该文件的monkey,加入一句话(”我是沙僧,我是妖怪!“)

    切换到ss账号,编辑即可vim monkey.java

  11. 对文件夹rwx的细节讨论和测试!!!

    收回悟空的所有权限chmod g-r-w-x wk // 需要先切换到root账户的home目录

    用bj的账号打开home/wk

    ls的时候会提示权限不够

    把wk组读的权限打开

    创建文件touch xxx.txt

    x:表示可以进入到该目录

    r:表示可以ls,将目录的内容显示

    w:表示可以在该目录,删除或者创建文件

2、crond任务调度

crontab进行 定时任务的设置

任务调度:指系统在某个时间执行的特定的命令或程序

任务调度分类:系统工作,有些重要的工作必须周而复始的执行,比如病毒扫描

个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份

基本语法:

crontab [选项]

常用选项

-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户的所有crontab任务

快速入门

设置任务调度文件:/etc/crontab

设置个人任务调度,执行crontab -e命令

接着输入任务到调度文件

如:*/1**** ls -l /etc/>/tmp/to.txt

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

参数细节说明

5个占位符说明

项目 含义 范围
第一个* 一小时当中的第几分钟 0-59
第二个* 一天当中的第几小时 0-23
第三个* 一个月当中的第几天 1-31
第四个* 一年当中的第几个月 1-21
第五个* 一周当中的星期几 0-7(0和7都代表星期日)

时间规则

特殊符号的说明

特殊符号 含义
* 代表任何时间,比如第一个“*”就代表一小时中每分钟都执行一次的意思
代表不连续的时间,比如“0,8,12,16***”命令,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
- 代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令
*/n 代表每隔多久执行一次。比如“*/10 * * * *”命令,代表每隔10分钟就执行一遍命令

特定时间执行任务案例

时间 含义
45 22 *** 命令 在22点45分执行命令
0 17 ** 1 命令 每周1的17点0分执行命令
0 5 1,15 * * 命令 每月1号和15号的凌晨5点0分执行命令
40 4 * * 1-5 命令 每周一到周五的凌晨4点40分执行命令
*/10 4 * * * 命令 每天的凌晨4点,每隔10分钟执行一次命令
0 0 1,15 * 1 命令 每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。

任务调度应用实例

  1. 每隔1分钟,就将当前的日期信息,追加到/tmp/mydate文件中

    */1 * * * * date >> /tmp/mydate
    
  2. 每隔1分钟,将当前日期和日历都追加到/home/mycal文件中

    vim /home/my.sh   写入内容 date >> /home/mycal和cal>> /home/mycal
    给my.sh增加执行权限,chmod u+x /home/my.sh
    crontab -e 增加*/1 * * * * /home/my.sh
    
  3. 每天凌晨2:00 将mysql数据库testdb,备份到文件中。提示:指令为mysqldump -u root -p 密码 数据库 >> /home/db.bak

    crontab -e 
    0 2 * * * mysqldump -u root -proot testdb >> /home/db.bak
    

crond相关指令

  • conrtab -r :终止任务调度
  • crontab -l :列出当前有哪些任务调度
  • service crond restart [重启任务调度]

at定时任务

  1. at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行

  2. 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业

  3. at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了

  4. 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看

    ps -ef | grep atd

    这条指令可以检测atd是否在运行

    ps指令是查看服务器的进程信息,-e 等价于 -A 表示列出全部的进程

    -f 显示全部的列(显示全字段)

at命令格式

at[选项] [时间]

Ctrl + D 结束at命令的输入

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(明天)来指定完成命令的时间

案例:

  1. 2天后的下午5点执行/bin/ls/home

    at 5pm + 2 days
    /bin/ls /home   
    最后需要按两次CTRL+D才能保存,输错了删除可以按CTRL+BackSpace
    
  2. atq命令来查看系统中没有执行的工作任务

    atq
    
  3. 明天17点钟,输出时间到指定文件内 比如/root/date100.log

    at 5pm tomorrow
    date > /root/date100.log
    
  4. 2分钟后,输出时间到指定文件夹内 比如/root/date200.log

    at now + 2 minutes
    date > /root/date200.log
    
  5. 删除已经设置的任务,atrm编号

    atrm 2
    

3、磁盘

  • Linux磁盘分区机制
    1. Linux无论有几个分区,分给哪一个目录使用它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中的每个分区都是用来组成整个文件系统的一部分
    2. Linux采用了一种叫”载入“的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录练习起来。这是要载入的一个分区将使它的存储空间在一个目录下获得
    3. 示意图

  • 硬盘说明
    1. Linux硬盘分为IDE硬盘盒SCSI硬盘,目前基本上是SCSI硬盘

    2. 对于IDE硬盘,驱动器标识符为“hdx”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了,“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“”代表分区,前四个分区用数字1到4表示,他们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区

    3. 对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在的设备的类型,其余则和IDE硬盘的表示方法一样

      UUID就是每一个分区的标识符40位

      MOUNTPOINT就是挂载点

  • 增加磁盘应用实例

    如何增加一块硬盘

    1. 虚拟机添加硬盘

    2. 分区

      分区命令 fdisk /dev/sdb

      m 显示分区命令列表

      p 显示磁盘分区 同fdisk -l

      n 新增分区

      d 删除分区

      w 写入并退出

      说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q

    3. 格式化

      格式化磁盘

      分区命令:mkfs -t ext4 /dev/sdb1

      其中ext4是分区类型

    4. 挂载

      挂载:将一个分区与一个目录联系起来,

      mount 设备名称 挂载目录

      例如:mount /dev/sdb1 /newdisk

      umount 设备名称 或者 挂载目录

      例如:umount /dev/sdb1 或者 umount /newdisk

      注意:用命令行挂载重启后会失效

    5. 设置可以自动挂载

      vim里面拷贝是yyp

      永久挂载:通过修改/etc/fstab实现挂载

      添加完成后 执行mount -a 即刻生效

    查看分区的指令lsblk

    添加完硬盘之后重启reboot

  • 磁盘情况查询

    查询系统整体磁盘使用情况

    基本语法:

    df -h

    应用实例:

    查询系统整体磁盘使用情况

    使用率80%以上就需要清理一下

  • 查询指定目录的磁盘占用情况

    基本语法:

    du -h /目录

    查询指定目录的磁盘占用情况,默认为当前目录

    -s 指定目录占用大小汇总

    -h 带计量单位

    -a 含文件

    --max-depth=1 子目录深度

    -c 列出明细的同时,增加汇总值

    应用实例

    查询/opt目录的磁盘占用情况,深度为1

    du -h --max-depth=1 /opt
    du -ha --max-depth=1 /opt
    du -hac --max-depth=1 /opt
    
  • 磁盘实用指令
    1. 统计/opt文件夹下文件的个数

      ls -l /opt | grep "^-" | wc -l
      
    2. 统计/opt文件夹下目录的个数

      ls -l /opt | grep "^d" | wc -l
      
    3. 统计/opt文件夹下文件的个数,包括子文件夹里的

      ls -lR /opt | grep "^-" | wc -l
      
    4. 统计/opt文件夹下目录的个数,包括子文件了里的

      ls -lR /opt | grep "^d" | wc -l
      
    5. 以树状显示目录结构

      指令:tree 目录
      注意:如果没有tree,则使用yum install tree安装
      
  • Linux网络配置原理图

    NAT网络配置

  • 查看虚拟网络编辑器和修改IP地址

    虚拟机-编辑-虚拟网络编辑器

    选中NAT模式

    修改子网IP

  • 查看windows环境中的VMnet8网络配置(ipconfig指令)
  • 查看linux的配置ifconfig
  • ping测试主机之间的网路连通性

    基本语法:ping 目的主机(功能描述:测试当前服务器是否可以连接目的主机)ctrl+c可以退出

    案例:

    ping www.baidu.com
    
  • linux网络环境配置

    第一种方法(自动获取):

    说明:登录后,通过界面来设置自动获取ip,特点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样

    第二种方法(指定ip):

    说明:

    直接修改配置文件来指定IP,并可以连接到外网(程序员推荐)

    编辑 vi/etc/sysconfig/network-scripts/ifcfg-ens33

    要求:将ip地址配置的静态的,比如:ip地址为192.168.200.130

    ifcfg-ens33就类似于网卡

    ifcfg-ens33文件说明

    DEVICE=eth0     #接口名(设备,网卡)
    HWADDR=00:0C:2x:6x:0x:xx      #MAC地址
    TYPE=Ethernet         #网络类型(通常是Ethemet)
    UUID=926a57ba-92c6-4231-bacb-f27e5e6a9f44  #随机id
    ONBOOT=yes
    #IP的配置方法[none|static|bootp|dhcp] (引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
    BOOTPROTO=static
    #IP地址
    IPADDR=192.168.200.130
    #网关
    GATEWAY=192.168.200.2
    #域名解析器
    DNS1=192.168.200.2
    

    重启网络服务或重启系统生效

    service network restart、reboot

  • 设置主机名和hosts映射
    1. 为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名

      vim /etc/hostname
      reboot
      
    2. 指令hostname:查看主机名

    3. 修改文件在/etc/hostname指定

    4. 修改后,重启生效

  • 设置hosts映射

    思考:如何通过主机名能够找到(比如ping)某个linux系统?

    • windows

      在C:\Windows\System32\driviers\etc\hosts文件指定即可

      案例:192.168.200.130 hspedu100

    • linux

      在/etc/hosts文件指定

      案例:192.168.200.1 ThinkPad-PC

  • Hosts是什么

    一个文本文件,用来记录IP和Hostname(主机名)的映射关系

  • DNS
    1. DNS,就是Domain Name System的缩写,翻译过来就是域名系统
    2. 是互联网上作为域名和IP地址相互映射的一个分布式数据库
  • 主机名解析机制分析(Hosts、DNS)

    案例:用户在浏览器输入www.baidu.com

    1. 浏览器会先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有就检查操作系统DNS解析器缓存,如果有直接返回IP完成解析。这两个缓存可以理解为本地解析器缓存

    2. 一般来说,电脑第一次成功访问某个网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录)如在cmd窗口中输入

      ipconfig /displaydns //DNS域名解析缓存

      ipconfig /flushdns // 手动清理dns缓存

    3. 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回

    4. 如果本地DNS解析器缓存和hosts文件中均没有找到对应IP,则到域名服务DNS进行解析域

4、进程基本介绍

linux里面,每一个执行的程序都称为一个进程,每一个进程都分配一个ID号(pid进程号)

每个进程都可能以两种方式存在的,前台和后台

显示系统执行的进程

ps命令:

ps -a:显示当前终端的所有进程信息

ps -u:以用户的格式显示进程信息

ps -x:显示后台进程运行的参数

ps详解:

ps -aux|grep xxx ,比如我看看有没有sshd服务

说明:

system V 展示风格

USER:用户名称

PID:进程号

%CPU:进程占CPU的百分比

%MEM:进程占用物理内存的百分比

VSZ:进程占用虚拟内存的大小KB

RSS:进程占用的物理内存的大小KB

TT:终端名称,缩写

STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级 R-正在运行,D-短期等待 Z-僵死进程 T-被跟踪或者被停止等等

STARTED:进程的启动时间

TIME:CPU时间,即进程使用的CPU的总时间

COMMAND:启动进程所有的命令和参数,如果过长会被截断显示

练习

以全格式显示当前所有的进程,查看进程的父进程

终止进程kill和killall

查看进程数pstree

pstree 选项 可以更加直观的看进程信息

-p 显示进程的PID

-u 显示进程的所属用户

案例1:请树状形式显示进程的pid

案例2:树状形式进程的用户id

5、服务(service)管理

服务(service) 本质就是进程,如(mysqld,sshd 防火墙等),但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,因此我们又称为守护进程,是Linux中非常重要的知识点。(原理图)

service管理指令

service 服务名 [start | stop | restart | reload | status]

在centOS7后 很多服务不在使用service,而是systemctl(后面专门讲)

service指令管理的服务在 /etc/init.d查看

查看服务名:

方式1:使用setup -> 系统服务 就可以看到全部

setup可以看到所有的服务

方式2:/etc/init.d 看到 service 指令管理的服务ls -l /etc/init.d

服务的运行级别

linux系统有7种运行级别:常用的是级别3和5

chkconfig指令

systemctl指令

开启防火墙

systemctl status firewalld

关闭防火墙

systemctl stop firewalld

打开或者关闭指定端口

动态监控进程

top和ps命令很相似,他们都用来显示正在执行的进程,Top和Ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程

监控网络状态:

6、包管理

rpm包的管理

rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager ( RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。

Linux的分发版本都有采用(suse,redhat, centos 等等),可以算是公认的行业标准了

yum包管理

安装JDK8

安装tomcat

idea安装

posted @ 2023-05-14 23:03  喵喵队立大功  阅读(48)  评论(0编辑  收藏  举报