Linux基础命令 - 文件及目录操作, 打印输出, 查找命令, 用户及权限管理, vi的使用等

Linux基础指令

文章目录

  • Linux基础指令
    • 综合知识
      • [vi - 纯文本编辑器](https://qq.wdev.cn/c/vi.html)
        • **语法格式:**vi [参数] 文件
        • 命令模式
        • 插入模式
        • 底行模式
      • 重定向符号
      • 通配符
      • 管道符
    • 文件及目录操作命令
      • [ls – 显示目录下的文件信息](https://www.linuxcool.com/ls)
      • [cd – 切换目录](https://www.linuxcool.com/cd)
      • [pwd – 显示当前工作目录的路径](https://www.linuxcool.com/pwd)
      • [mkdir – 创建目录文件](https://www.linuxcool.com/mkdir)
      • [touch – 创建空文件与修改时间戳](https://www.linuxcool.com/touch)
      • [stat – 显示文件的状态信息](https://www.linuxcool.com/stat)
      • [cp – 复制文件或目录](https://www.linuxcool.com/cp)
      • [mv – 移动或改名文件](https://www.linuxcool.com/mv)
      • [rm – 删除文件或目录](https://www.linuxcool.com/rm)
    • 打印输出命令
      • [echo命令 – 输出字符串或提取后的变量值](https://www.linuxcool.com/echo)
      • [cat – 显示文本文件全部内容](https://www.linuxcool.com/cat)
      • [more – 分页显示文本文件内容](https://www.linuxcool.com/more)
      • [tail – 查看文件尾部内容](https://www.linuxcool.com/tail)
    • 查找命令
      • [grep – 文本搜索工具](https://www.linuxcool.com/grep)
      • [wc – 统计文件的字节数、单词数、行数](https://www.linuxcool.com/wc)
      • [which – 查找命令文件](https://www.linuxcool.com/which)
      • [find – 根据路径和条件搜索指定文件](https://www.linuxcool.com/find)
    • 用户及权限管理
      • Linux中的三种用户
      • [su – 切换用户身份](https://www.linuxcool.com/su)
      • [sudo - 以其他身份来执行命令](https://qq.wdev.cn/c/sudo.html)
      • 用户组管理
        • [groupadd – 创建新的用户组](https://www.linuxcool.com/groupadd)
        • [groupdel – 删除用户组](https://www.linuxcool.com/groupdel)
        • [groupmod – 更改群组识别码或名称 ](https://www.linuxcool.com/groupmod)
        • [chgrp - 变更文件或目录的所属群组](https://qq.wdev.cn/c/chgrp.html)
      • 用户管理
        • [useradd - 创建的新的系统用户](https://qq.wdev.cn/c/useradd.html)
        • [userdel - 删除的用户以及与相关的文件](https://qq.wdev.cn/c/userdel.html)
        • [id - 查询用户和所在组的信息](https://qq.wdev.cn/c/id.html)
        • [usermod – 修改用户账号信息](https://www.linuxcool.com/usermod)
        • [passwd - 修改用户的密码值](https://qq.wdev.cn/c/passwd.html)
      • 权限管理
        • 权限介绍 | ls-l目录权限信息图片介绍
        • 权限更改 | [chmod - 更改文件或目录的权限](https://qq.wdev.cn/c/chmod.html)
        • 更改所属 | [chown – 改变文件或目录的用户和用户组](https://www.linuxcool.com/chown)
  • 综合知识
      • [vi - 纯文本编辑器](https://qq.wdev.cn/c/vi.html)
        • **语法格式:**vi [参数] 文件
        • 命令模式
        • 插入模式
        • 底行模式
      • 重定向符号
      • 通配符
      • 管道符
    • 文件及目录操作命令
      • [ls – 显示目录下的文件信息](https://www.linuxcool.com/ls)
      • [cd – 切换目录](https://www.linuxcool.com/cd)
      • [pwd – 显示当前工作目录的路径](https://www.linuxcool.com/pwd)
      • [mkdir – 创建目录文件](https://www.linuxcool.com/mkdir)
      • [touch – 创建空文件与修改时间戳](https://www.linuxcool.com/touch)
      • [stat – 显示文件的状态信息](https://www.linuxcool.com/stat)
      • [cp – 复制文件或目录](https://www.linuxcool.com/cp)
      • [mv – 移动或改名文件](https://www.linuxcool.com/mv)
      • [rm – 删除文件或目录](https://www.linuxcool.com/rm)
    • 打印输出命令
      • [echo命令 – 输出字符串或提取后的变量值](https://www.linuxcool.com/echo)
      • [cat – 显示文本文件全部内容](https://www.linuxcool.com/cat)
      • [more – 分页显示文本文件内容](https://www.linuxcool.com/more)
      • [tail – 查看文件尾部内容](https://www.linuxcool.com/tail)
    • 查找命令
      • [grep – 文本搜索工具](https://www.linuxcool.com/grep)
      • [wc – 统计文件的字节数、单词数、行数](https://www.linuxcool.com/wc)
      • [which – 查找命令文件](https://www.linuxcool.com/which)
      • [find – 根据路径和条件搜索指定文件](https://www.linuxcool.com/find)
    • 用户及权限管理
      • Linux中的三种用户
      • [su – 切换用户身份](https://www.linuxcool.com/su)
      • [sudo - 以其他身份来执行命令](https://qq.wdev.cn/c/sudo.html)
      • 用户组管理
        • [groupadd – 创建新的用户组](https://www.linuxcool.com/groupadd)
        • [groupdel – 删除用户组](https://www.linuxcool.com/groupdel)
        • [groupmod – 更改群组识别码或名称 ](https://www.linuxcool.com/groupmod)
        • [chgrp - 变更文件或目录的所属群组](https://qq.wdev.cn/c/chgrp.html)
      • 用户管理
        • [useradd - 创建的新的系统用户](https://qq.wdev.cn/c/useradd.html)
        • [userdel - 删除的用户以及与相关的文件](https://qq.wdev.cn/c/userdel.html)
        • [id - 查询用户和所在组的信息](https://qq.wdev.cn/c/id.html)
        • [usermod – 修改用户账号信息](https://www.linuxcool.com/usermod)
        • [passwd - 修改用户的密码值](https://qq.wdev.cn/c/passwd.html)
      • 权限管理
        • 权限介绍 | ls-l目录权限信息图片介绍
        • 权限更改 | [chmod - 更改文件或目录的权限](https://qq.wdev.cn/c/chmod.html)
        • 更改所属 | [chown – 改变文件或目录的用户和用户组](https://www.linuxcool.com/chown)

综合知识

vi - 纯文本编辑器

vi命令 是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能

vi编辑器支持编辑模式命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用**“esc”键**,从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。

**语法格式:**vi [参数] 文件
参数 参数作用
-s 静默模式, 不显示指令的任何错误信息
– -cmd<命令> 加载任何vimrc文件之前执行指定命令
-R 只读模式
-v Vi模式
-e Ex模式
-y 简易模式
-c<命令> 加载第一个文件之后执行指定命令
-s<脚本输入文件> 从指定脚本输入文件阅读普通模式命令
-w<脚本输出文件> 追加所有类型的命令写入脚本输出文件
-W<脚本输出文件> 写入所有类型的命令到指定脚本输出文件
+<行数> 从指定行开始
– -noplugin 不要加载插件脚本
-p<数量> 打开指定数量的标签页(带文件名)
-r<文件名> 恢复崩溃的会话
-L 等同于-r
-r 列出交换文件并退出
-u 熟用指定vimrc,而不是.vimrc
-T<终端> 设置使用指定终端
-o<数量> 打开指定数量的窗口
-n 不使用交换文件,只用内存
-Z 受限模式
-m 不允许修改(写入)
-b 二进制模式
-M 在文本中不允许修改

实例

# 打开已有文件后编辑
vi test.txt
# 先编辑后保存到新建文件, 如果已存在需要:wq!强制覆盖
vi
~~~
:wq test.txt
# 打开某个已存在的文件,从第6行开始编写
vi +6 xianlin.txt
# 打开某个已存在的文件,以只读模式进入
vi +R xianlin.txt
命令模式

直接用命令(vi 文件名)打开一个文件的话,默认是在命令模式下。

vi xianlin.txt
---
~
~
~
"xianlin.txt" 行数, 大小

命令模式下常用命令

Ctrl+u # 向文件首翻半屏;
Ctrl+d #向文件尾翻半屏;
Ctrl+f / PgUp #向文件尾翻一屏;
Ctrl+b / PgDn #向文件首翻一屏;
k # 向上移动光标
j # 向下移动光标
h # 向左移动光标
l # 向右移动光标
gg # 光标跳转到文本第一行
G # 光标跳转到文本最后一行
Shift+^ (Shift+6) # 把光标跳转到所在行首
Shift+$ (Shift+4) # 把光标跳转到所在行尾
ZZ # 保存文件并退出, 可以打开大写锁定或者按住shift
x / X # 删除一个字符, x小写删除光标后, X大写删除光标前
D # 删除从当前光标到行尾的字符
dd # 删除光标所在的当前行
p / P # 粘贴缓存区内容, p小写为粘贴到光标前, P大写为粘贴到光标后
r / R # 替换字符, r小写为只替换一个字符, R大写为一直替换输入
u # 撤销上一步操作

# 进入插入模式
a #在当前字符后添加文本
A #在行末添加文本
i #在当前字符前插入文本
I #在行首插入文本
o #在当前行后面插入一空行
O #在当前行前面插入一空行
插入模式

在命令模式下输入a、A、i、I、o、O中任何一个字符即可进入插入模式,在此模式下才可以对文件进行编辑,输入内容。在此模式下按 ESC键 退出到命令模式

底行模式

在命令模式下,通过输入 :(英文冒号)即可切换到底行模式,底行模式下可以做一些保存,字符替换等操作,底行模式下命令以回车结束,退出或者返回命令模式,或者双击Esc返回命令模式。

底行模式常用命令

:set nu # 显示行号
:set nonu # 关闭显示行号
:q # 不保存退出
:wq #保存退出
:q! #强制退出
:wq! #强制保存退出
:/string # 查找字符串所在行, 并把光标跳转到所在行
:%s/old/new # 将全部old替换成new
:n # 定位到n行(n代指数字)
:$ # 将光标跳转到最后一行首
:f # 显示当前文件名, 是否已修改, 光标所在行, 当前显示比例

重定向符号

重定向就是将标准输出(本身也是一个文件/dev/stdout)导向一个文件或者追加到一个文件中。在linux中,使用>符号来表示导向到一个文件,使用>>符号来表示追加到一个文件。

符号 描述
> 符号左边输出作为右边输入(标准输出)
>> 符号左边输出追加右边输入
< 符号右边输出作为左边输入(标准输入)
<< 符号右边输出追加左边输入
& 重定向绑定符号

实例

# 覆盖文件的内容
echo "hello" > file.txt
# 追加到文件结尾并另起一行
echo "hi" >> file.txt

通配符

Linux命令中, 大部分命令支持通配符, 尤其是批量创建, 删除操作中

命令行通配符

符号 含义
* 表示匹配任意长度的任意字符
表示匹配任意一个字符
[ ] 表示匹配[ test ]内的任意单个字符
[^test] 表示匹配[ test ]外的任意单个字符

具体用法

test* , 表示任何以test为开头的内容
*test,表示任何以test结尾的内容
*test*,表示任何包含test的内容

[a-z],[0-9],[A-Z],[a-z0-9]

​ [[:upper:]]-------------所有大写字母

​ [[:lower:]]-------------所有小写字母

​ [[:alpha:]]-------------所有字母

​ [[:dight:]]--------------所有数字

​ [[:alnum:]]------------所有字母和数字

​ [[:space:]]------------所有空白字符

​ [[:punct:]]-------------所有标点符号

​ [^[:upper:]]-----------所有大写字母以外

​ [^0-9]-----------------所有数字以外

​ [^[:alnum:]]----------所有数字和字母以外

管道符

管道符:|

作用:管道是一种通信机制,通常用于进程间的通信。它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)

实例:

# 查找一个文件夹, 并以ls -l的格式打印出来
ls -l /usr/bin | grep xzm
# 结果
-rwxr-xr-x 1 root root        2162  48  2022 xzmore
# 查找一个文件夹下的文件数量
ls -l /usr/bin | wc -l
#结果
1495

文件及目录操作命令

ls – 显示目录下的文件信息

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

参数 参数作用
-a 显示所有文件及目录 (包括以“.”开头的隐藏文件)
-l 使用长格式列表模式列出文件及目录的详细信息
-r 将文件以相反次序显示(默认依英文字母次序)
-t 根据最后的修改时间排序
-h 需要和-选项搭配使用,以更加人性化的方式显示文件的大小单位
-A 同 -a ,但不列出 “.” (当前目录) 及 “…” (父目录)
-S 根据文件大小排序
-R 递归列出所有子目录
-d 查看目录的信息,而不是里面子文件的信息
-i 输出文件的inode节点信息
-m 水平列出文件,以逗号间隔
-X 文件扩展名排序
–color 输出信息中带有着色效果

cd – 切换目录

cd命令来自于英文词组”change directory“的缩写,其功能是用于更改当前所处的工作目录,路径可以是绝对路径,也可以是相对路径,若省略不写则会跳转至当前使用者的家目录。

**语法格式:**cd [参数] [目录名]

参数 参数作用
缺省 如果直接使用cd , 则会直接回到home目录
-P 如果切换的目标目录是一个符号链接,则直接切换到符号链接指向的目标目录
-L 如果切换的目标目录是一个符号链接,则直接切换到符号链接名所在的目录
仅使用”-“选项时,当前目录将被切换到环境变量”OLDPWD”对应值的目录
~ 表示当前用户目录
表示上一级目录
. 表示当前目录

pwd – 显示当前工作目录的路径

pwd命令来自于英文词组”print working directory“(打印工作目录)的缩写,其功能是用于显示当前工作目录的路径,即显示所在位置的绝对路径。

语法格式:pwd

实例查看当前工作目录路径:

[root@linuxcool ~]# pwd 
/root

mkdir – 创建目录文件

语法格式 : mkdir [参数] (目录)

参数 参数作用
-p 递归创建多级目录
-m 建立目录的同时设置目录的权限
-z 设置安全上下文
-v 显示目录的创建过程

touch – 创建空文件与修改时间戳

**语法格式:**touch [参数] 文件

参数 参数作用
-a 改变档案的读取时间记录
-m 改变档案的修改时间记录
-r 使用参考档的时间记录,与 --file 的效果一样
-c 不创建新文件
-d 设定时间与日期,可以使用各种不同的格式
-t 设定档案的时间记录,格式与 date 命令相同
–no-create 不创建新文件
–help 显示帮助信息
–version 列出版本讯息

创建文件:

touch test.txt

修改时间详细命令: Linux命令总结–touch命令

stat – 显示文件的状态信息

stat命令来自于英文单词status的缩写,其功能是用于显示文件的状态信息。Linux系统中每个文件都有三个“历史时间”——最后访问时间(ATIME)、最后修改时间(MTIME)、最后更改时间(CTIME),用户可以使用stat命令查看到它们,进而判别有没有其他人修改过文件内容。

*使用touch命令可以轻易修改文件的ATIME和MTIME,因此请勿单纯以文件历史时间作为判别系统有无被他人入侵的唯一标准。

**语法格式:**stat [参数] 文件名

参数 支持符号链接
缺省 列出文件基本状态操作时间
-f 显示文件系统的信息
-t 简洁的方式输出

cp – 复制文件或目录

**语法格式:**cp [参数] (源文件) (目标文件)

参数 参数作用
-f 若目标文件已存在,则会直接覆盖原文件
-i 若目标文件已存在,则会询问是否覆盖
-p 保留源文件或目录的所有属性
-r 递归复制文件和目录
-d 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-l 对源文件建立硬连接,而非复制文件
-s 对源文件建立符号连接,而非复制文件
-b 覆盖已存在的文件目标前将目标文件备份
-v 详细显示cp命令执行的操作过程
-a 等价于“pdr”选项

mv – 移动或改名文件

这是一个高频使用的文件管理命令,我们需要留意它与复制命令的区别。cp命令是用于文件的复制操作,文件个数是增加的,而mv则为剪切操作也就是对文件进行移动(搬家)操作,文件位置发生变化,但总个数并无增加。

同一个目录内对文件进行剪切的操作,实际应理解成重命名操作

**语法格式:**mv [参数] 源文件 目标文件

参数 参数作用
-i 若存在同名文件,则向用户询问是否覆盖
-f 覆盖已有文件时,不进行任何提示
-b 当文件存在时,覆盖前为其创建一个备份
-u 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作

rm – 删除文件或目录

rm命令来自于英文单词remove的缩写,其功能是用于删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。

rm也是一个很危险的命令,使用的时候要特别当心,尤其对于新手更要格外注意,如执行rm -rf /命令则会清空系统中所有的文件,甚至无法恢复回来*。所以我们在执行之前一定要再次确认下在哪个目录中,到底要删除什么文件,考虑好后再敲击回车,时刻保持清醒的头脑。

**语法格式:**rm [参数] 文件

参数 参数作用
-f 强制删除(不二次询问)
-i 删除前会询问用户是否操作
-r/R 递归删除(删除文件夹)
-v 显示指令的详细执行过程

rm指令支持通配符


打印输出命令

echo命令 – 输出字符串或提取后的变量值

echo是用于在终端设备上输出指定字符串变量提取后值的命令,能够给用户一些简单的提醒信息,也可以将输出的指定字符串内容同管道符一起传递给后续命令作为标准输入信息再来进行二次处理,又或者同输出重定向符一起操作,将信息直接写入到文件中。

如需提取变量值,需在变量名称前加入**$符号做提取,变量名称一般均为大写形式**。

语法格式: echo [参数] 字符串/变量

参数

  • -n 不加换行符

  • -e 启用对后续反斜杠转义

  • -E 明确禁止反斜杠转义

转义符 转义符作用
\a 响铃。
\b 退格。
\c 取消后续输出。
\e 向右删除一个字符。
\E 向右删除一个字符。
\f 换页。
\n 换行。
\r 回车。
\t 水平制表。
\v 垂直制表。
\ 反斜杠。
\0nnn 八进制数 nnn 所代表的 ASCII 码字符。
\xHH 十六进制 HH 对应的8位字符。HH 可以是一到两位。
\uHHHH 十六进制 HHHH 对应的 Unicode 字符。HHHH 一到四位。
\UHHHHHHHH 十六进制 HHHHHHHH 对应的 Unicode 字符。HHHHHHHH 一到八位。

实例代码

# 打印test字符串
echo "Test" / echo Test
# 打印水平制表符
echo -e "\t"
# 打印\t
echo -E "\t"
# 使用pwd命令打印出当前目录, 此命令不受-E限制
echo `pwd` 

cat – 显示文本文件全部内容

cat命令来自于英文单词concatenate的缩写,其功能是用于查看文件内容。在Linux系统中有很多用于查看文件内容的命令,例如more、tail、head……等等,每个命令都有各自的特点。cat命令适合查看内容较少的、纯文本的文件。

对于内容较多的文件,使用cat命令查看后会在屏幕上快速滚屏,用户往往看不清所显示的具体内容,只好按Ctrl+c键中断命令的执行,所以对于大文件,干脆用more命令吧~

**语法格式:**cat [参数] 文件

参数 参数作用
-n 显示行数(空行也编号)
-s 显示行数(多个空行算一个编号)
-b 显示行数(空行不编号)
-E 每行结束处显示$符号
-T TAB字符显示为 ^I符号
-v 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
-e 等价于”-vE”组合
-t 等价于”-vT”组合
-A 等价于 -vET组合

more – 分页显示文本文件内容

more命令的功能是用于分页显示文本文件内容。如果文本文件中的内容较多较长,使用cat命令读取后则很难看清,这时使用more命令进行分页查看就更加合适了,可以把文本内容一页一页的显示在终端界面上,用户每按一次回车即向下一行每按一次空格即向下一页,直至看完为止。

**语法格式:**more [参数] 文件

参数 参数作用
-num 指定每屏显示的行数
-l more在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性
-f 计算实际的行数,而非自动换行的行数
-p 清除屏幕再显示文本文件的剩余内容
-c 与-p相似,不滚屏先显示内容清除旧内容
-s 多个空行压缩成一行显示
-u 禁止下划线
+/pattern 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示

tail – 查看文件尾部内容

tail命令的功能是用于查看文件尾部内容,例如默认会在终端界面上显示出指定文件的末尾十行,如果指定了多个文件,则会在显示的每个文件内容前面加上文件名来加以区分。

高阶玩法的-f参数作用是持续显示文件的尾部最新内容,类似于机场候机厅的大屏幕,总会把最新的消息展示给用户,对阅读日志文件尤为适合,而不需要手动刷新。

**语法格式:**tail [参数] 文件

参数 参数作用
-c 输出文件尾部的N(N为整数)个字节内容
-f 持续显示文件最新追加的内容
-F 与选项“-follow=name”和“–retry”连用时功能相同
-n 输出文件的尾部N(N位数字)行内容
–retry 即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。
–pid=<进程号> 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令

实例

tail file #(显示文件file的最后10行)
tail -n +20 file #(显示文件file的内容,从第20行至文件末尾)
tail -c 10 file #(显示文件file的最后10个字节)

tail -25 mail.log # 显示 mail.log 最后的 25 行
tail -f mail.log # 等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
tail -F mail.log # 等同于--follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪

查找命令

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 支持扩展的正则表达式

grep完全支持管道符

wc – 统计文件的字节数、单词数、行数

wc命令来自于英文词组“Word count”的缩写,其功能是用于统计文件的字节数、单词数、行数等信息,并将统计结果输出到终端界面。利用wc命令可以很快的计算出准确的单词数及行数,评估出文本的内容长度,要想了解一个文件,不妨先wc一下吧~

**语法格式:**wc [参数] *文件

参数 参数作用
-w 统计单词数
-c 统计字节数
-l 统计行数
-m 统计字符数
-L 显示最长行的长度

实例

xianlin@xianlin-ubuntu:~/test$ wc test.txt
 23  30 172 test.txt
 行数 单词数 字节数 文件名 

which – 查找命令文件

which命令的功能是用于查找命令文件,能够快速搜索二进制程序所对应的位置。如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个which命令就太合适了。

参考实例

#查找某个指定命令文件所在位置
which reboot
# 结果
/usr/sbin/reboot
#查找多个指定命令文件所在位置
which shutdown poweroff
# 结果
/usr/sbin/shutdown
/usr/sbin/poweroff

find – 根据路径和条件搜索指定文件

find命令的功能是根据给定的路径和条件查找相关文件或目录,可以使用的参数很多,并且支持正则表达式,结合管道符后能够实现更加复杂的功能,是系统管理员和普通用户日常工作必须掌握的命令之一。

find命令通常进行的是从根目录(/)开始的全盘搜索,有别于whereis、which、locate……等等的有条件或部分文件的搜索。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,会相对消耗较多的系统资源。

语法格式:find [路径] [参数]

常用参数

参数 参数作用
-name 匹配名称
-perm 匹配权限(mode为完全匹配,-mode为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n 匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件f1新但比f2旧的文件
-type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-prune 忽略某个目录
-exec …… {}; 后面可跟用于进一步处理搜索结果的命令

参考实例

# 全盘搜索系统中所有以.conf结尾的文件
find / -name *.conf
/run/tmpfiles.d/kmod.conf
/etc/resolv.conf
/etc/dnf/dnf.conf
/etc/dnf/plugins/copr.conf
/etc/dnf/plugins/debuginfo-install.conf
/etc/dnf/plugins/product-id.conf
/etc/dnf/plugins/subscription-manager.conf
………………省略部分输出信息………………
#在/etc目录中搜索所有大于1M大小的文件
find /etc -size +1M
/etc/selinux/targeted/policy/policy.31
/etc/udev/hwdb.bin
#在/etc目录中搜索所有小于1M大小的文件
find /etc -size -1M
#在/home目录中搜索所有属于指定用户的文件
find /home -user xianlin
/home/xianlin
/home/xianlin/info.txt

用户及权限管理

Linux中的三种用户

  • 管理用户:即root,由系统自动创建,具有Linux所有权限

    • UID为0,具有一切权限,可以操作系统中的所有资源
  • 一般用户:即我们自己创建的用户,无法修改配置文件

    • UID 从 1000开始, 是由管理员创建的用于日常工作的用户,能够使用Linux的大部分资源,一些特定的权限受到控制。用户只对自己的目录有写权限,读写权限受一定的限制,有效保证了系统安全性。
  • 系统用户:用于apache、邮件、打印服务等系统服务

    • UID 为 1~999, Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏围。

一般我们使用LINUX时,使用普通用户进行登录查看,需要修改Linux,切换成root用户或者使用root权限。

su – 切换用户身份

su命令来自于英文单词“switch user”的缩写,其功能是用于切换用户身份。管理员切换至任意用户身份而无需密码验证,而普通用户切换至任意用户身份均需密码验证。另外添加单个减号(-)参数为完全的身份变更,不保留任何之前用户的环境变量信息。

语法格式: su [参数] 用户名

参数 参数作用
单个减号(-) 完全身份变更(加载切换用户的环境变量)
-c 执行完指定的指令后,即恢复原来的身份
-f 适用于csh与tsch,使shell不用去读取启动文件
-l 改变身份时,也同时变更工作目录
-m 变更身份时,不要变更环境变量
-s 指定要执行的shell

实例

# 切换到指定用户, 并且使用被指定用户的环境变量
su - xianlin

# 切换到xianlin用户的工作目录中执行指定命令后即刻返回到切换前用户
root$ su -l -c ls xianlin
公共的  视频  文档  音乐  docker        package       snap
模板    图片  下载  桌面  IdeaProjects  sharedFolder  test
root$

# 从普通用户切换到root用户(因为要切换到root, 需要使用sudo获取权限)
xianlin$ sudo su -
root$

sudo - 以其他身份来执行命令

sudo命令 用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

使用sudo服务可以授权某个指定的用户去执行某些指定的命令,在满足工作需求的前提下尽可能少的放权,保证服务器的安全。配置sudo服务可以直接编辑配置文件/etc/sudoers,亦可以执行visudo命令进行设置,一切妥当后普通用户便能够使用sudo命令进行操作了。

**语法格式:**sudo [参数] 命令

参数 参数作用
-v 延长密码有效期限5分钟
-k 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码
-l 列出目前用户可执行无法执行的指令
-b 将要执行的指令放在后台执行
-E 继承当前环境变量
-H HOME环境变量设为新身份的HOME环境变量
-p 更改需要密码验证时的提示语
-s 指定默认调用的SHELL解释器

实例

# 切换到root用户及环境
xianlin$ sudo -i
# 完全切换到root环境, 与sudo -i基本无异, 只是会重新加载配置文件
xianlin$ sudo su -

用户组管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户默认属于与它同名的用户组,这个用户组在创建用户时同时创建。(如果在创建用户时,使用 -g 选项设定主组了,那以选项设定为主)

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新

查看当前系统中的群组getent group

groupadd – 创建新的用户组

**语法格式:**groupadd [参数] 用户组

参数 参数作用
-g 指定新建工作组的id
-r 创建系统工作组
-K 覆盖配置文件“/ect/login.defs”
-o 允许添加组ID号不唯一的工作组

实例

# 创建一个新的用户组
groupadd xianlinGroup
# 创建一个新的用户组,并指定GID号码
groupadd -g 6688 xianlinGroup
# 创建一个新的用户组,设定为系统工作组
groupadd -r xianlinSysGroup
groupdel – 删除用户组

groupdel命令用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。

userdel修改系统账户文件,删除与 GROUP 相关的所有项目。给出的组名必须存在。若该群组中仍包括某些用户,则必须先删除这些用户后方能删除群组

# 使用groupdel命令删除xianlinWork工作组
groupdel xianlinWork
# 查看xianlinWork组是否删除成功, 如果没有信息就是删除成功
more /etc/group|grep xianlinWork
groupmod – 更改群组识别码或名称

groupmod命令用于更改群组的识别码或名称时。不过大家还是要注意,用户名不要随意修改,组名和 GID 也不要随意修改,因为非常容易导致管理员逻辑混乱。如果非要修改用户名或组名,则建议大家先删除旧的,再建立新的

# 更改xianlinmod用户组为root用户组
groupmod -n root xianlinmod
# 更改xianlin用户组的群组识别码为391314
groupmod - g 391316 xianlin
chgrp - 变更文件或目录的所属群组

chgrp命令 用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。

在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。

语法格式: chgrp [参数] [目录]

参数 参数作用
-v 显示指令执行过程
-c 效果类似”-v”参数,但仅回报更改的部分
-f 不显示错误信息
-h 对符号连接的文件作修改,而不更动其他任何相关文件
-R 递归处理,将指定目录下的所有文件及子目录一并处理
–reference 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同

实例

# 将test目录改为xianlin用户组所属, 并显示命令执行过程
chgrp -v xianlin test
# 将cool目录下所有文件及子目录全部改为xianlin用户组
chgrp -R xianlin cool

用户管理

Linux 中,用户保存在 /etc/passwd 中,用户密码保存在 /etc/shadow 中,用户组保存在 /etc/group 中。

列出当前现有用户命令

cat /etc/passwd | cut -d : -f 1

useradd - 创建的新的系统用户

useradd命令 用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在**/etc/passwd**文本文件中。

用户文件

/etc/passwd # 用户帐户信息。
/etc/shadow # 保护用户帐户信息。
/etc/group  # 组帐户信息。
/etc/gshadow # 保护组帐户信息。
/etc/default/useradd # 帐户创建的默认值。
/etc/skel/                                 # 包含默认文件的目录。
/etc/login.defs # 影子密码套件配置。

注意事项

  • useradd创建用户时, 默认会创建一个同名用户组, 并把用户添加进去; 可使用-g指定用户组
  • useradd创建用户时, 默认会在HOME目录下创建一个同名文件夹做用户HOME路径; 可使用-d指定HOME路径

**语法格式:**useradd [参数] 用户名

参数 参数作用
-D 改变新建用户的预设值
-c 添加备注文字
-d 新用户每次登陆时所使用的家目录
-e 用户终止日期,日期的格式为YYYY-MM-DD
-f 用户过期几日后永久停权。当值为0时用户立即被停权,而值为-1时则关闭此功能,预设值为-1
-g 指定用户对应的用户组
-G 定义此用户为多个不同组的成员
-m 用户目录不存在时则自动创建
-M 不建立用户家目录,优先于/etc/login.defs文件设定; 这样用户就无法登陆系统了
-n 取消建立以用户名称为名的群组
-r 建立系统帐号
-u 指定用户id

实例

# 创建指定的用户信息, 并自动创建添加进同名用户组
useradd xianlin
# 创建指定的用户信息,并自定义UID值
useradd -u 3966 xianlin
# 创建指定的用户信息,并追加指定组为该账户的扩展组, 及包括自己组的多个组
useradd -G xianlinWork xianlin
# 创建指定的用户信息,并指定过期时间
useradd -e "2023/01/01" xianlin
# 创建指定的用户信息, 并设置注释信息
useradd -c "Y_xianlin" xianlin
userdel - 删除的用户以及与相关的文件

userdel命令 用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。

# 删除用户但不删除用户数据
userdel xianlin
# 删除用户并删除用户数据, 即删除HOME目录
userdel -r xianlin
# 强制删除用户
userdel -f xianlin
id - 查询用户和所在组的信息

语法格式:id [参数] 用户名

实例

# 查询当前用户id及组名id
id
# 查询xianlin用户id及组名id
id xianlin
# 查询组id/组名
id -g / id -gn
# 查询全部组id/组名
id -G / id - Gn
# 查询有效的用户id/用户名
id -u / id -un
usermod – 修改用户账号信息

usermod命令 用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变user id,必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在server上更动相关的NIS设定。

**语法格式:**usermod [参数] 用户名

参数 参数作用
-c<备注> 修改用户账号的备注文字
-d<登入目录> 修改用户登入时的HOME目录
-m<移动用户HOME目录> 移动用户家目录到新的位置,不能单独使用, 一般与**-d一起使用**
-e<有效期限> 修改账号的有效期限
-f<缓冲天数> 修改在密码过期后多少天即关闭该账号
-g<群组> 修改用户所属的群组
-G<群组> 修改用户所属的附加群组
-l<账号名称> 修改用户账号名称
-L 锁定用户密码,使密码无效
-s 修改用户登入后所使用的shell
-u 修改用户ID
-U 解除密码锁定

实例

# 移动指定用户的家目录路径, 并修改登录时目录
usermod -md /data/xianlinHome xianlin
# 修改指定用户的UID号码
usermod -u 6688 xianlin
# 修改指定用户的名称为xianlinNew
usermod -l xianlin xianlinNew
# 锁定账号newuser1
usermod -L xianlin
# 解除对newuser1的锁定
usermod -U xianlin
passwd - 修改用户的密码值

passwd命令 用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。

**常用格式:**passwd [参数] 用户名

参数 参数作用
-d 删除已有密码
-l 锁定用户的密码值,不允许修改
-u 解锁用户的密码值,允许修改
-f 强制执行
-e 下次登陆强制修改密码
-k 用户在期满后能仍能使用
-S 查询密码状态

实例

# 修改当前用户密码
xianlin$ passwd
	Changing password for user xianlin.
	New password: <输入密码>
	Retype new password: <再次输入密码>
	passwd: all authentication tokens updated successfully.
---
# 修改指定用户的密码值:
root$ passwd xianlin
	Changing password for user xianlin.
	New password: <输入密码>
	Retype new password: <再次输入密码>
	passwd: all authentication tokens updated successfully.
---
# 锁定指定用户的密码值, 不允许其进行修改
root$ passwd -l xianlin
	Locking password for user xianlin.
	passwd: Success

权限管理

权限介绍 | ls-l目录权限信息图片介绍
图片Base64编码

1, 表示drwx权限信息; 2, 表示此文件/目录的所有者; 3, 表示此文件/目录的所属组;

drwx权限介绍

ls -l中的drwx权限信息, 一共0~9十位

  • 0位, 文件类型, 一般表示文件或目录
    • d, 表示文件目录
    • -, 表示文件
    • l, 表示软链接
  • 1~3位, 表示所有者的权限
  • 4~6位, 表示同用户组内拥有的权限
  • 7~9位, 表示其他用户拥有的权限

rwx权限详解

  • rwx对应文件的权限
    • r - 代表可读, 可以读取查看
    • w - 代表可写, 可以修改, 但是不能删除
    • x - 代表可执行
    • - - 表示无此权限
  • rwx对应目录的权限
    • r - 代表可读, 可以读取, 即可用ls查看目录内容
    • w - 代表可写, 可以修改, 可在目录内创建, 删除, 重命名
    • x - 代表可执行, 可以进入该目录
    • - - 表示无此权限
文件类型 所有者权限 用户组内用户权限 其他用户权限
0 1 2 3 4 5 6 7 8 9
d r w x r - x r w -
表示目录 读 写 执行 读 不可写 可执行 可读 可写 不可执行

权限更改 | chmod - 更改文件或目录的权限

设置权限时可以使用数字法,亦可使用字母表达式,对于目录文件建议加入-R参数进行递归操作,意味着不仅对于目录本身,也对目录内的子文件/目录都进行新权限的设定。

主要用途及方法参数介绍

  • 通过八进制数的方式更改目标文件或目录的权限。
    • 0: - - -
    • 1: - - x
    • 2: - w -
    • 3: - w x
    • 4: r - -
    • 5: r - x
    • 6: r w -
    • 7: r w x
    • r = 4, w = 2, x = 1 无权限=0;权限和加起来就可表达权限
    • 750; 表示所有者拥有全部权限, 组内拥有读, 执行; 其他用户没有权限
  • 通过参考文件的权限来更改目标文件或目录的权限。
  • 通过符号组合的方式更改目标文件或目录的权限。
    • u符号代表当前用户
    • g符号代表和当前用户在同一个组的用户,以下简称组用户。
    • o符号代表其他用户
    • a符号代表所有用户
    • r符号代表读权限以及八进制数4。
    • w符号代表写权限以及八进制数2。
    • x符号代表执行权限以及八进制数1。
    • X符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限
    • s符号代表设置权限suid和sgid,使用权限组合u+s设定文件的用户的ID位,g+s设置组用户ID位。
    • t符号代表只有目录或文件的所有者才可以删除目录下的文件。
    • +符号代表添加目标用户相应的权限。
    • -符号代表删除目标用户相应的权限。
    • =符号代表添加目标用户相应的权限,删除未提到的权限。

语法格式: chmod 参数 文件

参数 参数作用
-c 当文件的权限更改时输出操作信息
-f 屏蔽错误信息
-v 显示所有操作信息
-R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)

实例

# 设定某个文件的权限为755, 则表示, 所有者拥有全部权限, 组内和其他用户有读取和执行权限
chmod 755 xianlin.cfg
# 设定某个文件让任何人都可以读取
chmod a+r xianlin.txt
# 设置某个目录及其目录下 所有的文件及子目录 都可以被任何人 写入和 读取 但是不可执行
chmod -R a=rw xianlin.txt
# 删除其他用户的所有权限
chomod o= xianlin.txt
更改所属 | chown – 改变文件或目录的用户和用户组
  • 用户属于[目录权限信息图片介绍](#权限介绍 | ls-l目录权限信息图片介绍)中的2, 用户组属于3

chown命令 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户ID,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

只有文件所有者和超级用户才可以便用该命令。实际上只有root超级管理员才能更改为其他用户;

**语法格式:**chown [参数] 所属主:所属组 文件

参数 参数作用
-R 对目前目录下的所有文件与目录进行相同的变更
-c 显示所属信息变更信息
-f 若该文件拥有者无法被更改也不要显示错误
-h 只对于链接文件进行变更,而非真正指向的文件
-v 显示拥有者变更的详细资料

实例

# 将xianlin.txt所属用户修改为root
chown root xianlin.txt
# 将xianlin.txt所属用户组修改为root
chown :root xianlin.txt
# 将xianlin.txt所属用户改成root, 用户组改为xianlin
chown root:xianlin xianlin.txt
# 将qanxun目录及目录内所有文件及子目录的所属用户修改成xianlin
chown -R xianlin qanxun

综合知识

vi - 纯文本编辑器

vi命令 是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能

vi编辑器支持编辑模式命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用**“esc”键**,从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。

**语法格式:**vi [参数] 文件
参数 参数作用
-s 静默模式, 不显示指令的任何错误信息
– -cmd<命令> 加载任何vimrc文件之前执行指定命令
-R 只读模式
-v Vi模式
-e Ex模式
-y 简易模式
-c<命令> 加载第一个文件之后执行指定命令
-s<脚本输入文件> 从指定脚本输入文件阅读普通模式命令
-w<脚本输出文件> 追加所有类型的命令写入脚本输出文件
-W<脚本输出文件> 写入所有类型的命令到指定脚本输出文件
+<行数> 从指定行开始
– -noplugin 不要加载插件脚本
-p<数量> 打开指定数量的标签页(带文件名)
-r<文件名> 恢复崩溃的会话
-L 等同于-r
-r 列出交换文件并退出
-u 熟用指定vimrc,而不是.vimrc
-T<终端> 设置使用指定终端
-o<数量> 打开指定数量的窗口
-n 不使用交换文件,只用内存
-Z 受限模式
-m 不允许修改(写入)
-b 二进制模式
-M 在文本中不允许修改

实例

# 打开已有文件后编辑
vi test.txt
# 先编辑后保存到新建文件, 如果已存在需要:wq!强制覆盖
vi
~~~
:wq test.txt
# 打开某个已存在的文件,从第6行开始编写
vi +6 xianlin.txt
# 打开某个已存在的文件,以只读模式进入
vi +R xianlin.txt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jy8ts3iq-1668670501383)(data:image/png;base64,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)]

命令模式

直接用命令(vi 文件名)打开一个文件的话,默认是在命令模式下。

vi xianlin.txt
---
~
~
~
"xianlin.txt" 行数, 大小

命令模式下常用命令

Ctrl+u # 向文件首翻半屏;
Ctrl+d #向文件尾翻半屏;
Ctrl+f / PgUp #向文件尾翻一屏;
Ctrl+b / PgDn #向文件首翻一屏;
k # 向上移动光标
j # 向下移动光标
h # 向左移动光标
l # 向右移动光标
gg # 光标跳转到文本第一行
G # 光标跳转到文本最后一行
Shift+^ (Shift+6) # 把光标跳转到所在行首
Shift+$ (Shift+4) # 把光标跳转到所在行尾
ZZ # 保存文件并退出, 可以打开大写锁定或者按住shift
x / X # 删除一个字符, x小写删除光标后, X大写删除光标前
D # 删除从当前光标到行尾的字符
dd # 删除光标所在的当前行
p / P # 粘贴缓存区内容, p小写为粘贴到光标前, P大写为粘贴到光标后
r / R # 替换字符, r小写为只替换一个字符, R大写为一直替换输入
u # 撤销上一步操作

# 进入插入模式
a #在当前字符后添加文本
A #在行末添加文本
i #在当前字符前插入文本
I #在行首插入文本
o #在当前行后面插入一空行
O #在当前行前面插入一空行
插入模式

在命令模式下输入a、A、i、I、o、O中任何一个字符即可进入插入模式,在此模式下才可以对文件进行编辑,输入内容。在此模式下按 ESC键 退出到命令模式

底行模式

在命令模式下,通过输入 :(英文冒号)即可切换到底行模式,底行模式下可以做一些保存,字符替换等操作,底行模式下命令以回车结束,退出或者返回命令模式,或者双击Esc返回命令模式。

底行模式常用命令

:set nu # 显示行号
:set nonu # 关闭显示行号
:q # 不保存退出
:wq #保存退出
:q! #强制退出
:wq! #强制保存退出
:/string # 查找字符串所在行, 并把光标跳转到所在行
:%s/old/new # 将全部old替换成new
:n # 定位到n行(n代指数字)
:$ # 将光标跳转到最后一行首
:f # 显示当前文件名, 是否已修改, 光标所在行, 当前显示比例

重定向符号

重定向就是将标准输出(本身也是一个文件/dev/stdout)导向一个文件或者追加到一个文件中。在linux中,使用>符号来表示导向到一个文件,使用>>符号来表示追加到一个文件。

符号 描述
> 符号左边输出作为右边输入(标准输出)
>> 符号左边输出追加右边输入
< 符号右边输出作为左边输入(标准输入)
<< 符号右边输出追加左边输入
& 重定向绑定符号

实例

# 覆盖文件的内容
echo "hello" > file.txt
# 追加到文件结尾并另起一行
echo "hi" >> file.txt

通配符

Linux命令中, 大部分命令支持通配符, 尤其是批量创建, 删除操作中

命令行通配符

符号 含义
* 表示匹配任意长度的任意字符
表示匹配任意一个字符
[ ] 表示匹配[ test ]内的任意单个字符
[^test] 表示匹配[ test ]外的任意单个字符

具体用法

test* , 表示任何以test为开头的内容
*test,表示任何以test结尾的内容
*test*,表示任何包含test的内容

[a-z],[0-9],[A-Z],[a-z0-9]

​ [[:upper:]]-------------所有大写字母

​ [[:lower:]]-------------所有小写字母

​ [[:alpha:]]-------------所有字母

​ [[:dight:]]--------------所有数字

​ [[:alnum:]]------------所有字母和数字

​ [[:space:]]------------所有空白字符

​ [[:punct:]]-------------所有标点符号

​ [^[:upper:]]-----------所有大写字母以外

​ [^0-9]-----------------所有数字以外

​ [^[:alnum:]]----------所有数字和字母以外

管道符

管道符:|

作用:管道是一种通信机制,通常用于进程间的通信。它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)

实例:

# 查找一个文件夹, 并以ls -l的格式打印出来
ls -l /usr/bin | grep xzm
# 结果
-rwxr-xr-x 1 root root        2162  48  2022 xzmore
# 查找一个文件夹下的文件数量
ls -l /usr/bin | wc -l
#结果
1495

文件及目录操作命令

ls – 显示目录下的文件信息

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

参数 参数作用
-a 显示所有文件及目录 (包括以“.”开头的隐藏文件)
-l 使用长格式列表模式列出文件及目录的详细信息
-r 将文件以相反次序显示(默认依英文字母次序)
-t 根据最后的修改时间排序
-h 需要和-选项搭配使用,以更加人性化的方式显示文件的大小单位
-A 同 -a ,但不列出 “.” (当前目录) 及 “…” (父目录)
-S 根据文件大小排序
-R 递归列出所有子目录
-d 查看目录的信息,而不是里面子文件的信息
-i 输出文件的inode节点信息
-m 水平列出文件,以逗号间隔
-X 文件扩展名排序
–color 输出信息中带有着色效果

cd – 切换目录

cd命令来自于英文词组”change directory“的缩写,其功能是用于更改当前所处的工作目录,路径可以是绝对路径,也可以是相对路径,若省略不写则会跳转至当前使用者的家目录。

**语法格式:**cd [参数] [目录名]

参数 参数作用
缺省 如果直接使用cd , 则会直接回到home目录
-P 如果切换的目标目录是一个符号链接,则直接切换到符号链接指向的目标目录
-L 如果切换的目标目录是一个符号链接,则直接切换到符号链接名所在的目录
仅使用”-“选项时,当前目录将被切换到环境变量”OLDPWD”对应值的目录
~ 表示当前用户目录
表示上一级目录
. 表示当前目录

pwd – 显示当前工作目录的路径

pwd命令来自于英文词组”print working directory“(打印工作目录)的缩写,其功能是用于显示当前工作目录的路径,即显示所在位置的绝对路径。

语法格式:pwd

实例查看当前工作目录路径:

[root@linuxcool ~]# pwd 
/root

mkdir – 创建目录文件

语法格式 : mkdir [参数] (目录)

参数 参数作用
-p 递归创建多级目录
-m 建立目录的同时设置目录的权限
-z 设置安全上下文
-v 显示目录的创建过程

touch – 创建空文件与修改时间戳

**语法格式:**touch [参数] 文件

参数 参数作用
-a 改变档案的读取时间记录
-m 改变档案的修改时间记录
-r 使用参考档的时间记录,与 --file 的效果一样
-c 不创建新文件
-d 设定时间与日期,可以使用各种不同的格式
-t 设定档案的时间记录,格式与 date 命令相同
–no-create 不创建新文件
–help 显示帮助信息
–version 列出版本讯息

创建文件:

touch test.txt

修改时间详细命令: Linux命令总结–touch命令

stat – 显示文件的状态信息

stat命令来自于英文单词status的缩写,其功能是用于显示文件的状态信息。Linux系统中每个文件都有三个“历史时间”——最后访问时间(ATIME)、最后修改时间(MTIME)、最后更改时间(CTIME),用户可以使用stat命令查看到它们,进而判别有没有其他人修改过文件内容。

*使用touch命令可以轻易修改文件的ATIME和MTIME,因此请勿单纯以文件历史时间作为判别系统有无被他人入侵的唯一标准。

**语法格式:**stat [参数] 文件名

参数 支持符号链接
缺省 列出文件基本状态操作时间
-f 显示文件系统的信息
-t 简洁的方式输出

cp – 复制文件或目录

**语法格式:**cp [参数] (源文件) (目标文件)

参数 参数作用
-f 若目标文件已存在,则会直接覆盖原文件
-i 若目标文件已存在,则会询问是否覆盖
-p 保留源文件或目录的所有属性
-r 递归复制文件和目录
-d 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-l 对源文件建立硬连接,而非复制文件
-s 对源文件建立符号连接,而非复制文件
-b 覆盖已存在的文件目标前将目标文件备份
-v 详细显示cp命令执行的操作过程
-a 等价于“pdr”选项

mv – 移动或改名文件

这是一个高频使用的文件管理命令,我们需要留意它与复制命令的区别。cp命令是用于文件的复制操作,文件个数是增加的,而mv则为剪切操作也就是对文件进行移动(搬家)操作,文件位置发生变化,但总个数并无增加。

同一个目录内对文件进行剪切的操作,实际应理解成重命名操作

**语法格式:**mv [参数] 源文件 目标文件

参数 参数作用
-i 若存在同名文件,则向用户询问是否覆盖
-f 覆盖已有文件时,不进行任何提示
-b 当文件存在时,覆盖前为其创建一个备份
-u 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作

rm – 删除文件或目录

rm命令来自于英文单词remove的缩写,其功能是用于删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。

rm也是一个很危险的命令,使用的时候要特别当心,尤其对于新手更要格外注意,如执行rm -rf /命令则会清空系统中所有的文件,甚至无法恢复回来*。所以我们在执行之前一定要再次确认下在哪个目录中,到底要删除什么文件,考虑好后再敲击回车,时刻保持清醒的头脑。

**语法格式:**rm [参数] 文件

参数 参数作用
-f 强制删除(不二次询问)
-i 删除前会询问用户是否操作
-r/R 递归删除(删除文件夹)
-v 显示指令的详细执行过程

rm指令支持通配符


打印输出命令

echo命令 – 输出字符串或提取后的变量值

echo是用于在终端设备上输出指定字符串变量提取后值的命令,能够给用户一些简单的提醒信息,也可以将输出的指定字符串内容同管道符一起传递给后续命令作为标准输入信息再来进行二次处理,又或者同输出重定向符一起操作,将信息直接写入到文件中。

如需提取变量值,需在变量名称前加入**$符号做提取,变量名称一般均为大写形式**。

语法格式: echo [参数] 字符串/变量

参数

  • -n 不加换行符

  • -e 启用对后续反斜杠转义

  • -E 明确禁止反斜杠转义

转义符 转义符作用
\a 响铃。
\b 退格。
\c 取消后续输出。
\e 向右删除一个字符。
\E 向右删除一个字符。
\f 换页。
\n 换行。
\r 回车。
\t 水平制表。
\v 垂直制表。
\ 反斜杠。
\0nnn 八进制数 nnn 所代表的 ASCII 码字符。
\xHH 十六进制 HH 对应的8位字符。HH 可以是一到两位。
\uHHHH 十六进制 HHHH 对应的 Unicode 字符。HHHH 一到四位。
\UHHHHHHHH 十六进制 HHHHHHHH 对应的 Unicode 字符。HHHHHHHH 一到八位。

实例代码

# 打印test字符串
echo "Test" / echo Test
# 打印水平制表符
echo -e "\t"
# 打印\t
echo -E "\t"
# 使用pwd命令打印出当前目录, 此命令不受-E限制
echo `pwd` 

cat – 显示文本文件全部内容

cat命令来自于英文单词concatenate的缩写,其功能是用于查看文件内容。在Linux系统中有很多用于查看文件内容的命令,例如more、tail、head……等等,每个命令都有各自的特点。cat命令适合查看内容较少的、纯文本的文件。

对于内容较多的文件,使用cat命令查看后会在屏幕上快速滚屏,用户往往看不清所显示的具体内容,只好按Ctrl+c键中断命令的执行,所以对于大文件,干脆用more命令吧~

**语法格式:**cat [参数] 文件

参数 参数作用
-n 显示行数(空行也编号)
-s 显示行数(多个空行算一个编号)
-b 显示行数(空行不编号)
-E 每行结束处显示$符号
-T TAB字符显示为 ^I符号
-v 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
-e 等价于”-vE”组合
-t 等价于”-vT”组合
-A 等价于 -vET组合

more – 分页显示文本文件内容

more命令的功能是用于分页显示文本文件内容。如果文本文件中的内容较多较长,使用cat命令读取后则很难看清,这时使用more命令进行分页查看就更加合适了,可以把文本内容一页一页的显示在终端界面上,用户每按一次回车即向下一行每按一次空格即向下一页,直至看完为止。

**语法格式:**more [参数] 文件

参数 参数作用
-num 指定每屏显示的行数
-l more在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性
-f 计算实际的行数,而非自动换行的行数
-p 清除屏幕再显示文本文件的剩余内容
-c 与-p相似,不滚屏先显示内容清除旧内容
-s 多个空行压缩成一行显示
-u 禁止下划线
+/pattern 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示

tail – 查看文件尾部内容

tail命令的功能是用于查看文件尾部内容,例如默认会在终端界面上显示出指定文件的末尾十行,如果指定了多个文件,则会在显示的每个文件内容前面加上文件名来加以区分。

高阶玩法的-f参数作用是持续显示文件的尾部最新内容,类似于机场候机厅的大屏幕,总会把最新的消息展示给用户,对阅读日志文件尤为适合,而不需要手动刷新。

**语法格式:**tail [参数] 文件

参数 参数作用
-c 输出文件尾部的N(N为整数)个字节内容
-f 持续显示文件最新追加的内容
-F 与选项“-follow=name”和“–retry”连用时功能相同
-n 输出文件的尾部N(N位数字)行内容
–retry 即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。
–pid=<进程号> 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令

实例

tail file #(显示文件file的最后10行)
tail -n +20 file #(显示文件file的内容,从第20行至文件末尾)
tail -c 10 file #(显示文件file的最后10个字节)

tail -25 mail.log # 显示 mail.log 最后的 25 行
tail -f mail.log # 等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
tail -F mail.log # 等同于--follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪

查找命令

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 支持扩展的正则表达式

grep完全支持管道符

wc – 统计文件的字节数、单词数、行数

wc命令来自于英文词组“Word count”的缩写,其功能是用于统计文件的字节数、单词数、行数等信息,并将统计结果输出到终端界面。利用wc命令可以很快的计算出准确的单词数及行数,评估出文本的内容长度,要想了解一个文件,不妨先wc一下吧~

**语法格式:**wc [参数] *文件

参数 参数作用
-w 统计单词数
-c 统计字节数
-l 统计行数
-m 统计字符数
-L 显示最长行的长度

实例

xianlin@xianlin-ubuntu:~/test$ wc test.txt
 23  30 172 test.txt
 行数 单词数 字节数 文件名 

which – 查找命令文件

which命令的功能是用于查找命令文件,能够快速搜索二进制程序所对应的位置。如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个which命令就太合适了。

参考实例

#查找某个指定命令文件所在位置
which reboot
# 结果
/usr/sbin/reboot
#查找多个指定命令文件所在位置
which shutdown poweroff
# 结果
/usr/sbin/shutdown
/usr/sbin/poweroff

find – 根据路径和条件搜索指定文件

find命令的功能是根据给定的路径和条件查找相关文件或目录,可以使用的参数很多,并且支持正则表达式,结合管道符后能够实现更加复杂的功能,是系统管理员和普通用户日常工作必须掌握的命令之一。

find命令通常进行的是从根目录(/)开始的全盘搜索,有别于whereis、which、locate……等等的有条件或部分文件的搜索。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,会相对消耗较多的系统资源。

语法格式:find [路径] [参数]

常用参数

参数 参数作用
-name 匹配名称
-perm 匹配权限(mode为完全匹配,-mode为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n 匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件f1新但比f2旧的文件
-type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-prune 忽略某个目录
-exec …… {}; 后面可跟用于进一步处理搜索结果的命令

参考实例

# 全盘搜索系统中所有以.conf结尾的文件
find / -name *.conf
/run/tmpfiles.d/kmod.conf
/etc/resolv.conf
/etc/dnf/dnf.conf
/etc/dnf/plugins/copr.conf
/etc/dnf/plugins/debuginfo-install.conf
/etc/dnf/plugins/product-id.conf
/etc/dnf/plugins/subscription-manager.conf
………………省略部分输出信息………………
#在/etc目录中搜索所有大于1M大小的文件
find /etc -size +1M
/etc/selinux/targeted/policy/policy.31
/etc/udev/hwdb.bin
#在/etc目录中搜索所有小于1M大小的文件
find /etc -size -1M
#在/home目录中搜索所有属于指定用户的文件
find /home -user xianlin
/home/xianlin
/home/xianlin/info.txt

用户及权限管理

Linux中的三种用户

  • 管理用户:即root,由系统自动创建,具有Linux所有权限

    • UID为0,具有一切权限,可以操作系统中的所有资源
  • 一般用户:即我们自己创建的用户,无法修改配置文件

    • UID 从 1000开始, 是由管理员创建的用于日常工作的用户,能够使用Linux的大部分资源,一些特定的权限受到控制。用户只对自己的目录有写权限,读写权限受一定的限制,有效保证了系统安全性。
  • 系统用户:用于apache、邮件、打印服务等系统服务

    • UID 为 1~999, Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏围。

一般我们使用LINUX时,使用普通用户进行登录查看,需要修改Linux,切换成root用户或者使用root权限。

su – 切换用户身份

su命令来自于英文单词“switch user”的缩写,其功能是用于切换用户身份。管理员切换至任意用户身份而无需密码验证,而普通用户切换至任意用户身份均需密码验证。另外添加单个减号(-)参数为完全的身份变更,不保留任何之前用户的环境变量信息。

语法格式: su [参数] 用户名

参数 参数作用
单个减号(-) 完全身份变更(加载切换用户的环境变量)
-c 执行完指定的指令后,即恢复原来的身份
-f 适用于csh与tsch,使shell不用去读取启动文件
-l 改变身份时,也同时变更工作目录
-m 变更身份时,不要变更环境变量
-s 指定要执行的shell

实例

# 切换到指定用户, 并且使用被指定用户的环境变量
su - xianlin

# 切换到xianlin用户的工作目录中执行指定命令后即刻返回到切换前用户
root$ su -l -c ls xianlin
公共的  视频  文档  音乐  docker        package       snap
模板    图片  下载  桌面  IdeaProjects  sharedFolder  test
root$

# 从普通用户切换到root用户(因为要切换到root, 需要使用sudo获取权限)
xianlin$ sudo su -
root$

sudo - 以其他身份来执行命令

sudo命令 用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

使用sudo服务可以授权某个指定的用户去执行某些指定的命令,在满足工作需求的前提下尽可能少的放权,保证服务器的安全。配置sudo服务可以直接编辑配置文件/etc/sudoers,亦可以执行visudo命令进行设置,一切妥当后普通用户便能够使用sudo命令进行操作了。

**语法格式:**sudo [参数] 命令

参数 参数作用
-v 延长密码有效期限5分钟
-k 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码
-l 列出目前用户可执行无法执行的指令
-b 将要执行的指令放在后台执行
-E 继承当前环境变量
-H HOME环境变量设为新身份的HOME环境变量
-p 更改需要密码验证时的提示语
-s 指定默认调用的SHELL解释器

实例

# 切换到root用户及环境
xianlin$ sudo -i
# 完全切换到root环境, 与sudo -i基本无异, 只是会重新加载配置文件
xianlin$ sudo su -

用户组管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户默认属于与它同名的用户组,这个用户组在创建用户时同时创建。(如果在创建用户时,使用 -g 选项设定主组了,那以选项设定为主)

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新

查看当前系统中的群组getent group

groupadd – 创建新的用户组

**语法格式:**groupadd [参数] 用户组

参数 参数作用
-g 指定新建工作组的id
-r 创建系统工作组
-K 覆盖配置文件“/ect/login.defs”
-o 允许添加组ID号不唯一的工作组

实例

# 创建一个新的用户组
groupadd xianlinGroup
# 创建一个新的用户组,并指定GID号码
groupadd -g 6688 xianlinGroup
# 创建一个新的用户组,设定为系统工作组
groupadd -r xianlinSysGroup
groupdel – 删除用户组

groupdel命令用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。

userdel修改系统账户文件,删除与 GROUP 相关的所有项目。给出的组名必须存在。若该群组中仍包括某些用户,则必须先删除这些用户后方能删除群组

# 使用groupdel命令删除xianlinWork工作组
groupdel xianlinWork
# 查看xianlinWork组是否删除成功, 如果没有信息就是删除成功
more /etc/group|grep xianlinWork
groupmod – 更改群组识别码或名称

groupmod命令用于更改群组的识别码或名称时。不过大家还是要注意,用户名不要随意修改,组名和 GID 也不要随意修改,因为非常容易导致管理员逻辑混乱。如果非要修改用户名或组名,则建议大家先删除旧的,再建立新的

# 更改xianlinmod用户组为root用户组
groupmod -n root xianlinmod
# 更改xianlin用户组的群组识别码为391314
groupmod - g 391316 xianlin
chgrp - 变更文件或目录的所属群组

chgrp命令 用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。

在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。

语法格式: chgrp [参数] [目录]

参数 参数作用
-v 显示指令执行过程
-c 效果类似”-v”参数,但仅回报更改的部分
-f 不显示错误信息
-h 对符号连接的文件作修改,而不更动其他任何相关文件
-R 递归处理,将指定目录下的所有文件及子目录一并处理
–reference 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同

实例

# 将test目录改为xianlin用户组所属, 并显示命令执行过程
chgrp -v xianlin test
# 将cool目录下所有文件及子目录全部改为xianlin用户组
chgrp -R xianlin cool

用户管理

Linux 中,用户保存在 /etc/passwd 中,用户密码保存在 /etc/shadow 中,用户组保存在 /etc/group 中。

列出当前现有用户命令

cat /etc/passwd | cut -d : -f 1

useradd - 创建的新的系统用户

useradd命令 用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在**/etc/passwd**文本文件中。

用户文件

/etc/passwd # 用户帐户信息。
/etc/shadow # 保护用户帐户信息。
/etc/group  # 组帐户信息。
/etc/gshadow # 保护组帐户信息。
/etc/default/useradd # 帐户创建的默认值。
/etc/skel/                                 # 包含默认文件的目录。
/etc/login.defs # 影子密码套件配置。

注意事项

  • useradd创建用户时, 默认会创建一个同名用户组, 并把用户添加进去; 可使用-g指定用户组
  • useradd创建用户时, 默认会在HOME目录下创建一个同名文件夹做用户HOME路径; 可使用-d指定HOME路径

**语法格式:**useradd [参数] 用户名

参数 参数作用
-D 改变新建用户的预设值
-c 添加备注文字
-d 新用户每次登陆时所使用的家目录
-e 用户终止日期,日期的格式为YYYY-MM-DD
-f 用户过期几日后永久停权。当值为0时用户立即被停权,而值为-1时则关闭此功能,预设值为-1
-g 指定用户对应的用户组
-G 定义此用户为多个不同组的成员
-m 用户目录不存在时则自动创建
-M 不建立用户家目录,优先于/etc/login.defs文件设定; 这样用户就无法登陆系统了
-n 取消建立以用户名称为名的群组
-r 建立系统帐号
-u 指定用户id

实例

# 创建指定的用户信息, 并自动创建添加进同名用户组
useradd xianlin
# 创建指定的用户信息,并自定义UID值
useradd -u 3966 xianlin
# 创建指定的用户信息,并追加指定组为该账户的扩展组, 及包括自己组的多个组
useradd -G xianlinWork xianlin
# 创建指定的用户信息,并指定过期时间
useradd -e "2023/01/01" xianlin
# 创建指定的用户信息, 并设置注释信息
useradd -c "Y_xianlin" xianlin
userdel - 删除的用户以及与相关的文件

userdel命令 用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。

# 删除用户但不删除用户数据
userdel xianlin
# 删除用户并删除用户数据, 即删除HOME目录
userdel -r xianlin
# 强制删除用户
userdel -f xianlin
id - 查询用户和所在组的信息

语法格式:id [参数] 用户名

实例

# 查询当前用户id及组名id
id
# 查询xianlin用户id及组名id
id xianlin
# 查询组id/组名
id -g / id -gn
# 查询全部组id/组名
id -G / id - Gn
# 查询有效的用户id/用户名
id -u / id -un
usermod – 修改用户账号信息

usermod命令 用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变user id,必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在server上更动相关的NIS设定。

**语法格式:**usermod [参数] 用户名

参数 参数作用
-c<备注> 修改用户账号的备注文字
-d<登入目录> 修改用户登入时的HOME目录
-m<移动用户HOME目录> 移动用户家目录到新的位置,不能单独使用, 一般与**-d一起使用**
-e<有效期限> 修改账号的有效期限
-f<缓冲天数> 修改在密码过期后多少天即关闭该账号
-g<群组> 修改用户所属的群组
-G<群组> 修改用户所属的附加群组
-l<账号名称> 修改用户账号名称
-L 锁定用户密码,使密码无效
-s 修改用户登入后所使用的shell
-u 修改用户ID
-U 解除密码锁定

实例

# 移动指定用户的家目录路径, 并修改登录时目录
usermod -md /data/xianlinHome xianlin
# 修改指定用户的UID号码
usermod -u 6688 xianlin
# 修改指定用户的名称为xianlinNew
usermod -l xianlin xianlinNew
# 锁定账号newuser1
usermod -L xianlin
# 解除对newuser1的锁定
usermod -U xianlin
passwd - 修改用户的密码值

passwd命令 用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。

**常用格式:**passwd [参数] 用户名

参数 参数作用
-d 删除已有密码
-l 锁定用户的密码值,不允许修改
-u 解锁用户的密码值,允许修改
-f 强制执行
-e 下次登陆强制修改密码
-k 用户在期满后能仍能使用
-S 查询密码状态

实例

# 修改当前用户密码
xianlin$ passwd
	Changing password for user xianlin.
	New password: <输入密码>
	Retype new password: <再次输入密码>
	passwd: all authentication tokens updated successfully.
---
# 修改指定用户的密码值:
root$ passwd xianlin
	Changing password for user xianlin.
	New password: <输入密码>
	Retype new password: <再次输入密码>
	passwd: all authentication tokens updated successfully.
---
# 锁定指定用户的密码值, 不允许其进行修改
root$ passwd -l xianlin
	Locking password for user xianlin.
	passwd: Success

权限管理

权限介绍 | ls-l目录权限信息图片介绍
图片Base64编码

1, 表示drwx权限信息; 2, 表示此文件/目录的所有者; 3, 表示此文件/目录的所属组;

drwx权限介绍

ls -l中的drwx权限信息, 一共0~9十位

  • 0位, 文件类型, 一般表示文件或目录
    • d, 表示文件目录
    • -, 表示文件
    • l, 表示软链接
  • 1~3位, 表示所有者的权限
  • 4~6位, 表示同用户组内拥有的权限
  • 7~9位, 表示其他用户拥有的权限

rwx权限详解

  • rwx对应文件的权限
    • r - 代表可读, 可以读取查看
    • w - 代表可写, 可以修改, 但是不能删除
    • x - 代表可执行
    • - - 表示无此权限
  • rwx对应目录的权限
    • r - 代表可读, 可以读取, 即可用ls查看目录内容
    • w - 代表可写, 可以修改, 可在目录内创建, 删除, 重命名
    • x - 代表可执行, 可以进入该目录
    • - - 表示无此权限
文件类型 所有者权限 用户组内用户权限 其他用户权限
0 1 2 3 4 5 6 7 8 9
d r w x r - x r w -
表示目录 读 写 执行 读 不可写 可执行 可读 可写 不可执行

权限更改 | chmod - 更改文件或目录的权限

设置权限时可以使用数字法,亦可使用字母表达式,对于目录文件建议加入-R参数进行递归操作,意味着不仅对于目录本身,也对目录内的子文件/目录都进行新权限的设定。

主要用途及方法参数介绍

  • 通过八进制数的方式更改目标文件或目录的权限。
    • 0: - - -
    • 1: - - x
    • 2: - w -
    • 3: - w x
    • 4: r - -
    • 5: r - x
    • 6: r w -
    • 7: r w x
    • r = 4, w = 2, x = 1 无权限=0;权限和加起来就可表达权限
    • 750; 表示所有者拥有全部权限, 组内拥有读, 执行; 其他用户没有权限
  • 通过参考文件的权限来更改目标文件或目录的权限。
  • 通过符号组合的方式更改目标文件或目录的权限。
    • u符号代表当前用户
    • g符号代表和当前用户在同一个组的用户,以下简称组用户。
    • o符号代表其他用户
    • a符号代表所有用户
    • r符号代表读权限以及八进制数4。
    • w符号代表写权限以及八进制数2。
    • x符号代表执行权限以及八进制数1。
    • X符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限
    • s符号代表设置权限suid和sgid,使用权限组合u+s设定文件的用户的ID位,g+s设置组用户ID位。
    • t符号代表只有目录或文件的所有者才可以删除目录下的文件。
    • +符号代表添加目标用户相应的权限。
    • -符号代表删除目标用户相应的权限。
    • =符号代表添加目标用户相应的权限,删除未提到的权限。

语法格式: chmod 参数 文件

参数 参数作用
-c 当文件的权限更改时输出操作信息
-f 屏蔽错误信息
-v 显示所有操作信息
-R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)

实例

# 设定某个文件的权限为755, 则表示, 所有者拥有全部权限, 组内和其他用户有读取和执行权限
chmod 755 xianlin.cfg
# 设定某个文件让任何人都可以读取
chmod a+r xianlin.txt
# 设置某个目录及其目录下 所有的文件及子目录 都可以被任何人 写入和 读取 但是不可执行
chmod -R a=rw xianlin.txt
# 删除其他用户的所有权限
chomod o= xianlin.txt
更改所属 | chown – 改变文件或目录的用户和用户组
  • 用户属于[目录权限信息图片介绍](#权限介绍 | ls-l目录权限信息图片介绍)中的2, 用户组属于3

chown命令 改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户ID,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

只有文件所有者和超级用户才可以便用该命令。实际上只有root超级管理员才能更改为其他用户;

**语法格式:**chown [参数] 所属主:所属组 文件

参数 参数作用
-R 对目前目录下的所有文件与目录进行相同的变更
-c 显示所属信息变更信息
-f 若该文件拥有者无法被更改也不要显示错误
-h 只对于链接文件进行变更,而非真正指向的文件
-v 显示拥有者变更的详细资料

实例

# 将xianlin.txt所属用户修改为root
chown root xianlin.txt
# 将xianlin.txt所属用户组修改为root
chown :root xianlin.txt
# 将xianlin.txt所属用户改成root, 用户组改为xianlin
chown root:xianlin xianlin.txt
# 将qanxun目录及目录内所有文件及子目录的所属用户修改成xianlin
chown -R xianlin qanxun

你可能感兴趣的:(linux,ubuntu,后端,centos)