一. 常用 Linux 命令
1.1 关机重启命令
开机谁都会,接上电源按开机键就行了。关机的操作倒是五花八门。linux 的关机重启命令有以下几个。
Usage: shutdown [OPTIONS...] [TIME] [WALL...]
- -H 挂起
- -h times 过 times 时间后执行 shutdown 命令
- -c 取消关机
- -r 重启
1.2 Linux 快捷键
以下命令在终端中生效,可以增加敲命令的效率
| 快捷键 | 说明 |
|---|---|
| ctrl + a | 光标移动到行首 |
| ctrl + e | 光标移动到行尾 |
| ctrl + b | 光标向左移动一个符号的位置,同左方向键 |
| ctrl + f | 光标向右移动一个符号的位置,同右方向键 |
| ctrl + u | 剪切当前光标所在行的内容 |
| ctrl + k | 剪切当前光标所在行,右边的内容 |
| ctrl + y | 粘贴如上快捷键剪切的内容 |
| ctrl + l | 清屏,同 clear 命令 |
| ctrl + d | 退出当前 shell, |
| ctrl + z | 让当前正在运行的命令,转到后台挂起 |
| esc + f | 把光标移动到单词的结尾 |
| esc + b | 把光标移动到单词的开头 |
| esc + . | 在当前光标处插入,上条命令的最后一个参数。(上条命令没有参数则插入命令) |
1.3 Linux 基础命令补充
一些使用不多,但很有用的命令及参数。
1.3.1 ls
Usage: ls [OPTION]... [FILE]...
- -t 按修改时间排序,newest first!
- -S 按文件大小排序,largest first!
- -r 反转,倒置,排序条件
- -s 在第一列输出文件及文件夹所占的实际空间大小
- -A 不显示 . 和 .. ,当前目录和上级目录
- -x 按行打印,默认按列打印
- -X 按文件类型排序,可以用该选项达到优先
- -1 list one file per line
1.3.2 cp
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
- -a 等同于 ==-dpR==,一般用于备份
- -l 复制文件时,不复制真实文件,而是创建硬链接指向文件,节省空间
- -p 复制时保持源文件的元数据信息
1.3.3 cat
1.3.4 vim
vim 全称 vi improved。
1.3.4.1 编辑模式命令
进入编辑模式命令有很多,最常用的是 i ,在光标当前所在处后面插入。还有一些其他命令可以在其他位置插入。如下表所示
| 命令 | 说明 |
|---|---|
| i | 正常插入 |
| I | 在当前光标所在行的行首插入 |
| a | 正常插入 |
| A | 在当前光标所在行的行尾插入 |
| o | 在当前光标所在行下方,插入一行,把光标定位在该行,进入编辑模式 |
| O | 在当前光标所在行上方,插入一行,把光标定位在该行,进入编辑模式 |
| cw ce | 光标处在单词中时,删除当前光标所在处开始(包括光标处字母),到单词结束的部分,进入编辑模式 |
| cb | 光标处在单词中时,删除当前光标所在处开始(不包括光标处字母),到单词开始的部分,进入编辑模式 |
| ci" | 光标需在引号内,删除当前双引号内的所有内容,只留下双引号在,进入编辑模式 |
| ciw | 光标处在单词中时,删除当前单词,进入编辑模式 |
| cl s | 光标处在单词中时,删除光标所在处的字母,并原地不动地进入编辑模式 |
| cc S | 删除光标所在处的行,进入编辑模式 |
| C | 删除当前光标所在处开始(包括光标处字母),到行尾的部分,进入编辑模式 |
1.3.4.2
1.3.5 日志查看命令
日志文件一般都不小,少则几百兆,多则可达几十G。用 cat 命令查看,狂按 ctrl + c 都停不下来!vi / vim 要把日志加载进内存,800M 大小的日志文件就把当前窗口卡得要死。
1.3.5.1 less
按页显示文件内容
less 快捷键
| 快捷键 | 功能说明 |
|---|---|
| 导航操作 | |
| 空格 / f | 向下翻一页 |
| b | 向上翻一页 |
| d | 向下翻半页 |
| u | 向上翻半页 |
| j / ↓ | 向下移动一行 |
| k / ↑ | 向上移动一行 |
| g | 跳到文件第一行 |
| G | 跳到文件最后一行 |
| 10g | 跳到第10行 |
| 50% | 跳到文件50%位置 |
| 搜索功能 | |
| /pattern | 向前搜索(正则表达式支持) |
| ?pattern | 向后搜索 |
| n | 跳转到下一个匹配项 |
| N | 跳转到上一个匹配项 |
| &pattern | 仅显示匹配行(过滤模式) |
| 文件操作 | |
| :e filename | 打开新文件 |
| :n | 查看下一个文件(多文件打开时) |
| :p | 查看上一个文件 |
| R | 重新加载当前文件 |
| 显示控制 | |
| -N | 切换行号显示 |
| -S | 切换长行截断(不换行) |
| F | 实时跟踪模式(类似 tail -f,按 Ctrl+C 退出) |
| v | 用系统编辑器(如vim)打开当前文件 |
| 其他 | |
| h | 显示帮助文档 |
| q | 退出less |
| = | 显示文件信息(行数/字节数/当前位置) |
| m+字母 | 设置标记(如 ma 标记当前位置为a) |
| '+字母 | 跳转到标记位置(如 'a 跳转到标记a处) |
1.3.5.1 more
more 按页显示文件内容,到达最后一行就退出,相比 less 功能更简单,兼容性更好。
在 arch 打开一个 ==单行== 800M 日志文件不卡顿!
Usage: more [options] <file>...
| 参数 | 说明 |
|---|---|
| -d | 显示提示信息(按空格继续等) |
| -f | 强制显示非文本文件(如二进制) |
| -p | 不清屏,覆盖当前页面显示 |
| -s | 合并多行空行为一行 |
| +n | 从第n行开始显示 |
| +/str | 从匹配字符串的位置开始显示 |
交互命令
| 快捷键 | 功能 |
|---|---|
| 空格 | 向下翻一页 |
| Enter | 向下翻一行 |
| b | 向上翻一页(部分系统不支持) |
| = | 显示当前行号 |
| /pattern | 搜索字符串(不支持正则) |
| :f | 显示文件名和行号 |
| q | 退出 |
| h | 显示帮助 |
1.3.5.3 head
head 顾名思义,头,查看文件头部的命令。
Usage: head [OPTION]... [FILE]...
- -n nums 从头开始显示 nums 行
- -c nums 从头开始打印 nums 个字节,后面可以接单位
- b 512-byte 表示 磁盘块(block),传统大小为 512字节,(源自早期磁盘 sector 大小,现代工具仍保留兼容性)
- k kilobytes (1024 bytes) 千字节
- m megabytes (1024×1024 bytes) 兆字节
- g gigabyte (1024x1024) 吉字节
参数 -n 后面的数字很有讲究,下面演示
1.3.5.4 tail
同 head 命令类似,打印文件尾部。
Usage: tail [OPTION]... [FILE]...
- -n nums 打印尾部 nums 行的信息
- -f 持续查看文件的新增内容
- -c nums 从尾部开始打印 nums 个字节,后面可以接单位。b=512字节,k=1024字节,m=1024个k字节,g=1024个m字节
参数 -n 和 head 类似
1.3.6 wc
统计命令,可以统计字符、行、字节个数
Usage: wc [OPTION]... [FILE]...
wc [OPTION]... --files0-from=F
- -c 统计字节
- -m 统计字符
- -w 统计单词个数
- -l 统计行
- -L 统计文件内,单词最大的字符个数,汉字算俩字符
Linux 三剑客
.1 正则表达式
.2 AWK
awk 是一个强大的文本分析工具,文档
.2.1 awk 工作流程
awk最开始会执行BEGIN里的代码,然后读取一行input stream,从第一条命令开始,依次对这行进行文本过滤,直到命令都执行完毕。再读取下一行input stream重复上面的工作。所有命令都对输入文本执行完毕后,再执行END代码块。
.2.2 使用 awk
awk 有两种执行方式,命令式,文件式
-
命令式
-
文件式
.2.3 内置变量
.2.4 AWK 内置变量说明
| 变量名 | 描述 |
|---|---|
| ARGC | 命令行提供的参数个数(包含 awk 本身) |
| ARGV | 存放命令行参数的数组,索引范围 0 到 ARGC-1 |
| ARGIND | 当前正在处理的文件在 ARGV 中的索引(从 1 开始) |
| CONVFMT | 数值转换为字符串的格式,默认 %.6g |
| ENVIRON | 环境变量的关联数组(如 ENVIRON["USER"]) |
| FILENAME | 当前输入文件的名称 |
| FS | 输入字段分隔符(默认空格/制表符) |
| FIELDWIDTHS | 按固定宽度分割字段(覆盖 FS) |
| NF | 当前行的字段数量(列数) |
| NR | 当前处理的总行号(跨文件累计) |
| FNR | 当前文件的行号(每个文件重置为 0) |
| OFMT | 数值输出格式,默认 %.6g |
| OFS | 输出字段分隔符(默认空格) |
| ORS | 输出行分隔符(默认换行符 \n) |
| RLENGTH | match() 函数匹配的字符串长度 |
| RS | 输入行分隔符(默认换行符 \n) |
| RSTART | match() 函数匹配的字符串起始位置 |
| SUBSEP | 数组下标分隔符(默认 \034) |
| BINMODE | 非 POSIX 系统下指定二进制 I/O 模式(1/2/3 或 "rw"/"wr") |
| ERRNO | getline 重定向或 close 调用失败时的错误信息 |
| IGNORECASE | 设置为非零时,模式匹配忽略大小写 |
| LINT | 动态控制 lint 警告(设置后输出警告,"fatal" 时转为致命错误) |
| PROCINFO | 进程信息的关联数组(如 UID、PID 等) |
| TEXTDOMAIN | 程序的文本域(用于国际化字符串翻译) |
.2.5 实战示例
2.6 运算符
awk拥有着和高级编程语言一样的运算符,“加减乘除模、逻辑运算和三元运算符”。awk基本运算语法和高级语言语法一样,值得注意的是,awk的赋值运算符不是如 a=a*b这般,而是 a*=b!
字符串拼接:把要拼接的词用空格分开即可,不需要用+号连接。
匹配运算符为 “~”:用于搜索包含匹配模式字符串的域,例:“$0 ~ 9” 输出包括9的行。
指数运算有两个:
- * :a* 2 相当于a[^2]次方
- ^ :a^2 相当于a[^2]次方
.3 sed
.4 grep
使用 Linux 时遇到的一些问题
1. sudo + 命令提示 command not found
1.1 问题描述
ubuntu 24.10 系统,在执行命令 sudo mysql 时提示 Command not found
1.2 解决办法
- 在执行 sudo 命令前,添加
sudo -i。 sudo vim /etc/sudoers,找到这行 Defaults secure_path="/usr/sbin:/usr/bin:/sbin:/bin",在里面添加 mysql 的路径就行
1.3 原因
sudo 默认不会继承当前用户的 PATH,而是使用一个非常受限的「安全 PATH」,通常只包含:/usr/sbin:/usr/bin:/sbin:/bin