Linux系统学习笔记 2
5.文件操作
grep – 搜索文件内容
功能说明:搜索文件内容,在文件中查找指定的字符序列(字符串)
执行权限:所有用户
基本语法:两种写法完全等价
grep [选项] 待查找的字符序列 文件路径
grep [选项] '待查找的字符序列' 文件路径
常用选项
| 选项 | 功能说明 |
| -n | 显示行号 |
| -c | 统计搜索到的行的数量(返回值数,不能跟-n配套使用) |
| -i | 忽略大小写搜索(只要针对英文)a → a + A |
| -v | 反向搜索,显示不包含匹配的行 |
-n 演示示例

-i 演示示例

-c 演示示例

正则表达式
行首匹配(^)
功能:匹配以指定字符序列开头的行
语法:
grep -n '^字符序列' 文件路径
示例:

行尾匹配($)
功能:匹配以指定字符结尾的行
语法:grep -n '字符序列$' 文件路径
示例:grep -n '[0-9]$' 文件路径 :匹配以[0-9]中任意数字结尾的行

find – 查找文件或目录
功能说明:查找文件或目录(递归查找),从磁盘查找,精确性高,性能较低
使用场景:适合在需要精确查找文件时使用,但由于是遍历磁盘,所以速度较慢
执行权限:所有用户
基本语法:find 检索路径 [选项] 参数
常用选项
| 选项 | 功能说明 | 参数格式 |
| -name | 按照名称查找(英文默认区分大小写) | 文件名模式 |
| -iname | 按照名称查找 | 文件名模式 |
| -size | 按照文件大小查找 | +/- 大小[单位] |
| -type | 按照文件类型查找 | d(目录),f(文件),l(链接) |
| -mtime | 按照修改时间查找 | +/- 天数 |
单位说明:
- 默认单位:1单位 = 512字节(Byte/Char)
- K :1KB = 1024Byte
- M :1MB = 1024KB
- G :1GB = 1024MB
使用示例
#在当前路径下查找文件为01.txt的文件(忽略大小写)
find ./ -iname 01.txt
#从根路径开始,查找问价大小超过3M(3*1024*1024字节)的文件
find / -size +3M
#从根路径开始,产找文件大小不超过3个单位的文件
find / -size +3
#从根路径开始,查找大小不超过3M的文件
find / -size -3M
#从根路径开始,查找24小时内修改过的文件 1:1天
find / -mtime -1
#从根路径开始,匹配文件类型为目录
find ./ -type d
locate – 快速查找文件
功能说明:快速查找文件或目录,从数据库查找,准确性较低,性能高
特点:从文件系统数据库中查找,新创建的文件可能找不到(数据库未更新)
执行权限:所有用户
基本语法:locate – [选项] 文件或目录
常用选项
| 选项 | 功能说明 |
| -c | 统计文件个数,返回数字(grep 返回行数) |
| -i | 忽略大小写 |
使用示例
#手动更新数据库(需要管理员权限)
sudo updatedb
#从数据库中查找文件(忽略大小写)
locate -i test.c
注意事项:
- 默认情况下updatedb 每天自动更新一次
- 向创建的文件需要手动更新数据库才能被locate找到
which – 查找指令位置
功能说明:快速检索指令的位置
执行权限:所有用户
基本语法:which 指令名
使用示例:
#快速查找ls 指令的位置

echo – 输出字符串
功能说明:将指定字符串输出到设备上,常用于将内容写入文件
执行权限:所有用户
基本语法:echo "字符串" > | >> 文件路径
使用示例:

| (管道)- 命令组合
功能说明:将前一个指令执行的结果作为后一个指令的条件
执行权限:所有用户
使用示例:
#显示以.txt结尾的文件的详细信息
#先通过 ls -l 列出所有文件
#再通过 grep '.txt' 列出以.txt 结尾的文件
ls -l | grep '.txt'
#统计文件中包含特定字符串的行数
cat file.txt | grep -c 'pattern'
#查看系统进程中包含的Java的进程
#先列出所有进程
#再检索出Java进程
ps aux | grep java

![]()
6.用户和用户组基础概念
基本概念
用户(user)
- 计算机系统通过用户名和密码来识别用户身份
- 每个用户都有唯一的用户ID(UID)
- Linux系统中,新建用户后,必须设置密码才能使用
- 密码输入时默认不可见,确保安全性
超级用户(root)
- 系统内置的最高权限用户
- 拥有对系统的安全掌控
- 默认存在,但首次使用需要设置密码
- 可以执行任何命令,修改任何文件
用户组(Group)
- 将多个用户归类管理的机制
- 每个用户组有唯一的组ID
- 便于批量设置文件权限
- 每个用户至少属于一个组,可属于多个附属组
用户类型
超级用户(root)
- 用户名:root
- UID:0
- 拥有最高权限
普通用户(user)
- 安装系统时创建的用户(如 st )
- 由超级用户创建的用户(如 Lucy mike等等)
- UID范围:1000-65535
- 权限受限制,需要sudo 获取临时权限
7.用户管理
超级用户密码设置
修改root用户密码:
sudo passwd root
#输入密码不可见,正常安全机制
用户切换
普通用户→root用户
#方式1:使用 sodo -i (推荐:不需要root密码,适合从登录账户st 直接切入)
#方式2:使用 su root (需要root密码)
root 用户→ 普通用户
#方式:su 用户名
查看当前用户:
whoami
用户创建
执行权限:root 用户
基本语法:sudo useradd [选项] 用户名
常用选项
| 选项 | 功能 |
| -d | 指定用户目录(创建的同时,再该用户/home下创建一个文件夹) |
| -m | 自动创建用户 |
| -g | 指定用户组 |
| -G | 指定附属用户组 |
创建用户示例:

用户创建后自动完成的操作
1.在 /etc/passwd 文件中添加用户信息
2.在 /etc/shadow 文件中添加密码信息
3.创建用户主目录(如/home/lucy)
4.创建同名的用户组(如Lucy组)
用户密码管理
设置用户密码:
sudo passwd 用户名
选项说明:
- -l :锁定用户账号
- -u :解锁用户账号
- -d :删除用户密码(不建议)
- -e :强制用户下次登录修改密码
演示示例:

用户信息查看
查看用户所属组:
groups 用户名
查看所有用户信息:
#查看用户基本信息
cat /etc/passwd (或者tail -5 /etc/passwd)
#查看用户密码信息(加密)
sodo cat /etc/shadow

用户修改
基本语法:
sudo usermod [选项] 用户名
常用选项
- -c :修改用户备注信息
- -g :修改主用户组
- -G:修改附属用户组
示例:
#修改Lucy的主组为root
sudo usermod -g root lucy
#修改mike的主组为Lucy,附属组为st
sudo usermod -g lucy -G st lucy
#修改用户登陆名(从oldname修改为newname)
sudo usermod -l newname oldname
用户删除
基本语法:
sudo userdel [选项] 用户名
常用选项:
- -f :强制删除,即使用户以登录
- -r :同时删除用户主目录及相关文件
演示示例:
#仅删除用户账户 bob ,保留主目录/home/bob
sudo userdel bob
#强制删除用户账户 bob ,同时删除主目录/home/bob
sudo userdel -fr bob
8.用户组管理
创建组
基本语法:
sudo groupadd [选项] 组名
选项说明:
- -g :指定组id
示例:
#创建工作组work
sudo groupadd work

组信息查看
查看所有用户组:
#方法1:查看用户组
cat /etc.group(或者tail -n /etc/group)
#方法2:查看组密码信息
sudo cat /etc/gshadow
#方法3:查看待定组信息
grep '组名' /etc/group
getent group 组名
组修改
基本语法:sudo groupmod [选项] 组名
常用选项:
- -g :修改组ID
- -n:修改组名
示例:
#修改组名为newgroup
sudo groupmod -n newgroup oldgroup
组删除
基本语法:
#删除workgroup组
sudo groupdel workgroup
注意:不能删除用户的主组,需要先修改用户的主组
9.权限管理
权限基础概念
权限类型:
- -r :读权限:查看文件内容(cat,tail head等),列出目录内容(ls)
- w :写权限:修改文件内容(touch vim等),创建删除目录(mkdir,rmdir,rm等)
- x :执行权限:执行文件(./文件名),进入目录(cd等)
权限对应表:
| 权限类型 | 权限数字 | 操作文件 | 操作目录 |
| r:读 | 4 | cat、more 、less、head、tail、grep等 | ls(查看目录内容) |
| w:写 | 2 | >(覆盖写入)、>>(追加写入)、touch、rm、vim | mkdir、rm、rmdir,mv(重命名) |
| x :执行 | 1 | ./文件名 | cd(进入目录),cp(拷贝),mv(移动) |
| – :无权限 | 0 | 无操作 | 无操作 |
权限对象:
- u :user,文件所有者
- g :group ,文件所属组
- o:other,其他用户
权限表示方法:
| 权限组合 | 数字表示 | 含义说明 |
| rwx | 7=4+2+1 | 读,写,执行权限 |
| rw- | 6=4+2+0 | 读,写权限 |
| w-x | 5=4+0+1 | 读,执行权限 |
设置所有者和权限
设置所有者和所属组
演示示例:
#修改文件所有者为Lucy
sudo chown lucy /home/work/demo01.c
#修改文件所属组为workgroup :组名
sudo chown :workgroup /home/work/demo01.c
#上面两行可以缩写为一行
sudo chown lucy:workgroup /home/work/demo01.c
#递归修改目录及其内容,此时/home/work以及其子目录中所有文件所有者都是Lucy,所有组都是workgroup
设置权限
演示示例:
#授权:设置所有者对于demo01.c的访问权限
- sudo chmod 750 /home/st/demo01.c
- sudo chmod -r 750 /home/work :递归修改目录权限(当前目录及其子目录权限一致)

10.vim编辑器
vim安装与卸载
在线安装
#更新软件源
sudo apt-get update
#安装vim,其他软件安装同理,将程序名换一下
sudo apt-get install vim
卸载vim
#卸载vim,其他软件同理,将程序,名换一下即可
sudo apt-get remove
#彻底删除(包括配置文件)
sudo apt-get purge vim
vim的启动与退出
启动vim
- vim
- vim 文件路径
- vim 文件路径 + :打开文件定位到最后一行(适合打开配置文件)
- vim 文件路径 +行号 :打开文件定位到指定行
退出vim
1.先按esc键确保进入命令模式
2.进入末行模式(shift + :)
3.选择退出方式
- :q #不保存仅退出
- :wq #保存并退出
- :q! #强制退出不保存(丢弃所有修改)
- :wq! #保存并退出(适用于只读文件)
- 😡 #保存并退出
- ZZ #命令模式下直接保存并退出(无需进入末行模式)
vim工作模式
命令模式 :按键esc 进入
输入模式 :按键i/a/o 进入
末行模式 :按键shift+:进入
vim常用指令操作
删除操作
| 快捷键 | 功能描述 | 模式 |
| x | 删除当前光标所在处一个字符 | 命令模式 |
| nx | 删除当前光标所在处n个字符,如6x | 命令模式 |
| dd | 删除当前光标所在行 | 命令模式 |
| ndd | 删除当前光标后面共n 行,如3dd | 命令模式 |
| :n1,n2d | 删除第n1,到n2行,如:1,12d | 末行模式 |
拷贝操作
①可视模式复制:
1.按esc 确保进入命令模式
2.按 v 进入可视模式
3.使用方向键 ↑↓ 选中文本
4.按 Y 完成拷贝
5.使用 P 进行粘贴
②行复制
| 快捷键 | 功能描述 | 模式 |
| yy | 复制当前行 | 命令模式 |
| nyy | 复制当前行及以后连续n行,如5yy | 命令模式 |
| :n1,n2 copy dn | 复制n1~n2行粘贴到dn行之后,如:3,14 copy 2 , | 末行模式 |
粘贴操作:
| 快捷键 | 功能描述 | 使用场景 | 模式 |
| p | 粘贴在当前行下方(整行)或光标之后(字符) | 配置yy,nyy,可能模式复制 | 命令模式 |
撤销操作:
| 快捷键 | 功能描述 | 模式 |
| u | 撤销上一步操作 | 命令模式 |
| Ctrl + R | 对撤销进行还原 | 命令模式 |
查找操作
①基本查找
| 命令 | 功能描述 | 查找方向 | 模式 |
| /string | 查找字符串"string" | 从当前位置匹配后,匹配每一行第一个查找的数据 | 末行模式 |
②查找控制
| 快捷键 | 功能描述 | 模式 |
| n | 继续查找下一个匹配项 | 命令模式 |
替换操作
语法::[范围] s/查找字符串/替换字符串/[标志]
范围说明:
- % :全文搜索
- n1,n2:第n1-n2行
- . :当前行
- $ :最后一行
标志说明:
- g :全局替换(匹配行中所有匹配项)
- i :忽略大下写
演示示例:
#将全文每行第一个 int 替换为 void
:%s /int/void
#将全文所有 int 替换 void
:%s /int/void/g
Linux 基础操作至此完

