欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux 常用命令总结(二)

程序员文章站 2022-03-16 21:36:23
一、系统管理类指令 1、uname(显示系统消息) 用于显示系统信息,比如系统类型、主机型号等。 【格式:】 uname [选项] 注: 选项: -a 或者 --all 显示全部信息 -m 或者 --machine 显示电脑型号 -n 或者 --nodename 显示主机名称 -r 或者 --rel ......

一、系统管理类指令

1、uname(显示系统消息)

  用于显示系统信息,比如系统类型、主机型号等。

【格式:】
    uname [选项]
注:
    选项:
        -a 或者 --all         显示全部信息
        -m 或者 --machine     显示电脑型号
        -n 或者 --nodename    显示主机名称
        -r 或者 --release     显示操作系统发行编号
        -s 或者 --sysname     显示系统名称
        --version            显示版本信息

【举例:】
    [root@localhost test]# uname --all

Linux 常用命令总结(二)

 

 

 

2、firewall(操作防火墙)

  centos 7 使用 firewall 管理防火墙,不使用 iptables 管理。
  使用 firewall-config 可以打开 gui 图形界面进行操作。
  使用 firewall-cmd 直接操作命令行。
  使用 man firewall-cmd 可以查看帮助信息。

【格式:】
    firewall-cmd [选项]
注:
    选项:
        --state                      用于查看 firewall 的状态
        --reload                     用于重新加载防火墙,不中断服务
        --permanent                  永久操作
        --add-port                  用于添加端口
        --list-ports                用于查看已开放的端口
        --remove-port               用于移除端口
        --add-service               用于添加服务
        --remove-service            用于移除服务
        --query-service             用于查看服务是否支持
        --get-services               用于查看支持的服务
        --get-active-zones           用于查看已被激活的分区
        
【常见操作:开启、关闭防火墙】
    [root@localhost firewalld]# firewall-cmd --state     用于查看防火墙的状态,一般都为 running。
    或者
    [root@localhost firewalld]# service firewalld status    用于查看防火墙的状态。
    
    [root@localhost firewalld]# service firewalld start     开启防火墙
    [root@localhost firewalld]# service firewalld stop      关闭防火墙
    [root@localhost firewalld]# service firewalld restart   重启防火墙

【常见操作:(开放、关闭 8080 端口,在防火墙开启时进行)】
    firewall-cmd --state
    firewall-cmd --add-port=8080/tcp
    firewall-cmd --reload
    firewall-cmd --list-port
    firewall-cmd --remove-port=8080/tcp
    
注:
    firewall-cmd --add-port=8080/tcp --permanent 表示永久操作

Linux 常用命令总结(二)

 

 

 

3、runlevel、systemctl、init(查看、设置系统运行级别)

(1)运行级别分类
  运行级别0:系统关机状态,默认级别不能设为 0,否则不能正常启动(一启动就关机)。
  运行级别1:单用户工作状态,用于系统维护、找回 root 密码等,禁止远程登录,只能在当前计算机上操作。
  运行级别2:多用户状态(无网络服务)。
  运行级别3:多用户状态(有网络服务)。
  运行级别4:作为保留级别,未使用。
  运行级别5:图形界面状态。
  运行级别6:系统重启状态,默认级别不能设为 6,否则不能正常启动(一启动就重启)。

(2)一般运行级别配置文件所在位置(/etc/inittab)
  查看可知 centos7 不使用 inittab,即使对该文件修改,也不会有影响。  
  使用 systemctl 去获取、设置运行级别。

Linux 常用命令总结(二)

 

 

 

(3)查看当前运行级别

【方式一:runlevel】
    runlevel
输出 上一个系统运行级别以及当前系统运行级别。
形如: 
    n 5     n 表示系统未更换过运行级别,5 表示当前系统运行级别为 5
    5 3     5 表示上一次运行级别为 5, 3 表示当前系统运行级别为 3
    
【方式二:】
    who -r
    
【方式三:】
    systemctl get-default
注:
    运行级别对应:
        0          /usr/lib/systemd/system/runlevel0.target -> poweroff.target
        1          /usr/lib/systemd/system/runlevel1.target -> rescue.target
        2          /usr/lib/systemd/system/runlevel2.target -> multi-user.target
        3          /usr/lib/systemd/system/runlevel3.target -> multi-user.target
        4          /usr/lib/systemd/system/runlevel4.target -> multi-user.target
        5          /usr/lib/systemd/system/runlevel5.target -> graphical.target
        6           /usr/lib/systemd/system/runlevel6.target -> reboot.target

Linux 常用命令总结(二)

 

 

 

Linux 常用命令总结(二)

 

 

 

(4)修改运行级别(init、systemctl)

【方式一:(切换运行级别,但是不修改默认设置)】
    init 数字
注:
    数字为 0 - 6
    
【方式二:(修改默认运行级别)】
    systemctl set-default xxx.target       设置默认级别为 xxx.target,重启系统生效
    systemctl isolate xxx.target           不重启系统,将运行级别切到 xxx.target,等价于 init 

【举例:】
    [root@localhost system]# systemctl get-default
    [root@localhost system]# systemctl set-default runlevel3.target
    [root@localhost ~]# systemctl isolate runlevel5.target

Linux 常用命令总结(二)

 

 

 

4、centos7 找回丢失的 root 密码

(1)解决方案:
  开机进入 单用户 模式(无需密码登陆),此时设置密码即可。

(2)安全性:
  由于单用户模式必须在服务器上直接操作,不能通过远程操作,既然都能接触服务器了,说明是内部人操作的,安全性也就可以得到保证。

(3)操作步骤:
  step1:开机,在引导界面使用 上下箭头切换,阻止默认引导功能。

Linux 常用命令总结(二)

 

 

 

  step2:按下 e 键,进入编辑界面。如下图,在行末尾 添加 init=/bin/sh,然后ctrl + x 进入单用户模式。

Linux 常用命令总结(二)

 

 

 

  step3:切换根目录,修改 root 用户的密码,并重启虚拟机。
  若出现乱码,使用 lang=en_us,修改

chroot /sysroot/          切换根目录
ll
lang=en_us                出现乱码,设置语言
passwd root               修改 root 密码
touch /.autorelabel       用来使selinux的所有的关联标签发生改变,以接受新的root密码
exit                      离开 /sysroot 目录
reboot                    重启 虚拟机

Linux 常用命令总结(二)

 

 

 

5、进程管理

(1)进程:
  可以理解为 某个正在执行的程序(命令)。程序执行时,相关的代码、属性加载到内存,操作系统给其分配一个 id,即进程 id(pid)。

(2)进程管理:
  即对系统内正在运行的进程进行管理。
  可以查看当前系统所有正在运行的进程,并以此判断哪些服务被启动,哪些非法服务被启动。
  可以用来杀死进程,停止不正常运行的进程。

(3)一般进程、孤儿进程、僵尸进程:
  一般进程:指正常情况下,子进程由父进程创建,当子进程执行完毕,父进程取得子进程的终止状态,并回收子进程的资源。

  孤儿进程:指父进程退出了,但其子进程仍在运行,此时这些子进程即为孤儿进程,被进程号 为 1的进程(即 pid = 1,一般为 init 或者 systemd)收养、并执行,执行完毕由 init 回收资源。

  僵尸进程:指的是子进程结束,但父进程没有回收子进程的资源,从而子进程一致存在于内存中,此时子进程即为 僵尸进程。

(4)进程的启动:
  可以分为 手动启动、任务调度启动。

【手动启动:】
    所谓手动启动,即用户通过命令行输入命令,并执行。
    手动启动又可分为: 前台启动、后台启动。
    前台启动:通常用于执行耗时较短的命令,此时需等待当前命令执行完毕才可继续执行下个命令(可以使用快捷键 ctrl + z 将命令挂起),比如 ls、cd 等命令。
    后台启动:通常用于执行耗时较长的命令,此时若用前台启动执行,耗时较长,可以将其转为后台执行,然后继续执行其他操作。(格式:命令 &,&前有空格)。

【任务调度启动:】
    所谓任务调度启动,指的是任务可以在指定时间、指定情况下自动启动。
    比如:数据库备份等。

 

6、ps(显示所有运行进程的信息)

  用于显示运行进程的信息。

【格式:】
    ps [选项]
注:
    选项:
        aux     查看系统的所有进程
        -le     查看系统的所有进程,以及进程的优先级、父进程id
        -l      查看当前 shell 产生的进程,以长格式显示
    
    aux 输出格式:
        user  pid %cpu %mem  vsz  rss tty  stat start   time command
       其中:
           user           指该进程由哪个用户产生的。
           pid            指该进程的 id。
           %cpu           指该进程占用 cpu 资源的百分比,占用越高越耗费资源。
           %mem           指该进程占用 物理内存 的百分比,占用越高越耗费资源。
           vsz            指该进程占用 虚拟内存 的大小,单位为 kb。
           rss            指该进程占用 实际物理内存 的大小,单位为 kb。
           tty            指该进程在哪个终端上运行。 tty1 ~ tty7 表示本地终端。 pts/0 ~ pts/255 表示虚拟终端(远程终端)。
           stat           指的是该进程状态。
                           d       睡眠状态,不可被唤醒。
                           s       睡眠状态,可被唤醒。
                           r       线程正在运行状态。
                           t       线程停止状态。
                           x       线程死亡状态。
                           z       僵尸进程,进程已终止,但仍有部分程序在内存。
                               n       低优先级
                               <       高优先级
                               s       包含子进程
                               +       后台进程
                               l       指多线程
           start          指的是该进程的启动时间。
           time           指的是该进程占用 cpu 的时间(即运行时间)。
           command        指的是该进程的名字。
    
    -le 输出格式:
        f s  uid  pid  ppid  c pri  ni addr sz wchan  tty  time cmd
        其中:
            f          指的是进程的权限。
                        1 表示进程可以被复制,但是不能被执行。
                        4 表示进程使用管理员权限。
            s          指的是该进程状态。
                           d       睡眠状态,不可被唤醒。
                           s       睡眠状态,可被唤醒。
                           r       线程正在运行状态。
                           t       线程停止状态。
                           x       线程死亡状态。
                           z       僵尸进程,进程已终止,但仍有部分程序在内存。
            uid         指的是运行该进程的用户的 id
            pid         指进程的 id
            ppid        指进程的父进程 id
            c           指该进程占用 cpu 资源的百分比,占用越高越耗费资源。 
            pri         priority,指该进程的动态优先级,数值越小,优先级越高。由内核动态调整, pri(最终值) = pri(原始值) + ni。
            ni          nice,指该进程的静态优先级,可手动修改,范围 -20 ~ 19,数值越小,优先级越高。普通用户只能调整自己的进程且只能调高 ni, 范围为 0 ~ 19。
            addr        指该进程在内存的地址。
            sz          指该进程占用的内存空间。
            wchan       指该进程是否运行, - 表示运行。
            tty         指该进程在哪个终端上运行
            time        指的是该进程占用 cpu 的时间(即运行时间)。
            cmd         指的是该进程的名字。
            
    
【举例:】
    [root@localhost test]# ps aux | grep pts/*
    [root@localhost test]# ps -le | grep pts/*
    [root@localhost test]# ps -l

Linux 常用命令总结(二)

 

 

 

7、pstree(以树形结构显示进程间的关系)

【格式:】
    pstree [选项] pid/用户名
注:
    选项:
        -p         树的节点上显示 pid

【举例:】
    [root@localhost test]# pstree -p

Linux 常用命令总结(二)

 

 

 

8、top(动态查看进程的运行状态)

  提供一个交互界面,可以方便查看进程的运行状态。

【格式:】
    top [选项]
注:
    选项:
        -d 秒数          指定每个几秒 更新一次 top,默认 3 秒
        -n 次数          指定 top 执行的次数
        -b              批处理输出,一般与 -n 连用,将 top 内容重定向到文件
        -p pid          查看指定 pid 的进程
        -u 用户名        查看指定 用户 的进程

【举例:】
    [root@localhost test]# top -p 1,2 -b -n 2 > test.txt &

Linux 常用命令总结(二)

 

 

 

  top 输出分析:

Linux 常用命令总结(二)

 

 

 

【top 输出第一行:(显示系统信息)】
    top - 14:41:14 up 1 day, 23:00,  1 user,  load average: 0.00, 0.01, 0.05
注:
    14:41:14                          表示当前系统时间
    up 1 day, 23:00                   表示当前系统运行时间
    1 user                            表示当前登录系统的用户总数为 1
    load average: 0.00, 0.01, 0.05    表示系统在前 1 分钟、5 分钟、15分钟的平均负载。
    
【top 输出第二行:(显示进程信息)】
    tasks:   2 total,   0 running,   2 sleeping,   0 stopped,   0 zombie
注:
    2 total                 表示当前查询到的进程总数为 2
    0 running               表示正在运行的进程数为 0
    2 sleeping              表示正在睡眠的进程数为 2
    0 stopped               表示正在停止的进程数为 0
    0 zombie                表示僵尸进程数为 0
    
【top 输出第三行:(显示 cpu 信息,网上白嫖的,不太明白具体含义,混个眼熟)】
    %cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
注:
    0.0 us               表示用户模式占用 0%
    0.0 sy               表示系统模式占用 0%
    0.0 ni               表示改变过优先级的进程占用 0%
    100.0 id             表示空闲 cpu 占用 100.0%
    0.0 wa               表示等待输入、输出进程占用 0%
    0.0 hi               表示硬中断请求服务占用 0%
    0.0 si               表示软中断请求服务占用 0%
    0.0 st               表示虚拟时间百分比
    
【top 输出第四行:(显示物理内存信息)】
    kib mem :  3861364 total,  2133256 free,   935192 used,   792916 buff/cache
注:
    3861364 total              物理内存总量  
    2133256 free               空闲内存量
    935192 used                已使用内存量
    792916 buff/cache          缓冲、缓存内存量
注:
    buff      缓冲,向硬盘写数据时,将数据先放置在缓冲区,再一次写入,提高数据写入的性能。
    cache     缓存,从内存中读数据时,将数据先放置在缓存区,再一次读入,挺高数据读取的性能。

【top 输出第五行:(显示交换分区信息)】
    kib swap:  2097148 total,  2097148 free,        0 used.  2622372 avail mem
注:
    2097148 total              交换分区总量  
    2097148 free               空闲交换分区量
    0 used                     已使用交换分区量
    2622372 avail mem          可用分区量

【top 输出第七行:】
        pid user  pr  ni  virt  res  shr s  %cpu %mem   time+ command
        其中
            pid        指进程 id
            user       指进程所属的用户
            pr         指进程动态优秀级
            ni         指进程静态优先级
            virt       指进程占用的虚拟内存大小
            res        指进程占用的物理内存大小
            shr        指进程占用的共享内存大小
            s          指进程状态(stat)
            %cpu       指进程占用 cpu 百分比
            %mem       指进程占用 内存 百分比
            time+      指进程占用 cpu 的时间
            command    指进程名

    交互界面常用按键:
        q           退出 top 。(ctrl + c 也行)
        p           按照 cpu 占用率降序排序(默认, %cpu)。
        m           按照 内存 使用率降序排序(%mem)。
        n           按照 pid 降序排序(pid)。
        t           按照 占用 cpu 时间排序(time+)。

 

9、lsof(显示进程打开的文件)

【格式:】
    lsof [选项]
注:
    -c 字符串       列出以字符串开头的进程打开的文件
    -u 用户名       列出某用户的进程打开的文件
    -p pid         列出某进程打开的文件
    +d 文件路径     列出某个目录下打开的文件
        
【举例:】
    [root@localhost test]# lsof +d  /usr/bin

Linux 常用命令总结(二)

 

 

 

10、kill、killall、pkill(终止进程)

  kill 向操作系统发送一个信号和进程pid,操作系统根据该信号类型对进程处理。
  kill 指令不一定能终止进程,只有系统接收终止信号并成功处理才会终止进程。
  kill 只能根据 pid 去终止进程。
  killall 通过进程名去终止一系列进程。
  pkill 通过进程名去终止一系列进程,可以用于踢出登陆的用户。

【kill 格式:】
    kill [信号] pid
注:
    常用信号:
        -1       重启进程
        -2       结束进程,并不强制,比如 ctrl + c
        -9        强制终止进程
        -15       默认信号,正常结束进程         

【killall 格式:】
    killall [选项] [信号] 进程名
注:
    选项:
        -i         提示信息
        -l         忽略进程名大小写

【pkill 格式:】
    pkill [信号]  进程名         
    pkill [-t 终端号(tty)]
     

【举例:】
    [root@localhost ~]# kill -9 7777
    [root@localhost ~]# killall -9 sshd
    [root@localhost ~]# pkill -9 sshd
    [root@localhost ~]# kill -9 -t pts/1

 

11、jobs、fg、bg(后台命令管理)

  对于一些执行时间较长的命令,如果使用前台交互的方式,则需要等待很长时间,一般将其放到后台处理,这样前台可以操作其他命令,提高工作效率。
  在命令后添加" &",&前有空格,则该命令将转为后台执行,并返回一个进程 pid,但是如果命令有输出,仍会输出到屏幕。一般可以将输出重定向到某个文件。
  使用快捷键 ctrl + z 可以挂起进程,后台可见。
  使用快捷键 ctrl + c 可以终止进程。
  使用命令 jobs 可以查看当前终端放入后台的进程。
  使用命令 bg 可以将后台进程在后台执行。
  使用命令 fg 可以将后台进程转为前台执行。

【后台命令格式:】
    命令 &

【jobs 格式:】
    jobs [选项]
注:
    选项:
        -l              列出所有进程并列出进程的 pid
        -p              只列出进程的 pid
        -r             只列出运行中的进程
        -s             只列出停止的进程

【bg 格式:】
    bg %n
注:
        使用命令 bg %n 可以使挂起的第 n 个线程在后台运行,若没有 %n,则表示执行最后一个进程。

【fg 格式:】
    fg %n           
注:    
    使用命令 fg %n 可以使挂起的第 n 个线程在前台运行,若没有 %n,则表示执行最后一个进程。
  
  注:
      对于后台运行的进程,仍会将结果输出到控制台,干扰工作,
      所以如果后台执行的进程有大量输出,可以将其重定向到某个文件。
      比如:
          想要后台执行 find / -name "*" ,
          可以写成  find / -name "*" > test.txt &  
          文件名可以任意取,但是最好不要与目录下的文件重名。
 
【举例:】
    [root@localhost test]#  find / -name "*" > test.txt &

Linux 常用命令总结(二)

 

 

 

12、crontab(设置定时任务调度)

  任务调度指的是系统在某个时间执行特定的命令或程序。
  可以查看配置文件 /etc/crontab.

Linux 常用命令总结(二)

 

 

 

【格式:】
    crontab [选项]
注:
    选项:
        -e       编辑定时任务,会打开一个空文件,与 vim 操作一致。
        -l       查询定时任务
        -r       删除当前用户所有定时任务

    编辑格式说明:
        * * * * * 命令
        其中:
            第一个 * 号表示 分钟(0 - 59)。
            第二个 * 号表示 小时(0 - 13)。
            第三个 * 号表示 月中的天数(1 - 31)。
            第四个 * 号表示 月(1 - 12)。
            第五个 * 号表示 星期(0 - 7, 其中 0 和 7 均表示星期天)。
         
         时间可以用特殊符号组合:
             逗号 , 表示不连续的时间,比如 "1, 3, 7 * * * * 命令",表示每小时的 1, 3, 7 分钟执行一次。
             减号 - 表示连续时间,比如 "1-3 * * * * 命令",表示每小时的 1 到 3 分钟执行一次命令。
             除号 / 表示每隔多久执行一次,比如 "*/3 * * * * 命令",表示每隔 3 分钟执行一次命令。
         
         注意事项:
             最小有效时间为 分钟,最大有效时间为 月,即不能指定秒、年去执行。
             5个时间以及命令不可省,不确定时间可以使用 * 表示任意时间。
             日期与星期尽量不要同时设置,容易出错。

【举例:】
    [root@localhost ~]# crontab -e
    [root@localhost ~]# crontab -l
    * * * * * /usr/bin/ll >> /root/test/hello.txt

Linux 常用命令总结(二)

 

 

 

  若出现无法执行 crontab 任务的情况,排查错误。
  step1:查看语法是否正确,是否添加任务成功。
    使用 crontab -e 编辑后,一般存放于 /var/spool/cron/用户名 下。

* * * * * ll >> /root/test/hello2.txt

Linux 常用命令总结(二)

 

 

 

  step2:查看 crond 任务是否正常启动。(一般开机自启动,可选操作)
    crond 服务是 crontab 的守护线程。

service crond status               查看 crond 的状态
service crond start/stop/restart   启动/停止/重启 crond 服务 

Linux 常用命令总结(二)

 

 

 

  step3:查看任务日志是否正确执行。(出现错误会发送邮件 mail)

【查看任务执行日志】
    tail -f /var/log/cron          可以不停的监听文件的变化
    
【查看邮箱:】
    tail -f /var/spool/mail/root 

Linux 常用命令总结(二)

 

 

 

  step4:修改错误即可。

[root@localhost test]# crontab -e
* * * * * /usr/bin/ls >> /root/test/hello2.txt
[root@localhost test]# crontab -l

Linux 常用命令总结(二)

 

 

 

  step5:如果执行没效果,也没有收到邮件,可以查看邮件是否配置有问题,找到 /etc/postfix/main.cf,修改里面的内容。

【编辑文件:】
    vim /etc/postfix/main.cf

【修改内容:】
    inet_interfaces = all
    inet_protocols = all

Linux 常用命令总结(二)

 

 

 

  step6:重启 postfix 服务

service postfix restart

service postfix status      

 

  step7: 可能存在重启 postfix 失败的情况(视情况分析)
    我遇到的情况是 缺少 libmysqlclient.so.18 依赖。查找 find / -name "*libmysqlclient.so.18*" , 确实不存在该文件。
    装 mysql 的时候漏了,mysql-community-libs-compat-8.0.11-1.el7.x86_64.rpm,下载安装后,成功解决。

 

二、用户、用户组管理

  用于管理用户,对于服务器而言,是由一个团队进行维护,而不同的用户所对应的权限应该是不同的,这样可以提高安全性。

1、用户、用户组

(1)用户
  linux 是多用户多任务的操作系统,即 linux 支持多个用户同一时间登陆。
  不同的用户具备不同的操作权限,在权限内完成相应的任务,从而达到多用户多任务的性能。
  想要登陆 linux,需要向系统管理员申请一个用户名,这个用户名是唯一的(uid号唯一),每个用户分别对应自己的家目录(家目录一般为 /home/用户名)。

(2)用户组
  用户组是具有相同特征的用户的集合,可以简化用户的管理。
举例:
  对于某个文件,某些用户只有读的权限,现在需要给用户添加写的权限,如何做?
  方式一:可以一个用户一个用户的添加权限,但是如果用户过于庞大,这样效率太低。
  方式二:可以增加一个用户组,这个组对该文件有写的权限,将用户归于这个组,则用户就拥有了写的权限。之后通过操作用户组,可以很方便的修改多个用户的权限。

(3)用户、用户组之间的关系
  一对一:即一个用户对应一个用户组,该用户具备该组的权限。
  一对多:即一个用户对应多个用户组,该用户具备多个组的权限。
  多对一:即多个用户对应一个用户组,这些用户具备同一个组的权限。
  多对多:即一个用户可以存在多个用户组中。一个用户组可以存在多个用户。

(4)uid、gid
  uid 指的是用户 id,即 user id,用于指明用户。
  gid 指的是组 id,即 group id,用于指明用户所属的组。

2、配置文件

(1)/etc/passwd
  是系统用户的配置文件,存储了系统中所有用户的基本信息,且所有用户对其都有读的权限。

【格式:】
    用户名:密码:uid:gid:描述信息:主目录:默认shell
    
注:
    :   
        表示分隔符,没有实际意义。
    
    用户名:
        指代表用户身份的字符串。
    
    密码:
        x  表示用户设有密码,密码存放在 /etc/shadow。
      
    uid:
        即用户 id,范围 0 ~ 65535.
        0 表示系统管理员。
        1 ~ 499 系统用户。
        500 ~ 65535 普通用户。
        
    gid:
        即初始组 id。用于标识当前用户存在于哪个组。
        初始组:用户创建的同时创建的组。
        附加组:用户切换的组(非初始组)。
        比如:
            root 用户创建时产生一个 root 组,手动增加一个 user 组,并将 root 用户添加到 user 组中,
            那么 root 组即为初始组,user 组为附加组。
        
    描述信息:(可选)
        描述用户。
        
    主目录:
        即用户的家目录,比如 root 的家目录为 /root,普通用户的家目录为 /home/用户名。
        
    默认 shell :
        shell 是 linux 的命令解释器(默认 bash),即将命令转换成机器语言,从而被计算机执行。
        /bin/bash       相当于正常用户,可以使用命令行敲命令。
        /sbin/nologin   不能正常登陆系统,不可以使用命令行。
        
【举例:】
    [root@localhost ~]# cat /etc/passwd | grep root
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin

Linux 常用命令总结(二)

 

 

(2)/etc/shadow
  用户保存用户的密码,只有 root 用户拥有读权限,其余用户不行。
  若忘记 root 密码,可以通过单用户模式,利用 passwd 去修改密码。

【格式:】
    用户名:加密的密码:最后一次修改的时间:最小修改时间间隔:密码有效期:密码变更前的警告天数:密码过期的宽限时间:账号失效时间:保留字段
注:
    :   
        表示分隔符,没有实际意义。
    
    用户名:
        指代表用户身份的字符串。
        
   加密的密码:
       采用 sha512 散列加密,* 或者 !! 表示需要密码登陆。
       
   最后一次修改的时间:
       指的是从 1970年1月1日开始计算的天数。
       
   最小修改时间间隔:
       指的是密码修改时间间隔,若为 0 表示随时可以修改,若为 10 表示 10 天后才可修改。
   
   密码有效期:
       默认为 99999 天,相当于长期有效。
   
   密码变更前的警告天数:
       距离密码过期的前 n 天,发送变更密码的消息。
   
   密码过期的宽限时间:
       即密码失效后,在 n 天内仍可以登陆,但之后就不能登陆了。
       
   账号失效时间:
       从 1970年1月1日,开始计算,超过时间则账号不能使用。
   
   保留字段:
       保留。     
    
【举例:】
    [root@localhost ~]# cat /etc/shadow | grep root
    root:$6$6gjnwvfg$nu15dt6dcfscj.hopeheh50auikjzqqqgsithwequ7aiweidi5uyfvpxymymxflolt.cznssehnlycabvnhes1:18346:0:99999:7:::

Linux 常用命令总结(二)

 

 

(3)/etc/group
  用于存放组的信息。

【格式:】
    组名:密码:gid:用户列表(附加组)
注:
    :   
        表示分隔符,没有实际意义。
    
    组名:
        用户组名称。
        
    密码:
        x 表示密码,存放于 /etc/gshadow 中。
        
    gid:
        用户组 id。
        
    用户列表:
        列出每个组包含的用户。若为初始组,则不显示。

【举例:】
    [root@localhost ~]# cat /etc/group | grep root
    root:x:0:

Linux 常用命令总结(二)

 

 

(4)/etc/gshadow
  用于存放组的密码。

 

【格式:】
    组名:加密密码:组管理员:组用户列表

注:
    :   
        表示分隔符,没有实际意义。
        
    组名:
        用户组名称。
        
    加密密码:
        为 空 表示没有密码(通常没有密码)。
        
    组管理员:
        用于管理组(基本不用)。
        
    组用户列表:
        显示用户。

【举例:】
    [root@localhost ~]# cat /etc/gshadow | grep root
    root:::

Linux 常用命令总结(二)

 

 

3、useradd(添加用户)

  用户添加用户。

【格式:】
    useradd [选项] 用户名
注:
    默认情况下, useradd 使用了很多选项内容,不用专门指定。
    选项:
        -g 组名   指定初始组。
        -g 组名   指定附加组。
        -u uid    指定用户 id。
        -d /目录   指定用户家目录(指明绝对路径)。
        -s shell  指定默认的shell(默认 /bin/bash)。
        
【举例:】
    [root@localhost ~]# useradd jack
    [root@localhost ~]# cat /etc/passwd | grep jack
    [root@localhost ~]# cat /etc/shadow | grep jack
    [root@localhost ~]# cat /etc/group | grep jack
    [root@localhost ~]# cat /etc/gshadow | grep jack

Linux 常用命令总结(二)

 

 

4、passwd(修改用户密码)

  用于指定用户密码、修改用户密码。

【格式:】
    passwd [选项] 用户名
 注:
     选项:
         -s   用于查看用户密码状态,仅 root 用户可用。
         -l   用于锁定用户(即密码失效),不准用户登录,仅 root 用户可用。
         -u   用于解锁用户(与 -l 对应),仅 root 用户可用。

【举例:】
    [root@localhost ~]# passwd jack
    [root@localhost ~]# passwd -s jack

Linux 常用命令总结(二)

 

 

5、id、whoami、who am i(查询用户信息)

  id 用于显示当前用户、用户组、以及组信息。
  whoami 用于显示当前操作的用户的名称。
  who am i 用于显示当前登录用户的名称。

【id 格式:】
    id [选项] 用户名
注:
    选项:
        -un    显示用户名
        -g     显示用户组 id

【whoami 格式:(等价于 id -un)】
    whoami

【who am i 格式:】
    who am i

【举例:】
    [root@localhost ~]# id root
    [root@localhost ~]# whoami
    [root@localhost ~]# who am i

Linux 常用命令总结(二)

 

 

6、userdel(删除用户)

  用于删除用户、用户家目录。
  删除 /etc/passwd 等配置文件中相关信息。

【格式:】
    userdel [选项] 用户名
注:
    选项:
        -r         表示删除用户的同时删除用户家目录。

【举例:】
    [root@localhost ~]# find / -user jack
    [root@localhost ~]# userdel jack

Linux 常用命令总结(二)

 

 

7、su(切换用户)

  用于实现多个用户间来回切换。权限高的用户切换到权限低的用户,不需要密码,反之需要。
  使用 exit 退出切换的用户。

【格式:】
    su [选项] 用户名
注:
    选项:
        -   切换用户,且同时切换工作环境(环境变量改变)。

【举例:】
    [root@localhost ~]# su - lyh
    [lyh@localhost ~]$ exit

Linux 常用命令总结(二)

 

 

8、usermod(修改用户信息)

  用于修改用户、用户组的相关信息。
  基本与 useradd 类似,是对 useradd 的一个补充。

【格式:】
    usermod [选项] 用户名
注:
    选项:
        -c     修改用户描述信息,修改 /etc/passwd 文件。
        -d     修改用户的主目录,修改 /etc/passwd 文件。
        -u     修改用户的用户id,修改 /etc/passwd 文件。
        -g 组名    修改用户的初始组,修改 /etc/passwd 文件。
        -g 组名    修改用户的附加组,即相当于将用户加入其他组,修改 /etc/group 文件。每次修改会覆盖掉之前的修改。
        -s    修改用户的默认shell。
    
【举例:】
    [root@localhost ~]# usermod -g root lyh

Linux 常用命令总结(二)

 

 

9、groupadd(添加用户组)

【格式:】
    groupadd [选项] 组名
注:
    选项:
        -g gid   指定用户组 gid
        -r       创建系统用户组

【举例:】
    [root@localhost ~]# groupadd testgroup1
    [root@localhost ~]# groupadd -g 1010  testgroup2
    [root@localhost ~]# groupadd -r testgroup3
    [root@localhost ~]# cat /etc/group | grep testgroup*

Linux 常用命令总结(二)

 

 

10、groupdel(删除用户组)

  慎用,随意删除用户组可能导致系统不能正常运行。

【格式:】
    groupdel 用户组名
    
【举例:】
    [root@localhost ~]# groupdel testgroup1

Linux 常用命令总结(二)

 

 

11、groupmod(修改用户组)

【格式:】
    groupmod [选项] 组名
注:
    -g gid            修改组 id
    -n 新组名          修改组名
    
【举例:】
    [root@localhost ~]# groupmod -g 1010 testgroup1
    [root@localhost ~]# groupmod -n testgroup2 testgroup1

Linux 常用命令总结(二)

 

 

12、gpasswd(管理用户组)

  gpasswd 可以管理用户组,交换控制权限、移除添加用户等。
  usermod 可以修改用户的附加组,但每次修改都会移除上一次的修改记录,但是使用 gpasswd 不会。

【格式:】
    gpasswd [选项] 组名
注:
    选项:
        -a user1,user2...       将组控制权限给 user1...等用户,仅 root 操作
        -m user1,,user2...      将 user1,user2... 加入组中
        -a user                 将用户加入组
        -d user                 将用户从组中移除

【举例:】
    [root@localhost /]# gpasswd -m jack1,jack2 testgroup2

Linux 常用命令总结(二)

 

 

三、文件权限管理

  所谓文件权限管理,即针对不同的用户设置不同的文件访问权限(读、写、执行)。
比如:
  一台服务器由一个团队在维护,如果每个人都用 root 权限,那么删库跑路等乱搞系统的事情难免发生。应该对不同的用户,设置不同的文件访问权限,这样才可以防止进行一些误操作。

1、文件权限分析

(1)可以使用 ls - l 查看文件权限。

【格式:】
    文件类型、权限   目录个数或者硬链接个数  用户名  组名   文件、目录大小  最后修改日期   文件、目录名
     
【举例:】
    drwxr-xr-x. 2 root root   53 3月  24 17:38 test
分析:
    drwxr-xr-x    指的是文件类型、权限。由 10 个字符组成。
    其中
       第一个字符:  d 指的是  文件类型(d 为目录, - 为文件, l 为链接,还有 b ,c, s等)
      第二 ~ 四字符:  rwx 指的是文件拥有者的权限,即 user 的权限。r 表示可读、w 表示可写、x 表示可执行。
      第五 ~ 七字符:  r-x 指的是文件所在组的权限,即 group 的权限。
      第八 ~ 十字符:  r-x 指的是组外其他用户对该文件的权限,即 other 的权限。         

Linux 常用命令总结(二)

 

 

(2)文件权限详细分析:

文件权限分三个部分,每个部分分别由三个字符组成(r, w, x)。
    rwx    r-x     r-x
        
    rwx 对于目录来说
        r 表示可查看目录(ls)。
        w 表示可创建、删除、重命名目录。
        x 表示可以进入该目录。
        - 表示没有该权限。
        
   rwx 对于文件来说
        r 表示可查看、读取文件。
        w 表示可修改文件,但不一定能删除(只有目录有 w 权限后才能删除)。
        x 表示可以执行该文件。
        - 表示没有该权限。
        
    可以通过数字表示文件权限。
        r = 4, w = 2, x = 1.
       rwx    r-x     r-x   可以表示为  7 5 5。
       
文件权限三部分分别为 : 
    文件所属用户的权限   
    文件所属组的权限(也即组内其他用户的权限)  
    组外其他用户对该文件的权限
    
【举例:】
    现有一个文件夹 java,三个用户 jack1, jack2, jack3,两个组 testgroup1, testgroup2.
    其中 jack1,jack2 属于 testgroup1 组。jack3 属于testgroup2 组。
    
    修改 java 文件夹用户、用户组,使文件夹所属用户为 jack1,所属用户组为 testgroup1。
    修改 java 文件夹权限为 750,即 rwx r-x ---
    则 jack1 拥有 rwx 权限。因为jack1 属于文件所属用户。
    jack2 拥有 r-x 权限。因为 jack2 不属于文件所属用户,但属于 testgroup1 文件组。
    jack3 拥有 --- 权限。因为 jack3 既不属于文件所属用户,也不属于 testgroup1 文件组,属于其他用户。
    
    [root@localhost test]# useradd -g testgroup1 jack1
    [root@localhost test]# useradd -g testgroup1 jack2
    [root@localhost test]# useradd -g testgroup2 jack3
    [root@localhost test]# mkdir java
    [root@localhost test]# chmod 750 java
    [root@localhost test]# chown jack1:testgroup1 java

Linux 常用命令总结(二)

 

 

2、chgrp(修改文件、目录所属的用户组)

  用于改变文件、目录所属的用户组。
  用户组不存在时会报错。

【格式:】
    chgrp [选项]  用户组  文件、目录名
注:
    选项:
        -v   显示执行过程。
        -r   用于递归处理,将目录下的子目录、文件一起处理。

【举例:】
    [root@localhost test]# touch test.txt
    [root@localhost test]# groupadd testgroup1
    [root@localhost test]# chgrp -v testgroup1 test.txt
    [root@localhost test]# ll

Linux 常用命令总结(二)

 

 

3、chown(修改文件、目录所属的用户、用户组)

  可以用于修改文件、目录所属的用户。也可以修改用户组。

【格式:】
    chown [选项] 用户 文件名
    chown [选项] 用户:用户组 文件名
注:
    选项:
        -v      显示处理流程。
        -r      表示递归处理子目录、文件。

【举例:】
    [root@localhost test]# touch test.txt
    [root@localhost test]# chown lyh:testgroup1 test.txt 
    [root@localhost test]# chown root test.txt 
    [root@localhost test]# ll

Linux 常用命令总结(二)

 

 

4、chmod(修改文件、目录的权限)

  手动修改文件、目录的权限。

【格式一:(数字形式)】
    chmod [选项] 数字权限值 文件
注:
    选项:
        -v      显示处理流程。
        -r      表示递归处理子目录、文件。
    
    数字权限值:
        rwx     4 + 2 + 1 = 7
       r-x     4 + 0 + 1 = 5
       r       4 + 0 + 0 = 4
       
【格式二:(字母形式)】
    chmod [选项] 字母[+-=]权限字符串 文件
注:
    选项:
        -v      显示处理流程。
        -r      表示递归处理子目录、文件。
    
    字母:
        u       指 user,文件所有者
        g       指 group,文件所在组
        o       指 other,其他组的用户
        a       指 all,所有用户
     
     [+-=]: 
        +        指增加权限
        -        指删除权限
        =        指设定权限
        
      权限字符串:
          rwx      r-x     r      
        
【举例:】
    [root@localhost test]# touch test.txt
    [root@localhost test]# chmod -v 711 test.txt
    [root@localhost test]# chmod -v u-x,go+r test.txt

Linux 常用命令总结(二)

 

 

5、umask(修改文件、目录默认权限)

  linux 创建新的文件、目录时,会有一个默认的权限。使用 umask 可以获取并修改。
    对于 root 用户,用户默认权限为 0022。
    对于 普通用户,用户默认权限为 0002。
    对于文件,最大默认权限为 666,即 rw- rw- rw-,默认任何用户不能执行文件。
    对于目录,最大默认权限为 777,即 rwx rwx rwx。
  而计算公式一般为
    文件目录默认权限 = (文件、目录最大的权限) - (用户默认权限)
  注:
    此处 - 表示 移除。
  举例:
    root 用户,默认权限为 0022,即 --- -w- -w-。
    此时创建的文件默认权限为 (rw- rw- rw-) - (--- -w- -w-) = rw- r-- r--
    此时创建的目录默认权限为 (rwx rwx rwx) - (--- -w- -w-) = rwx r-x r-x

【格式:】
    unmask               用于获取当前用户的默认创建权限值
    unmask 权限值         用于设置当前用户默认创建的权限值,重启虚拟机失效。可在配置文件 /etc/profile 中修改,使其永久生效。
    
【举例:】
    [root@localhost test]# umask

Linux 常用命令总结(二)

 

 

6、lsattr(查看文件、目录的隐藏属性)

  用于显示文件、目录的隐藏属性。

【格式:】
    lsattr [选项] 文件、目录名
注:
    选项:
        -a         用于显示当前目录下的文件、目录的隐藏属性,包括隐藏文件,不显示子目录
        -d         用于显示当前目录的隐藏属性。
        -r         用于显示当前目录的子目录的隐藏属性。
        
【举例:】
    [root@localhost test]# lsattr -a java/
    [root@localhost test]# lsattr -d java/
    [root@localhost test]# lsattr -r java/

Linux 常用命令总结(二)

 

 

7、chattr(设置文件、目录的隐藏属性)

  root 用户使用。
  用于改变文件的隐藏属性。使文件不可删、不可修改等。

【格式:】
    chattr [+-=][选项] 文件、目录
注:
    +-=:
        +    指添加
        -    指移除
        =    指设置
    选项:
         i       作用于文件,则文件不可被修改。作用于目录,目录下不可增删文件,但可以修改文件。
        a       作用于文件,文件只能追加数据,不能删除、修改数据。作用于目录,只允许在目录下创建、修改文件,不能删除文件。

【举例:】
    [root@localhost test]# chattr +i test.txt
    [root@localhost test]# lsattr test.txt

Linux 常用命令总结(二)