Linux入门学习指南

devtools/2024/9/24 21:22:42/

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文章目录

  • 一、介绍
  • 二、用户和用户组
    • 1. Linux用户分类
    • 2. 用户管理命令
      • 2.1 命令使用权限
      • 2.2 添加用户
      • 2.3 切换用户
      • 2.4 修改用户密码
      • 2.5 修改已有用户信息
      • 2.6 删除用户
    • 3. 用户组管理
      • 3.1 使用权限
      • 3.2 增加用户组
      • 3.3 修改用户组
  • 三、系统管理
    • 1. 日期时间管理
      • 1.1 使用者权限
      • 1.2 date命令
        • 1.2.1 语法
        • 1.2.2 参数
        • 1.2.3 显示时间
        • 1.2.4 设置时间
      • 1.3 时间类型分类
        • 1.3.1 UTC世界标准时间
        • 1.3.2 GMT格林尼治时间
        • 1.3.3 CST北京时间
      • 1.4 时区拓展
    • 2. 用户显示
    • 3. sudo命令
      • 3.1 语法
      • 3.2 参数
    • 4. top命令
      • 4.1 使用权限
      • 4.2 描述
      • 4.3 显示进程信息
      • 4.3 进程(任务)的状态监控属性描述
      • 4.4 显示完整命令
      • 4.5 举例
    • 5. ps命令
      • 5.1 使用者权限
    • 5.2 语法
    • 5.3 显示进程信息
    • 5.4 显示指定用户信息
    • 5.5 显示所有进程信息
    • 6. kill命令
      • 6.1 使用者权限
      • 6.2 语法
      • 6.3 参数说明
      • 6.4 举例
      • 6.5 杀死指定用户所有进程
        • 6.5.1 过滤itcast用户进程来删除
        • 6.5.2 直接杀死来删除
    • 7. 关机命令
      • 7.1 使用者权限
      • 7.2 语法
      • 7.3 参数描述
      • 7.4 立即关机
      • 7.5 指定参数进行关机
    • 8. 重启命令
      • 8.1 使用者权限
      • 8.2 语法
      • 8.3 参数描述
      • 8.4 直接重启
      • 8.5 指定参数进行重启
  • 四、创建文件和目录
    • 1. 创建文件
    • 2. 创建目录
      • 2.1 语法
      • 2.2 命令参数描述
      • 2.3 创建空目录
      • 2.4 举例
      • 2.5 -p参数的使用
      • 2.6 创建目录时显示提示信息
      • 2.7 创建目录时指定权限
  • 五、路径的概念
    • 1. 绝对路径
    • 2. 相对路径
  • 六、删除文件和目录
    • 1. 删除文件
      • 1.1 rm命令删除文件
        • 1.1.1 参数
        • 1.1.2 语法
      • 1.2 备用删除命令
        • 1.2.1 ps和kill命令组合
        • 1.2.2 lsof和kill命令组合
        • 1.2.3 fuser命令
        • 1.2.4 参数描述
        • 1.2.5 使用find命令结合-exec来删除
        • 1.2.6 使用find和xargs来删除
      • 1.3 增量删除
        • 1.3.1 创建测试目录
        • 1.3.2 创建文件
        • 1.3.3 查看目录结构
        • 1.3.4 操作流程
      • 1.4 海量删除
    • 2. 删除目录
      • 2.1 强制删除目录
      • 2.2 提示删除
      • 2.3 一次删除多个目录
      • 2.4 root权限删除
      • 2.5 其他删除命令
        • 2.5.1 python删除目录
        • 2.5.2 find命令删除目录
  • 七、复制文件和目录
    • 1. 语法
    • 2. 参数解释
    • 3. 复制文件
    • 4. 复制目录
    • 5. 复制文件时直接覆盖
    • 6. 复制多个文件到指定目录
    • 7. 复制软链接文件
      • 7.1 不加-d复制软链接
      • 7.2 加-d复制软链接
    • 8. 复制并保留源文件属性
    • 9. 创建源文件的硬链接
    • 10. 创建源文件的软链接
    • 11. 复制举例
    • 12. rsync复制(拓展)
  • 八、移动文件和目录
    • 1. 移动文件
    • 2. 移动目录(即文件夹)
      • 2.1 移动文件到指定目录
      • 2.2 移动目录下的所有文件到指定目录
      • 2.3 移动指定类型的文件到指定目录
      • 2.4 移动目录以及目录下的所有内容
  • 九、重命名文件和目录
    • 1. rm重命名语法
    • 2. rename重命名语法
      • 2.1 单文件修改
      • 2.2 批量修改
  • 十、查看文件内容
    • 1. 查看文件类型
    • 2. 查看整个文件
    • 3. 查看部分文件
    • 4. 处理文件的操作
      • 4.1 创建空文件
      • 4.2 过滤文件内容
    • 5. 统计文件内容
    • 6. 对文件内容进行排序
    • 7. 查看长内容文件
      • 7.1 cat命令查看
        • 7.1.1 语法
        • 7.1.2 参数解释
      • 7.2 more命令查看
        • 7.2.1 语法
        • 7.2.2 百分比
      • 7.3 grep
        • 7.3.1 语法
        • 7.3.2 options参数选择
        • 7.3.3 模式查找(正则查找)
  • 十一、vi文本编辑器编辑文本
    • 1. vi介绍
      • 1.1 vi的特点
      • 1.2 vi的工作模式
    • 2. vi的启动与退出
    • 3. vi基本命令
      • 3.1 常用命令分类
      • 3.2 屏幕翻滚命令
      • 3.3 光标定位命令
      • 3.4 光标移动命令
      • 3.5 文本输入与删除
        • 3.5.1 文本的输入insert
        • 3.5.2 文本的删除delete
    • 4. 文本的修改与替换
      • 4.1 文本的修改correct
      • 4.2 文本的替换replace
    • 5. 文本的拷贝与粘贴copy
    • 6. 撤销与重做
    • 7. vi常用末行命令
      • 7.1 字符串搜索
      • 7.2 字符串替换s
      • 7.3 全局命令global
      • 7.4 全局替换
      • 7.5 文件操作与退出命令
      • 7.6 其他常用命令
        • 7.6.1 行编辑命令
        • 7.6.2 执行shell命令
        • 7.6.3 设定vi选项
  • 十二、查找文件
    • 1. find
      • 1.1 基本用法
      • 1.2 举例
    • 2. locate
    • 3. grep
      • 3.1 grep语法
      • 3.2 举例
      • 4. 通过特定程序定位文件
  • Linux命令汇总


一、介绍

服务器维护等内容均通过SSH客户端工具操作,故linux命令必不可少

二、用户和用户组

1. Linux用户分类

用户有以下几种类型:root用户、系统用户和普通用户

用户类型权限等级描述信息
root用户UID为0权限最高,也称为超级用户
系统用户UID为1-999用户不具有登录linux系统的能力但系统运行又不可或缺,也称为虚拟用户、伪用户、假用户,如ftp、mail等用户
普通用户UID为1000-60000可登录系统操作自己目录的内容的用户

拓展
/etc/passwd文件
所有用户均记录在该文件,一行表示一个用户的账号信息,信息组成部分共7个,依次为用户名、密码、用户标识号UID、用户所属的主要群组标识号GID、用户名全称、用户主目录、用户使用的Shell类型

UID值
UID使用户的ID值,系统中的每一个用户的UID值唯一,该值是确认用户权限的标识,用户登录系统所处的角色通过UID判断识别而非用户名

/etc/shadow文件
该文件是/etc/passwd的互补文件,内容包含用户及被加密的密码和/etc/passwd中不包含的信息,如用户账号有效期,该文件只有root权限可读取和操作

2. 用户管理命令

2.1 命令使用权限

用户管理的相关命令使用权限范围或者级别为root管理员

2.2 添加用户

添加用户的语法如下

useradd <username> <options>

username为用户名
options为参数值

如useradd libai -b /usr表示添加用户名李白并指定账号的主目录的基目录为/usr

options参数可选如下

参数描述
-bb为base的简写,后跟目录,指定新账户的主目录的基目录
-cc为commit的简写,后跟描述信息,指定新用户的一段提交描述
-d后跟目录,指定新用户的主目录,如果目录不存在则同时使用-m选项可创建主目录
-DD为defaults的简写,显示或更改默认的useradd配置
-ee为expiredate的简写,后跟日期,指定新用户的过期日期
-f后跟日期,指定用户的密码不活动期
-gg为gid的简写,后跟用户组的名称或ID,指定用户所属的用户组
-GG为groups的简写,后跟用户组,指定用户所属的附加组
-hh为help的简写,显示帮助信息
-kk为skel的简写,后跟目录,指定用户的骨架目录
-KK为key的简写,后跟key=value,不使用/etc/login.defs中的默认值
-l不将此用户添加到最近登录和登录失败的数据库
-m创建用户的主目录
-M不创建用户的主目录
-N不创建同名的组
-o允许使用重复的UID创建用户
-pp为password的简写,后跟密码,指定加密后的新账号密码
-r创建一个系统账号
-RR为root的简写,后跟目录,指定chroot到的目录
-ss为shell的简写,后跟shell文件,指定新用户的登录shell
-uu为uid的简写,后跟UID,指定用户的用户号,如果同时有-o选项则可以重复使用其他用户标识号
-UU为user-group的简写,创建于用户同名的组
-Z后跟seuser,为selinux用户映射使用指定的seuser

2.3 切换用户

语法:

su <username>

如切换到用户libai

su libai

2.4 修改用户密码

语法

passwd <options> <username>

options可用参数如下

参数描述
-l锁定口令,禁用账号
-u口令解锁
-d设置账号无口令
-f强迫用户下次登录时修改口令

2.5 修改已有用户信息

语法

usermod <options> <username>

options可用参数

参数完整字母描述
-aappend后跟附加组,将用户追加到下边-G中提到的附件组中,并不从其他组中删除此用户
-ccommit后跟描述信息,GECOS字段的新值
-d后跟目录,指定新用户的主目录,如果目录不存在则同时使用-m选项可创建主目录
-eexpiredate后跟日期,指定新用户的过期日期
-f后跟日期,指定用户过期inactive天数后,设定密码为失效状态
-ggid后跟用户组的名称或ID,强制使用Group为新主组
-Ggroups后跟用户组,指定用户所属的新的附加用户组
-hhelp显示帮助信息
-llogin后跟登录名,指定新的登录名称
-Llock锁定用户账号
-mmove-home将home目录内容移至新位置,该参数仅与-d参数一起使用
-onon-unique允许使用重复的UID创建用户
-ppassword后跟密码,指定加密后的新账号密码
-Rroot后跟目录,指定chroot到的目录
-sshell后跟shell文件,指定新用户的登录shell
-uuid后跟UID,指定用户的用户号,如果同时有-o选项则可以重复使用其他用户标识号
-Uuser-group创建于用户同名的组
-Zselinux-user后跟seuser,为selinux用户映射使用指定的seuser

2.6 删除用户

语法

userdel <options> <username>

options参数

参数完整字母描述
-fforce强制删除用户,即使当前用户已经登录,也会被删除
-hhellp显示帮助信息
-rremove删除用户的同时删除与用户相关的所有文件,包括主目录和邮件池
-Rroot后跟chroot目录,表示chroot到的目录
-Zselinux-user为用户

3. 用户组管理

3.1 使用权限

用户组的使用权限范围为root管理员用户

3.2 增加用户组

先新增一个用户组,然后将用户组添加到组中
语法

groupadd <options> <useradd>

options参数可选项

参数完整字母描述
-fforce如果组已经存在则成功退出,且如果GID已经存在则取消-g
-ggid后跟GID,为新组使用GID
-hhelp显示帮助信息
-Kkey后跟key=value,不使用/etc/login.defs中的默认值
-onon-unique允许使用重复的GID创建用户组,一般与-g选项同时使用,新用户组GID和系统已有用户组的GID可以相同
-ppassword后跟密码,指定加密后的新账号密码
-rsystem创建一个系统账户
-Rroot后跟chroot目录,表示chroot到的目录

拓展
用户主组、附加组
一个账户可以属于多个组群,挑一个作为用户的主组,用户登录系统后就属于改组

3.3 修改用户组

语法

groupmod <options> <group>

options参数选项

参数完整字母描述
-ggid后跟GID,为用户组指定新的GID
-hhelp显示帮助信息
-nnew-name后跟新组,改名为新的组名
-onon-unique允许使用重复的GID,一般与-g选项同时使用,新用户组GID和系统已有用户组的GID可以相同
-ppassword后跟密码,将密码改为加密过的密码
-Rroot后跟chroot目录,表示chroot到的目录

三、系统管理

1. 日期时间管理

1.1 使用者权限

使用者权限为所有用户

1.2 date命令

当日期由date设置时,系统重启后不会保存date的设置
date用于显示或设定系统地日期和时间
通过date命令可以查看日期

1.2.1 语法
date [options]
1.2.2 参数

options参数选项

参数描述
-d后跟字符串,显示字符串所指的日期与时间,字符串前后必须加上双引号
-s后跟字符串,根据字符串来设置日期与时间,字符串前后必须加上双引号
-u显示GMT时间
-help帮助提示
-version显示版本信息
1.2.3 显示时间
date
1.2.4 设置时间
date -s "2024-05-30 12:00:00"

1.3 时间类型分类

1.3.1 UTC世界标准时间

UTC:协调世界时,又称为世界统一时间、世界标准时间、国际协调时间,由于英文CUT和法文TUC的缩写不同,作为妥协简称UTC

1.3.2 GMT格林尼治时间

GMT:格林尼治 平太阳时间,指格林尼治所在地的标准时间,也表示地球自转速率的一种形式
GMT的英文名::Universal TiMe,也可以叫做GMT(Greenwich Mean Time)

1.3.3 CST北京时间

CST:北京时间(中国国家标准时间)
北京时间是中国采用国际时区东八时区的区时作为标准时间
北京时间不是北京(东经116.4°)的地方时间,而是东经120°的地方时间
北京时间处于国际时区划分中的东八区,同格林尼治(世界时)时间相差8小时(北京时间=世界时+8小时),所以名为北京时间
东八区包括的范围从东经112.5°到东经127.5°,以东经120°为中心线,东西各延伸7.5°,总宽度为15°的区域
中国幅员辽阔,东西跨了5个时区(东五区,东六、七、八、九区)授时台必须建在地理中心地带,从而产生了长短波授,北京时间和北京当地时间是两个概念,北京时间的发波不在北京,而在陕西蒲城,处于东七区。

1.4 时区拓展

东八区:东八区UTC/GMT+08:00是比世界协调时间UTC/格林尼治时间GMT快8小时的时区,时区位置东经112.5°到127.5°之间,格林尼治时间为0:00时东八区的标准时间为08:00

2. 用户显示

显示用户

logname [options]

命令用于显示用户名称,后面的参数可以不加,直接使用logname进行查看
options参数选项

参数描述
–help帮助信息
–version显示版本信息并退出

3. sudo命令

控制用户对系统命令的使用权限即root允许的操作
当你不是root用户想要使用root用户的权限,可以在命令前加sudo来提高当前用户的权限

3.1 语法

sudo [options]

3.2 参数

options参数选项

参数完整字母描述
-Aaskpass使用助手程序进行密码提示
-bbackground在后台运行命令
-Cclose-from=num关闭所有>=num的文件描述符
-Epreserve-env在执行命令时保留用户环境
-eedit编辑文件而非执行命令
-ggroup=group指定的用户组或ID执行命令
-Hset-home将home变量设为目标用户的主目录
-hhelp显示帮助信息
-hhost=host在主机上运行命令(如果插件支持)
-ilogin以目标用户身份运行一个登录shell,可同时指定一条命令
-Kremove-timestamp完全一处时间戳文件
-kreset-timestamp无效的时间戳文件
-llist列出用户权限或检查某个特定命令;对于长格式,使用两次
-nnon-interactive非交互模式,不提示
-Ppreserve-groups保留组向量,而非设置为目标的组向量
-pprompt=prompt使用指定的密码提示
-rrole=role以指定的角色创建SELinux安全环境
-Sstdin从标准输入读取密码
-sshell以目标用户运行shell;可同时指定一条命令
-ttype=type以指定的类型创建SELinux安全环境
-Uother-user=user在列表模式中显示用户的权限
-uuser=user以指定用户或ID运行命令(或编辑文件)
-Vversion显示版本信息并退出
-vversion更新用户的时间戳而不执行命令
--停止处理命令行参数

4. top命令

4.1 使用权限

所有使用者

4.2 描述

企业级开发中,开发运维人员经常使用top命令查看服务器上运行的程序占用的CPU情况以及占用内存情况
目的是检测程序是否在正常范围内运行
top命令用于实时显示process的动态

4.3 显示进程信息

top

然后可按q键退出

4.3 进程(任务)的状态监控属性描述

4.2的命令查看的结果会有很多参数,以下是对参数的描述

参数描述
PID进程id
USER进程所有者
PR进程优先级
NInice值,负值表示高优先级,正值表示低优先级
VIRT进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR共享内存大小,单位kb
S进程状态,D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
%CPU上次更新到现在的CPU时间占用百分比
%MEM进程使用的物理内存百分比
TIME+进程使用的CPU时间总计,单位1/100秒
COMMAND进程名称(命令名/命令行)

4.4 显示完整命令

top -c

-c参数是command的简写
与top命令不同的是command属性可以进行补全

4.5 举例

显示指定进程4160的信息

top -p 4160

5. ps命令

命令类似于在windows中通过任务管理器查看进程信息
linux ps命令用于显示当前进程process的状态信息

5.1 使用者权限

所有用户

5.2 语法

ps

5.3 显示进程信息

ps -A

5.4 显示指定用户信息

ps -u itcast

5.5 显示所有进程信息

ps -ef

6. kill命令

linux kill命令用于删除执行中的程序或工作,可强制终端

6.1 使用者权限

所有用户

6.2 语法

kill [-s <信息名称或编号>][程序]

kill [-l <信息编号>]

6.3 参数说明

参数后跟变量描述
-l<信息编号>如果不加<信息编号>选项,则-l参数会列出全部的信息名称
-s<信息名称或编号>指定要送出的信息
[程序][程序]参数可以是程序的PID或是PGID,也可以是工作编号

6.4 举例

杀死一个进程,如进程号15642

kill 15642

强制杀死进程,如进程号15555

kill -KILL 15555

彻底杀死进程,如进程号15555

kill -9 15555

6.5 杀死指定用户所有进程

方法有两种

6.5.1 过滤itcast用户进程来删除
kill -9 $(ps -ef | grep itcast)
6.5.2 直接杀死来删除
kill -u itcast

7. 关机命令

shutdown命令可以用来关闭系统,关机前传送信息给所有使用者正在执行的程序,shutdown也可用于重开机

7.1 使用者权限

管理员用户

7.2 语法

shutdown [-t seconds] [-rkhncfF] time [message]

7.3 参数描述

关于语法中参数的解释

参数描述
-tseconds 设定在几秒钟之后进行关机程序
-k不会真的关机,只是将警告信息传送给所有使用者
-r关机后重新开机
-h关机后停机
-n不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序然后自行关机
-c取消目前已经进行中的关机动作
-f关机时,不做fsck动作(检查linux档系统)
-F关机时,强迫进行fsck动作
time设定关机的时间
message传送给所有使用者的警告信息

7.4 立即关机

shutdown -h now

或者

shutdown

7.5 指定参数进行关机

指定1分钟后关机,1分钟后关机并显示警告信息

shutdown +1 "system will shutdown after 1 minutes"

8. 重启命令

reboot命令用于重启计算机

8.1 使用者权限

管理员、普通(需要验证)用户

8.2 语法

reboot [-n] [-w] [-d] [-f] [-i]

8.3 参数描述

参数描述
-n在重启前不做将记忆体资料歇会硬盘的动作
-w不会真的重启,只把记录写到/var/log/wtmp档案里
-d不把记录写到/var/log/wtmp档案里(-n参数包含了-d)
-f强迫重启,不会叫shutdown指令
-i在重启之前先把所有网络相关的装置停止

8.4 直接重启

reboot

8.5 指定参数进行重启

指定1分钟后重启,并发出警告信息

shutdown -r +1 "system will restart after 1 minutes "

四、创建文件和目录

1. 创建文件

创建文件的方式有多种,以下列举

1.1 重定向符(>)创建文件

重定向符可以创建一个空文件,不允许在创建时输入任何文本内容
语法

> 文件名

如:

> test.txt

1.2 touch命令创建文件

touch命令常用于将每个文件的访问和修改时间更新为当前时间
如果指定的文件名不存在则会创建新文件,touch不允许在创建文件时插入文本内容,默认创建空文件
语法

touch 文件名

如:

touch test.txt

1.3 echo命令创建文件

大多数操作系统内置echo,常用于脚本文件、批处理文件和插入文本的命令
echo允许在创建文件时插入文本内容
语法

echo "需要添加到文件的内容" > 文件名

如:

echo "这是一个使用echo命令创建的新文件" > test.txt

创建文件后也可以用两个重定向符继续向文件中添加内容,如

echo "追加内容到文件中" >> test.txt

1.4 printf命令创建新文件

用法和echo相同
语法

printf "需要添加到文件的内容" > 文件名

如:

printf "这是一个使用printf命令创建的新文件" > test.txt

创建文件后也可以用两个重定向符继续向文件中添加内容,如

printf "追加内容到文件中" >> test.txt

1.5 cat命令创建文件

cat是concatenate的简写,通常用于读取文件数据
cat作为类unix系统中最常用的命令之一,提供了三个与文本文件相关的功能:显示文件内容、组合多个文件内容到一个输出、创建一个新文件
语法

cat > 文件名

回车后然后输入内容,输入完后使用ctrl+c或者ctrl+d退出
向同一个文件添加内容可使用两个重定向符,如

cat >> 文件名

回车后输入追加内容,输入结束后使用ctrl+c或者ctrl+d退出

1.6 vi/vim命令创建文件

vim向上兼容vi,通常系统会自带vi编辑器,vim编辑器有些系统是需要自行安装的
vim有更好的界面体验,可编辑所有种类的纯文本文件
创建文件(也是编辑文件)的语法

vi 文件名

或者

vim 文件名

如果文件已存在则进行编辑,如果文件不存在则创建并编辑
至于如何使用vim命令进行编辑保存等操作,可参考文章:vim安装及使用

1.7 nano命令创建文件

nano是一个编辑器,是一个小且用户友好的自由软件,打开多个文件、逐行滚动、撤销重做、语法高亮、行号等
语法

nano 文件名

1.8 head命令创建命令

head用于输出一个文件的开头部分,默认打印一个文件的开头10行到标准输出,若有多个文件则每个文件都会有一个标题,用于表示文件名
语法

head -c OK /dev/zero > test.txt

使用ls查看创建的文件

ls -lh test.txt

1.9 tail命令创建文件

tail命令通常用于输出文件最后的一部分,默认打印每个文件最后10行到标准输出,若有多个文件则每个文件都会输出一个标题,用于表示文件名
语法

tail -c OK /dev/zero > test.txt

使用ls查看创建的文件

ls -lh test.txt

1.10 truncate命令创建文件

truncate命令通常用于将一个文件的尺寸缩小或者扩展为某个指定的尺寸
语法

truncate -s OK test.txt

使用ls查看创建的文件

ls -lh test.txt

2. 创建目录

命令mkdir是make directory的缩写

2.1 语法

mkdir [options] 目录名称

2.2 命令参数描述

语法命令中options参数选项

参数描述
-m指定目录权限,后跟数字,也可跟权限字符,虽然跟chmod类似,但不是通过"rwxrwxrwx"这种方式直接赋予
-p创建多级目录,如果路径中某些目录不存在会自动创建
-v每次创建目录都显示信息
–help显示帮助信息
–version显示版本信息

2.3 创建空目录

mkdir 目录名

2.4 举例

在当前目录创建空目录test

mkdir test

在root目录下创建空目录test

mkdir /root/test

递归创建多级目录

mkdir /root/test/111/hhhh

2.5 -p参数的使用

若该路径中有目录不存在则会创建失败,此时使用-p参数即可创建成功

mkdir -p /root/test/111/hhhh

2.6 创建目录时显示提示信息

创建新目录显示提示信息

mkdir -v 目录名

如创建新目录test

mkdir -v test

2.7 创建目录时指定权限

mkdir -m 目录权限 目录名

如:创建test目录并赋予目录可读可写可执行权限

mkdir -m 777 test

五、路径的概念

1. 绝对路径

从根目录开始的路径成为绝对路径,linux中根路径为/,如果路径以/开始则为绝对路径

当前位置的绝对路径查看命令

pwd

2. 相对路径

相对路径有一些符号需要注意

符号描述
.表示用户所处的当前目录
表示上级目录
~表示当前用户自己的home目录
~USER表示用户名为USER的home目录,这里USER是在/etc/passwd中存在的用户名

使用…/表示上一级
使用…/…/表示上上级目录
以此类推

六、删除文件和目录

1. 删除文件

1.1 rm命令删除文件

rm是remove的缩写,默认情况下linux系统带有-i参数
一般情况下使用rm进行删除

1.1.1 参数

rm命令中可添加以下参数

参数描述
-i删除前提示确认信息
-f参数表示强制删除
-r参数表示目录中有子目录进行删除

使用rm -rf filename命令可删除大多数情况的文件

1.1.2 语法

删除文件或目录

rm 文件或目录

删除前逐一询问确认

rm -i 文件或目录

直接删除,无需确认

rm -f 文件或目录

递归删除文件目录及其子目录的文件

rm -rf 目录

1.2 备用删除命令

当以上命令无法删除时,可能是进程被占用,可尝试以下命令

1.2.1 ps和kill命令组合

ps和kill命令查看并删除相应的进程,再执行rm

1.2.2 lsof和kill命令组合

lsof查看使用该文件并kill删除然后再执行rm

1.2.3 fuser命令

使用fuser -kvm /mnt/test,然后再执行rm

1.2.4 参数描述
参数描述
-kkill的缩写
-v详细输出
-m表示指定的灵位挂载点
1.2.5 使用find命令结合-exec来删除
find /tmp -type f -exec rm -rf {} \;
1.2.6 使用find和xargs来删除
find /tmp -type f | xargs rm -rf

1.3 增量删除

1.3.1 创建测试目录
mkdir {dirA, dirB} 
1.3.2 创建文件

dirA创建三个文件A1,A2,A3

touch dirA/{A1,A2,A3} 

dirB创建三个文件B1,B2,B3

touch dirB/{B1,B2,B3} 
1.3.3 查看目录结构
tree -L 2 dirA/ dirB/
1.3.4 操作流程

1
将dirA的所有文件同步到dirB内,保留文件的属主,属组,文件权限信息等

rsync -avz dirA/ dirB/

2
将dirA的所有文件同步到dirB内,并删除dirB内多余的文件

rsync -avz --delete dirA/ dirB/

3
将dirA的所有文件同步到dirB,但在dirB内除了B3不删除,其他的都删除

rsync -avz --delete --exclude='B3' dirA/ dirB/

4
将dirA目录内的A1.txt和A2.txt不同步到dirB目录中

rsync -avz --exclude='A1' --exclude='A2' dirA/ dirB/

5
将dirA目录内的A1和A2不同步到dirB目录中,并且dirB目录内删除多余的文件

rsync -avz --exclude='A1' --delete dirA/ dirB/

6
将dirA目录内的A1和A2不同步到dirB目录中,并且将dirB目录内删除多余的文件,同时,如果dirB内有A2和A1这两个被排除同步的文件,仍然将其删除

rsync -avz --exclude='A1' --exclude='A2' --delete-exclude dirA/ dirB/

1.4 海量删除

文件过多时,执行rm -rf file*报错,此时考虑同步删除操作高效快速,建立一个空目录作为中转,然后删除

rsync --delete-before -avH --progress --stats /tmp/ /yourdir/

参数解释

参数描述
-a归档模式
-v显示全部过程
-H保持硬链接
-progress在传输时显示传输过程

注意
有挂载点的情况必须先执行unmount
如果删除不掉可以尝试删除其父目录

2. 删除目录

2.1 强制删除目录

rm -Rf 目录名

2.2 提示删除

默认删除带有子目录的目录时不会提示子目录信息
删除带有子目录的目录提供详细信息,使用-v参数

rm -Rf -v 目录名

2.3 一次删除多个目录

rm -rf -v 目录1 目录2 目录3

2.4 root权限删除

如果目录为root权限,普通用户无法删除目录,此时使用sudo命令获取root权限

sudo rm -Rf 目录名

2.5 其他删除命令

2.5.1 python删除目录
import os
os.remove("目录名")
2.5.2 find命令删除目录
find 目录 -type d -name '*cache*' -exec rm -r {} +

或者

find 目录 -type d -delete

参数解释

参数描述
-exec将匹配文件和文件夹运行给定命令
-type d匹配目录类型
-name ‘cache提供名称或名称模式
-delete选项将自动删除匹配的文件和文件夹

七、复制文件和目录

复制使用cp命令
cp命令是copy的缩写

1. 语法

cp [options] source dest

source是源文件或目录
dest是目标文件或目录

2. 参数解释

命令相关参数

参数描述
-r递归复制整个文件夹
-i若目标文件或目录已存在则询问是否覆盖
-p保留源文件或源目录的所有属性
-d当复制符号链接时把目标文件或目录也建立为符号链接,并指向与源文件或目录链接的原始文件或目录。如果不加该选项,则复制的依然是源文件而不是符号链接文件,并且对硬链接文件无效
-l对源文件建立硬链接,而非复制文件
-s对源文件建立符号链接,而非复制文件
-b覆盖已存在的目标文件前将目标文件进行备份
-v详细显示cp命令执行的操作过程

3. 复制文件

语法

cp 源文件 目标文件/目标目录

注:当目标为文件时,会进行文件内容覆盖,即将文件内容复制到目标文件中

4. 复制目录

语法

cp -r 源目录 目标目录

注:因为目录中可能会含有子目录,需要使用参数-r进行递归复制,否则会报错

5. 复制文件时直接覆盖

\cp 源文件 目标文件

使用\cp不用输入y确认是否覆盖文件

6. 复制多个文件到指定目录

复制多个文件到指定目录时只需要将文件列举即可,如下

cp 源文件1 源文件2 源文件3 目标目录

7. 复制软链接文件

复制软链接语法

cp -d 软链接文件 目标目录或目标文件

注:如果不加-d参数复制的是软链接文件本身,而不是软链接对应的文件

如:
软链接tt.txt对应的是/home/test/tt.txt文件,此时复制软链接到当前文件的tt.link

7.1 不加-d复制软链接

不加-d参数时

cp tt.txt tt.link

命令是将tt.txt文件本身复制到tt.link文件,但此时复制的tt.txt和复制后的tt.link都不是软链接

7.2 加-d复制软链接

加-d参数时

cp -d tt.txt tt.link

命令会将tt.txt软链接复制到tt.link,复制后tt.link也是一个软链接,而且指向原tt.txt对应的/home/test/tt.txt文件

8. 复制并保留源文件属性

语法

cp -p 源文件 目标目录或目标文件

通过加-p参数将源文件的时间等属性保留

9. 创建源文件的硬链接

语法

cp -l 源文件 目标文件

如:cp -l /t/test.txt test.link

10. 创建源文件的软链接

语法

cp -s 源文件 目标文件

如:cp -s /t/test.txt test.link

11. 复制举例

如将上一级的test目录中的所有文件复制到当前位置

cp ../test/* ./

如果test目录中的文件还有子目录,可以使用rf参数进行递归强制执行

cp ../test/* ./ -rf

复制文件到当前目录
如将上一级的test.txt文件复制到当前目录中

cp ../test.txt ./

复制文件到另一个文件
如将test.txt的内容复制到test2.txt

cp test.txt test2.txt

复制某类文件
如将所有.txt结尾的文件复制到test目录

cp *.txt /test

12. rsync复制(拓展)

rsync是一种快速且通用的命令,可将两个位置目录或文件进行同步,也可以将文件复制到本地或者远程位置
当包含子目录时rsync的递归参数是-a,传输特殊设备和阻止设备,保留符号链接,修改时间,组,所有权和权限
复制时如果目标文件存在则覆盖
最安全的方式是在目标目录和源目录尾部都加上/

八、移动文件和目录

移动文件或目录使用命令mv即move的缩写

1. 移动文件

语法

mv <源文件名称或地址> <新文件名称或地址>

此方法也可修改文件名

2. 移动目录(即文件夹)

2.1 移动文件到指定目录

语法

mv <源文件> <目标目录>

2.2 移动目录下的所有文件到指定目录

语法

mv <源文件目录/*> <目标目录>

或者

mv <源文件目录> <目标目录>

2.3 移动指定类型的文件到指定目录

如移动目录test中.txt结尾的文件到指定目录

mv test/*.txt <目标目录>

2.4 移动目录以及目录下的所有内容

mv <源目录> <目标目录/>

即在目标目录后加上/即可将文件和文件所在的目录本身都移动到目标目录

九、重命名文件和目录

使用mv或者rename重命名文件或者目录

mv不仅可以移动文件或目录,还可以用来重命名

1. rm重命名语法

目录或文件重命名

mv 源文件名或目录名 重命名后的文件名或目录名

2. rename重命名语法

2.1 单文件修改

rename 源文件名 重命名后的文件名

rename如果是perl版本,则可以使用正则进行rename操作

2.2 批量修改

将文件名称的部分替换

rename a b *

如果文件有a1.txt和c2.txt
通过rename a b *命令后,文件会被修改为b1.txt,b2.txt

十、查看文件内容

1. 查看文件类型

语法

file 文件或目录的路径

如果是文件则显示问价的字符编码
如果是目录则显示目录名:directory
如果是符号链接则显示链接到哪个文件
如果是二进制可执行程序则能确定程序编译时面向的平台一级需要何种类型的库

2. 查看整个文件

查看整个文件内容有以下几种方式

2.1 cat命令查看

语法

cat 文件列表

可选参数

参数完整字母描述
-nnumber由1开始对所有输出的行数编号
-vshow-nonprinting使用^和M-符号,除了LFD和TAB之外
-Eshow-ends在每行结束处显示$
-Tshow-tabs将TAB字符显示为^
-Ashow-all等价于-vET

2.2 more命令查看

语法

more [+数字] [-数字] file

以全屏方式按页显示文本文件的内容,如果带上参数’+数字’表示从该行开始显示,
参数’-数字’表示指定每屏显示的行数,Enter向下滚动一行,空格或f向下滚动一屏,b向上滚动一屏,q退出

2.3 less命令查看

基于more和vi指令实现的less
可以使用前后左右来查看文件内容

pageup向上翻页
pagedown向下翻页
=输出文件名和当前行的行号等信息
若在使用less指令查看内容时不退出less就能执行shell的其他命令可使用!command的方式直接执行指令,执行结束后自动返回less指令
指令执行中可按h键显示less的快捷键帮助
冒号:提示符下输入查找的关键字先输入/后输入关键字最后回车可以实现快速定位

3. 查看部分文件

tail命令可以输出文件中的尾部内容

head [options] [文件列表]

head命令可显示文件头部内容

head [options] [文件列表]

options可选

参数描述
-n行数,指定显示头部内容的行数,默认10行
-c字符数,指定显示头部内容的字符数

4. 处理文件的操作

4.1 创建空文件

touch newfile

4.2 过滤文件内容

grep命令过滤

grep [options] [匹配模式] file

按照匹配模式的规则搜索指定文件,并将匹配的内容输出
options选项

参数描述
-v搜索不含指定字符串的行
-x整行匹配
-c统计符合匹配模式的行数
-E用来扩展选项为正则表达式

cut命令过滤

cut [options] [文件]

指令显示行中指定的部分,删除文件中指定的字段
options选项

参数描述
-d指定字段的分割符,字段的默认分割符为"TAB",用法: -d “分割符”
-f指定起始字段位置和结束字段位置,显示这个范围的字段内容,用法: -f 开始位置-结束为止,如 -f 1-7

若只显示一个字段,则不用填两个参数,显示哪个位置的字段填那个位置即可,如-f 2

5. 统计文件内容

语法

wc [options] [文件列表]

统计文件的行数、单词数和字符数
options选项

参数描述
-l打印总行数

注意:windows下文件的最后一行不会自动添加换行符,用wc统计时,发现会少一行,使用换行符"\n"作为结束标志,实际是统计换行符的个数

6. 对文件内容进行排序

语法

sort [options] [文件]

options选项

参数描述
-c检查文件是否已经按照顺序排序
-n按照数值的大小排序
-o<输出文件>将排序后的结果存入指定的文件
-t<分割字符>指定排序时所用的栏位(列)分割字符(如果分割符是制表符,房子啊字符串中时正常写,否则在前面加上$)
-r以相反顺序
-u在输出行中去除重复行(只考虑用来排序的行)
-b忽略每一行前面的所有空白部分,从第一个可见字符开始比较
-k<start,end>指定需要排序的列,start和end都是数字,start分为三个部分(选项[bdfinr]、排序列、开始的位置),end默认到本域结束,-k可以出现多次,代表多列排序(第一个是主列)。数字列如1.2表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序,1.2,1.2表示只按第一个域的第二个字符进行排序

sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按照ASCII码值进行比较,最后将他们按升序输出

7. 查看长内容文件

cat和more

7.1 cat命令查看

7.1.1 语法

查看文件内容命令语法

cat [options] 文件名
7.1.2 参数解释

options参数选项

参数描述
-b对非空输出行编号
-n对输出的所有行编号

注意:当文件内容超出窗口,会自动到下一屏显示

7.2 more命令查看

7.2.1 语法

查看文件内容命令语法

more 文件名
7.2.2 百分比

当文件内容超出窗口时,会显示一个提示信息:–More–(xx%)

当显示百分比时,可以有如下操作

操作健功能
空格键显示文本下一屏内容
Enter一次滚动文本的一行
b回滚一屏
f前滚一屏
q退出
/word搜索word字符串(word可替换)

7.3 grep

grep命令是Linux中强大的文本搜索工具

7.3.1 语法

语法如下

grep [options] 目标字符 文件名
7.3.2 options参数选择
参数描述
-n显示匹配行和行号
-v显示不包含匹配文本的所有行(相当于求反)
-i忽略大小写
7.3.3 模式查找(正则查找)

可通过正则表达式进行查找
查找以a开头以b结尾的内容

grep ^a b$ 文件名
参数描述
^a以a开头
b$以b结尾

十一、vi文本编辑器编辑文本

1. vi介绍

  • Linux文本编辑器有ex、sed、vi和emacs等
  • vi是最基本的文本编辑器
  • vi是visual的缩写
  • vi是所有unix和Linux系统上必配的编辑器
  • 现在Linux上配备的主流的文本编辑器是vi的增强版vim
  • vim是vi improved的简称
  • vi是一个全屏幕文本编辑器,具备文本编辑的所有功能,高效快捷

1.1 vi的特点

  • 编辑功能强大:
    具有高级编辑特性,可通过正则表达式、宏和命令脚本完成复杂编辑,实现智能化和自动化
  • 适用于各种版本的Unix/Linux系统:
    vi是Unix/Linux系统的标准文本编辑器
  • 适用于各种类型的终端:
    对终端设备有广泛的适应性
  • 使用灵活快捷:
    初学者可能觉得命令复杂难度高,但对于熟练掌握后的人来说,就是一个编辑利器

1.2 vi的工作模式

vi有三种工作模式

  • 命令模式command mode:
    输入任何字符都作为命令来解释执行,屏幕上不显示输入内容,命令模式用于完成各种文本修改工作
  • 输入模式insert mode:
    输入的任何字符都将作为文件的内容被保存,并显示在屏幕上,输入模式用于完成文本录入工作
  • 末行模式last line mode:
    也称为ex转义模式,在末行模式下,光标停留在屏幕的最末行,在此接收输入的命令并执行,末行模式用于执行全局性操作,如文件操作、参数设置、查找与替换、拷贝与粘贴、执行shell命令

2. vi的启动与退出

输入命令进入vi全屏幕编辑环境

vi 文件名

启动过程描述:先建立一个编辑缓冲区,若指定了文件且该文件已存在,则将其内容读到编辑缓冲区中,若指定的文件不存在,则创建此文件,然后将光标定位在第一行第一列的位置上

vi启动后首先进入命令模式,此时可通过vi的编辑命令进行文本的输入和修改

注意:编辑命令只是在修改调入缓冲区中的文本的副本,文本本身不会被修改,编辑完成后,需要用:wq命令将修改后的内容保存到文件中并退出vi才算完成修改,此次运行未对文件做任何修改,则可用:q退出

3. vi基本命令

vi命令相当多,但常用的只有一小部分

3.1 常用命令分类

  • 屏幕翻滚
  • 移动光标
  • 插入与删除
  • 修改与替换
  • 拷贝与粘贴
  • 复原与重复

vi命令不需要配置鼠标和控制键,操作速度更快,效率更高

尽管vi只用字符命令就可以完成所有编辑操作,vi还是提供了键盘的其他控制操作的支持

按键命令模式输入模式末行模式
Home移动光标到行的最前面移动光标到行的最前面移动光标到行的最前面
End移动光标到行的最后面移动光标到行的最前面移动光标到行的最前面
PageDown向下翻页移动光标到行的最前面向下翻找历史命令
PageUp向上翻页移动光标到行的最前面向下翻找历史命令
Delete删除光标位置的字符移动光标到行的最前面移动光标到行的最前面
Insert进入输入模式替换-输入无效
Backspace光标前移一个字符删除光标前的字符删除光标前的字符
Space光标后移一个字符空格空格
Enter光标下移一个字符换行提交命令
上下左右箭头按箭头方向移动光标按键都方向移动光标找历史命令

注:
命令模式下输入的字符都被vi解释为命令,不在屏幕上显示,若输入的是非法命令则警报
vi区分大小写

以下分类介绍常用vi命令

3.2 屏幕翻滚命令

以下为屏幕翻滚命令的组合键列表

组合键功能
ctrl+u向上翻半屏
ctrl+d向下翻半屏
PageDown向下翻一屏
ctrl+f向下翻一屏,同PageDown
PageUp向上翻一屏
ctrl+b向上翻一屏,同PageUp
[n]z+Enter将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部

3.3 光标定位命令

按键与功能列表

按键功能
Home光标移动至行首
0光标移动至行首,同Home
End光标移动至行尾
$光标移动到行尾,同End
^光标移动至行首第一个非空格字符
[n]G光标移动到第n行,未指定n时移动到末行
[n]I光标移动到第n行,未指定n时移动到首列
H、M、L光标移动到屏幕首、中、尾行行首

3.4 光标移动命令

vi不支持鼠标移动光标,但可以将通过按键进行操作
按键与功能列表

按键功能
按键左下上右光标向左、下、上、右移动一个字符
h、j、k、l光标向左、下、上、右移动一个字符,同箭头键
b、w光标移动到上一个词、下一个词首
e光标移动到词尾
(、)光标移动到句首、句尾
{、}光标移动到段首、段尾

注:光标移动命令前带数字n时表示重复移动n次,如4e表示移动到后面第4个词的词尾

3.5 文本输入与删除

输入文本前先将光标定位到要输入内容的位置,执行插入命令,进入输入模式,处于输入模式时屏幕底部会显示–insert–提示
表示后续的输入都作为文件的输入内容,输入完成后按esc命令返回命令模式

3.5.1 文本的输入insert

插入命令都是单字符命令,可实现在当前光标位置的前、后、行首、行尾、上一行、下一行开始输入
命令如下

按键功能
a或A在光标位置后、行尾后开始插入
i或I在光标位置前、行首前开始插入,i的作用于insert键相同
o或O在光标所在行之后、光标所在行之前的新行开始插入
3.5.2 文本的删除delete

删除文本最简单的方法是将光标移动到要删除的字符上,每按一下x键或者delete键就会删除一个字符,删除文本内容较多时,可用以下命令

按键功能
x或X删除光标处、光标前的字符,x的作用与delete键相同
dd删除光标所在的行
D删除光标右面的文本
J删除当前行尾的换行符,使当前行与下一行合并尾一行
d+定位符 删除从光标位置到指定位置范围内的字符

关于d+参数的常用如下

参数描述
d0或d^删除光标左面的文本,0或^表示行首
d$删除光标右面的文本,$表示行尾
dG删除光标所在行之后的所有行,G表示最后一行
db删除光标处前的字符直到词首,b代表词首
de删除光标处的字符直到词尾,e表示词尾
dw删除光标处的字符直到下一个词的词首,w表示下一个词的词首

注:
命令前带n时表示删除方位扩大n倍,如3dd表示删除3行,2de表示删除从光标开始的两个词

4. 文本的修改与替换

4.1 文本的修改correct

文本修改指改写一部分文本的内容,修改过程描述:先删除指定范围的文本,然后插入新文本,最后esc结束插入
命令如下

命令功能
cc修改光标所在的行
C修改光标处到行尾的文本
c+定位符 修改光标到指定范围内的文本,常用如下:
c0或c^修改光标左面的文本
c$修改光标右面的文本
cG修改光标所在行之后的所有行
cb修改光标处前的字符直到词首
cw修改光标处的字符直到词尾
cl修改光标处的字符

注:
以上命令前带数字表示修改范围扩大n倍,如4cc表示修改从光标所在行开始的4行,3cw表示修改从光标开始的3个词

4.2 文本的替换replace

替换replace指覆盖,是相同长度字符替换,替代substitute指取代,可以相同也可以不同长度内容进行取代

替换命令

命令功能
r用输入的字符替换光标处的字符
R用输入的文本逐个替换从光标处开始的各个字符,直到按下esc键

替代命令

命令功能
s用输入的文本替代光标处的字符,用esc键结束输入,等同于cl
S用输入的文本替代光标所在的行,用esc键结束输入,等同于cc

5. 文本的拷贝与粘贴copy

拷贝指将光标处的文本幅值到一个缓冲区中,类似Windows的剪切板
粘贴指将缓冲区中的内容插入到光标处

命令与功能

命令功能
yy拷贝光标所在行至缓冲区
y+定位符拷贝光标到指定范围内的文本,常用如下:
y0或y^拷贝光标左面的文本
y$拷贝光标右面的文本
yG拷贝光标所在行之后的所有行
yb拷贝光标处的字符直到词首
yw拷贝光标处的字符直到词尾

6. 撤销与重做

撤销undo
消除上一个命令所做的修改,恢复到命令执行前的样子
重做redo
重复执行上一个命令

命令

命令功能
u撤销上一个命令所做的修改
U撤销最近针对一行所做的全部修改,在对一行连续做了多处修改后,可用此命令一次恢复全行
.重复前一个命令

7. vi常用末行命令

命令模式下输入:或/或?字符都将进入末行模式,后续的输入被解释尾行命令,在屏幕末行显示
屏幕输入完成后按Enter键执行,末行命令执行结束后返回命令模式,或退出vi

命令分类:字符串搜索与替换命令、文件操作与退出命令、其他

7.1 字符串搜索

在文件中查找某各字符串可用字符串搜索命令,执行命令后光标会停留在第一个匹配字符串的首字符处
按n或N可移至下一个匹配字符串首,不存在匹配字符串则末行显示"找不到模式"

命令

命令功能
/模式从光标处向后 搜索与指定模式匹配的字符串,按n向后继续找
?模式从光标处向前搜索与指定模式匹配的字符串,按N向前继续找

如查找test字符串,使用命令/test,光标从当前位置移动到后面第一个test的字符的t上,按n移动到下一个test上,当搜索到文件尾时,再按n则返回到文件头继续搜索

7.2 字符串替换s

字符串替换使用s命令,指定的行中搜索与指定模式相匹配的字符串,并用另一个字符串替换他
命令

:[n1,n2]s/p1/p2/[g][c]

参数描述

参数描述
n1,n2表示目标行的行号范围,可以使用%代表所有行,未指定范围时,目标行就是光标所在的当前行
p1用作搜索的字符串模式
p2用作替换的字符串模式
s命令可以带g和c选项
g表示替换目标行中所有匹配的字符串,没有g则只替换目标行中第一个匹配的字符串
c表示替换前要求用户确认
^代表行首
$代表行尾

模式中可以用^代表行首,$代表行尾

7.3 全局命令global

全局命令使用g
在全文中搜索含有与指定模式匹配的字符串的行,对匹配的行做标记
命令格式如下

命令作用
:g/p1搜索所有包含p1字符串模式的行
:g!p1搜索所有不包含p1字符串模式的行

命令作用
:g/test命令将找出所有含有test的行
:g!test命令将找出所有不包含test的行

命令与其他命令联合使用

命令作用
:g/p1/对所有包含p1的行执行指定的命令
:g!p1/对所有不包含p1的行执行指定的命令


p命令显示行,联合使用如下

命令作用
:g/test/p显示所有含有test的行

d命令删除行,联合使用如下

命令作用
:g!test/d删除所有不包含test的行

7.4 全局替换

s命令面向行的字符串替换,可与g命令联合使用
全局替换命令格式
g命令/s命令
表示先用g命令再文件中搜索含有某个模式的行,并做标记,然后用s命令对所有标记的行执行搜索和替换
常用命令如下

命令作用
:g/p1/s/p2/p3/g将文件中所有含有p1的行中的p2用p3替换
:g!p1/s/p2/p3/g将文件中所有不含有p1的行中的p2用p3替换
:g/p1/s//p2/g将文件中所有的p1用p2替换,这里的:g/p1/s//p2/g是:g/p1/s/p1/p2/g的简写,当s命令的搜索模式与g命令的搜索模式相同时,可省略s命令中的搜索模式,命令中//中间没有空格

7.5 文件操作与退出命令

文件操作包括读文件和写文件,读文件是将文件内容读入到编辑缓冲区中,写文件是将编辑缓冲区的内容保存到文件中
退出vi时可选择是否保存文件

常用退出和文件操作命令如下

命令作用
:w [文件名]写入指定文件,若未指定文件则写入当前文件,即vi启动时打开的文件
:q未修改源文件,不保存文件,直接退出
:wq或者:x保存文件并退出
:q!放弃修改,不保存文件,退出
:e!放弃修改,编辑区恢复为文件原样
:e 文件名打开指定的文件,调入编辑区
:r 文件名读入指定的文件,将文件内容插入到光标位置
:f在屏幕末行显示文件相关信息

7.6 其他常用命令

7.6.1 行编辑命令

对指定的行进行编辑,指定行范围时,可用.代表当前行,用$代表最后一行,用%代表所有行
常用行编辑命令如下

命令作用
:n跳至第n行
:n1,n2con3将第n1至n2行之间的内容拷贝到第n3行下,如2,7co$表示将第2行到第7行的文字幅值到文件末尾处
:n1,n2mn将第n1到n2行之间的内容移至第n3行下,如:.m10表示将当前行移动到第10行下
:n1,n2d将第n1到n2行之间的内容删除,如2,7d表示删除第2行到第7行的内容
:p显示当前行的内容,
:nu显示当前行的行号和内容
7.6.2 执行shell命令

使用vi编辑文件时,不退出vi情况下执行shell命令,执行期间vi暂时挂起,待命,执行结束后返回vi继续运行
执行shell命令的格式如下
:! 命令执行指定的shell命令

7.6.3 设定vi选项

可通过设置vi的选项来规定vi的一些外观和行为特性
设定vi选项的方法其中之一是使用set命令
常用如下

命令作用
:set all显示所有选项
:set ai设定自动缩进
:set noai取消自动缩进
:set nu设定行号显示
:set nonu取消行号显示
:set hlsearch设定高亮显示搜索到的字符串
:set nohlsearch取消高亮显示搜索到的字符串
:set ic设定搜索命令中忽略大小写
:set noic取消搜索命令中忽略大小写

十二、查找文件

查找文件的方法大致有四种

  • find
  • locate
  • grep根据查找文件内容查找
  • 特定程序的指定用法

1. find

可通过find查找文件

1.1 基本用法

语法

find / -option params

1.2 举例

举例查找当前目录下文件名为.text的文件

find ./ -name .text

举例查找文件类型为管道的文件

find / -type p

注:创建管道文件的命令为mkfifo

举例查看大于200M的文件

find / -size +200M

当前目录下查找大于100M并且小于300M的文件

find ./ -size +100M -size -300M

注:生产环境慎用该命令,会产生性能问题

当前目录查找2天以前修改的文件

find ./ -mtime +2

注: stat fileName查看文件时间戳,查看文件创建时间ctime,文件访问时间atime

命令模式find path m/a/c time +n -n
+n是指n天以前
-n是指n天以内

查找文件名中有index的python文件即*index*.py

find / -name *index*.py

2. locate

locate比find查找文件更快、更简单

查找test.txt文件

locate test.txt

locate快的原因
locate不会为搜索到的文件或目录读取文件系统
实际上是一个数据库来查找用户正在查找的内容,并根据该搜索内容生成其输出,这样查找很快,但问题是刚建的文件不会被搜索到,若想使刚创建的文件被搜索到可使用sudo updatedb更新数据库,否则只能第二天才可以搜索到,默认后台数据库一天一更新

etc/下查找以m开头的文件

locate /etc/m

locate -S可以查看数据库的信息

locate -S

3. grep

根据文件内容查找

grep是一种强大的文本搜索工具
grep可以使用正则表达式搜索文本,并把匹配的行打印出来
grep全称:Global Regular Expression Print,表示全局正则表达式版本,使用权限为所有用户

3.1 grep语法

grep [-abcEFGhHiLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本样式>][--help][范本样式][文件或目录...]

3.2 举例

在当前目录下查找文件中包含test字符的文件

grep test ./*

在/etc目录下查找文件内容中含有libai的文件或目录

grep libai /etc/*

查找文件中内容有test并且以libai开头的文件

grep test libai*

注:grep只能在文件中搜索,如果是个目录,则会提示一个******是一个目录的信息

4. 通过特定程序定位文件

速度更快,更精准,但比较少用,依赖于特定的应用程序

查找php的配置文件

php -i | grep php.ini

Linux命令汇总


感谢阅读,祝君暴富!


http://www.ppmy.cn/devtools/46486.html

相关文章

apexcharts数据可视化之圆环柱状图

apexcharts数据可视化之圆环柱状图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式&#xff1a; 基础圆环柱状图多组数据圆环柱状图图片背景自定义角度渐变半个圆环图虚线圆环图 基础圆环图 import ApexChart from react-apexcharts;export function Cir…

音视频视频点播

视频点播是集音视频采集&#xff0c;编辑&#xff0c;上传&#xff0c;自动化转码处理&#xff0c;媒体资源管理&#xff0c;高效云剪辑处理&#xff0c;分发加速&#xff0c;视频播放于一体的一站式音视频点播解决方案 阿里云视频点播基于阿里云强大的基础设施服务&#xff0c…

C++模板初阶

1. 泛型编程 前面我们讲了函数重载&#xff0c;可以用函数重载来实现多个不同参数类型的swap交换函数 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream>using namespace::std;void Swap(int& left, int& right) {int temp left;left right;right temp…

WHAT - 容器化系列(四)- 网络

目录 一、网络基础二、单主机容器网络三、跨主机容器网络overlay network 覆盖网络技术Flannel UDP模式Flannel VXLAN模式Flannel host-gw模式四、Kubernetes CNIKubernetes的网络模型容器网络接口 CNI一、网络基础 有关网络基础的内容可以阅读 WHAT - 计算机网络系列(一)。…

力扣刷题--2085. 统计出现过一次的公共字符串【简单】

题目描述 给你两个字符串数组 words1 和 words2 &#xff0c;请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 示例 1&#xff1a; 输入&#xff1a;words1 [“leetcode”,“is”,“amazing”,“as”,“is”], words2 [“amazing”,“leetcode”,“is”] 输出…

数据结构:模拟堆

数据结构&#xff1a;模拟堆 题目描述参考代码 题目描述 输入样例 8 I -10 PM I -10 D 1 C 2 8 I 6 PM DM输出样例 -10 6参考代码 #include <iostream> using namespace std;const int N 1e5 10; int h[N], hp[N], ph[N]; int n, m;// 堆内交换操作传入的是堆中的下…

“仿RabbitMQ实现消息队列”---整体架构与模块说明

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、概念性框架理解 我们主要实现的内容&#xff1a; 1.Broker服务器&#xff1a;消息队列服务器&#xff08;服务端&…

Java_collection

集合的体系结构 Collection 单列集合 Map 双列集合 Collection 代表单列集合&#xff0c;每个元素(数据)只包含一个值。 Map代表双列集合&#xff0c;每个元素包含两个值(键值对)。 Collection 接口、实现类 List系列集合&#xff1a;添加的元素是有序、可重复、有索引 Array…