Linux系统有7个运行级别(runlevel):

  • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
  • 运行级别2:多用户状态(没有NFS)
  • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
  • 运行级别4:系统未使用,保留
  • 运行级别5:X11控制台,登陆后进入图形GUI模式
  • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

快捷键

  • Ctrl+a 光标移动到行首

  • Ctrl+e 光标移动到行尾

  • Ctrl+c 终止当前程序

  • Ctrl+d 删除光标前的字符,或者推出当前中断

  • Ctrl+l 清屏

  • Ctrl+u 剪切光标之前的字符

  • Ctrl+k 剪切光标之后的字符

  • Ctrl+y 复制u/k操作中的内容

  • Ctrl+r 查找最近用过的命令

  • Ctrl+shift+c 复制

  • Ctrl+shift+v 粘贴

  • tab 补全命令或路径

  • 键盘↑和↓键切换使用过的命令

  • 这些快捷键是可以更改的,但是不建议更改,一般保持默认就好

grep命令 – 强大的文本搜索工具

grep来自于英文词组“global search regular expression and print out the line”的缩写,意思是用于全面搜索的正则表达式,并将结果输出。人们通常会将grep命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵活。

与之容易混淆的是egrep命令和fgrep命令。如果把grep命令当作是标准搜索命令,那么egrep则是扩展搜索命令,等价于“grep -E”命令,支持扩展的正则表达式。而fgrep则是快速搜索命令,等价于“grep -F”命令,不支持正则表达式,直接按照字符串内容进行匹配。

语法格式: grep [参数] 文件

常用参数:

-i 忽略大小写
-c 只输出匹配行的数量
-l 只列出符合匹配的文件名,不列出具体的匹配行
-n 列出所有的匹配行,显示行号
-h 查询多文件时不显示文件名
-s 不显示不存在、没有匹配文本的错误信息
-v 显示不包含匹配文本的所有行
-w 匹配整词
-x 匹配整行
-r 递归搜索
-q 禁止输出任何结果,已退出状态表示搜索是否成功
-b 打印匹配行距文件头部的偏移量,以字节为单位
-o 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位
-F 匹配固定字符串的内容
-E 支持扩展的正则表达式

参考实例

搜索某个文件中,包含某个关键词的内容:

1
2
3
[root@linuxcool ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

搜索某个文件中,以某个关键词开头的内容:

1
2
[root@linuxcool ~]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash

搜索多个文件中,包含某个关键词的内容:

1
2
3
[root@linuxcool ~]# grep linuxprobe /etc/passwd /etc/shadow
/etc/passwd:linuxprobe:x:1000:1000:linuxprobe:/home/linuxprobe:/bin/bash
/etc/shadow:linuxprobe:$6$9Av/41hCM17T2PrT$hoggWJ3J/j6IqEOSp62elhdOYPLhQ1qDho7hANcm5fQkPCQdib8KCWGdvxbRvDmqyOarKpWGxd8NAmp3j2Ln00::0:99999:7:::

搜索多个文件中,包含某个关键词的内容,不显示文件名称:

1
2
3
[root@linuxcool ~]# grep -h linuxprobe /etc/passwd /etc/shadow
linuxprobe:x:1000:1000:linuxprobe:/home/linuxprobe:/bin/bash
linuxprobe:$6$9Av/41hCM17T2PrT$hoggWJ3J/j6IqEOSp62elhdOYPLhQ1qDho7hANcm5fQkPCQdib8KCWGdvxbRvDmqyOarKpWGxd8NAmp3j2Ln00::0:99999:7:::

输出在某个文件中,包含某个关键词行的数量:

1
2
3
[root@linuxcool ~]# grep -c root /etc/passwd /etc/shadow
/etc/passwd:2
/etc/shadow:1

搜索某个文件中,包含某个关键词位置的行号及内容:

1
2
3
[root@linuxcool ~]# grep -n network anaconda-ks.cfg 
17:network --bootproto=static --device=ens160 --ip=192.168.10.10 --netmask=255.255.255.0 --onboot=off --ipv6=auto --activate
18:network --hostname=linuxcool.com

搜索某个文件中,不包含某个关键词的内容:

1
2
3
4
5
6
[root@linuxcool ~]# grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
linuxprobe:x:1000:1000:linuxprobe:/home/linuxprobe:/bin/bash

搜索当前工作目录中,包含某个关键词内容的文件,未找到则提示:

1
2
3
4
5
6
7
8
9
10
11
[root@linuxcool ~]# grep -l root *
anaconda-ks.cfg
grep: Desktop: Is a directory
grep: Documents: Is a directory
grep: Downloads: Is a directory
initial-setup-ks.cfg
grep: Music: Is a directory
grep: Pictures: Is a directory
grep: Public: Is a directory
grep: Templates: Is a directory
grep: Videos: Is a directory

搜索当前工作目录中,包含某个关键词内容的文件,未找到不提示:

1
2
3
[root@linuxcool ~]# grep -sl root *
anaconda-ks.cfg
initial-setup-ks.cfg

递归搜索,不仅搜索指定目录,还搜索其内子目录内是否有关键词文件:

1
2
3
4
5
6
7
8
[root@linuxcool ~]# grep -srl root /etc
/etc/fstab
/etc/X11/xinit/Xclients
/etc/X11/xinit/xinitrc
/etc/libreport/events.d/collect_dnf.conf
/etc/libreport/events.d/bugzilla_anaconda_event.conf
/etc/libreport/forbidden_words.conf
………………省略部分输出信息………………

搜索某个文件中,精准匹配到某个关键词的内容(搜索词应与整行内容完全一样才会显示,有别于一般搜索):

1
2
3
[root@linuxcool ~]# grep -x cd anaconda-ks.cfg 
[root@linuxcool ~]# grep -x cdrom anaconda-ks.cfg
cdrom

判断某个文件中,是否包含某个关键词,通过返回状态值输出结果(0为包含,1为不包含),方便在Shell脚本中判断和调用:

1
2
3
4
5
6
[root@linuxcool ~]# grep -q linuxprobe anaconda-ks.cfg 
[root@linuxcool ~]# echo $?
0
[root@linuxcool ~]# grep -q linuxcool anaconda-ks.cfg
[root@linuxcool ~]# echo $?
1

搜索某个文件中,空行的数量:

1
2
[root@linuxcool ~]# grep -c ^$ anaconda-ks.cfg 
6

Linux系统的文件目录结构

目录结构:

bin:全称binary,含义是二进制。该目录中存储的都是一些二进制文件,文件都是可以被运行的。

dev:该目录中主要存放的是外接设备,例如盘、其他的光盘等。在其中的外接设备是不能直接被使用的,需要挂载(类似windows下的分配盘符)。

etc:该目录主要存储一些配置文件。

home:表示“家”,表示除了root用户以外其他用户的家目录,类似于windows下的User/用户目录。

proc:process,表示进程,该目录中存储的是Linux运行时候的进程。

root:该目录是root用户自己的家目录。

sbin:全称super binary,该目录也是存储一些可以被执行的二进制文件,但是必须得有super权限的用户才能执行。

tmp:表示“临时”的,当系统运行时候产生的临时文件会在这个目录存着。

usr:存放的是用户自己安装的软件。类似于windows下的program files。

var:存放的程序/系统的日志文件的目录。 Mnt:当外接设备需要挂载的时候,就需要挂载到mnt目录下。

1
2
[root@localhost /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

用户账号管理

  • 用户账号的作用:用户账号可用来登录系统,可实现访问控制

  • 用户模板目录:/etc/skel/

1
2
[root@localhost ~]# ls -a /etc/skel/
. .. .bash_logout .bash_profile .bashrc .mozilla

useradd创建用户

  • useradd 命令用于创建新的用户
  • 命令格式:useradd【-选项】用户名
  • 常用选项
    • -u 指定用户UID
    • -d 指定用户家目录
    • -c 用户描述信息
    • -g 指定用户附加组
    • -G 指定用户附加组
    • -s 指定用户的shell
1
2
3
[root@localhost ~]# useradd user1
[root@localhost ~]# id user1
uid=1001(user1) gid=1001(user1) 组=1001(user1)

/etc/passwd用户信息文件

用户的基本信息存放在/etc/passwd文件

1
2
3
4
5
6
7
[root@localhost ~]# vim /etc/passwd

root:x:0:0:root:/root:/bin/bash
#用户名:密码占位符:UID:基本组GID:用户描述信息:家目录:解释器程序
UID:0 超级用户
UID:1-499 系统伪用户,不能登录系统并且没有家目录
UID:500-65535 普通用户

/etc/default/useradd用户默认值文件

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# vim /etc/default/useradd 

# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

/var/spool/mail/用户邮箱目录

1
2
[root@localhost ~]# ls /var/spool/mail
user rpc user1

passwd设置用户密码

  • 命令格式:passwd 【-选项】 【用户名】

  • 密码规范(针对普通用户):长度不能小于8个字符,复杂度(数字、字母区分大小写,特殊字符)

  • 常用选项

    -S 查看密码信息

    -l 锁定用户密码

    -u 解锁用户密码

    -d 删除密码

    –stdin 通过管道方式设置用户名密码

    1
    2
    3
    4
    5
    6
    [root@localhost ~]# passwd user1 
    更改用户 user1 的密码 。
    新的 密码:1
    无效的密码: 密码是一个回文
    重新输入新的 密码:1
    passwd:所有的身份验证令牌已经成功更新。
  • 非交互设置用户密码

    • 命令格式:echo 密码 | passwd –stdin 用户名
    1
    2
    3
    [root@localhost ~]# echo 123| passwd --stdin user1 
    更改用户 user1 的密码 。
    passwd:所有的身份验证令牌已经成功更新。
  • 用户的密码信息存放在/etc/shadow文件中,该文件默认任何人都没有任何权限(不包括root)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [root@localhost ~]# vim /etc/shadow

    root:$6$XPT7VF/wmCYxiIy8$wtFfhDgnKuQ8zvMTEvPZAZ8FEn1RITEYeL8xoKtmR9ivqlXLkhPm7by14qAtL797PzECIEblSyGqIYqiZTmDK/::0:99999:7:::

    #每个字段含义解释:
    第一字段:用户名
    第二字段:密码加密字符串,加密算法为SHA512散列加密算法,如果密码位是“*”或者“!!”表示密码已过期
    第三个字段:密码最后一次修改日期,日期从1970年1月1日起,每过一天时间戳加1
    第四个字段:密码修改的期限,如果该字段为0示随时可以修改密码,例如:该字段为10,代表10天之内不可以修改密
    第五个字段:密码有效期
    第六个字段:密码到期前警告时间(和第五个字段相比)
    第七个字段:密码过期后的宽限天数(和第五个字段相比)
    第八个字段:账号失效时间,日期从1970年1月1日起第
    九个字段:保留

    #chage命硬用于修改/etc/shadow文件信息,修改文件内容第三个字段(密码最后一次修改时间)
    [root@localhost ~]# chage -d 0 user1 #用户登录需要重置密码

su切换用户

  • su命令用于切换当前用户身份到其他用户身份

  • 命令格式:su 【-选项】 【用户名】

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #只切换用户身份,不切换环境
    [root@localhost ~]# su user1
    [user1@localhost root]$ ls
    ls: 无法打开目录.: 权限不够
    [user1@localhost root]$ exit
    exit

    #切换用户身份,连同环境一起切换
    [root@localhost ~]# su - user1
    上一次登录:一 8月 8 18:16:30 CST 2022pts/0 上
    [user1@localhost ~]$ pwd
    /home/user1
    [user1@localhost ~]$

    #普通用户切换为root(需要输入root用户的密码)
    [user1@localhost ~]$ su - root
    密码:
    上一次登录:一 8月 8 11:26:22 CST 2022从192.168.2.23pts/0 上

usermod修改用户属性

  • usermod命令用于修改已存在用户的基本信息

  • 命令格式:usermod [-选项] 用户名

  • 常用选项:

    • -u 修改用户UID

    • -c 修改用户描述信息

    • -d 修改用户家目录

    • -g 修改用户基本组

    • -G 添加用户附加组

    • -s 修改用户shell

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #修改用户UID(用户如果已登录系统,不允许修改)
    [root@localhost ~]# id user1
    uid=1001(user1) gid=1001(user1) 组=1001(user1)
    [root@localhost ~]# usermod -u 1111 user1
    [root@localhost ~]# id user1
    uid=1111(user1) gid=1001(user1) 组=1001(user1)

    #修改用户的解释器
    [root@localhost ~]# usermod -s /bin/bash user1

userdel删除用户

  • userdel用于删除给定的用户以及与用户相关的文件,该命令若不加选项仅删除用户账号,不删除用户相关文件

  • 命令格式:userdel[-选项]用户名

  • 常用选项:

    • -r删除用户同时,删除与用户相关的所有文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    - #删除用户,仅删除账号,不删除家目录
    [root@localhost ~]# userde1 user8
    [root@loca1host ~]# ls /home
    user1 user2 user4 user5 user8
    [root@localhost ~]# id user8
    id: user8: no such user

    #删除用户,连同用户家目录一并删掉
    [root@loca1host ~]# userde1 -r user4
    [root@localhost ~]# 1s /home
    user1 user2 user5 user8
    [root@localhost ~]# id user4
    id: user4 : no such user