Linux核心命令3-1系列文章目录
Linux核心命令3-1系列文章核心命令简介
快速上手Linux核心命令(一):核心命令简介
快速上手Linux核心命令(二):关机、重启
快速上手Linux核心命令(三):文件和目录操作命令
快速上手Linux核心命令(四):文件内容相关命令
快速上手Linux核心命令(五):文本处理三剑客
快速上手Linux核心命令(六):Linux的文本编辑器vi和vim
快速上手Linux核心命令(七):Linux系统信息相关命令
快速上手Linux核心命令(八):网络相关命令
快速上手Linux核心命令(九):文件备份与压缩命令(博主正在玩命更新中)
快速上手Linux核心命令(十):软件安装命令(博主正在玩命更新中)
快速上手Linux核心命令(十一):Linux用户相关命令(博主正在玩命更新中)
快速上手Linux核心命令(十二):磁盘与文件系统相关命令(博主正在玩命更新中)
快速上手Linux核心命令(十三):进程相关命令(博主正在玩命更新中)
快速上手Linux核心命令(十四):系统管理相关命令(博主正在玩命更新中)
(三):文件和目录操作命令
- 前言
- cd 切换目录
- pwd 显示当前路径
- ls 显示目录下内容及相关属性信息
- mkdir 创建目录
- tree 以树形结构显示目录下的内容
- touch 创建空白文件或改变文件的时间戳属性
- cp 复制文件或目录
- mv 移动或重命名文件
- rm 删除文件或目录
- chown 改变文件或目录的用户用户组
- chmod 改变文件或目录的权限
- chgrp 更改文件用户组
- ln 硬链接与软连接
- redlink 查看符号连接文件的内容
- find 查找目录下的文件
- xargs 将标准输入转换成命令行参数
- rename 重命名文件
- file 显示文件类型
- md5sum 计算和校验文件的MD5值
- 快速上手Linux核心命令(四):文件内容相关命令
-
快速上手Linux核心命令(六):Linux的文本编辑器vi和vim@
快速上手Linux核心命令(七):Linux系统信息相关命令
快速上手Linux核心命令(八):网络相关命令
快速上手Linux核心命令(九):文件备份与压缩命令(博主正在玩命更新中)
快速上手Linux核心命令(十):软件安装命令(博主正在玩命更新中)
快速上手Linux核心命令(十一):Linux用户相关命令(博主正在玩命更新中)
快速上手Linux核心命令(十二):磁盘与文件系统相关命令(博主正在玩命更新中)
快速上手Linux核心命令(十三):进程相关命令(博主正在玩命更新中)
快速上手Linux核心命令(十四):系统管理相关命令(博主正在玩命更新中)
前言
快速上手Linux核心命令(一):核心命令简介
前言
众所周知,Linux在服务器中占用不可替代的位置。大多数互联网公司,服务器都是采用的Linux操作系统。而Linux是一个主要通过命令行来进行管理的操作系统。只有熟练掌握Linux核心命令,在使用起来我们才会得心应手。
通过文章希望能帮助刚入门Linux的小伙伴们快速掌握核心命令,也可以将之作为一份Linux帮助文档使用。
一开始,我们会以思维导图的方式把常用命令都列出来,后面系列文章会就列出来的命令做详细使用说明。
当然,受限于个人水平,及Linux命令实在太多,不可能把所有命令都列出来,这里只列出个人觉得比较常用及非常重要的命令。有说的不对的地方及有部分命令可能你觉得很重要但没列出来,欢迎大家补充纠正。
一、命令行简介
Linux命令行简介
工作中我们一般不会直接到服务器上操作,而是通过远程工具连接Linux系统。 连接后如下图所示
[root@xiezhr ~]# # '#'表示超级用户root对应的命令行
[xiezhr@xiezhr ~]$ # '$'表示普通用户xiezhr对应的命令行
① '#' 表示超级用户root用户登录系统后,命令行结尾提示符
② '$' 表示普通用户xiezhr用户登录系统后,命令行结尾提示符
③ 超级用户具有管理系统的所有权限,普通用户权限比较小,只能进行普通的操作
④ '@' '@'符号前面的表示当前登录的用户,'@'后面的是Linux主机名
Linux命令行操作常用快捷键
我们已SecureCRT工具为例进行操作说明,下面是用到的一些快捷键
快捷键 | 功能说明 |
---|---|
tab | 命令或路径补全键 是Linux最最最常用的键 |
ctrl+c | 中断终端正在执行的任务 |
ctrl+a | 光标回到命令行首 |
ctrl+e | 光标回到命令行尾 |
ctrl+Insert | 复制命令行内容 |
shift+Insert | 粘贴命令行内容 |
ctrl+k | 剪切(删除)光标位置到行尾的字符 |
ctrl+u | 剪切(删除)光标位置到行首的字符 |
ctrl+d | 退出当前shell命令行 |
ctrl+r | 搜索命令行使用过的历史命令记录 |
ctrl+l | 清除屏幕的所有内容,并开始一个新行 等同于clear |
ctrl+z | 暂停执行终端运行的任务 |
!c | 获取最近以c开头的命令 |
!num | 获取历史执行的地num条命令 |
esc+. | 获取最后一次执行命令 |
二、命令的十三个模块
由于命令较多,这里根据功能分了13个模块
- 基础命令
- 文件和目录相关
- 文件内容相关
- 文本处理三剑客
- vi/vim :文本编辑相关
- Linux系统信息相关
- 网络相关
- 文件备份压缩相关
- 软件安装相关
- Linux用户相关
- Linux磁盘与文件系统相关
- 进程相关
- 系统管理相关
这期内容就到这,下期具体写一写Linux系统关机、重启、注销操作及命令帮助的使用。敬请期待哦(●'◡'●)
快速上手Linux核心命令(二):关机、重启
@
前言
从这篇开始,我们正式开始Linux命令了。
上一篇中已经预告,我们这篇主要说一说Linux中怎么在命令行下查看命令帮助?Linux怎么关机、重启?
注意:Linux命令和命令后面的选项至少要有一个空格
一、在命令行下查看命令帮助
man 命令
1、简介
man是Linux核心命令之一,也是我们最常用的命令之一。使用它我们可以查看其他命令的帮助文档
2、语法格式
man 参数选项 命令/文件
3、参数说明
一般不加参数
4、实践操作
man cp # 差看cp命令的帮助文档
命令行输入 man cp 后,进入到帮助页面。
那么我们怎么查看帮助文档呢?
其实啊,我们把这个单做一个文本文件查看即可,具体操作如下
快捷键 | 功能说明 |
---|---|
【PgDn ↓】 | 向下翻一页 |
【space 空格键】 | 向下翻一页 |
【PgUp ↑】 | 向上翻一页 |
【Home】 | 跳转到第一页 |
【End】 | 跳转到最后一页 |
/xiezhr | 向下查找xiezhr字符串,xiezhr可以替换为任意你想查找的内容 |
?xiezhr | 向上查找xiezhr字符串,xiezhr可以替换为任意你想查找的内容 |
n,N | 配合“/”或“?”快捷键使用,当我们使用“/”或“?”向下或者向上搜索时,n会跳转到下一个匹配内容,N则会跳转到上一个匹配内容 |
q | 退出帮助文档 |
文档可谓是相当相当的详细了,当然我们也不用关注全部。只需要关注对我们有用的即可,下面列出来的是我们需要重点关注的,上面截图中也重点标注了。
既然man 出来的帮助文档都这么详细了,那还写文章干嘛呢。。开个玩笑哦开玩笑🤣
man信息中的标题 | 功能解释 |
---|---|
NAME | 命令说明及介绍 |
SYNOPSIS | 命令的基本使用语法 |
DESCRIPTION | 命令是使用详细描述,以及相关参数说明 |
EXAMPLEAS | 命令的一些使用例子 |
--help 命令
1、简介
查看其它命令简易信息,查出来的信息没有man命令全,但如果我们不需要对某个命令知根知底的话,这个命令就可以满足了
2、语法格式
命令 --help
3、参数说明
一般不需要加参数
4、实践操作
cp --help
同样以cp命令帮助文档为例,--help 出来的文档就简单很多了,只有一页,man出来的足足有100多页
info命令
1、简介
info 可以配合man、--help 使用,但我们用的比较少
2、语法格式
info cp
由于用的比较少,这里就不作说明了,大概知道就好了
二、Linux关机、重启
shutdown
1、简介
shutdown 用来安全关闭或重启Linux,系统在关闭之前会通知所有登录的用户,系统即将关闭。
2、语法格式
shutdown [参数选项] 时间 消息
3、参数说明
参数 | 参数说明 |
---|---|
-r | 重启系统,这个参数经常用到 |
-h | 关机,这个参数也是经常用到 |
4、实践操作
① 重启系统
shutdown -r now # 现在重启系统
② 关闭系统
shutdown -h now # 现在关闭系统
③ 假设15:30 要和一个漂亮小姐姐去约会,这时我们需要在15:00关闭系统,停止手头工作。这时就可以执行如下命令
shoutdown -h 15:00
以上只是假设哈,一般我们也不会关闭Linux,再说哪来的小姐姐。哈哈😄
reboot、halt、poweroff
1、简介
halt、poweroff 时reboot 的链接文件,何为链接文件呢?我们可以简单的理解为Windows中的快捷方式。
halt 立即关闭系统,需要人工关闭电源;poweroff:立即关闭系统,并且关闭电源
reboot 立即重启
2、语法格式
reboot [参数选项]
halt [参数选项]
poweroff [参数选项]
3、参数说明
一般不加参数
4、实践操作
①立即关闭系统
halt # 不加参数,立即关闭系统
②立即关闭系统
poweroff # 不加参数,立即关闭系统
③立即重启系统
reboot # 不加参数,立即重启系统
上面说了好多关闭、重启系统方式,是不是有点晕了呢?这里做了个总结,只需记住这个表格内容即可(●'◡'●)
--- | 命令 | 功能描述 |
---|---|---|
Linux 关闭 | shoutdown -h now | 立刻关机 ⭐生产环境经常使用 |
shoutdown -h +5 | 5分钟后关机,5可以换成任意数值,或时间点 如15:00 | |
halt | 立即关闭系统,需要手工关闭电源 时reboot链接文件 | |
init 0 | 切换运行级别到0,0表示关机。因此该命令可以用于关机 | |
poweroff | 立即关闭系统,并且关闭电源 时reboot链接文件 | |
Linux重启 | reboot | 立即重启 ⭐生产环境经常使用 |
shoutdown -r now | 立即重启 ⭐生产环境经常使用 | |
shoutdow -r +5 | 5分钟后重启,5可以换成任意数值,或时间点 如15:00 | |
init 6 | 切换运行级别到0,0表示关机。因此该命令可以用于关机 |
这期内容就到这,下期根据思维导图就到了文件和目录相关的命令使用了。
涉及到的命令包括:cd、pwd、ls、mkdir、tree、touch、cp、mv、rm、chown、chmod
等等
快速上手Linux核心命令(三):文件和目录操作命令
@
前言
这期呢主要说一说Linux中文件与目录相关的命令,一共包含19个命令
cd 切换目录
1、简介
cd 是“change directory” 中每个单词的首字母,其功能是从当前目录切换到目标路径。
2、语法格式
cd [参数选项] [目标路径]
3、参数说明
这里呢只列出常用参数
参数选项 | 参数说明 |
---|---|
- | 从当前目录切换到用户上一次所在目录 |
~ | 从当前目录切换到家目录,即假设当前登录的用户是xiezhr,执行命令后路径将切换到/home/xiezhr |
.. | 从当前目录切换到上一级目录 |
在使用cd命令时,配合“tab”键的自动补全功能,可以大大提高效率。
既然说到了切换路径,我们这里就说一说什么时相对路径?什么时绝对路径?
简单来说,从“/”根目录开始的路径为绝对路径,不从“/”开始的为相对路径。
/home/xiezhr、/home/user/local 是绝对路径,而 date/,webapp/log/ 为相对路径
4、实践操作
① 进入系统 /usr/local 目录 。这里我们会用到pwd命令来显示当前所在路径,这个命令我们会在下一个命令中讲,这里知道即可
[root@xiezhr ~]# cd /usr/local/
[root@xiezhr local]# pwd
/usr/local
② 切换到上级目录
[root@xiezhr local]# pwd
/usr/local
[root@xiezhr local]# cd ..
[root@xiezhr usr]# pwd
/usr
③ 切换到父目录的父目录
[root@xiezhr local]# pwd
/usr/local
[root@xiezhr local]# cd ../../
[root@xiezhr /]# pwd
/
④ 返回当前用户上一次所在的目录
[root@xiezhr ~]# cd /usr/local/
[root@xiezhr local]# cd /root/
[root@xiezhr ~]# pwd
/root
[root@xiezhr ~]# cd -
/usr/local
⑤ 返回家目录【当前用户为root用户,家目录为/root】
[root@xiezhr local]# cd /usr/local/
[root@xiezhr local]# pwd
/usr/local
[root@xiezhr local]# cd ~
[root@xiezhr ~]# pwd
/root
pwd 显示当前路径
1、简介
pwd 是“print working directory”每个单词的首字母,功能是打印/显示当前所在目录姐绝对路径。在实际工作中,我们经常会在各个目录之间切换,切换的多了,很容易忘记走到哪了,这时就需要有一幅地图指引我们,使我们不至于迷路。由此可见这个命令的重要性
2、语法格式
pwd [参数选项]
3、参数说明
一般不需要加参数
4、实践操作
① 进入到/usr/local后显示路径
[root@xiezhr ~]# cd /usr/local/
[root@xiezhr local]# pwd
/usr/local
ls 显示目录下内容及相关属性信息
1、简介
ls 是“list” 英文单词的缩写,功能是列出当前目录下的内容和内容属性信息。类似于DOS系统下的dir命令
2、语法格式
ls [参数选项] [文件或目录]
由于用的比较少,这里就不作说明了,大概知道就好了
3、参数说明
参数 | 参数说明 |
---|---|
-l | 使用长格式列出文件即目录信息 相当于直接使用ll |
-a | 显示目录下的所有文件,包括.开头的隐藏文件 |
-t | 根据最后修改时间(time)排序,默认是按文件名排序的 |
-r | 以相反次序排序 |
-F | 在条目后加上文件类型的只是符号(*、/、=、@、|中的一个) |
-d | 当遇到目录时,列出目录本身而非目录内文件 |
-h | 以人类可读信息显示文件或目录大小,如1KB,23M,3GB等 |
4、实践操作
① 直接使用ls命令,不带参数,显示当前目录下的文件和路径
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3
②加上【-a】参数,显示所有文件,包含隐藏文件("."开头的为隐藏文件),如下所示,ls没有显示隐藏文件,ls -a 显示了隐藏文件.d.txt
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3
[root@xiezhr test]# ls -a
. .. a.txt b.txt c.txt dir1 dir2 dir3 .d.txt
③ 加上【-l】参数,显示文件目录的详细信息
这个参数时我们最常用的,这个命令会列出文件或目录类型、权限、所属组、创建修改时间(最后一次修改时间,如果时新创建的文件则为创建时间),需要熟练掌握
[root@xiezhr test]# ls -l
total 12
-rw-r--r-- 1 root root 0 Mar 10 23:39 a.txt
-rw-r--r-- 1 root root 0 Mar 10 23:39 b.txt
-rw-r--r-- 1 root root 0 Mar 10 23:39 c.txt
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir1
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir2
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir3
小技巧:上面的命令我们会发现,时间没显示年份,那么怎么才能显示出我们肉眼既可以看懂的时间呢?
[root@xiezhr test]# ls -l --time-style=long-iso
total 16
-rw-r--r-- 1 root root 22 2022-03-10 23:44 a.txt
-rw-r--r-- 1 root root 0 2022-03-10 23:39 b.txt
-rw-r--r-- 1 root root 0 2022-03-10 23:39 c.txt
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir1
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir2
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir3
哇哦,上面命令这么长,使用起来真的不方便,我们给它起个别名吧,这样叫起来也比较方便
[root@xiezhr test]# alias lst='ls -l --time-style=long-iso'
[root@xiezhr test]# alias |grep lst
alias lst='ls -l --time-style=long-iso'
[root@xiezhr test]# lst
total 16
-rw-r--r-- 1 root root 22 2022-03-10 23:44 a.txt
-rw-r--r-- 1 root root 0 2022-03-10 23:39 b.txt
-rw-r--r-- 1 root root 0 2022-03-10 23:39 c.txt
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir1
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir2
drwxr-xr-x 2 root root 4096 2022-03-10 23:38 dir3
④ 加上【-F】参数,F是大写,在文件尾部加上文件类型符号(、/、=、@、|)中一个
**""表示普通可执行文件、"/"表示目录、"="表示套接字、"@"表示符号链接、"|"表示FIFOs**
具体文件类型可以参照【文件类型】这篇文章
[root@xiezhr test]# ls -F
a.txt b.txt c.txt dir1/ dir2/ dir3/ # 三个目录尾部加上了/
小技巧:通过【-F】参数,可以过滤出所有目录和普通文件
[root@xiezhr test]# ls -F # 当前路径下一共包含三个文件和三个目录
a.txt b.txt c.txt dir1/ dir2/ dir3/
[root@xiezhr test]# ls -F|grep / # 过滤出所有路径
dir1/
dir2/
dir3/
[root@xiezhr test]# ls -F|grep -v / #过滤出普通文件
a.txt
b.txt
c.txt
⑤ 假设一个目录下面有很多很多个文件,我们忘记了最近改过的文件的名字(年纪大了,记性越来越不好),这时候要找出它,可以用如下命令
[root@xiezhr test]# touch xiezhr.txt
[root@xiezhr test]# ls -lt
total 16
-rw-r--r-- 1 root root 0 Mar 11 23:02 xiezhr.txt
-rw-r--r-- 1 root root 0 Mar 11 22:52 tt.txt
-rw-r--r-- 1 root root 22 Mar 10 23:44 a.txt
-rw-r--r-- 1 root root 0 Mar 10 23:39 c.txt
-rw-r--r-- 1 root root 0 Mar 10 23:39 b.txt
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir3
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir2
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir1
我们最近创建或修改的文件就排在最前面了,有没有很方便哦
当然了,可以让你最显目,也可以让你排到最后去。ls -lrt 即可按照时间倒序排。-r 是倒序的意思
mkdir 创建目录
1、简介
mkdir 是"make directoy" 英文单词的缩写,功能是创建目录。如果目录存在则提示已存在,不会继续创建
2、语法格式
mkdir [参数选项] [目录]
3、参数说明
参数 | 参数说明 |
---|---|
-p | 递归创建目录。即可以父目录儿子目录孙子目录重孙目录....等一起创建 |
-m | 创建目录的同时授予权限 |
4、实践操作
① mkdir 不带任何参数
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3 tt.txt xiezhr.txt
[root@xiezhr test]# mkdir xiezhr
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3 tt.txt xiezhr xiezhr.txt
② 同时创建多个目录
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3 tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mkdir dir4 dir5 dir6
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3 dir4 dir5 dir6 tt.txt xiezhr xiezhr.txt
③ 使用【-p】参数递归创建目录
[root@xiezhr test]# ls
a.txt b.txt c.txt dir1 dir2 dir3 tt.txt xiezhr.txt
[root@xiezhr test]# mkdir -p xiezhr/test
[root@xiezhr test]# tree
.
├── a.txt
├── b.txt
├── c.txt
├── dir1
├── dir2
├── dir3
├── tt.txt
├── xiezhr
│ └── test
└── xiezhr.txt
5 directories, 5 files
④ 使用【-m】参数,创建目录同时授权
[root@xiezhr test]# mkdir -m 755 dir
tree 以树形结构显示目录下的内容
1、简介
tree 一看到这个命令,我们就知道是树的意思,当然了这里的树并非种的树,而是以树形结构显示目录下内容。
2、语法格式
tree [参数选项] [目录]
3、参数说明
参数 | 参数说明 |
---|---|
-d | 只显示目录 |
-L level | 遍历目录的最大层数,level为大于0的整数 |
4、实践操作
注意:个别Linux版本可能没有默认安装tree,大家也不用慌,我们按照如下步骤安装即可
- 下载安装包
wget http://mama.indstate.edu/users/ice/tree/src/tree-1.7.0.tgz
- 解压安装包
tar -zxvf tree-1.7.0.tgz
- 切换到解压后的目录
cd tree-1.7.0
- 编译安装
make install
- 大功告成,输入tree 命令回车
① 不带参数的tree
[root@xiezhr test]# tree
.
├── a.txt
├── b.txt
├── c.txt
├── dir
├── dir1
├── dir2
├── dir3
├── tt.txt
├── xiezhr
│ └── test
└── xiezhr.txt
6 directories, 5 files
② 加上【-d】参数,只显示目录
[root@xiezhr test]# tree -d
.
├── dir
├── dir1
├── dir2
├── dir3
└── xiezhr
└── test
6 directories
③ 加上【-L leave】 列出目录下第leave层结构
[root@xiezhr test]# tree -L 1
.
├── a.txt
├── b.txt
├── c.txt
├── dir
├── dir1
├── dir2
├── dir3
├── tt.txt
├── xiezhr
└── xiezhr.txt
5 directories, 5 files
④ 加上【-f】显示完整的路径名称 加上【-i】则不显示树枝部分
[root@xiezhr test]# tree -f
.
├── ./a.txt
├── ./b.txt
├── ./c.txt
├── ./dir
├── ./dir1
├── ./dir2
├── ./dir3
├── ./tt.txt
├── ./xiezhr
│ └── ./xiezhr/test
└── ./xiezhr.txt
6 directories, 5 files
[root@xiezhr test]# tree -i
.
a.txt
b.txt
c.txt
dir
dir1
dir2
dir3
tt.txt
xiezhr
test
xiezhr.txt
6 directories, 5 files
[root@xiezhr test]# tree -fi
.
./a.txt
./b.txt
./c.txt
./dir
./dir1
./dir2
./dir3
./tt.txt
./xiezhr
./xiezhr/test
./xiezhr.txt
6 directories, 5 files
⑤ 加上【-F】参数区分目录和文件
[root@xiezhr test]# tree -F
.
├── a.txt
├── b.txt
├── c.txt
├── dir/
├── dir1/
├── dir2/
├── dir3/
├── tt.txt
├── xiezhr/
│ └── test/
└── xiezhr.txt
6 directories, 5 files
尾部带/的为目录
touch 创建空白文件或改变文件的时间戳属性
1、简介
touch 是触摸的意思,摸一下文件可以创建空白文件或改变文件时间属性
touch 不能创建目录但是能改变目录的时间戳属性
2、语法格式
touch [参数选项] [文件]
3、参数说明
参数 | 参数说明 |
---|---|
-a | 只更改文件最后访问时间 |
-m | 只更改文件最后修改时间 |
-d string | 使用字符串string代表的时间模板设置指定文件的时间属性 |
4、实践操作
① 不带任何参数
[root@xiezhr test]# touch xiezhr.txt
[root@xiezhr test]# ls
a.txt b.txt c.txt dir dir1 dir2 dir3 tt.txt xiezhr xiezhr.txt
②更改文件时间戳属性(文件的时间戳属性:访问时间、修改时间、状态改变时间)
- stat 查看文件时间戳属性
- -m 更改文件修改时间
- -a 更改文件的访问时间
[root@xiezhr test]# stat xiezhr.txt
File: ‘xiezhr.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 2661 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-03-12 21:04:32.681919249 +0800
Modify: 2022-03-12 21:04:32.681919249 +0800
Change: 2022-03-12 21:04:32.681919249 +0800
Birth: -
[root@xiezhr test]# touch -m xiezhr.txt
[root@xiezhr test]# stat xiezhr.txt
File: ‘xiezhr.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 2661 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-03-12 21:04:32.681919249 +0800
Modify: 2022-03-12 21:08:22.344330251 +0800
Change: 2022-03-12 21:08:22.344330251 +0800
Birth: -
[root@xiezhr test]# touch -a xiezhr.txt
[root@xiezhr test]# stat xiezhr.txt
File: ‘xiezhr.txt’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 2661 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-03-12 21:08:42.528893719 +0800
Modify: 2022-03-12 21:08:22.344330251 +0800
Change: 2022-03-12 21:08:42.528893719 +0800
Birth: -
cp 复制文件或目录
1、简介
cp 是copy 英文单词的缩写,功能是复制文件或目录
2、语法格式
cp [参数选项] [源文件] [目标文件]
3、参数说明
参数 | 参数说明 |
---|---|
-p | 复制时保持源文件的权限、时间属性 |
-d | 如果复制的文件时符号链接,那么仅赋值符号链接本身,而且保留符号链接所指向的目标文件或目录 |
-r | 递归复制目录,即复制目录下所有层级的子目录及文件 |
-a | 等同于-p、-d、-r三个命令总和 |
-i | 覆盖已有文件提示用户确认 |
4、实践操作
① 将文件a.txt 复制为 aaa.txt
[root@xiezhr test]# cp a.txt aaa.txt
[root@xiezhr test]# ls
aaa.txt a.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
②复制目录,将dir 目录复制为dir_bak
[root@xiezhr test]# ls
aaa.txt a.txt b.txt c.txt dir dir1 dir2 dir3 tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# cp -r dir dir_bak
[root@xiezhr test]# ls
aaa.txt a.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
mv 移动或重命名文件
1、简介
mv 是 move 的缩写,功能是移动重命名文件
2、语法格式
mv [参数选项] [源文件] [目标文件]
3、参数说明
参数 | 参数说明 |
---|---|
-f | 若目标文件已经存在,则不会询问直接覆盖 |
-i | 若目标文件已存在,则会询问是否覆盖 |
-n | 不覆盖已经存在的文件 |
-u | 在源文件比目标文件新,或目标文件不存在时才进行移动 |
4、实践操作
① 给文件改名(如果a1.txt 不存在,则将aaa.txt 重命名为a1.txt)
[root@xiezhr test]# ls
aaa.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv aaa.txt a1.txt
[root@xiezhr test]# ls
a1.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
② 给文件重命名(如果a2.txt存在,则将a1.txt 覆盖为a2.txt)
[root@xiezhr test]# ls
a1.txt a2.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv a1.txt a2.txt
mv: overwrite ‘a2.txt’? y
[root@xiezhr test]# ls
a2.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
③ 移动单个文件或多个文件
[root@xiezhr test]# ls
a2.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv a2.txt dir/
[root@xiezhr test]# ls
b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv b.txt c.txt dir/
[root@xiezhr test]# ls
dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
④移动目录 如果目录存在则将文件移动到目录中,如果不存在则将目录改名
[root@xiezhr test]# ls
a2.txt b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv a2.txt dir/
[root@xiezhr test]# ls
b.txt c.txt dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv b.txt c.txt dir/
[root@xiezhr test]# ls
dir dir1 dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv dir1 dir
[root@xiezhr test]# ls
dir dir2 dir3 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# mv dir2 dir5
[root@xiezhr test]# ls
dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
rm 删除文件或目录
1、简介
rm 时rmove 英文单词的缩写,功能时删除一个或多个文件、目录。rm是Linux中最危险的命令。如果删错了那只有跑路了~ 慎重慎重慎重😂
2、语法格式
rm [参数选项] [文件或目录]
3、参数说明
参数 | 参数说明 |
---|---|
-f | 强制删除,忽率不存在的文件,不提示确认 |
-r | 递归删除目录及其内容 |
4、实践操作
① 不带参数的删除,删除需要确认
[root@xiezhr test]# ls
a.txt b.txt c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# rm a.txt
rm: remove regular empty file ‘a.txt’? y
[root@xiezhr test]# ls
b.txt c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
②强制删除文件,不需要确认
[root@xiezhr test]# ls
b.txt c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# rm -f b.txt
[root@xiezhr test]# ls
c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
③ 递归删除目录文件
[root@xiezhr test]# tree dir1/
dir1/
└── a
└── b
└── t.txt
2 directories, 1 file
[root@xiezhr test]# rm -rf dir1/
[root@xiezhr test]# ls
c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt
注意:数据无价,慎重、慎重、慎重
- 尽量用mv代替rm ,先将文件移动到其他目录/tmp,类似于windows的垃圾回收站
- 删除前必须备份,即使只是删除一个很不起眼的文件
- 如果非要用到“rm -rf”,一定要确认好路径,别来个rm -rf/ 那就真的玩完了,跑路都是小事,如果造成损失可能要负法律责任。
chown 改变文件或目录的用户用户组
1、简介
chown 是change owner 英文的缩写,用于改变文件或目录的所属用户和用户组
2、语法格式
chown [参数选项] [用户:用户组] [文件或目录]
chown 用户 文件或目录 # 仅仅授权用户
chown :组 文件或目录 # 仅仅授权组
chown 用户:组 文件或目录 # 不仅授权用户,还授权组
3、参数说明
参数 | 参数说明 |
---|---|
-R | 递归更改目录的用户和用户组 |
4、实践操作
① 更改文件的用户和组
[root@xiezhr test]# ll c.txt
-rw-r--r-- 1 root root 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chown xiezhr:xiezhr c.txt
[root@xiezhr test]# ll c.txt
-rw-r--r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
② 递归更改目录即目录下所有目录及文件的用户和用户组属性
[root@xiezhr test]# ll -d dir
drwxr-xr-x 3 root root 4096 Mar 13 16:08 dir
[root@xiezhr test]# chown -R xiezhr.xiezhr dir/
[root@xiezhr test]# ll -d dir
drwxr-xr-x 3 xiezhr xiezhr 4096 Mar 13 16:08 dir
chmod 改变文件或目录的权限
1、简介
chmod 是change mode 英文单词的缩写,用户改变文件或目录的权限。该命令只有文件的属主和root用户可以使用
2、语法格式
chmod [参数选项] [模式选项] [文件或目录]
我们输入如下命令后,会显示文件或目录的详细信息。那么开头的一堆东西代表什么呢?
[root@xiezhr test]# ll
total 20
-rw-r--r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
drwxr-xr-x 3 xiezhr xiezhr 4096 Mar 13 16:08 dir
drwxr-xr-x 2 root root 4096 Mar 10 23:38 dir3
如上图所示,
-
Linux权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)
-
第一位代表文件类型,-表示普通文件 d 表示目录
-
r是read的缩写,代表可读权限 对应4
-
w是write的缩写,代表可写权限 对应2
-
x是execute的缩写,代表可执行权限 对应1
-
-没有任何权限 对应0
-
a 是all 的缩写,代表所有等于u、g、o的综合
-
u 是user的缩写,代表文件拥有者
-
g 是group的缩写,代表用户组
-
o 是other的缩写,代表其他用户
3、参数说明
参数 | 参数说明 |
---|---|
-R | 递归处理指定目录及其子目录下的所有文件 |
4、实践操作
① 设置所有权限为空
[root@xiezhr test]# ll c.txt
-rw-r--r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod a= c.txt
[root@xiezhr test]# ll c.txt
---------- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
② 设置文件拥有者具有文件可执行属性
[root@xiezhr test]# ll c.txt
---------- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod u+x c.txt
[root@xiezhr test]# ll c.txt
---x------ 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
②设置文件组具有文件可写权限
[root@xiezhr test]# ll c.txt
---x------ 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod g+w c.txt
[root@xiezhr test]# ll c.txt
---x-w---- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
③ 设置其他用户具有文件可读权限
[root@xiezhr test]# ll c.txt
---x-w---- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod o+r c.txt
[root@xiezhr test]# ll c.txt
---x-w-r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
④ 多个权限一起
[root@xiezhr test]# ll c.txt
---x-w-r-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod ugo+x c.txt
[root@xiezhr test]# ll c.txt
---x-wxr-x 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
⑤ 撤销其他用户可执行权限
[root@xiezhr test]# ll c.txt
---x-wxr-x 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod o-x c.txt
[root@xiezhr test]# ll c.txt
---x-wxr-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
⑥ 通过数字设置文件拥有者可读可写可执行、用户组可读可执行、其他用户可读可执行
[root@xiezhr test]# ll c.txt
---x-wxr-- 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
[root@xiezhr test]# chmod 755 c.txt
[root@xiezhr test]# ll c.txt
-rwxr-xr-x 1 xiezhr xiezhr 0 Mar 14 22:37 c.txt
⑦使用【-R】参数递归授予dir目录下所有文件权限
[root@xiezhr test]# ll dir
total 8
-rw-r--r-- 1 xiezhr xiezhr 90 Mar 13 15:24 a2.txt
-rw-r--r-- 1 xiezhr xiezhr 0 Mar 10 23:39 b.txt
-rw-r--r-- 1 xiezhr xiezhr 0 Mar 10 23:39 c.txt
drwxr-xr-x 2 xiezhr xiezhr 4096 Mar 10 23:38 dir1
[root@xiezhr test]# chmod -R 755 dir/
[root@xiezhr test]# ll dir
total 8
-rwxr-xr-x 1 xiezhr xiezhr 90 Mar 13 15:24 a2.txt
-rwxr-xr-x 1 xiezhr xiezhr 0 Mar 10 23:39 b.txt
-rwxr-xr-x 1 xiezhr xiezhr 0 Mar 10 23:39 c.txt
drwxr-xr-x 2 xiezhr xiezhr 4096 Mar 10 23:38 dir1
chgrp 更改文件用户组
1、简介
chgrp 是change group 的缩写,仅仅用于改变文件的用户组。chgrp 允许普通用户改变文件所属的组,只要该用户是该组的一员。一般我们都使用chown 命令
2、语法格式
chgrp [参数选项] [用户组] [文件或目录]
3、参数说明
参数 | 参数说明 |
---|---|
-R | 递归更改文件的用户组 |
4、实践操作
①修改文件组属性
[root@xiezhr test]# ll a.txt
-rw-r--r-- 1 root root 0 Mar 15 21:35 a.txt
[root@xiezhr test]# chgrp xiezhr a.txt
[root@xiezhr test]# ll a.txt
-rw-r--r-- 1 root xiezhr 0 Mar 15 21:35 a.txt
② 递归改变文件用户组属性
[root@xiezhr test]# ll dir3/
total 0
-rw-r--r-- 1 root root 0 Mar 15 21:37 a.txt
-rw-r--r-- 1 root root 0 Mar 15 21:37 b.txt
[root@xiezhr test]# chgrp -R xiezhr dir3/
[root@xiezhr test]# ll dir3/
total 0
-rw-r--r-- 1 root xiezhr 0 Mar 15 21:37 a.txt
-rw-r--r-- 1 root xiezhr 0 Mar 15 21:37 b.txt
ln 硬链接与软连接
1、简介
ln 是link英文单词缩写,功能是创建文件间的链接(链接分为软链接和硬链接)
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
那么什么是硬链接?什么又是软链接呢?
【软链接】
- 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
- 2.软链接可以 跨文件系统 ,硬链接不可以
- 3.软链接可以对一个不存在的文件名进行链接
- 4.软链接可以对目录进行链接
【硬链接】
- 1.硬链接,以文件副本的形式存在。但不占用实际空间。
- 2.不允许给目录创建硬链接
- 3.硬链接只有在同一个文件系统中才能创建
2、语法格式
3、参数说明
参数 | 参数说明 |
---|---|
无参数 | 创建硬链接 |
-s | 创建硬链接 |
4、实践操作
①为a.txt 创建软连接linka。如果a.txt丢失,linka失效
[root@xiezhr dir]# ll
total 4
-rw-r--r-- 1 root root 17 Mar 15 22:25 a.txt
[root@xiezhr dir]# ln -s a.txt linka
[root@xiezhr dir]# ll
total 4
-rw-r--r-- 1 root root 17 Mar 15 22:25 a.txt
lrwxrwxrwx 1 root root 5 Mar 15 22:28 linka -> a.txt
② 给文件a.txt创建硬链接,lna,a.txt与lna的各项属性相同
[root@xiezhr dir]# ll
total 4
-rw-r--r-- 1 root root 17 Mar 15 22:25 a.txt
lrwxrwxrwx 1 root root 5 Mar 15 22:28 linka -> a.txt
[root@xiezhr dir]# ln a.txt lna
[root@xiezhr dir]# ll
total 8
-rw-r--r-- 2 root root 17 Mar 15 22:25 a.txt
lrwxrwxrwx 1 root root 5 Mar 15 22:28 linka -> a.txt
-rw-r--r-- 2 root root 17 Mar 15 22:25 lna
总结:
- 【删除软连接文件,对源文件及硬链接文件无影响】删除软连接linka,对a.txt和lna无影响
- 【删除硬链接文件,对源文件及软链接文件无影响】删除硬链接lna,对a.txt和linka无影响
- 【删除源文件,对硬链接文件无影响,但会导致软链接失效】 删除a.txt,对lna无影响,linka链接失效
- 【只有同事删除源文件、硬链接文件才会真正删除整个文件】删除lna、a.txt 整个文件才会被删除
redlink 查看符号连接文件的内容
1、简介
我们使用cat/more 查看软链接文件时,只能查看源文件内容,不能查看软链接的时哪个文件。这时候readlink就派上用场了
2、语法格式
readlink [参数选项] [文件]
3、参数说明
一般不加参数
4、实践操作
① 查看软链接linka
[root@xiezhr dir]# cat linka
ffdfdfadf
fdfdf
[root@xiezhr dir]# readlink linka
a.txt
find 查找目录下的文件
1、简介
find 根据根据意思,你可能就知道其功能了。find用户查找目录下的文件,同时也可以调用其他命令执行相应操作
2、语法格式
find [路径] [操作语句] [执行的动作]
3、参数说明
参数 | 参数说明 |
---|---|
pathname | 命令所查找的路径,常用的.表示当前路径,/表示系统根目录 |
-maxdepth levels | 查找的最大目录级数,leves 为自然数 |
-name | 按照文件名查找文件,支持*、?、[] 通配符 |
-type | 查找某一类型的文件① b[块设备文件] ② c[字符设备文件] ③ d[目录] ④ p[管道文件] ⑤ l[符号链接文件] ⑥ f[普通文件] ⑦s[stocket文件] |
-exec | 对匹配的文件执行该参数所给出的shell命令 |
! | 取反 |
-a | 取交集,and |
-o | 取并集,or |
4、实践操作
① 【-name】根据文件名检索
- 区分大小写,需要忽略文件名中的大小写,可以使用 -iname参数
- 可配合通配符"*"、"?" 使用
- "?" 可以表示任意一个单一的符号
- "*" 可以表示任意数量(包括 0)的未知符号
# 查找 /home/test 目录下所有文件名以 .txt 结尾的文件
[root@xiezhr test]# find /home/test/ -name '*.txt'
/home/test/.d.txt
/home/test/dir/a.txt
/home/test/dir3/b.txt
/home/test/dir3/a.txt
/home/test/a.txt
/home/test/tt.txt
/home/test/c.txt
/home/test/xiezhr.txt
# 查找 /home/test 目录下所有文件名刚好为 1 个字符的文件
[root@xiezhr test]# find /home/test/ -name '?.txt'
/home/test/dir/a.txt
/home/test/dir3/b.txt
/home/test/dir3/a.txt
/home/test/a.txt
/home/test/c.txt
② 【-type】 根据文件类型检索
# 查找 /home/test 目录下所有java普通文件 下面命令中f 代表普通文件。上面参数中已说明
[root@xiezhr test]# find /home/test/ -type f -name '*.java'
/home/test/user.java
/home/test/money.java
/home/test/test.java
/home/test/xiezhr.java
③ 【-atime -mtime】查找指定时间内修改过的文件
# 查找当前目录,一天内访问过的文件 .表示当前路径,-1表示一天内
[root@xiezhr test]# find . -atime -1
./user.java
./dir/linka
./dir/lna
./dir/a.txt
./money.java
./test.java
./xiezhr.java
# 在/home/test 目录下,查找2天内修改过的文件
[root@xiezhr test]# find /home/test/ -mtime -2
/home/test/
/home/test/user.java
/home/test/dir
/home/test/dir/linka
/home/test/dir/lna
参照上图所示
④ 【!】 进行反向查找
# 查找当前目录下所有目录
[root@xiezhr test]# find -type d
.
./dir5
./xiezhr
./xiezhr/test
./dir
./dir3
./dir_bak
# 查找当前目录下非目录的文件
[root@xiezhr test]# find ! -type d
./user.java
./.d.txt
./dir/linka
./dir/lna
./dir/a.txt
./money.java
./dir3/b.txt
./dir3/a.txt
./test.java
⑤【-size】 根据文件大小查找
如下命令中
- "+" 表示大于
- "-" 表示小于
- "c" 表示字节
- "k" 表示kb
- "M" 表示Mb
- "G" 表示Gb
[root@xiezhr test]# find -size +200c
.
./dir5
./xiezhr
./xiezhr/test
./dir
./dir3
./dir_bak
⑥ 【-perm】 根据文件权限查找
# 检索 /home/test 目录下权限为 rw-r--r-- 的文件
[root@xiezhr test]# find /home/test/ -perm u=rw-,g=r--,o=r--
/home/test/user.java
/home/test/.d.txt
/home/test/dir/lna
/home/test/dir/a.txt
/home/test/money.java
上面列子可以写成如下
[root@xiezhr test]# find /home/test/ -perm 644
/home/test/user.java
/home/test/.d.txt
/home/test/dir/lna
/home/test/dir/a.txt
/home/test/money.java
⑦ 查找当前目录下所有普通问及那,并用ls -l 命令将其列出来
[root@xiezhr test]# find -type f -exec ls {} \;
./user.java
./.d.txt
./dir/lna
./dir/a.txt
./money.java
上述列子中
- -exec 后面的时操作命令,可以是ls、rm、delete 等命令
- 命令最后以;结尾,考虑到到各个系统;可能有不同含义,所以在前面加上\进行转义
- {} 表示前面find 命令查到的结果,{} 前后必须要有空格
⑧ 在目录中查找n天以前的文件并删除它,实际工作中我们会经常用到。
我们在服务器上部署的应用程序一般都会输出日志文件,时间一长可能日志文件会成百上千,一下就把你的磁盘空间给撑满了。
这时候下面命令就显得很重要了。
一般情况下,这些命令我们我们会配置到Linux任务调度中自动执行
[root@xiezhr test]# find . -type f -name "xiezhr*.log" -mtime +7 -exec rm -f {} \;
[root@xiezhr test]#
或者
# | 表示管道符号 xargs是一个向其他命令传递参数的过滤器。后面都会说到
# 下面命令表示 find 查找到的普通文件 传递给rm -f 执行
[root@xiezhr test]# find . -type f -name "xiezhr*.log" -mtime +7 |xargs rm -f
[root@xiezhr test]#
或者
[root@xiezhr test]# find . -type f -name "xiezhr*.log" -mtime +7 -delete
[root@xiezhr test]#
⑨ 将查找到的文件移动到另一个目录下
# 利用xargs -i 命令将find 查找当前目录下的所有java文件作为参数传递给mv命令
[root@xiezhr test]# find -type f -name "*.java" |xargs -i mv {} dir3/
[root@xiezhr test]# ls dir3
a.txt b.txt money.java test.java user.java xiezhr.java
⑩ 我们想将/home/test 目录下多个的高清电影发给好兄弟,这时就需要筛选出当前目录下所有电影并进行压缩
[root@xiezhr test]# ls
a.txt c.txt dir dir3 dir5 dir_bak tt.txt xiezhr xiezhr.txt 化学资料.mp4 数学资料.mp4 物理.mp4
[root@xiezhr test]# find . -name "*.mp4" -exec tar -czvf movie.tar.gz {} \;
./数学资料.mp4
./物理.mp4
./化学资料.mp4
[root@xiezhr test]# ls
a.txt c.txt dir dir3 dir5 dir_bak movie.tar.gz tt.txt xiezhr xiezhr.txt 化学资料.mp4 数学资料.mp4 物理.mp4
movie.tar.gz 就是最后压缩后的文件
xargs 将标准输入转换成命令行参数
1、简介
xargs 是 extended arguments 单词的缩写。它是命令传递参数的一个过滤器。xargs在上一个例子中已经用到过。它能够捕获一个命令的输出,然后传递给另外一个命令
2、语法格式
xargs [参数选项]
3、参数说明
参数 | 参数选项 |
---|---|
-n | 指定每行的最大参数量n,可以将输入的文本划分为多行,每行n个参数,默认空格分隔 |
-d | 自定义分隔符 |
-i | 以{}替代前面的结果 |
4、实践操作
① 多行输入变单行
[root@xiezhr test]# clear
[root@xiezhr test]# cat test.txt
1 2 3 4 5
6 7
8 9
10 11 12 13
14 15 17 18
[root@xiezhr test]# xargs < test.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 18
② 通过【-n】指定每行的输出个数
[root@xiezhr test]# cat test.txt
1 2 3 4 5
6 7
8 9
10 11 12 13
14 15 17 18
[root@xiezhr test]# xargs -n 4 < test.txt
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 17
18
③ 通过【-d】自定义分隔符
[root@xiezhr test]# echo "xiezhr-的- 个人公众号是:-XiezhrSpace" | xargs -d- -n4
xiezhr 的 个人公众号是: XiezhrSpace
④ 通过【-I】可以指定一个替换的字符串
# xargs -i 参数可以让{}替代前面find查找到的内容
[root@xiezhr test]# find . -name "*.mp4"|xargs -i mv {} dir/
[root@xiezhr test]# ls
a.txt c.txt dir dir3 dir5 dir_bak movie.tar.gz test.txt tt.txt xiezhr xiezhr.txt
# -I 参数可以指定其他字符代替{},本例中则使用[] 替代{}
[root@xiezhr test]# ls
a.txt c.txt dir dir2 dir3 dir5 dir_bak movie.tar.gz test.txt tt.txt xiezhr xiezhr.txt
[root@xiezhr test]# find . -name "*.txt"|xargs -I [] cp [] dir3
cp: ‘./dir3/b.txt’ and ‘dir3/b.txt’ are the same file
cp: ‘./dir3/a.txt’ and ‘dir3/a.txt’ are the same file
rename 重命名文件
1、简介
rename 根据名字就可以知道是重命名
2、语法格式
rename from to file
3、参数说明
- from 表示需要替换或者需要处理的字符(一般是文件名的一部分或扩展名)
- to 把前面的from 代表的内容替换成to代表的内容
- file 表示待处理的文件,可以用"*"通配所有文件
4、实践操作
[root@xiezhr dir5]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220315_unfidend.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220316_unfidend.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220317_unfidend.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220318_unfidend.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220319_unfidend.jpg
[root@xiezhr dir5]# rename "_unfidend" "" *
[root@xiezhr dir5]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220315.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220316.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220317.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220318.jpg
-rw-r--r-- 1 root root 0 Mar 18 20:47 xie_20220319.jpg
file 显示文件类型
1、简介
file 我们都知道是文件的意思。其作用就是用于显示文件类型。
2、语法格式
file [参数选项] [文件或目录]
3、参数说明
一般不加参数
4、实践操作
[root@xiezhr dir5]# file xie_20220315.jpg
xie_20220315.jpg: empty
md5sum 计算和校验文件的MD5值
1、简介
md5sum 用于计算和校验文件的MD5值。世界上没有完全相同的两片叶子,md5是一种不可逆的加密算法。我们可以通过比较两个文件的md5值来判断文件有没有被修改过。
2、语法格式
md5 [参数选项] [文件]
3、参数说明
参数 | 参数说明 |
---|---|
-c | 从指定文件中读取MD5校验值,并进行校验 |
4、实践操作
① 生成一个文件的md5值
[root@xiezhr test]# md5sum a.txt
d41d8cd98f00b204e9800998ecf8427e a.txt
②【-c】参数判断文件是否被篡改
-c参数来对文件md5进行校验。校验时,根据已生成的md5来进行校验。生成当前文件的md5,并和之前已经生成的md5进行对比,如果一致则文件没被修改,如果不一致则文件被篡改了。
[root@xiezhr dir6]# ls
xiezhr.txt
[root@xiezhr dir6]# md5sum xiezhr.txt
d41d8cd98f00b204e9800998ecf8427e xiezhr.txt
[root@xiezhr dir6]# md5sum xiezhr.txt >data.md5
[root@xiezhr dir6]# echo "个人公众号:XiezhrSpace" >> xiezhr.txt
[root@xiezhr dir6]# md5sum xiezhr.txt
8e32899aa04a3a842df366cdd883cdbf xiezhr.txt
[root@xiezhr dir6]# md5sum -c data.md5
xiezhr.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
这期内容就到这,下期根据思维导图就到了文件内容操作相关的命令使用了。
涉及到的命令有:cat、more、head、tail、less、cut、join、sort等等
快速上手Linux核心命令(六):Linux的文本编辑器vi和vim
@
前言
上一篇中已经预告,我们这篇主要说Linux中vi/vim 编辑器。它是我们使用Linux系统不可缺少的工具,学会了,你就可以在Linux世界里畅通无阻,学废了,常用操作你也会了,也是够用了,O(∩_∩)O
简介
vi是Linux系统下标准编辑器,就相当于Windows系统中的记事本一样。功能不输给最新的文本编辑器。vim可以看作是vi的升级版本,具有代码补全、编译即错误跳转等程序编辑能力,可以用多种颜色的方式来显示一些特殊信息。
小试牛刀
下面我们演示一下,这么建立一个xiezhr.txt文件,并往xiezhr.txt 中添加内容
① 输入如下命令进入vi/vim(vi/vim 文件名 就能够进入 vi/vim 的普通模式了。注: vi/vim 后面一定要加文件名,不管该文件存在与否)
vim xiezhr.txt
② 按下 【i】 进入输入模式(也称为编辑模式),开始编辑文字
③ 文件编辑完后我们怎么保存退出呢? 这时候我们按下【Esc】键,发现界面上--INSERT--不见了,这是我们已经退出了输入模式,这时我们再按下【:】即可进入底线命令模式。
④ 我们再输入【wq】即可保存xiezhr.txt文档并退出
以上就是vi/vim基本操作,是不是很简单哦(●'◡'●)
当然这只是vi/vim 最基本的操作。它的强大之处可能是你想都想不到的。如果你想了解更多vi/vim操作,可去查查相关资料。
vi/vim 工作原理及三种模式
vi/vim 共分为三种模式,分别是普通模式(Command mode),输入模式(Insert mode)和底线命令行模式(Last line mode)
根据上面的例子,我们再结合下图,你应该对vi/vim工作原理及三模式了如指掌了吧 O(∩_∩)O
常用快捷键
三种模式下操作快捷键说明
一、一般模式
1、移动光标
按钮 | 操作说明 |
---|---|
【h、j、k、l】 | 分别控制光标左、下、上、右移一格 |
【ctrl+b】 | 屏幕往"后"移动一页 |
【n】 | 光标向右移动n个字符 |
【Home】 | 移动到这一行的最前面字符处:0数字,但不能用数字小键盘上的数字 |
【End】 | 移动到这一行的最后面字符处:$,我测试好像不行 |
【w】 | 光标跳到下个字的开头 |
【e】 | 光标跳到下个字的字尾 |
【H】 | 光标移动到这个屏幕的最上方那一行的第一个字符 |
【M】 | 光标移动到这个屏幕的中间那一行的第一个字符 |
【L】 | 光标移动到这个屏幕的最下方那一行的第一个字符 |
【G】 | 移动到这个文件的最后一行 |
【nG】 | 移动到这个文件的第n行(可配合:set nu) |
【gg】 | 移动到这个文件的第一行,相当于1G |
【n】 | 光标向下移动n行 |
2、 查找与替换
按钮 | 操作手册 |
---|---|
【/word】 | 向光标向下寻找一个名称为word的字符串 |
【?word】 | 向光标向上寻找一个名称为word的字符串 |
【n】 | 代表重复前一个查找的动作 |
【N】 | 与n刚好相反,为【反向】进行行前一个查找动作 |
【:n1,n2s/word1/word2/g】 | n1与n2为数字,在第n1与n2行之间查找word1 这个字符串,并将该字符串替换为word2 |
【:1,$s/word1/word2/g】 | 从第一行到最后一行查找word1字符串,并将该字符串替换为word2 |
【:1,$s/word1/word2/gc】 | 从第一行到最后一行查找word1字符串,并将该字符串替换为word2 ,且在替换前提示用户确认是否进行替换 |
3、 删除、复制与粘贴
按键 | 操作说明 |
---|---|
【x】 | 为向后删除一个字符 (相当于【del】键 |
【X】 | 为向前删除一个字符(相当于【backspace】键) |
【nx】 | 连续向后删除n个字符 |
【dd】 | 删除光标所在行 |
【ndd】 | 删除光标所在的向下n行 |
【d1G】 | 删除光标所在行到第一行的所有数据 |
【dG】 | 删除光标所在到最后一行的所有数据 |
【d$】 | 删除光标所在处,到该行的最后一个字符 |
【d0】 | 删除光标所在处,到该行的最前一个字符 |
【yy】 | 复制光标所在的那一行 |
【nyy】 | 复制光标所在的向下n列 |
【y1G】 | 复制光标所在行到第一行的所有数据 |
【yG】 | 复制光标所在行到最后一行的所有数据 |
【y0】 | 复制光标所在的那个字符到该行行首的所有数据 |
【y$】 | 复制光标所在的那个字符到该行行尾的所有数据 |
【p】 | 将已复制的数据在光标下一行粘贴上 |
【P】 | 则为贴在光标的上一行 |
【u】 | 恢复前一个操作 |
【Ctrl+r】 | 重做上一个操作 |
【.】 | 是重复前一个操作 |
二、一般模式、编辑模式(插入模式)切换
按键 | 操作说明 |
---|---|
【i】 | 从目前光标所在处插入 |
【I】 | 在目前所在行的第一个非空格符处开始插入 |
【a】 | 从目前光标所在的下一个字符处开始插入 |
【A】 | 从光标所在行的最后一个字符处开始插入 |
【o】 | 在目前光标所在的下一行处插入新的一行 |
【O】 | 为在目前光标所在处的上一行插入新的一行 |
【r】 | 只会取代光标所在的那一个字符一次 |
【R】 | 会一直取代光标所在的文字,直到按下 ESC 为止; |
【Esc】 | 退出编辑模式(插入模式),回到一般模式 |
三、一般模式、命令行模式切换
按键 | 操作 |
---|---|
【:w】 | 保存编辑的内容 |
【:w!】 | 强制写入该文件,但跟你对该文件的权限有关 |
【:q】 | 离开vi |
【:q!】 | 不想保存修改强制离开 |
【:wq】 | 保存后离开 |
【:x】 | 保存后离开 |
【ZZ】 | 若文件没有更动,则不保存离开,若文件已经被更改过,则保存后离开 |
【:w filename】 | 将编辑的数据保存成另一个文件(类似另存) |
【:r filename】 | 在编辑的数据中,读入另一个文件的数据。即将【filename】 这个文件的内容加到光标所在行后面。 |
【:n1,n2 w filename】 | 将n1到n2的内容保存成filename这个文件。 |
【:! command】 | 暂时离开vi 到命令行模式下执行command的显示结果!例如 【:! ls /home】即可在 vi 当中察看/home底下以ls输出的文件信息! |
【:set nu】 | 显示行号 |
【:set nonu】 | 与 set nu 相反,为取消行 |
命令行图解
上面一下列举了好多按键,你会说我怎么记得住呢? 其实没必要把所有的都记住了,常用的就那么几个。敲得多了自然就记住了,记不住得再来翻一翻这篇文章就好了😄。
下面呢从网上找了两张vi/vim命令行图解,希望对你有帮助。
这期内容就到这,下期根据思维导图就到Linux系统信息相关命令的使用了。
涉及到的命令有: uname、 hostname 、 du 、 echo、 whereis 、 date 、 which 等等
敬请期待哦(●’◡’●)
专栏目录:快速上手Linux核心命令专栏目录
上一篇:快速上手Linux核心命令(五):文本处理三剑客
下一篇:快速上手Linux核心命令(七):Linux系统信息相关命令(博主正在玩命更新中)
多人觉得Linux操作系统刚开始学起来很难,主要是因为我们平时办公或者学习用的都是Windows系统,而Windows和Linux的使用模式是完全不一样的。
Windows的基本使用模式是“图形化界面+菜单”。也就是说,无论我们做什么事情,首先要找一个图形化的界面。在这里面,“开始”菜单是统一的入口,无论是运行程序,还是做系统设置,你都能找到一个界面,界面上会有各种各样的输入框和菜单。我们只要挨个儿看过去,总能找到想操作的功能。实在不行,还有杀手锏,就是右键菜单,挨个儿一项一项看下去,最终也能实现想做的操作。
如果你刚刚上手Linux,就会发现,情况完全不一样。你基本是这也找不着,那也找不着,觉得Linux十分难用,从而“从入门到放弃”。
Linux上手难,学习曲线陡峭,所以它的学习过程更像一个爬坡模式。这些坡看起来都很陡,但是一旦爬上一阶,就会一马平川。你会惊叹Linux的设计之美,而Linux的灵活性也会使得你有N多种方法解决问题,从而事半功倍,你就会有一切尽在掌握的感觉。只可惜,大部分同学都停留在了山脚下。
那怎样才能掌握这项爬坡技能呢?我们首先需要明确,我们要爬哪些坡。
我总结了一下,在整个Linux的学习过程中,要爬的坡有六个,分别是:熟练使用Linux命令行、使用Linux进行程序设计、了解Linux内核机制、阅读Linux内核代码、实验定制Linux组件,以及最后落到生产实践上。以下是我为你准备的爬坡秘籍以及辅助的书单弹药。
第一个坡:抛弃旧的思维习惯,熟练使用Linux命令行
上手Linux的第一步,要先从Windows的思维习惯,切换成Linux的“命令行+文件”使用模式。
在Linux中,无论我们做什么事情,都会有相应的命令工具。虽然这些命令一般会在bin或者sbin目录下面,但是这些命令的数量太多了。如果你事先不知道该用哪个命令,很难通过枚举的方式找到。因此,在这样没有统一入口的情况下,就需要你对最基本的命令有所掌握。
一旦找到某个命令行工具,替代输入框的是各种各样的启动参数。这些参数怎么填,一般可以通过-h查看help,挨个儿看过去,就能找到相应的配置项;还可以通过man命令,查看文档。无论是什么命令行工具,最终的配置一般会落到一个文件上,只要找到了那个文件,文件中会有注释,也可以挨个儿看下去,基本就知道如何配置了。
这个过程可能非常痛苦,在没有足够熟练地掌握命令行之前,你会发现干个非常小的事情都需要搜索半天,读很多文档,即便如此还不一定能得到期望的结果。这个时候你一定不要气馁,坚持下去,继续看文档、查资料,慢慢你就会发现,大部分命令的行为模式都很像,你几乎不需要搜索就能完成大部分操作了。
恭喜你,这个时候你已经爬上第一个坡了。这个时候,你能看到一些很美丽的风景,例如一些很有技巧的命令sed和awk、很神奇的正则表达式、灵活的管道和grep、强大的bash。你可以自动化地做一些事情了,例如处理一些数据,会比你使用Excel要又快又准,关键是不用框框点点,在后台就能完成一系列操作。在处理数据的同时,你还可以干别的事情,半夜处理数据,第二天早上发个邮件报告,这都是Excel很难做到的事情。
不过,在这个专栏里,命令行并不是我们的重点,但是考虑到一些刚起步的同学,在第一部分我会简单介绍一些能够让你快速上手Linux的命令行。专栏每一模块的第一节,我都会有针对性地讲解这一模块的常用命令,足够你把Linux用起来。
如果你想全面学习Linux命令,推荐你阅读《鸟哥的Linux私房菜》。如果想再深入一点,推荐你阅读《Linux系统管理技术手册》。这本砖头厚的书,可以说是Linux运维手边必备。
第二个坡:通过系统调用或者glibc,学会自己进行程序设计
命令行工具也是程序,只不过是别人写的程序。从用别人写的程序,到自己能够写程序,通过程序来操作Linux,这是第二个要爬的坡。
用代码操作Linux,可以直接使用Linux系统调用,也可以使用glibc的库。
Linux的系统调用非常多,而且每个函数都非常复杂,传入的参数、返回值、调用的方式等等都有很多讲究。这里面需要掌握很多Linux操作系统的原理,否则你会无法理解为什么应该这样调用。
刚开始学Linux程序设计的时候,你会发现它比命令行复杂得多。因为你的角色再次变化,这是为啥呢?我这么说,估计你就能理解了。
如果说使用命令行的人是吃馒头的,那写代码操作命令行的人就是做馒头的。看着简简单单的一个馒头,可能要经过N个工序才能蒸出来。同样,你会发现,你平时用的一个简单的命令行,却需要N个系统调用组合才能完成。其中每个系统调用都要进行深入地学习、读文档、做实验。
经过一段时间的学习,你啃下了这些东西,恭喜你,又爬上了一个坡。这时候,你已经很接近操作系统的原理了,你能看到另一番风景了。大学里学的那些理论,你再回去看,现在就会开始有感觉了。你本来不理解进程树,调用了fork,就明白了;你本来不理解进程同步机制,调用了信号量,也明白了;你本来分不清楚网络应用层和传输层的分界线,调用了socket,都明白了。
同样,专栏的第一模块,我会简单介绍一下Linux有哪些系统调用,每一模块的第一节,我还会讲解这一模块的常用系统调用,以及如何编程调用这些系统调用。这样可以使你对Linux程序设计入个门,但是这对于实战肯定是远远不够的。如果要进一步学习Linux程序设计,推荐你阅读《UNIX环境高级编程》,这本书有代码,有介绍,有原理,非常实用。
第三个坡:了解Linux内核机制,反复研习重点突破
当你已经会使用代码操作Linux的时候,你已经很希望解开这层面纱,看看系统调用背后到底做了什么。
这个时候,你的角色要再次面临变化,就像你蒸馒头时间长了,发现要蒸出更好吃的馒头,就必须要对面粉有所研究。怎么研究呢?当然你可以去面粉厂看人家的加工过程,但是面粉厂的流水线也很复杂,很多和你蒸馒头没有直接关系,直接去看容易蒙圈,所以这时候你最好先研究一下,面粉制造工艺与馒头口味的关系。
对于Linux也是一样的,进一步了解内核的原理,有助于你更好地使用命令行和进行程序设计,能让你的运维和开发水平上升一个层次,但是我不建议你直接看代码,因为Linux代码量太大,很容易迷失,找不到头绪。最好的办法是,先了解一下Linux内核机制,知道基本的原理和流程就可以了。
一旦学起来的时候,你会发现,Linux内核机制也非常复杂,而且其中相互关联。比如说,进程运行要分配内存,内存映射涉及文件的关联,文件的读写需要经过块设备,从文件中加载代码才能运行起来进程。这些知识点要反复对照,才能理清。
但是一旦爬上这个坡,你会发现Linux这个复杂的系统开始透明起来。无论你是运维,还是开发,你都能大概知道背后发生的事情,并在出现异常的情况时,比较准确地定位到问题所在。
Linux内核机制是我们这个专栏重点要讲述的部分,我会基于最新4.x的内核进行讲解,当然我也意识到了内核机制的复杂性,所以我选择通过故事性和图形化的方式,帮助你了解并记住这些机制。
这块内容的辅助学习,我推荐一本《深入理解LINUX内核》。这本书言简意赅地讲述了主要的内核机制。看完这本书,你会对Linux内核有总体的了解。不过这本书的内核版本有点老,不过对于了解原理来讲,没有任何问题。
第四坡:阅读Linux内核代码,聚焦核心逻辑和场景
在了解内核机制的时候,你肯定会遇到困惑的地方,因为理论的描述和提炼虽然能够让你更容易看清全貌,但是容易让你忽略细节。
我在看内核原理的书的时候也遇到过这种问题,有的地方实在是难以理解,或者不同的书说的不一样,这时候该怎么办呢?其实很好办,Linux是开源的呀,我们可以看代码呀,代码是精准的。哪里有问题,找到那段代码看一看,很多问题就有方法了。
另外,当你在工作中需要重点研究某方面技术的时候,如果涉及内核,这个时候仅仅了解原理已经不够了,你需要看这部分的代码。
但是开源软件代码纷繁复杂,一开始看肯定晕,找不着北。这里有一个诀窍,就是一开始阅读代码不要纠结一城一池的得失,不要每一行都一定要搞清楚它是干嘛的,而要聚焦于核心逻辑和使用场景。
一旦爬上这个坡,对于操作系统的原理,你应该就掌握得比较清楚了。就像蒸馒头的人已经将面粉加工流程烂熟于心。这个时候,你就可以有针对性地去做课题,把所学和你现在做的东西结合起来重点突破。例如你是研究虚拟化的,就重点看KVM的部分;如果你是研究网络的,就重点看内核协议栈的部分。
在专栏里,我在讲述Linux原理的同时,也会根据场景和主要流程来分析部分代码,例如创建进程、分配内存、打开文件、读写文件、收发网络包等等。考虑到大量代码粘贴会让你看起来比较费劲,也会占用大量篇幅,因而我采取只叙述主要流程,只放必要的代码,大部分的逻辑和相互关系,尽量通过图的方式展现出来,给你讲解。
这里也推荐一本书,《LINUX内核源代码情景分析》。这本书最大的优点是结合场景进行分析,看得见、摸得着,非常直观,唯一的缺点还是内核版本比较老。
第五坡:实验定制化Linux组件,已经没人能阻挡你成为内核开发工程师了
纸上得来终觉浅,绝知此事要躬行。从只看内核代码,到上手修改内核代码,这又是一个很大的坎。这相当于蒸馒头的人为了定制口味,要开始修改面粉生产流程了。
因为Linux有源代码,很多地方可以参考现有的实现,定制化自己的模块。例如,你可以自己实现一个设备驱动程序,实现一个自己的系统调用,或者实现一个自己的文件系统等等。
这个难度比较大,涉及的细节比较多,上一个阶段,我的建议是不计较一城一地的得失,不需要每个细节都搞清楚,这一个阶段要求就更高了。一旦代码有一个细微的bug,都有可能导致实验失败。
专栏最后一个部分,我专门设计了两个实验,帮你度过这个坎。只要跟着我的步伐进行学习,接下来,就没人能够阻挡你成为一名内核开发工程师了。
最后一坡:面向真实场景的开发,实践没有终点
说了这么多,我们都只是走出了万里长征第一步。我始终坚信,真正的高手都是在实战中摸爬滚打练出来的。
如果你是运维,仅仅熟悉上面基本的操作是不够的,生产环境会有大量的不可控因素,尤其是集群规模大的更是如此,大量的运维经验是实战来的,不能光靠读书。如果你是开发,对内核进行少量修改容易,但是一旦面临真实的场景,需要考虑各种因素,并发与并行,锁与保护,扩展性和兼容性,都需要真实项目才能练出来。