【Linux】常用命令(2.6万字汇总)

文章目录

  • Linux常用命令汇总
    • [1. 基础知识](#1. 基础知识)
      • [1.1. Linux系统命令行的含义](#1.1. Linux系统命令行的含义)
      • [1.2. 命令的组成](#1.2. 命令的组成)
    • [2. 基础知识](#2. 基础知识)
      • [2.1. 关闭系统](#2.1. 关闭系统)
      • [2.2. 关闭重启](#2.2. 关闭重启)
      • [2.3. 帮助命令(help)](#2.3. 帮助命令(help))
      • [2.4. 命令说明书(man)](#2.4. 命令说明书(man))
      • [2.5. 切换用户(su)](#2.5. 切换用户(su))
      • 2.6.历史指令
    • 3.目录操作
      • [3.1. 切换目录(cd)](#3.1. 切换目录(cd))
      • [3.2. 查看目录(ls)](#3.2. 查看目录(ls))
      • [3.3. 创建目录(mkdir)](#3.3. 创建目录(mkdir))
      • [3.4. 删除目录与文件(rm)](#3.4. 删除目录与文件(rm))
      • [3.5. 修改目录(mv)](#3.5. 修改目录(mv))
      • [3.6. 拷贝目录(cp)](#3.6. 拷贝目录(cp))
      • [3.7. 搜索目录(find)](#3.7. 搜索目录(find))
      • [3.8. 查看当前目录(pwd)](#3.8. 查看当前目录(pwd))
    • [4. 文件操作](#4. 文件操作)
      • [4.1. 新增文件(touch)](#4.1. 新增文件(touch))
      • [4.2. 删除文件(rm)](#4.2. 删除文件(rm))
      • [4.3. 编辑文件(vi、vim)](#4.3. 编辑文件(vi、vim))
      • [4.4. 查看文件](#4.4. 查看文件)
    • [5. 文件权限](#5. 文件权限)
      • [5.1. 权限说明](#5.1. 权限说明)
      • [5.2. 文件权限](#5.2. 文件权限)
    • [6. 打包与解压](#6. 打包与解压)
      • [6.1. 说明](#6.1. 说明)
      • [6.2. 打包文件](#6.2. 打包文件)
      • [6.3. 解压文件](#6.3. 解压文件)
    • [7. 进程管理](#7. 进程管理)
      • [8.6. 查看进程](#8.6. 查看进程)
      • [8.7. 结束进程](#8.7. 结束进程)
    • [8. 硬链接和软链接](#8. 硬链接和软链接)
      • [8.1. 什么是软链接](#8.1. 什么是软链接)
      • [8.2. 什么是硬链接](#8.2. 什么是硬链接)
      • [8.3. 软链接和硬链接的区别](#8.3. 软链接和硬链接的区别)
      • [8.4. 软链接使用方法](#8.4. 软链接使用方法)
        • [8.4.1. 创建软链接语法](#8.4.1. 创建软链接语法)
        • [8.4.2. 创建软链接示例](#8.4.2. 创建软链接示例)
        • [8.4.3. 为目录创建软链接](#8.4.3. 为目录创建软链接)
        • [8.4.4. 修改和删除软链接](#8.4.4. 修改和删除软链接)
      • [8.5. 硬链接使用方法](#8.5. 硬链接使用方法)
        • [8.5.1. 创建硬链接语法](#8.5.1. 创建硬链接语法)
        • [8.5.2. 创建硬链接示例](#8.5.2. 创建硬链接示例)
        • [8.5.3. 查看硬链接信息](#8.5.3. 查看硬链接信息)
        • [8.5.4. 修改和删除硬链接](#8.5.4. 修改和删除硬链接)
        • [8.5.5. 无法为目录创建硬链接](#8.5.5. 无法为目录创建硬链接)
        • [8.5.6. 总结](#8.5.6. 总结)
    • [9. 目录结构](#9. 目录结构)
        • [/ -- 根目录](#/ – 根目录)
        • [/bin -- 二进制文件](#/bin – 二进制文件)
        • [/dev -- 设备文件](#/dev – 设备文件)
        • [/etc -- 配置文件](#/etc – 配置文件)
        • [/usr -- 用户二进制文件和程序数据](#/usr – 用户二进制文件和程序数据)
        • [/home -- 用户个人数据](#/home – 用户个人数据)
        • [/lib -- 共享库](#/lib – 共享库)
        • [/sbin -- 系统二进制文件](#/sbin – 系统二进制文件)
        • [/tmp -- 临时文件](#/tmp – 临时文件)
        • [/var -- 可变数据文件](#/var – 可变数据文件)
        • [/boot -- 启动文件](#/boot – 启动文件)
        • [/proc -- 进程和内核文件](#/proc – 进程和内核文件)
        • [/opt -- 可选软件](#/opt – 可选软件)
        • [/root -- 根目录的主目录](#/root – 根目录的主目录)
        • [/media -- 可移动媒体的安装点](#/media – 可移动媒体的安装点)
        • [/mnt -- 挂载目录](#/mnt – 挂载目录)
        • [/srv -- 服务数据](#/srv – 服务数据)
    • [10. 用户管理](#10. 用户管理)
      • [10.1. Linux 是多用户系统](#10.1. Linux 是多用户系统)
      • [10.2. 用户与用户组的概念](#10.2. 用户与用户组的概念)
        • [10.2.1. 文件所有者(User)](#10.2.1. 文件所有者(User))
        • [10.2.2. 用户组成员(Group)](#10.2.2. 用户组成员(Group))
        • [10.2.3. 其他人(Others)](#10.2.3. 其他人(Others))
        • [10.2.4. root用户](#10.2.4. root用户)
      • [10.3. Linux 用户账号管理](#10.3. Linux 用户账号管理)
        • [10.3.1. 新增用户](#10.3.1. 新增用户)
        • [10.3.2. 修改用户](#10.3.2. 修改用户)
        • [10.3.3. 删除用户](#10.3.3. 删除用户)
        • [10.3.4. 用户口令的管理](#10.3.4. 用户口令的管理)
      • [10.4. Linux系统用户组的管理](#10.4. Linux系统用户组的管理)
        • [10.4.1. 新增用户组](#10.4.1. 新增用户组)
        • [10.4.2. 删除用户组](#10.4.2. 删除用户组)
        • [10.4.3. 修改用户组](#10.4.3. 修改用户组)
        • [10.4.4. 切换用户组](#10.4.4. 切换用户组)
    • [11. 权限管理](#11. 权限管理)
      • [11.1. Linux下的用户](#11.1. Linux下的用户)
      • [11.2. su、su-和sudo](#11.2. su、su-和sudo)
      • [11.3. 文件的权限](#11.3. 文件的权限)
      • [11.4. 基本权限](#11.4. 基本权限)
      • [11.5. 文件权值的表示方法](#11.5. 文件权值的表示方法)
      • [11.6. 权限设置及修改](#11.6. 权限设置及修改)
      • [11.7. 目录权限](#11.7. 目录权限)
      • [11.8. 粘滞位](#11.8. 粘滞位)
      • [11.9. 给用户sudo权限的分配](#11.9. 给用户sudo权限的分配)
    • [12. 软件安装](#12. 软件安装)
      • [12.1. 软件包分类](#12.1. 软件包分类)
        • [12.1.1. 源码包](#12.1.1. 源码包)
        • [12.1.2. 二进制包](#12.1.2. 二进制包)
        • [12.1.3. 二进制包特点](#12.1.3. 二进制包特点)
      • [12.2. RPM安装](#12.2. RPM安装)
        • [12.2.1. rpm包命名规则](#12.2.1. rpm包命名规则)
        • [12.2.2. rpm包默认安装路径](#12.2.2. rpm包默认安装路径)
        • [12.2.3. rpm包安装](#12.2.3. rpm包安装)
        • [12.2.4. rpm包升级](#12.2.4. rpm包升级)
        • [12.2.5. rpm包卸载](#12.2.5. rpm包卸载)
        • [12.2.6. rpm包查询](#12.2.6. rpm包查询)
      • [12.3. yum命令](#12.3. yum命令)
        • [12.3.1. 查询命令](#12.3.1. 查询命令)
        • [12.3.2. 安装命令](#12.3.2. 安装命令)
        • [12.3.3. 卸载命令](#12.3.3. 卸载命令)
        • [12.3.4. 升级命令](#12.3.4. 升级命令)
        • [12.3.5. yum组管理命令](#12.3.5. yum组管理命令)
    • [13. 管道](#13. 管道)
      • [13.1. 管道操作的概念](#13.1. 管道操作的概念)
      • [13.2. 管道的特性](#13.2. 管道的特性)
      • [13.3. 管道命令操作符](#13.3. 管道命令操作符)
      • [13.4. 操作示例](#13.4. 操作示例)
      • [13.5. 利用echo命令测试管道操作效果](#13.5. 利用echo命令测试管道操作效果)
        • [13.5.1. 排序](#13.5.1. 排序)
        • [13.5.2. 去重](#13.5.2. 去重)
    • [14. grep](#14. grep)
      • [14.1. 语法格式](#14.1. 语法格式)
      • [14.2. 选项说明](#14.2. 选项说明)
      • [14.3. 正则搜索](#14.3. 正则搜索)

Linux常用命令汇总

1. 基础知识

1.1. Linux系统命令行的含义

示例:root@app00:~# 
root    //用户名,root为超级用户
@       //分隔符
app00   //主机名称
~       //当前所在目录,默认用户目录为~,会随着目录切换而变化,例如:(root@app00:/bin# ,当前位置在bin目录下)
#       //表示当前用户是超级用户,普通用户为$,例如:("yao@app00:/root$" ,表示使用用户"yao"访问/root文件夹)

1.2. 命令的组成

命令 参数名 参数值

2. 基础知识

2.1. 关闭系统

立刻关机

shutdown -h now 或者 poweroff

两分钟后关机

shutdown -h 2

2.2. 关闭重启

立刻重启

shutdown -r now 或者 reboot

两分钟后重启

shutdown -r 2

2.3. 帮助命令(help)

ifconfig  --help     //查看 ifconfig 命令的用法

2.4. 命令说明书(man)

man shutdown         //打开命令说明后,可按"q"键退出

2.5. 切换用户(su)

su yao               //切换为用户"yao",输入后回车需要输入该用户的密码
exit                 //退出当前用户

2.6.历史指令

history

执行编号为5的历史指令

!5

3.目录操作

3.1. 切换目录(cd)

cd /                 //切换到根目录
cd /bin              //切换到根目录下的bin目录
cd ../               //切换到上一级目录 或者使用命令:cd ..
cd ~                 //切换到home目录
cd -                 //切换到上次访问的目录
cd xx(文件夹名)       //切换到本目录下的名为xx的文件目录,如果目录不存在报错
cd /xxx/xx/x         //可以输入完整的路径,直接切换到目标目录,输入过程中可以使用tab键快速补全

3.2. 查看目录(ls)

ls                   //查看当前目录下的所有目录和文件
ls -a                //查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l                //列表查看当前目录下的所有目录和文件(列表查看,显示更多信息),与命令"ll"效果一样
ls /bin              //查看指定目录下的所有目录和文件 

3.3. 创建目录(mkdir)

mkdir tools          //在当前目录下创建一个名为tools的目录
mkdir /bin/tools     //在指定目录下创建一个名为tools的目录
mkdir -p test/newdir1/dir2 //一级一级创建目录

3.4. 删除目录与文件(rm)

rm 文件名              //删除当前目录下的文件
rm -f 文件名           //删除当前目录的的文件(不询问)
rm -r 文件夹名         //递归删除当前目录下此名的目录
rm -rf 文件夹名        //递归删除当前目录下此名的目录(不询问)
rm -rf *              //将当前目录下的所有目录和文件全部删除
rm -rf /*             //将根目录下的所有文件全部删除【慎用!相当于格式化系统】

3.5. 修改目录(mv)

mv 当前目录名 新目录名        //修改目录名,同样适用与文件操作
mv /usr/tmp/tool /opt       //将/usr/tmp目录下的tool目录剪切到 /opt目录下面
mv -r /usr/tmp/tool /opt    //递归剪切目录中所有文件和文件夹

3.6. 拷贝目录(cp)

cp /usr/tmp/tool /opt       //将/usr/tmp目录下的tool目录复制到 /opt目录下面
cp -r /usr/tmp/tool /opt    //递归复制目录中所有文件和文件夹

3.7. 搜索目录(find)

find /bin -name 'a*'        //查找/bin目录下的所有以a开头的文件或者目录

3.8. 查看当前目录(pwd)

pwd                         //显示当前位置路径

4. 文件操作

4.1. 新增文件(touch)

touch  a.txt         //在当前目录下创建名为a的txt文件(文件不存在),如果文件存在,将文件时间属性修改为当前系统时间

4.2. 删除文件(rm)

rm 文件名              //删除当前目录下的文件
rm -f 文件名           //删除当前目录的的文件(不询问)

4.3. 编辑文件(vi、vim)

vi 文件名              //打开需要编辑的文件
--进入后,操作界面有三种模式:命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)
命令模式
-刚进入文件就是命令模式,通过方向键控制光标位置,
-使用命令"dd"删除当前整行
-使用命令"/字段"进行查找
-按"i"在光标所在字符前开始插入
-按"a"在光标所在字符后开始插入
-按"o"在光标所在行的下面另起一新行插入
-按":"进入底行模式
插入模式
-此时可以对文件内容进行编辑,左下角会显示 "-- 插入 --""
-按"ESC"进入底行模式
底行模式
-退出编辑:      :q
-强制退出:      :q!
-保存并退出:    :wq
## 操作步骤示例 ##
1.保存文件:按"ESC" -> 输入":" -> 输入"wq",回车     //保存并退出编辑
2.取消操作:按"ESC" -> 输入":" -> 输入"q!",回车     //撤销本次修改并退出编辑
## 补充 ##
vim +10 filename.txt                   //打开文件并跳到第10行
vim -R /etc/passwd                     //以只读模式打开文件

4.4. 查看文件

cat a.txt          //查看文件最后一屏内容
less a.txt         //PgUp向上翻页,PgDn向下翻页,"q"退出查看
more a.txt         //显示百分比,回车查看下一行,空格查看下一页,"q"退出查看
head -n 100 a.txt
head -100 a.txt    //查看文件的前100行
tail -100 a.txt    //查看文件的后100行,"Ctrl+C"退出查看
tail -f -n 100 a.txt //查看并等待文件实时变更,"Ctrl+C"退出查看

5. 文件权限

5.1. 权限说明

文件权限简介:'r' 代表可读(4),'w' 代表可写(2),'x' 代表执行权限(1),括号内代表"8421法"
##文件权限信息示例:-rwxrw-r--
-第一位:'-'就代表是文件,'d'代表是文件夹
-第一组三位:拥有者的权限
-第二组三位:拥有者所在的组,组员的权限
-第三组三位:代表的是其他用户的权限

5.2. 文件权限

普通授权    chmod +x a.txt    
8421法     chmod 777 a.txt     //1+2+4=7,"7"说明授予所有权限

6. 打包与解压

6.1. 说明

.zip、.rar        //windows系统中压缩文件的扩展名
.tar              //Linux中打包文件的扩展名
.gz               //Linux中压缩文件的扩展名
.tar.gz           //Linux中打包并压缩文件的扩展名

6.2. 打包文件

tar -zcvf 打包压缩后的文件名 要打包的文件
参数说明:z:调用gzip压缩命令进行压缩; c:打包文件; v:显示运行过程; f:指定文件名;
示例:
tar -zcvf a.tar file1 file2,...      //多个文件压缩打包

6.3. 解压文件

tar -zxvf a.tar                      //解包至当前目录
tar -zxvf a.tar -C /usr------        //指定解压的位置
unzip test.zip             //解压*.zip文件 
unzip -l test.zip          //查看*.zip文件的内容 

7. 进程管理

8.6. 查看进程

ps -ef         //查看所有正在运行的进程

8.7. 结束进程

kill pid       //杀死该pid的进程
kill -9 pid    //强制杀死该进程   

8. 硬链接和软链接

8.1. 什么是软链接

软链接(Symbolic Link),也称为符号链接,是包含了源文件位置信息的特殊文件。它的作用是间接指向一个文件或目录。如果软链接的源文件被删除或移动了,软链接就打不开了。

8.2. 什么是硬链接

硬链接(Hard Link)指通过索引节点来进行链接。在Linux系统中,每个文件都有一个对应的索引节点,记录文件的日期,大小,所在块等信息。硬链接就是指向源文件索引节点的连接。删除源文件,不影响硬链接的访问。

8.3. 软链接和硬链接的区别

  • 软链接是一个特殊的独立文件,它内容记录源文件位置;硬链接只是源文件的引用,不占用实际空间。
  • 删除软链接不影响源文件:删除源文件,软链接失效。删除硬链接不影响源文件,需将源文件和全部硬链接删除,源文件才会删除(换句话说,对于硬链接来说,删除了源文件,访问硬链接依旧有效)。
  • 软链接可以跨分区;硬链接不能跨文件系统。
  • 软链接可以针对目录;硬链接不能针对目录。

8.4. 软链接使用方法

8.4.1. 创建软链接语法
ln -s 源文件或目录 软链接的文件或目录

-s 参数表示创建的是软链接。

8.4.2. 创建软链接示例

将test.txt软链接到test_link

ln -s test.txt test_link

这样就在当前目录下创建了一个test_link的软链接文件,它指向test.txt,我们可以直接通过访问/修改test_link 来访问/修改test.txt的内容。

使用ll命令可以看到软链接的相关信息:

lrwxrwxrwx. 1 xiaomu xiaomu 5 Oct 22 11:16 test_link -> test.txt
8.4.3. 为目录创建软链接

软链接可以为目录创建快捷方式,方式与为文件创建软链接类似:

# 将/usr/local/dir1目录软链接到dir1_link
ln -s /usr/local/dir1 dir1_link

这样访问dir1_link就相当于访问dir1目录中的内容。

8.4.4. 修改和删除软链接

删除或修改软链接不会影响源文件/目录,它只是一个普通文件。

# 删除软链接 
rm test_link
#或者
unlink test_link

# 修改软链接,让test_link链接test2.txt
ln -sf test2.txt test_link

8.5. 硬链接使用方法

8.5.1. 创建硬链接语法
ln 源文件 硬链接名

不使用-s参数默认创建硬链接

8.5.2. 创建硬链接示例
ln test.txt test_hardlink

这样就在当前目录下创建了一个test_hardlink的硬链接文件,指向test.txt

8.5.3. 查看硬链接信息

使用ll -i 命令可以看到硬链接信息:

52246187 -rwxrwxr-x. 2 xiaomu xiaomu 21 Oct 22 11:17 test_hardlink

可以看到test_hardlink是一个硬链接文件,指向test.txt, 索引节点相同。

8.5.4. 修改和删除硬链接

删除或修改硬链接不影响源文件,它只是一个目录项引用源文件的索引节点。

# 删除硬链接
rm test_hardlink 
# 或者
unlink test_hardlink
# 修改硬链接内容
vim test_hardlink
源文件内容将跟着一起变化。
8.5.5. 无法为目录创建硬链接

硬链接无法针对目录进行创建

ln dir1 dir1_hardlink
ln: failed to create hard link 'dir1_hardlink' => 'dir1': Invalid argument
8.5.6. 总结
  • 软链接通过指向源文件的路径建立链接,硬链接通过索引节点建立链接。
  • 软链接可以跨文件系统,硬链接不能。软链接可以对目录创建链接,硬链接不可以。
  • 删除软链接和硬链接都不影响源文件。
  • 解除软链接和硬链接,直接删除链接文件即可。

9. 目录结构

Linux 基于 UNIX,因此它借用了 UNIX 的文件系统层次结构。

/ -- 根目录

由于所有其他目录或文件都是从 root 继承的,因此任何文件的绝对路径都会通过 root 遍历。例如,如果 /home/user/documents 中有一个文件,您可以猜测目录结构是从 root->home->user->documents。

残酷的 rm -rf/笑话

您可能在互联网上遇到过一些提到"rm -rf/"的笑话。 rm 命令用于在 Linux 中删除文件和目录。

使用 rm -rf /,您可以要求系统强制递归地删除根目录的内容。由于根目录下包含所有内容,因此您最终会删除所有内容,并且您的 Linux 系统会消失(理论上)。

除非您提供 --no-preserve-root,否则大多数 Linux 发行版不会运行此命令。无论如何,不要好奇地运行这个命令。毕竟,好奇害死猫。

/bin -- 二进制文件

"/bin"直接包含许多基本 shell 命令的可执行文件,如 ls、cp、cd 等。这里的程序大多数都是二进制格式,Linux 系统中的所有用户都可以访问。

/dev -- 设备文件

该目录仅包含特殊文件,包括与设备相关的文件。这些是虚拟文件,不在磁盘上。

这些文件的一些有趣的示例是:

  • /dev/null:可以发送来销毁任何文件或字符串
  • /dev/zero:包含无限序列0
  • /dev/random:包含无限序列的随机值
/etc -- 配置文件

/etc 目录包含系统的核心配置文件,主要由管理员和服务使用,例如密码文件和网络文件。

如果您需要更改系统配置(例如,更改主机名),您可以在此处找到相应的文件。

/usr -- 用户二进制文件和程序数据

在"/usr"中包含所有可执行文件、库、大多数系统程序的源代码。因此,其中包含的大多数文件是只读的(对于普通用户)

  • '/usr/bin'包含基本的用户命令
  • '/usr/sbin'包含管理员的附加命令
  • '/usr/lib'包含系统库
  • '/usr/share'包含文档或所有库共有的文档,例如'/usr/share/man'包含手册页的文本
/home -- 用户个人数据

主目录包含用户的个人目录。主目录包含用户数据和用户特定的配置文件。作为用户,您将把您的个人文件、笔记、程序等放在您的主目录中。

当您在 Linux 系统上创建用户时,通常的做法是为该用户创建主目录。假设您的 Linux 系统有两个用户,Alice 和 Bob。他们将在 /home/alice 和 /home/bob 位置拥有自己的主目录。

请注意,Bob 将无法访问 /home/alice,反之亦然。这是有道理的,因为只有用户才能访问他/她的家。

/lib -- 共享库

lib库基本上是可执行二进制文件可以使用的代码。 /lib 目录包含 /bin 和 /sbin 目录中的二进制文件所需的库。

/usr/bin 和 /usr/sbin 中的二进制文件所需的库位于目录 /usr/lib 中。

/sbin -- 系统二进制文件

这类似于 /bin 目录。唯一的区别是它包含只能由 root 或 sudo 用户运行的二进制文件。您可以将"sbin"中的"s"视为 super 或 sudo。

/tmp -- 临时文件

顾名思义,该目录保存临时文件。许多应用程序使用此目录来存储临时文件。甚至您可以使用目录来存储临时文件。

但请注意,当系统重新启动时,/tmp 目录中的内容将被删除。一些 Linux 系统还会自动删除旧文件,因此不要在此处存储任何重要的内容。

/var -- 可变数据文件

Var 是变量的缩写,是程序存储运行时信息的地方,例如系统日志记录、用户跟踪、缓存以及系统程序创建和管理的其他文件。

此处存储的文件不会自动清除,因此它为系统管理员提供了一个查找有关其系统行为的信息的好地方。例如,如果您想检查Linux系统中的登录历史记录,只需检查/var/log/wtmp中的文件内容即可。

/boot -- 启动文件

"/boot"目录包含内核和启动映像的文件,以及 LILO 和 Grub。通常建议目录位于光盘开头的分区中。

/proc -- 进程和内核文件

"/proc"目录包含有关当前运行的进程和内核参数的信息。许多工具使用 proc 目录的内容来获取运行时系统信息。

例如,如果要查看Linux中的处理器信息,只需参考文件/proc/cpuinfo即可。你想检查Linux系统的内存使用情况,只需查看/proc/meminfo文件的内容即可。

/opt -- 可选软件

传统上,/opt 目录用于安装/存储发行版存储库中无法提供的第三方应用程序的文件。

通常的做法是将软件代码保留在opt中,然后将二进制文件链接到/bin目录中,以便所有用户都可以运行它。

/root -- 根目录的主目录

还有 /root 目录,它作为 root 用户的主目录。因此,root 的主目录位于 /root,而不是 /home/root。不要将其与根目录 (/) 混淆。

/media -- 可移动媒体的安装点

当您连接可移动媒体(例如 USB 磁盘、SD 卡或 DVD)时,会在 /media 目录下自动为它们创建一个目录。您可以从此目录访问可移动媒体的内容。

/mnt -- 挂载目录

这与 /media 目录类似,但系统管理员使用 mnt 手动挂载文件系统,而不是自动挂载可移动媒体。

/srv -- 服务数据

/srv 目录包含系统提供的服务的数据。例如,如果您运行 HTTP 服务器,则最好将网站数据存储在 /srv 目录中。

我想这么多的信息足以让你了解Linux的目录结构及其用法。

10. 用户管理

10.1. Linux 是多用户系统

我们知道,任何操作系统都存在 "用户的概念" ,Linux 也不例外。

Linux 允许使用者在 Linux 系统上通过规划不同类型、不同层级的用户,并公平地分配系统资源与工作环境。

而与 Windows 系统最大的不同,在于 Linux 允许不同的用户同时登录主机,同时使用主机的资源,因此 Linux 被称为是多用户系统。

基于此,我们必须详细了解 Linux 对于用户用户组的规划,才能更好地理解 Linux 作为多用户、多任务系统的优势,也才能地使用 Linux 支持我们日常的开发工作。

10.2. 用户与用户组的概念

Linux 作为多用户系统,如何区分不同用户对于文件的权限的问题成为了不可避免的问题。

例如,小 A 希望个人文件不被其他用户读取,而如果不对文件进行权限设置,共享了主机资源的小 B 也可以读取小 A 的个人文件,这是不合理的,不同用户对不同文件所拥有的权限应该不尽相同。

因此,Linux 以 "用户与用户组" 的概念,建立用户与文件权限之间的联系,保证系统能够充分考虑每个用户的隐私保护,很大程度上保障了 Linux 作为多用户系统的可行性。

或者说,"用户与用户组" 与文件权限息息相关。

因此,从文件权限的角度出发,"用户与用户组" 引申为三个具体的对象------文件所有者用户组成员其他人。每一个对象对某一个文件的持有权限是不同的。

10.2.1. 文件所有者(User)

当一个用户创建了一个文件,这个用户就是这个文件的文件所有者。文件所有者对文件拥有最高权限,同时排他性地拥有该文件。

换句话说,除非文件所有者开放权限,否则其他人无法对文件执行查看、修改等操作。

这也是 Linux 系统能够保护用户隐私的最关键的原因。

在文件所有者占有文件之后,需要文件所有者对其他用户开放权限,其他用户才能查看、修改文件。

如果仅区分 "文件所有者" 和 "其他用户",那么文件所有者对其他用户开放权限后,所有其他用户均能查看、修改文件。

但是,若文件所有者希望仅对部分用户开放,那么仅仅区分 "用户所有者" 和 "其他用户" 显然不满足需求。

这就引入了 "用户组的概念"。

10.2.2. 用户组成员(Group)

将 "其他用户" 区分为用户组成员和其他人后,若文件所有者希望对部分用户开放权限,而对其他人继续保持私有,则只需要将这部分用户与文件所有者划入一个用户组。

这样,这部分用户就成了与文件所有者同组的用户组成员。用户可以对用户组成员开放文件权限,用户组成员则具备了查看、修改文件的权限,而对其他无关用户保持私有。

用户组成员在团队开发中非常有帮助。

例如,团队成员之间保持文件资源共享,但对非团队成员保持私有,这就需要将文件所有者与团队成员用户划分为同一个用户组,再对用户组成员开放权限即可。

需要注意的是,一个用户可在多个用户组中

10.2.3. 其他人(Others)

顾名思义,就是与文件所有者没有任何联系的其他用户。

10.2.4. root用户

在这里不得不提 Linux 系统中,具有最高权限的用户------root。

root 用户是系统中唯一的一个超级管理员,拥有了系统中的所有权限,可以执行任何想要执行的操作,也正因为如此,处于安全考虑,一般情况下不推荐使用 root 用户进行日常使用。

root 用户所在的用户组称为 "root组",处于 root 组的普通用户,能够通过 sudo 命令获取 root 权限。

10.3. Linux 用户账号管理

10.3.1. 新增用户
useradd 选项 用户名

参数说明:

  • 选项:

    • -c comment 指定一段注释性描述。
    • -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
    • -g 用户组 指定用户所属的用户组。
    • -G 用户组,用户组 指定用户所属的附加组。
    • -s Shell文件 指定用户的登录Shell。
    • -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
  • 用户名:

    指定新账号的登录名。

10.3.2. 修改用户

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。

修改已有用户的信息使用usermod命令,其格式如下:

usermod 选项 用户名

常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。

另外,有些系统可以使用选项:-l 新用户名

这个选项指定一个新的账号,即将原来的用户名改为新的用户名。

例如:

# usermod -s /bin/ksh -d /home/z --g developer sam

此命令将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。

10.3.3. 删除用户

如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。

删除一个已有的用户账号使用userdel命令,其格式如下:

userdel 选项 用户名

常用的选项是 -r,它的作用是把用户的主目录一起删除。

例如:

# userdel -r sam

此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。

10.3.4. 用户口令的管理

用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。

指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:

passwd 选项 用户名

可使用的选项:

  • -l 锁定口令,即禁用账号。
  • -u 口令解锁。
  • -d 使账号无口令。
  • -f 强迫用户下次登录时修改口令。

如果默认用户名,则修改当前用户的口令。

例如,假设当前用户是sam,则下面的命令修改该用户自己的口令:

$ passwd 
Old password:****** 
New password:******* 
Re-enter new password:*******

如果是超级用户,可以用下列形式指定任何用户的口令:

# passwd sam 
New password:******* 
Re-enter new password:*******

普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。

为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。

为用户指定空口令时,执行下列形式的命令:

# passwd -d sam

此命令将用户 sam 的口令删除,这样用户 sam 下一次登录时,系统就不再允许该用户登录了。

passwd 命令还可以用 -l(lock) 选项锁定某一用户,使其不能登录,例如:

# passwd -l sam

查询用户信息

id user

查看登录用户

who am i

10.4. Linux系统用户组的管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

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

10.4.1. 新增用户组

增加一个新的用户组使用groupadd命令。其格式如下:

groupadd 选项 用户组

可以使用的选项有:

  • -g GID 指定新用户组的组标识号(GID)。
  • -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

实例1:

# groupadd group1

此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。

实例2:

# groupadd -g 101 group2

此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。

10.4.2. 删除用户组

如果要删除一个已有的用户组,使用groupdel命令,其格式如下:

groupdel 用户组

例如:

# groupdel group1

此命令从系统中删除组group1。

10.4.3. 修改用户组

修改用户组的属性使用groupmod命令。其语法如下:

groupmod 选项 用户组

常用的选项有:

  • -g GID 为用户组指定新的组标识号。
  • -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
  • -n新用户组 将用户组的名字改为新名字

实例1:

# groupmod -g 102 group2

此命令将组group2的组标识号修改为102。

实例2:

# groupmod --g 10000 -n group3 group2

此命令将组group2的标识号改为10000,组名修改为group3。

10.4.4. 切换用户组

如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。

用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。例如:

$ newgrp root

这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。

11. 权限管理

11.1. Linux下的用户

linux下有两种用户:即超级用户(root)普通用户

1.超级用户:可以再linux系统下做任何事情,不受限制在linux下做有限的事情命令提示符是"#"。

2.普通用户:普通用户权限就没有超级用户那么高会受到限制 .普通用户的命令提示符是"$"。

超级用户和普通用户之间切换可以使用su 或者su-实习普通用户和超级用户之间的切换。超级用户切换为普通用户不需要密码,普通用户切换为超级用户需要超级用户的密码。

11.2. su、su-和sudo

从超级用户切换为普通用户时使用su切换我们发现工作目录怎么还是root耶?这是为什么了呢?下面我们来谈一下su 和su-的区别:

1.su和su-的区别是:su只切换了root的身份但是Shell环境任然是root身份的Shell,而后者把Shell和用户环境一起切换为普通用户身份。

2.su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。用echo $PATH命令看一下su和su -以后的环境变量有何不同。以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令。

如果我们只是想短暂的提升权限可以使用sudo指令。

命令:sudo

功能:短暂的提升普通用户的权限

说明:可以让普通用户做一些原来不能做的事情

11.3. 文件的权限

linux下权限=人+事物的属性

一:文件访问者的分类(人):

1.文件和文件目录的所有者:u---User(中国平民 法律问题)

2.文件和文件目录的所有者所在的组的用户:g---Group(不多说)

3.其它用户:o---Others (外国人)

二:文件类型和访问权限

文件类型:

d 文件夹(目录文件)
- 普通文件
l 软连接(就相当于Windows下的快捷方式)
b 块设备文件
p 管道文件
c 字符设备文件
s 套接口文件

总结:在linux下万物皆文件,并且在linux下不已文件后缀区分(gcc g++是区分文件后缀,它两是系统上的命令)。

11.4. 基本权限

  1. 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  2. 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  3. 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  4. "---"表示不具有该项权限

11.5. 文件权值的表示方法

文件权值的表示方法有两种:

1.字符法表示:

表示 说明 表示 说明
rwx 可读可写可执行 -wx 可写可执行
r-x 可读不可写可执行 rw- 可读可写
r-- 只可读 -w- 只可写
--x 只可执行 --- 没有权限

2.字符法表示:

字符表示 八进制 二进制
rwx 7 111
rw- 6 110
r-- 4 100
r-x 5 101
--x 1 001
-w- 2 010
-wr 3 011
--- 0 000

11.6. 权限设置及修改

chmod

功能:设置文件的访问权限

格式:chmod [参数] 权限 文件名

常用选项:

R -> 递归修改目录文件的权限说明:只有文件的拥有者和root才可以改变文件的权限

chmod使用
1. 用户表示符+/-=权限字符

+:向权限范围增加权限代号所表示的权限

-:向权限范围取消权限代号所表示的权限

=:向权限范围赋予权限代号所表示的权限

用户符号:

u:拥有者

g:拥有者同组用

o:其它用户

a:所有用户

例:给文件的所有者增加x权限

chmod u+x test.c

2. 通过8进制形式添加

chmod 666 test.c
chown

功能:修改文件的所属组和拥有者

格式:chown [参数] 用户名 文件名

chown root:root test.c temp.txt
chgrp

功能:修改文件或目录的所属组

格式:chgrp [参数] 用户组名 文件名

常用选项:-R 递归修改文件或目录的所属组

chgrp ksy test.c

11.7. 目录权限

  1. 可执行权限(x): 如果目录没有可执行权限, 则无法cd到目录中.
  2. 可读权限®: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
  3. 可写权限(w): 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

11.8. 粘滞位

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

一、超级管理员删除

二、该目录的所有者删除

三、该文件的所有者删除

11.9. 给用户sudo权限的分配

首先切换为root

使用vim 打开 /etc/sudoers这个文件

找到对应位置将对应用户加上即可

12. 软件安装

12.1. 软件包分类

12.1.1. 源码包

源码包一般指C语言开发的源代码文件的一个压缩包(.tar.gz或.tar.bz2)。源码包的编译使用Linux系统里的编译器gcc,利用该编译器可以把源码包变成可执行的二进制文件。

12.1.2. 二进制包

二进制包分类

  • RPM包:由Red Hat公司开发的包管理系统,软件的安装、升级、卸载都非常简单和方便。目前很多Linux发行版都在使用这种包管理机制,包括CentOS、Redhat、Fedora等。软件包文件后缀是".rpm"。
  • DPKG包:由Debian Linux开发出来的包管理机制,主要应用在Debian和Unbuntu系统中。软件包文件后缀是".deb"。

不论是RPM包管理器还是DPKG包管理器,都存在软件包依赖问题,比如软件包A依赖软件包B,软件包B又依赖软件包C,即依赖关系是 "A -> B -> C",那么就必须先安装C,在安装B,最后A才能安装成功。

为了解决这种依赖问题,Linux开发商都提供了在线安装机制,通过这种机制可以自动解决依赖关系,安装A时会自动安装B和C。

  • 基于RPM包管理机制开发出了YUM在线安装机制

  • 基于DPKG包管理机制开发出了APT在线安装机制

12.1.3. 二进制包特点

RPM包的优点:

  • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载;
  • 安装速度比源码包安装快很多。

RPM包的缺点:

  • 经过编译,不再可以看到源码;
  • 功能选择不如源码包灵活;
  • 依赖性。

12.2. RPM安装

12.2.1. rpm包命名规则
  • 包全名:如果操作的是未安装软件包,则使用包全名,注意绝对路径。
  • 包名:如果操作的是已经安装的软件包,则使用包名即可,系统会产生RPM包的数据库(/var/lib/rpm/),且可以在任意路径下操作。
12.2.2. rpm包默认安装路径
12.2.3. rpm包安装

安装命令:rpm -ivh 包全名

选项:

-i:安装(install)

-v:显示更详细的信息(verbose)

-h:打印#显示安装进度(hash)

--nodeps:不检测依赖性安装。软件安装时会检查依赖性,如果所依赖的软件还未安装则会报错。加上该选项不检测依赖强制安装,但是这样的软件安装后一般不能使用,建议不要这么做。

--replacefiles:替换文件安装。若安装软件包时包中部分文件已经存在,正常安装时会报错某文件已经存在导致软件无法安装,使用该选项可以忽视报错覆盖安装。

--replacepkgs:替换软件包安装。若软件包已经安装,此选项将软件包重复安装一遍。

--force:强制安装(--replacefiles和--replacepkgs的组合)

--test:测试安装(检查依赖性,不会实际安装)

--prefix:指定安装路径,不使用默认安装路径(指定安装路径会使得系统找不到这些安装的软件,需要手工配置被系统识别)

12.2.4. rpm包升级

升级命令:rpm -Uvh 包全名

选项:

-U:升级安装(如果没有安装过,系统直接安装;如果安装的版本较老,则升级到新版本)

升级命令:rpm -Fvh 包全名

选项:

-F:升级安装(如果没有安装过,则不会安装;必须有旧版本的软件安装,才能升级)

12.2.5. rpm包卸载

卸载命令:rpm -e 包名

选项:

-e:卸载软件包

--nodeps:卸载时不检查依赖性(如果卸载的软件被其它软件依赖导致卸载失败,加上此选项可以强制卸载,但是可能会导致其它软件无法使用,谨慎)

12.2.6. rpm包查询

查询软件包是否安装

rpm -q 包名

查询系统中所有的安装的软件包

rpm -qa

12.3. yum命令

yum软件仓库是为了进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。yum的关键之处是要有可靠的respository,它能够从指定服务器自动下载rpm包并安装。yum能够自动解决软件依赖性问题,一次性安装所有依赖的软件包。

12.3.1. 查询命令

首先,安装软件的权限一般情况都需要root文件,所以我们切换至root账户,或者命令前+sudo以root用户执行命令。

yum list:查询yum源服务器上所有可安装的软件包列表

[root@letty-02 ~]# yum list | more 
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Installed Packages    --已经安装的软件包
......
Available Packages    --还可以安装的软件包
......

yum list 包名:查询yum源服务器中是否包含某个软件包

[root@letty-02 ~]# yum list httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Available Packages
httpd.x86_64                                 2.4.6-40.el7.centos                                 centos7

运行yum list列出了很多文件,这时候我们可以用grep栓选一下。

比如我们要找一个sl的软件。 我们可以输入

yum list | grep sl

可以发现过滤了了没有sl的文件。

yum search 关键字:查询yum源服务器上所有和关键字相关的软件包(可用于确定某个软件在哪个相关包中)

[root@letty-02 ~]# yum search ifconfig
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
========================================== Matched: ifconfig ===========================================
net-tools.x86_64 : Basic networking tools

yum info 包名:查询指定软件包的信息

[root@letty-02 ~]# yum info httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Available Packages    --未安装
Name        : httpd    --包名
Arch        : x86_64    --适合的硬件平台
Version     : 2.4.6    --版本
Release     : 40.el7.centos    --发布版本
Size        : 2.7 M    --大小
Repo        : centos7    --光盘
......
12.3.2. 安装命令

软件安装就很简单。我们yum install 文件名即可。

假如我们要安装sl,可以输入yum install sl

它会提示你是否安装,y就是是,n就是否。当然你如果不想它提示的话,你可以输入yum -y install sl强制安装,它就不会提示你了。

12.3.3. 卸载命令

使用方法很简单。yum remove 软件名,我们上面安装了sl,那么我们现在删掉它试试。 输入yum remove sl即可。

它会提示你是否删除,y则代表是,n则代表否,如果不想提示,可以输入yum -y remove sl

注意:除非确定要卸载的软件依赖包不会对系统产生影响,否则不要执行yum卸载。

12.3.4. 升级命令

升级指定软件包:yum -y update 包名

升级本机所有软件包:yum -y update(服务器稳定优先,因此全系统升级的情况并不多见)

注意:在进行升级操作的时候,yum源服务器中软件包的版本要比本机安装的软件包的版本高。

12.3.5. yum组管理命令

软件组指的是一组相关的软件包(并不是指依赖关系),通过yum命令可以对组内软件包批量管理。

  • yum grouplist:列出所有可用的软件组列表

  • yum groupinfo 软件组名:列出软件组包含的软件

  • yum groupinstall 软件组名:安装软件组

  • yum groupremove 软件组名:卸载软件组

13. 管道

在Linux中,管道操作是一种强大而灵活的机制,用于在多个命令或者进程之间传输数据。它允许一个命令的输出直接作为另一个命令的输入,从而实现数据的连续处理,无需通过中间文件来存储数据。管道的核心思想是提高命令行操作的效率和简洁性。

13.1. 管道操作的概念

管道实质上是一个进程间通信(IPC)的方法,它创建了一个单向数据流通道。当你在命令行中使用竖线 | 符号时,就是在建立一个管道。这个符号左边命令的stdout(标准输出)被连接到右边命令的stdin(标准输入)。因此,数据从左至右流动,形成一个数据处理链。

13.2. 管道的特性

  1. 临时性:管道中的数据是临时的,当所有读取管道的进程完成之后,数据就会消失。
  2. 无磁盘I/O:管道操作发生在内存中,减少了对磁盘的读写,提高了效率。
  3. 单向性:数据只能沿着一个方向流动,即从左边命令流向右边命令。
  4. 先进先出(FIFO):数据按照进入管道的顺序被读取,保持了数据的顺序性。

13.3. 管道命令操作符

"|"是Linux管道命令操作符,简称管道符。使用此管道符"|"可以将两个命令分隔开,"|"左边命令的输出就会作为"|"右边命令的输入,此命令可连续使用,第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

例如

bash 复制代码
cat hello.sh | sort | uniq | grep 'better'

13.4. 操作示例

以分页显示的方式(less)查看当前目录下内容(ls-l)

ls -l | less

ls -l 是显示当前目录下文件的命令,直接使用时会将所有文件一次列出,不方便查看。有了管道符"|"之后,默认只显示第一屏内容,可以通过按回车键或滑动鼠标滚轮来显示其它内容,结束后按"Q"键退出。

13.5. 利用echo命令测试管道操作效果

echo "2+4"

2+4

echo "2+4" | bc

6

可以很明显的看出,单独使用echo命令时直接将"2+4"作为文本输出了,而添加管理后,又将输出结果"2+4"作为输入内容传递给了计算器语言bc,对"2+4"经过运算后输出。

13.5.1. 排序

将前面cat命令输出的结果通过管道丢给sort命令,所以sort命令是对前面cat命令输出的文本进行排序

bash 复制代码
cat hello.sh | sort
13.5.2. 去重

sort跟uniq结合使用才能有效去重,所以通过管道将sort处理后输出的文本丢给uniq处理,所以uniq处理的是排序好的文本,可以进行有效去重

bash 复制代码
cat hello.sh | sort | uniq

注意事项

  • 确保命令的输出格式与下一个命令的输入要求兼容。
  • 对于包含特殊字符或空格的文件名,使用-print0选项与xargs -0配合,以避免解析错误。
  • 当命令输出大量数据时,考虑性能影响,可能需要分批处理或使用其他工具如awkperl等进行更复杂的文本处理。

14. grep

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

14.1. 语法格式

grep [选项]  "搜索内容"  文件名

14.2. 选项说明

-a 不要忽略二进制数据。 
-A 数字: 列出符合条件的行,并列出后续的n行
-B 数字: 列出符合条件的行,并列出前面的n行
-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。 
-c: 统计找到的符合条件的字符串的次数
-C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。 
-d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。 
-e<范本样式> 指定字符串作为查找文件内容的范本样式。 
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。 
-f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。 
-F 将范本样式视为固定字符串的列表。 
-G 将范本样式视为普通的表示法来使用。 
-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。 
-H 在显示符合范本样式的那一列之前,标示该列的文件名称。 
-i 忽略字符大小写的差别。 
-l 列出文件内容符合指定的范本样式的文件名称。 
-L 列出文件内容不符合指定的范本样式的文件名称。 
-n 输出行号
-q 不显示任何信息。 
-R/-r 此参数的效果和指定"-d recurse"参数相同。 
-s 不显示错误信息。 
-v 反向查找
-w 只显示全字符合的列。 
-x 只显示全列符合的列。 
-y 此参数效果跟"-i"相同。 
-o 只输出文件中匹配到的部分
--color=auto 搜索出的关键字用颜色显示

实例-多条件查询

如从日志查询SQL包含"SELECT" "23244" "10569"关键字的语句,可以如下所示:

grep "SELECT" logs/catalina.out |grep "10569" |grep "23244"

查找用户信息文件/etc/passwd中,有多少可以登录的用户

grep "/bin/bash" /etc/passwd

14.3. 正则搜索

其同样支持正则搜索

#正则表达式"."只能匹配一个字符,这个字符可以是任意字符
grep "s..d" test_rule.txt

#"*"前一个字符匹配0次,或任意多次
grep "s.*d" test_rule.txt
grep "a*" test_rule.txt

#"^"代表匹配行首,比如"^M"会匹配以大写"M"开头的行
grep "^M" test_rule.txt

#"$"代表匹配行尾,如果"n$"会匹配以小写"n"结尾的行
grep "n$" test_rule.txt

#"^$"则会匹配空白行
grep -n "^$" test_rule.txt

#"[]" 匹配中括号中指定的任意一个字符,只匹配一个字符
grep "s[ao]id" test_rule.txt

#"[^]" 匹配除中括号的字符以外的任意一个字符
grep "^[^a-z]" test_rule.txt

熟悉正则表达式的童鞋应该很疑惑,在正则表达式中应该还可以支持一些元字符,比如"+""?""|""()"。其实Linux是支持这些元字符的,只是grep命令默认不支持而已。如果要想支持这些元字符,必须使用egrep命令或grep -E选项,所以我们又把这些元字符称作扩展元字符。

更多实例如下:

#查找包含有"root"的行,并列出后续的3行
[root@localhost ~]# grep -A 3 "root" /etc/passwd

#查找可以登录的用户,并显示行号
[root@localhost ~]# grep -n "/bin/bash" /etc/passwd

#查找不含有"/bin/bash"的行,其实就是列出所有的伪用户
[root@localhost ~]# grep -v "/bin/bash" /etc/passwd

参考博客:

Linux 常用操作命令大全(最后更新时间:2024年1月)_linux常用命令-CSDN博客

为初学者解释的 Linux 目录结构

一篇读懂 Linux 用户管理与操作 - 知乎

Linux 用户和用户组管理 | 菜鸟教程

Linux下权限管理(初学者必备)_linux权限管理-CSDN博客

【Linux】软件安装(三分钟教会你如何在linux下安装软件)_sudo命令安装软件-CSDN博客

CentOS 7安装软件的三种方式(RPM、YUM、源码包)_centos 安装软件 .sh文件怎么运行-CSDN博客

Linux管道符|命令使用详解_linux中|的用法-CSDN博客

Linux - 管道(|)和grep 命令_1.通过管道 用grep查找etc目录中的passwd的详细信息-CSDN博客

相关推荐
yaoxin52112336 分钟前
第二十七章 TCP 客户端 服务器通信 - 连接管理
服务器·网络·tcp/ip
内核程序员kevin39 分钟前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
qq_17448285755 小时前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
sinat_384241095 小时前
使用 npm 安装 Electron 作为开发依赖
服务器
朝九晚五ฺ5 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
锅包肉的九珍5 小时前
Scala的Array数组
开发语言·后端·scala
自由的dream5 小时前
Linux的桌面
linux
心仪悦悦5 小时前
Scala的Array(2)
开发语言·后端·scala
xiaozhiwise6 小时前
Makefile 之 自动化变量
linux
2401_882727576 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架