# Linux
# 常用命令和快捷键
# 设定命令别名
有一些指令需要经常使用,可以将命令简写以便快速使用
# 设置指令别名
$ alias new_cmd='old_cmd'
# 查看别名指代的原始指令
$ alias new_cmd
# 删除别名
$ unalias new_cmd
# 列出所有别名
$ alias
以上命令直接使用只是在单次会话中生效,要使其永久生效需要加入到.bashrc文件中
# 将别名配置加入到/etc/bashrc中,使其永久生效
$ echo "alias l='ls -l'" >> /etc/bashrc
# 使配置生效(raspberry pi不知道为什么仍然不生效)
$ source /etc/bashrc
# 同上面配置类似,但只使在当前用户生效
$ echo "alias l='ls -l'" >> ~/.bashrc
# 使配置生效
$ source ~/.bashrc
# ls命令
列出目录下文件或文件夹
# “ll”是“ls -l”的别名
# “-S”按文件大小排序,最大的排在前;“-h”是human可行性,大小会以1k 1M 1G等效果显示。
$ ls -lSh
# “-r”倒序显示
$ ls -lrSh
# “-t”按修改时间排序,最新的排在前
$ ls -t
# pwd -P
查看软链接的真实路径
# 终端文本移动操作快捷键
- 平常一般按
上下来切换历史命令,但手会离开键盘导致降低效率,可转换为使用ctrl+p和ctrl+n
# 关机、重启
shutdown [选项] [时间] [提示信息]
# 10秒后关机
shutdown -h +10
# 当天22:10关机
shutdown -h 22:10
# 现在关机
shutdown -h now
# 取消之前设定的关机
shutdown -c
# 重启
reboot
# kill命令
向进程发送信号
| 代号 | 名称 | 意义 |
|---|---|---|
| 1 | SIGHUP | 启动被终止的程序,可让该进程重新读取自己的配置文件,类似重新启动。 |
| 2 | SIGINT | 相当于用键盘输入 [ctrl]-c 来中断一个程序的进行。 |
| 9 | SIGKILL | 代表强制中断一个程序的进行,如果该程序进行到一半,那么尚未完成的部分可能会有“半产品”产生,类似 vim会有 .filename.swp 保留下来。 |
| 15 | SIGTERM | 以正常的方式来终止该程序。由于是正常的终止,所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时,输入这个 signal 也是没有用的。 |
| 19 | SIGSTOP | 相当于用键盘输入 [ctrl]-z 来暂停一个程序的进行。 |
# iconv
用来转换文件的编码方式,它可以将UTF8编码的转换成GB18030的编码,反过来也行。
语法:iconv -f encoding [-t encoding] [inputfile]...
选项:
-f encoding :把字符从encoding编码开始转换。
-t encoding :把字符转换到encoding编码。
-l :列出已知的编码字符集合
-o file :指定输出文件
-c :忽略输出的非法字符
-s :禁止警告信息,但不是错误信息
--verbose :显示进度信息
-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。
示例:
将文件file1转码,转后文件输出到fil2中:iconv file1 -f EUC-JP-MS -t UTF-8 -o file2
# sed
Linux生产环境上,最常用的一套“Sed“技巧 (opens new window)
# awk
Linux生产环境上,最常用的一套“AWK“技巧 (opens new window)
# 常用操作
# 添加PATH
以openresty为例: 只能在当前会话临时生效
PATH=/usr/local/openresty/sbin:$PATH
export PATH
永久有效
vim /etc/profile
# 添加`export PATH=$PATH:/usr/local/openresty/bin`到文件末尾
source /etc/profile
# iostat命令
用于监控系统设备的IO负载情况。
# 安装
# 使用which来查看是否安装
$ which iostat
# 安装
$ sudo apt-get install sysstat
# 常用命令
$ iostat -d -k 1 10 #查看TPS和吞吐量信息
$ iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)
$ iostat -c 1 10 #查看cpu状态
# Options
iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]
-d 表示显示设备(磁盘)使用状态
-x 表示显示和io相关的扩展数据,可以获取更详细的数据
-k 表示某些使用block为单位的列强制使用Kilobytes为单位
-c 参数,查看cpu信息
# 每隔两秒刷新一次,一共刷新3次。
$ iostat -d -k 2 3
# 输出结果
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.01 0.01 0.00 9466 0
loop1 0.00 0.00 0.00 1078 0
loop2 0.00 0.00 0.00 1072 0
loop3 0.01 0.01 0.00 10742 0
loop4 0.00 0.00 0.00 4 0
mmcblk0 0.88 0.68 10.34 764178 11678225
# 列含义
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)
"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量:这些单位都为Kilobytes,即KB
# 指定监控设备,使用-x获取扩展参数
$ iostat -d mmcblk0 -x -k 2
# 输出结果
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
mmcblk0 0.03 0.86 0.68 10.34 0.02 0.76 37.18 47.00 2.72 19.90 0.01 25.32 12.06 4.46 0.39
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
mmcblk0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
mmcblk0 0.00 8.50 0.00 54.00 0.00 4.50 0.00 34.62 0.00 7.35 0.03 0.00 6.35 1.76 1.50
# 列含义
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
r/s: The number of read requests that were issued to the device per second 每秒发出的读取请求的数量
w/s: The number of write requests that were issued to the device per second 没面发出的写入请求的数量
rkB/s: The number of kilobytes read from the device per second 以千字节每秒从设备读取数
wkB/s: The number of kilobytes written to the device per second. 以千字节每秒从设备写入取数
avgrq-sz 平均请求扇区的大小
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。
%util: 这个值越小越好,在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
rsec/s:每秒读取的扇区数;
wsec/: 每秒写入的扇区数。
# 参考地址
- linux 系统下iostat、iotop、vmstat安装以及用法介绍 (opens new window)
- Linux IO实时监控iostat命令详解-该博客介绍了很多Linux常用工具 (opens new window)
# linux中多个命令顺序执行
//例如git的使用
> git add . && git commit -m 'xxx'
linux多命令的顺序执行 (opens new window)
# #!/bin/bash和#!/bin/sh的区别
脚本中只有第一行可以使用shebang(#!)来定义解释该脚本所使用的解释器。如果脚本作为bash命令行的参数运行,就不用使用shebang了,因此通常shebang是用实现脚本独立运行。
两者分别指定了当前脚本中所使用的解释器。通常/bin/sh是bash的软链。可以通过ls -l /bin/sh查看。
当使用sh xxx运行脚本时,则会使用sh解释器执行脚本。(大家平时容易忽略他们的区别)
# linux环境变量
系统级:
- /etc/profile
- /etc/bashrc(Ubuntu和Debian中是/etc/bash.bashrc)
- /etc/environment
用户级:
- ~/.profile(推荐首选)
- ~/.bashrc
- ~/.bash_profile 或 ~./bash_login
- ~/.bash_logout
[参考地址
# 用户和用户组
查看所有用户组信息
cat /etc/group
用户拥有多个用户,临时切换用户组
newgrp root
将用户加入到某个组中,而不离开原有组
sudo usermod -a -G [group] [user]
修改用户的主要用户组
usermod -g [group] [user]
将用户从某个组中删除(但group不能是主要用户组)
gpasswd -d [user] [group]
查看用户信息(uid、gid、归属的用户组)
id
Summary →