Linux Commands Summary

 

Linux 在线手册

Online man pages

linux命令在线中文手册

删除变量中所有的空格,换行符,制表符等

echo $a
 1
2   3
4

使用 tr 命令

echo $a | tr -d '[:space:]' # output 1234%

使用 bash parameter expansion

Parameter Expansion Description
${parameter/pattern/string} only the first match is replaced.
${parameter//pattern/string} all matches of pattern are replaced with string.
${parameter/#pattern/string} match at the beginning of the expanded value of parameter.
${parameter/%pattern/string} match at the end of the expanded value of parameter.

If string is null, matches of pattern are deleted and the / following pattern may be omitted.

echo ${a//[[:space:]]/} # output 1234

# '/' may be omitted if string is null 
echo ${a//[[:space:]]} # output 1234

cut

去掉一串数字的最后3个字符, -c, --characters 表示按字符选择,-4 表示选择从第一个字符到倒数第四个字符,也就是不包含最后三个字符。这个命令可以用于去掉 timestamp 中的最后3个表示纳秒的字符。

# 输出 "1234"
echo 1234567 | cut -c -4

less

-p 选项,使用 search pattern 打开文件

less -pPattern file

-s 选项,打开文件时删除重复的空行

less -s file

-N 选项,显示行号

less -N file

+F (forward) 选项是 less 中的实时监控模式。+F 选项使 less 显示实时添加到文件中的最新消息或行。+ 标志表示将选项视为在 less 中使用。如果文件已经在 less 中打开,请按 F 键进入前进模式。

F, Scroll forward, and keep trying to read when the end of file is reached. Normally this command would be used when already at the end of the file. It is a way to monitor the tail of a file which is growing while it is being viewed. (The behavior is similar to the “tail -f” command.) To stop waiting for more data, enter the interrupt character (usually ^C). On some systems you can also use ^X.

less +F /var/log/syslog

sudo dmesg | less +F

在 less 中还可以像 vim 一样标记位置,使用 m 键标记位置,使用 ' 键恢复位置。同时,在 less 中还可以使用 v 键打开系统默认的编辑器。

dig

使用 @ 符号来指定要查询的 DNS 服务器,如果不指定 DNS 服务器,dig 会依次使用 /etc/resolv.conf 中的地址作为 DNS 服务器

dig www.youtube.com @1.1.1.1

paste

paste 命令会将多个输入文件的对应行合并成一行,就像函数式编程中的 zip 函数一样,例如:

num.txt

1
2
3

char.txt

a
b
c
paste num.txt char.txt

输出

1   a
2   b
3   c

参数

  • -s: 将从输入中读取到的所有行合并为一行,如果指定多个输入,则每个输入各自一行
  • -d: 指定合并时使用的分隔符
paste -s nub.txt char.txt

输出

1 2 3
a b c

例子

用法1:将当前目录下的文件名按三列展示

ls | paste - - -

用法2:将单个文件的多行合并为一行

paste -s myfile

用法3:生成类似 PATH 环境变量的目录列表

find / -name bin -type d | paste -s -d: -

用法4:给输入中的每一行加上行号

sed = char.txt | paste - -

这相当于使用命令 nl char.txt

Bash for loop

#!/bin/bash
for i in 1 2 3 4 5
do
   echo "Welcome $i times"
done
for output in $(Linux Command)
do
    command1 on $output
    command2 on $output
    commandN
done

sort 排序

对带数字后辍的输出排序

GNU coreutils 7.5 在2009年8月发布以后,sort 提供了 -h 参数,可以对类似 du -h 等命令产生的带有数字后辍的输出进行排序

How can I sort du -h output by size

du -sh * | sort -h

对数字排序

sort -n

对多列文本中的某列排序

对类似于 abc:10:def 的文本,可以通过 -t 参数设定分隔符,使用 -k 参数来选择分隔后的列

cat /etc/passwd | sort -n -t':' -k3

uniq 去重和查重

uniq 工具会检查文本中相邻行是否重复,不使用任何参数的话,会将相邻的重复行删除,只保留第一行。 因为 uniq 工具只能检查相邻行是否重复,因此在使用 uniq 命令前需要使用 sort 命令对文本排序,也可以直接使用 sort -u 命令对文本去重。

去重

sort abc.txt | uniq

sort -u abc.txt

查重

# 打印所有行,在每行前显示重复个数
sort abc.txt | uniq -c

# 只显示有重复的行和重复个数
sort abc.txt | uniq -cd

Start an application detached

参考 How to cleanly launch a GUI app via the Terminal?

如果是 bash 或 zsh,可以在使用 &!,比如在命令行打开 gvim

gvim &!

sudo and su

切换到 postgres 用户。

sudo -iu postgres

su - postgres

使用 postgres 用户执行命令

sudo -u postgres psql db

su - postgres -c 'psql db'

使用 Type 命令查看系统命令

-t 选项,打印所给命令的类型

  • alias (command is shell alias)
  • keyword (command is shell reserved word)
  • function (command is shell function)
  • builtin (command is shell builtin)
  • file (command is disk file)
$ type -t cd
builtin

-p 选项,打印所给命令的文件路径,只对外部命令有效

$ type -p date
/bin/date

-a 选项,打印所给命令的所有信息,包含命令类型,文件路径等

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

使用 STAT 查看文件或文件系统状态

查看文件系统状态

stat -f /home

查看文件状态

find /var/log/ -name '*.log' -type f | xargs stat --printf='%s\t%n\n'

网络相关命令

# 通过主机域名查看别名或IP
nslookup www.example.com

# 通过IP查询主机域名
nslookup 10.2.154.201

# 查看本机FQDN主机名
hostname -f

# 查看本机ip
hostname -i

文件比较(diff)

参考阮一峰的读懂diff

unified 格式
-u-U NUM--unified[=NUM]

# 默认显示3行上下文
diff -u f1 f2

# 显示2行上下文
diff -U 2 f1 f2
--- f1 2012-08-29 16:45:41.000000000 +0800
+++ f2 2012-08-29 16:45:51.000000000 +0800
@@ -1,7 +1,7 @@
 a
 a
 a
-a
+b
 a
 a
 a

第一部分,是文件的基本信息。

--- f1 2012-08-29 16:45:41.000000000 +0800
+++ f2 2012-08-29 16:45:51.000000000 +0800

---表示变动前的文件,+++表示变动后的文件。

第二部分,变动的位置用两个@作为起首和结束。

@@ -1,7 +1,7 @@

前面的-1,7分成三个部分:减号-表示第一个文件(f1),1表示第1行,7表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。同样的,+1,7表示变动后,成为第二个文件从第1行开始的连续7行。

第三部分,是变动的具体内容。

 a
 a
 a
-a
+b
 a
 a
 a

除了有变动的那些行以外,也是上下文各显示3行。它将两个文件的上下文,合并显示在一起,所以叫做”合并格式”。每一行最前面的标志位,

  • 空表示无变动
  • 减号-表示第一个文件删除的行
  • 加号+表示第二个文件新增的行。

Linux下判断文件的编码

  1. 使用enca命令可以直接查看文件的字符编码
  2. 使用file命令也可以查看文件的字符编码,file -i会输出MIME-type格式的信息

Linux下文件批量重命名

使用rename命令

$ rename -n -s markdown md *.markdown

'New-Linux-Setup.markdown' would be renamed to 'New-Linux-Setup.md'
'Vim-Tips.markdown' would be renamed to 'Vim-Tips.md'

其中,-n 表示 –just-print/–dry-run-s 表示 –subst from to

使用ls -1sed命令

ls -1 | sed "s/被替换字符\(保留字符\)/mv & 新字符\1/" | sh -v

使用 dd 生成文件

在当前目录下会生成一个100M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源)

dd if=/dev/zero of=test bs=1M count=100

Linux 下查看 cpu 个数及使用率

$ lscpu

$ top
按数字1显示所有cpu信息

$ htop