# 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+pctrl+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中多个命令顺序执行

//例如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

修改于: 8/11/2022, 3:17:56 PM