• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

xjh22222228/linux-manual:

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称(OpenSource Name):

xjh22222228/linux-manual

开源软件地址(OpenSource Url):

https://github.com/xjh22222228/linux-manual

开源编程语言(OpenSource Language):


开源软件介绍(OpenSource Introduction):


Linux 常用命令参考手册

日常运维的最佳拍档 x 112

一张网页概括,没有晦涩难度的例子!

Stars Linux




目录

文件

查看文件内容

head

显示文件的头部内容,默认前10行

# 显示前10行内容
$ head README.md

# 或者显示多个文件
$ head README.md package.json

# -n 指定显示行数
$ head -n 100 README.md

tail

显示文件的末尾部分,默认后10行

参数 描述
-n 指定显示末尾行数
-f 实时监听并打印文件变化, 文件删除后不在监听
-F 实时监听并打印文件变化, 文件删除后继续监听
-c 指定显示文件最后N个字符
# 默认显示末尾10行
$ tail README.md

# -n 指定显示末尾20行
$ tail -n 20 README.md

# 实时监听README.md文件变化
$ tail -f README.md

# 根据文件名进行追踪, 如果删除后创建相同的文件名会继续追踪
$ tail -F README.md

# 显示文件的最后10个字符
$ tail -c 10 README.md

cat

查看文件全部内容,如果文件太大,头部部分内容会被截掉。

# 查看 README.md 文件全部内容
$ cat README.md
$ cat README.md README2.md  # 多个文件

# -n 每一行显示行号包括空行
$ cat -n README.md

# -b 只在有内容的行显示行号
$ cat -b README.md

nl

同样用来打印内容,与 cat 命令不同的是打印内容会自动加上行号, 但 nl 命令可以对行号做特别的定制,主要针对行号有特别高要求的用户。

  • -b: 指定行号指定的方式
    • -b a 无论是否为空行一样列出行号 (等价 cat -n)
    • -b t 空行不列出行号, 默认 (等价 cat -b)
  • -n: 列出行号表示的方法
    • -n ln 行号在萤幕的最左方显示
    • -n rn 行号在自己栏位的最右方显示,且不加 0
    • -n rz 行号在自己栏位的最右方显示,且加 0
# 打印内容并输出行号, 除了空号
# 等价于 cat -b README.md
$ nl README.md

# 空行同样打印行号
$ nl -b a README.md

more

分页查看文件内容, 每次查看一屏, 每屏能显示多少内容取决于终端大小。

cat 命令不同,cat 只能一次显示全部内容,如果内容太多部分会被截取掉。

快捷键:

  • 空格PageUp - 查看下一屏内容
  • BPageDown - 查看上一屏内容
  • 回车 - 查看下一行内容
  • Q - 退出
$ more README.md

# 从第10行开始显示
$ more +10 README.md

# 显示查看进度
$ more -d README.md # --More--(17%)[Press space to continue, 'q' to quit.]

创建

touch

创建一个空文件, 如果文件存在只会修改文件的创建时间

$ touch README.md

mkdir

make directory, 创建目录。

# 在当前目录下创建 temp 目录
$ mkdir temp

# 创建多层目录
$ mkdir -p temp/temp2/temp3

# 基于权限创建
$ mkdir -m 777 temp

mktemp

创建临时目录或文件,Linux使用 /tmp 目录来存放不需要永久保留的文件,大多数Linux发行版配置了系统在启动时自动删除 /tmp 目录的所有文件。

默认情况下, mktemp 会在本地目录中创建一个文件,只要指定一个文件名模板就行,模板可以包含任意文本文件名,在文件名末尾加上 6 个X就行了。

# 创建本地临时文件, 会在当前目录下创建一个叫 log.XXXXXX, XXXXXX是一个随机字符码,保证文件名在目录中是唯一的。
$ mktemp log.XXXXXX  # log.J3awfb

# -t, 在 /tmp 目录创建临时文件, 返回绝对路径地址
$ mktemp -t log.XXXXXX # /tmp/log.G5g9dX

# -d 创建临时目录, 这样就能用该目录进行任何需要的操作了,比如创建其他的临时文件
$ mktemp -d dir.XXXXXX

删除

rm

删除指定目录或文件

注: 使用此命令需要非常小心, 一但删除无法恢复

# 删除当前目录下的 1.txt 文件
$ rm 1.txt

# -i 删除前询问是否真的要删除,因为一旦删除无法恢复
$ rm -i README.md

# 这条命令比较常用, 强制删除目录或文件
# -r 如果是目录递归删除, -f 强制删除 不发出任何警告
$ rm -rf ./src

rmdir

删除指定空目录

注:rmdir 实际上用得并不多,因为不是很灵活,基本上使用 rm 代替

# 删除当前 temp 空目录, 如果不是空目录会发出警告
$ rmdir temp

# -p 参数可以删除多层空目录, 发现temp3是空目录删除掉,然后接着往父级找如果还是空目录继续删除...
$ rmdir -p temp1/temp2/temp3

# -i 删除前询问确认删除
$ rmdir -i temp

查找文件

find

指定某个目录下查找文件

# 在当前目录递归搜索文件名为 README.md 文件
$ find . -name README.md
# 也可以指定多个目录,比如 src1 src2目录
$ find src1 src2 -name README.md

# 通过通配符进行查找, 必须用引号括着, 这里查找所有后缀为 .md 文件
$ find . -name "*.md"
$ find . -iname "*.md"  # 忽略文件大小写

# 排除文件,只要加 ! , 排除掉所有 .md 后缀的文件
$ find . ! -name "*.md"

# 根据类型进行过滤搜索
# f 普通文件, l 符号连接
# d 目录, c 字符设备
# b 块设备, s 套接字, p Fifo
$ find . -type f

# 限定目录递归深度
$ find . -maxdepth 3  # 最大为3个目录
$ find . -mindepth 3  # 最小为3个目录

# 查找文件大小大于 25k 文件 
$ find /root -size +25k

# 查找10天前文件 -mtime 修改时间、 -ctime 创建时间、 -atime 访问时间
$ find /root -mtime +10

locate

搜索文件,与 find 命令很像,但更快,因为是从数据库里查找, 通常每天会进行数据更新。

# 搜索 README.md 相关文件
$ locate README.md

# 忽略大小写
$ locate -i README.md

ls

显示当前目录下的文件和目录,输出的列表是按字母排序 (某些发行版可能不一样)。

参数 描述
-l 显示目录列表的详细信息
-h 显示文件大小,需要和 -l 参数一起使用
-a 列出所有文件,包括隐藏文件
-F 显示文件类型
-i 查看inode编号, 每个文件都有唯一的编号
-S 以文件大小进行排序
-t 以文件修改时间排序
-r 输出结果倒序排列
# 显示当前目录列表
$ ls

# 列出指定目录下的列表
$ ls ./src

# 显示目录列表的详细信息
$ ls -l

# 显示目录列表详细信息和大小
$ ls -lh

# 列出所有文件包括隐藏文件
$ ls -a

# -F 可以显示类型,用以区分是文件还是目录
# 后缀为 ”/“ 代表是目录,”*“ 为可执行文件,没有则为文件
$ ls -F

# 过滤文件列表, * 代表0个或多个字符, ? 代表一个字符
$ ls javasc*

# -i 查看inode编号, 每一个文件或目录都有一个唯一的编号,这个数字由内核分配给文件系统中的每一个对象
$ ls -i

文件权限说明,当敲入 ls -la 最左侧会出现10个字符:

$ ls -la
-rw-r--r--   1 root root     0 Jan  3 11:01 master-stderr.log

[-][rwx][r-x][r--] 转换为 1 234 567 890

  • 1 代表这个文件名是目录还是文件
    • - 文件
    • d 目录
    • l 链接文件
    • b 则表示为设备文件里面的可供储存的周边设备(可随机存取设备)
    • c 则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设 备)
  • 234 拥有者权限, 分别为 可读、可写、可执行
  • 567 群组使用者权限, 分别为 可读、可写、可执行
  • 890 其他使用者权限, 分别为 可读、可写、可执行

权限的位置是不会改变的,有权限则显示,无权限则 - 显示。

pwd

是Print Working Directory的缩写, 显示当前工作目录

$ pwd

wc

统计文件的行数、字数、字节数, 常见用于统计代码行数

# 统计字节数
$ wc -c README.md

# 统计行数
$ wc -l README.md

# 统计字数
$ wc -w README.md

# 统计字符数
$ wc -m README.md

chattr

用于修改文件属性, 这项指令可改变存放在ext2文件系统上的文件或目录属性。

参数 描述
a 让文件或目录仅供附加用途
b 不更新文件或目录的最后存取时间
c 将文件或目录压缩后存放
d 将文件或目录排除在倾倒操作之外
i 不得任意更动文件或目录
s 保密性删除文件或目录
S 即时更新文件或目录
u 预防意外删除
-R 递归处理,将指令目录下的所有文件及子目录一并处理
-v<版本编号> 设置文件或目录版本
-V 显示指令执行过程
+<属性> 开启文件或目录的该项属性
-<属性> 关闭文件或目录的该项属性
=<属性> 指定文件或目录的该项属性
# 锁定该文件, 防止文件被修改或删除
$ chattr +i README.md

# -i 解锁文件
$ chattr -i README.md

# 可以使用 lsattr 查看赋予的属性
$ lsattr README.md
----i--------e-- README.md

paste

合并N个文件的列,相当于追加文件内容。

# 1.txt 和 2.txt 合并输出
$ paste 1.txt 2.txt

# 1.txt 2.txt 合并后保存为 3.txt
$ paste 1.txt 2.txt > 3.txt

stat

用于显示文件或目录的状态信息

stat logs
# File: ‘logs/’
# Size: 16384           Blocks: 32         IO Block: 4096   directory
# Device: fd01h/64769d    Inode: 669067      Links: 5
# Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
# Access: 2020-07-07 17:24:23.941816812 +0800
# Modify: 2020-07-12 11:46:55.567707577 +0800
# Change: 2020-07-12 11:46:55.567707577 +0800
# Birth: -

grep

强大的文本搜索工具,被称为Linux命令三剑客之老三。

命令用法:grep [option] pattern file...

参数 描述
-i 忽略大小写
-n 打印匹配行号
-c 打印匹配成功的次数
--color 高亮打印匹配文本
-o 只打印匹配到的内容
-v 反向查找
-E 正则查找
-w 匹配单词
-r 从目录下递归搜索
# 从 README.md 文件中搜索 linux 关键字
$ grep "linux" README.md
$ grep "linux" README.md README2.md # 多个文件搜索

# 高亮打印匹配文本
$ grep "linux" README.md --color

# -o 只打印匹配到的内容
$ grep -o "linux" README.md --color

# -n 打印匹配的行号
$ grep -n "linux" README.md

# -c 只打印成功匹配的次数
$ grep -c "linux" README.md

# -r 递归搜索目录文件
$ grep -r "linux" ./src

# 使用 glob 风格表达式搜索
# 等价于 grep -E "[0-9]" README.md
$ egrep "[0-9]"

sed

sed(stream editor) 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。

sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

命令格式:sed options script file...

选项

参数 描述
-e script 在处理输入时,将script中指定的命令添加到已有的命令中
-f file 在处理输入时,将file中指定的命令添加到已有的命令中
-n 不产生命令输入,使用print命令来完成输出
-i 直接编辑文件并保存
-i.bak 备份文件并编辑保存

来个简单的例子:

$ cat test.txt
i like apple
i like apple
i like apple
i like apple

$ sed 's/apple/banana/' test.txt
i like banana
i like banana
i like banana
i like banana

运行上面例子结果就会马上显示出来。

命令解释: sed 's/要替换的内容/替换后的内容/' 文件名, s(substitute)替代

执行多个命令

如果需要执行多个命令时只要指定 -e 选项就可以了:

# 多个命令使用分号分隔
$ sed 's/apple/banana/; s/i/I/' test.txt
I like banana
I like banana
I like banana
I like banana

从文件中读取编辑器命令

当需要执行大量命令时使用 -e 选项就有点鸡助了, 这时候可以将命令存储在一个单独文件中,然后在执行时指定 -f 选项读取。

$ cat cmd.sed
s/apple/banana/
s/i/I/

# 执行
$ sed -f cmd.sed test.txt

直接编辑

在执行 sed 时指定 -i 选项可以直接编辑文件并保存。

$ sed -i 's/apple/banana/' test.txt

如果是在 mac 上运行会报错:

那是因为 mac 强制要求备份

sed: 1: "test.txt": undefined label '.txt'
# 指定备份后缀 .bak 执行后将生成一个 test.txt.bak 文件
$ sed -i '.bak' 's/apple/banana/' test.txt
# 或者指定 -i.bak 选项, 会默认保存备份文件, 不需要指定备份后缀
$ sed -i.bak 's/apple/banana/' test.txt

替换标记

s命令最后有一个可选的 flags s/pattern/replacement/flags, 有4种可用的标记:

  • 数字(大于0),表明新文本将替换第几处模式匹配的地方
  • g, 全局匹配, 表示会替换所有匹配的文本
  • p, 表明原先的内容要先打印出来
  • w file, 将替换的结果写入到文件中

1、数字:

表明只替换每行中第二次出现的匹配模式。

$ cat test.txt
i like apple apple
i like apple apple

$ sed 's/apple/banana/2' test.txt
i like banana apple
i like banana apple

2、g:

在替换时如果不带 g 标记只会替换每行中第一次出现匹配模式。

$ cat test.txt
i like apple apple
i like apple apple

# 没有带 g 标记
$ sed 's/apple/banana/' test.txt
i like banana apple
i like banana apple

# 带 g 标记
$ sed 's/apple/banana/g' test.txt
i like banana banana
i like banana banana

3、p: p 替换标记会打印与替换命令中指定的模式匹配的行,通常会与 -n 选项一起使用才能发挥更好的作用。

-n 选项会禁止 sed 编辑器输出,但p替换标记会输出修改过的行,将两者配合使用的效果就是只输出被替换命令修改过的行。

$ cat test.txt
i like apple apple
i like apple apple

$ sed -n 's/apple/banana/p' test.txt
i like banana apple
i like banana apple

4、w:

将命令替换的结果写入到文件中

$ sed 's/apple/banana/w 1.txt' test.txt

替换反斜杠

当遇到需要匹配反斜杠 / 时就很麻烦了,需要做转义:

# 将 /bin/sh 替换为 /bin/bash
$ sed 's/\/bin\/sh/\/bin\/bash/' test.txt

如果有大量这种反斜杠可读性就变差了, 还好 sed 提供了感叹号作为字符串分隔符:

# 感叹号是一个占位符, 代表的是 / 反斜杠
$ sed 's!/bin/sh!/bin/bash!' test.txt

使用地址

默认情况下 sed 命令会作用于所有行,如果只想作用于某些行,比如第10行到100行,则必须用行寻址(Line Addressing)。

有两种形式的行寻址:

  • 以数字形式表示行区间
  • 以文本模式来过滤出行

1、数字方式的行寻址:

以数字 2 表示只处理第2行

$ sed '2s/apple/banana/' test.txt
i like apple
i like banana
i like apple
i like apple
i like apple

以区间来表示,第2行到3行

$ sed '2,3s/apple/banana/' test.txt
i like apple
i like banana
i like banana
i like apple
i like apple

从某行开始的所有行, 用美元符号 $ 表示末尾行

$ sed '2,$s/apple/banana/' test.txt
i like apple
i like banana
i like banana
i like banana
i like banana

2、以文本模式过滤出行

如果只想作用于 B 开头的行, 则可以使用文本模式过滤, 支持正则表达式。

格式: /pattern/command


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
KDAB/hotspot: The Linux perf GUI for performance analysis.发布时间:2022-08-15
下一篇:
marktext/marktext: 发布时间:2022-08-15
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap