Linux命令速查手册

Linux 命令速查手册

man - 获得帮助

1
2
man ls	      # 许多Linux自带命令可以通过man查看使用帮助
ls --help # 有些程序可以通过-h, --help查看使用帮助

ls - 显示目录内容

1
2
3
4
5
6
ls     					# 显示目录内容
ls -l # 以列表显示形式显示目录内容,通常在~/.bashrc文件中增加一行:alias ll='ls -l' # 以后就可以直接使用别名ll了,更方便
ll -h # 以人类可读的方式显示文件大小
ll -t # 以文件的修改时间排序,最新修改的在最前面
ll -tr # 以文件的修改时间排序,最新修改的在最后面
watch -n 3 -dc ls -l # 追踪目录内容的变化,每3秒刷新一次

pwd - 显示当前目录

1
2
pwd                 # 显示当前目录的绝对路径
ls `pwd`/file # 显示文件的绝对路径

cd - 切换目录

1
2
3
4
5
cd dir    # 切换到目录dir
cd # 切换到用户的HOME目录
cd ~ # 同cd,~表示HOME目录
cd .. # 切换到上一级目录;一个点.表示当前目录,两个点..表示上一级目录
cd - # 切换到进入当前目录之前所在的目录

mkdir - 创建目录

1
2
mkdir dir           # 创建dir目录
mkdir -p dir1/dir2 # 递归创建目录,如dir1不存在,会先创建dir1

cat - 合并文件(按行)

1
2
3
cat file          	      # 合并一个或多个文件至标准输出,当只有一个文件时,相当于显示所有文件内容
cat file1 file2 # 合并file1和file2的内容,并在屏幕上输出
cat R1.fq.gz R2.fq.gz # 可以合并gzip压缩文件,如测序数据原始reads的合并

paste - 合并文件(按列)

1
paste -d ' ' file1 file2	# 按列对列的方式一行一行合并文件。默认列中间加TAB键,-d参数可以改变列之间的分隔符

split - 分割文件

1
2
split -d -l 10000 file chunk_	# 按行数分割文件,每个文件最多10000行,分割成的文件名为chunk_01, chunk_02。。。
split -d -b 100m file chunk_ # 按大小分割文件,每个文件最多100m,分割成的文件名为chunk_01, chunk_02。。。

cut - 剪切文件

1
2
3
4
cut -f 1 file					# 剪切文件的第1列
cut -f 1,2 # 剪切文件的第1,2列
cut -f 3- # 剪切第3列及之后的所有列
cut -d ' ' -f 1 file # 剪切第1列,但以空格作为列与列之间的分隔符。默认以TAB作为分隔符grep '^>' test.fa | cut -c 2- # 得到fasta文件中的序列名称(去掉了>符号)

less, head, tail - 显示文件内容

1
2
3
4
5
6
7
8
less file              # 分屏显示文件内容,按空格键显示下一页,按下/后可以搜索内容
less -SN file # 显示文件的行号,并且截断太长的行
head file # 默认显示文件前10行
head -n 20 file # 显示文件前20行
tail file # 默认显示文件后10行
tail -n 20 file # 显示文件后20行
tail -n +2 file # 跳过第1行,显示从第2行开始的所有行,可用于跳过文件的标题行
tail -f file # 当文件的内容还在增加时,实时显示末尾增加的内容,常用于查看日志文件的更新情况

wc - 统计文件内容

1
wc -l file		# 统计文件行数

touch - 创建文件

1
touch file			# 创建一个空文件touch {file1,file2,file3}	# 同时创建3个文件

cp, mv, rm- 文件/目录的复制,移动,删除

1
2
3
4
5
scp file1 file2		        # 将file1复制一份,命名为file2,复制目录要加-r参数:
scp -rmv file1 dir1/ # 将file1移动到dir1/目录下
mv file1 file2 # 重命名:即将file1移动成为file2
rm file # 删除文件,删除目录要加-r参数:
rm -rm -f file # 文件若不存在,删除时会报错,加-f参数就不会报错

tar - 文件打包/压缩

1
2
3
4
5
# 平时tar基本上就能完成打包、压缩、解压的任务了
tar czvf file.tar.gz files # 打包并压缩
tar xvf file.tar.gz # 解包,解压缩
gzip file # 压缩
gunzip file.gz # 解压

chmod - 改变文件/目录权限

1
2
3
4
chmod +x file	# 增加[本人]可执行权限
chmod -x file # 取消[本人]可执行权限
chmod a+x file # 增加[所有人]可执行权限
chmod a-x file # 取消[所有人]可执行权限

chown - 改变文件/目录归属

1
2
chown User:UserGroup file		# 将file的拥有者设为User,群体的使用者UserGroup
chown -R User:UserGroup dir # 将dir的拥有者设为User,群体的使用者UserGroup

sort, uniq - 排序,去重

1
2
3
4
5
6
7
8
9
sort file			    # 默认按字典序对文件进行排序
sort -k2,2 -k3,3 file # 先按第2列排序,第2列相同,再按第3列排序
sort -k2,2n file # 按第2列排序,且第2列是数字,升序
sort -k2,2nr file # 按第2列排序,且第2列是数字,降序
sort -u file # 先排序文件,然后去除相邻的重复行,只保留一条记录
sort file | uniq # 去除相信的重复行,只保留一条记录,相当于:sort -u file# 利用sort, uniq取两个文件的交、并、补集
sort a b | uniq # 并集
sort a b | uniq -d > c # 交集
sort a c | uniq -u # 补集

wget - 下载文件

1
wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-aarch64.sh	# 下载文件到当前目录,文件名保持不变

ssh - 远程登录

1
2
ssh username@host					 # ssh 远程连接至服务器
ssh username@host -p PORTS # ssh 远程连接至服务器并指定登录端口(默认22)

scp - 远程文件传输

1
2
scp username@host:/path/to/file .	     # 将远程服务器上的文件传输到当前目录,文件名保持不变,复制目录加参数-r
scp file username@host:/path/to/dir/ # 将本地文件复制到远程服务器,文件名保持不变,复制目录加参数-r

rsync - 远程文件拷贝

rsync 与 scp 不同,它只是做增量更新且支持断点续传,也就是要复制的文件存在于目标文件夹且内容与当前要复制的相同,则不会复制。

1
2
3
rsync -azvP dir1 dir2			          # 将dir1的内容同步至dir2
rsync -azvP --delete dir1 dir2 # 同步dir2与dir1,dir1中删除的文件,dir2中也要跟着删除
rsync -azvP --exclude 'file' dir1 dir2 # 同步dir2与dir2,且将file排除在外

df, du, free - 查看磁盘/内存使用情况

1
2
3
4
df -h		# 查看磁盘使用情况,-h表示以人类可读的方式显示容量大小
du -sh # 查看当前目录使用了多少磁盘空间
du -sh * # 查看当前目录下各文件或文件夹使用的磁盘空间
free -h # 查看内存使用情况

top, htop, ps, kill - 任务管理

1
2
3
4
top -c		    # 查看CPU,内存的使用情况
htop # top的完美替代品
ps aut # 查看后台任务运行情况,第2列是任务的PID号
kill -9 PID # 删除编号为PID的任务

nohup,disown - 远程任务管理

1
nohup /root/runoob.sh &

在终端如果看到以下输出说明运行成功:

1
appending output to nohup.out

这时我们打开 root 目录 可以看到生成了 nohup.out 文件。

如果要停止运行,你需要使用以下命令查找到 nohup 运行脚本到 PID,然后使用 kill 命令来删除:

1
ps -aux | grep "runoob.sh" 
1
nohup COMMAND > error.log &    #只输出错误信息
  • 如果运行任务时没有加 nohup 命令,但任务运行时间长,但又必须断开,若不想让任务因为断开远程连接而中断,可以用 disown 命令补救

    1
    2
    3
    4
    5
    6
    ./run.sh	            # 假如任务是直接这样开始跑的
    ctrl + z # 任务放到后台
    jobs # 输入jobs命令,回车,可以看到任务是暂停的:[1]+ Stopped(SIGTSTP) bash run.sh
    bg # 让后台暂停的任务开始运行
    jobs # 再次运行jobs,可以看到任务已经跑起来了:[1]+ Running bash run.sh &
    disown -r # 从当前shell中移除运行中的作业

| - 管道

管道,将前一个命令的输出作为后一个命令的输入

command1 | command2

>, >> - 输入输出重定向

Linux 中常用重定向操作符有:

  1. 标准输入 /dev/stdin:代码为0, 使用<<<

  2. 标准输出 /dev/stdout:代码为1,使用>(覆盖)>>(追加)

  3. 标准错误输出 /dev/stderr:代码为 2,使用2>2>>

  4. &> 标准输出和错误输出同时重定向

  5. /dev/null 代表垃圾箱,不想要保存的东西都可以重定向到这里

  • 输出重定向就是将命令的结果重定向到文件,而不是输出到屏幕,通常用于保存命令的结果

    1
    2
    3
    4
    ./run.sh > run.sh.o	    # 标准输出到run.sh.o日志文件
    ./run.sh 2> run.sh.e # 标准错误输出到run.sh.e错误日志文件
    ./run.sh &> run.sh.log # 标准输出和标准错误都输出到定一个文件
    ./run.sh &> /dev/null # 丢弃标准输出和标准错误信息
  • 输入重定向是将文件作为输入的来源,而不是键盘

    1
    2
    3
    command < file		       # 将file的内容作为command的输入
    command << END # 从标准输入(键盘)中读取数据,直到遇到分界符END时停止(分界符用户可以自定义)
    command <file1 > file2 # 将file1作为command的输入,并将处理结果输出到file2
  • 综合运用

    1
    2
    3
    4
    5
    6
    #!/bin/bash

    while read line
    do
    do something
    done < file.txt > result.txt

    逐行读入 file.txt 的内容,处理之后,将结果保存到 result.txt 文件中。

find, locate, which - 文件查找

1
2
3
4
5
find -name file				    # 在当前目录查找名为file的文件
find dir/ -name file # 在dir/目录下查找名为file的文件
find dir/ -name '*file*' # 在dir/目录下查找包含file关键词的文件,-name参数支持正则表达式find dir/ -name file -delete # 查找文件并删除
locate file # 查找文件
which command # 显示命令的绝对路径

xargs - 命令组合工具

1
2
3
4
5
6
cat file | xargs	    # 将file的内容显示成一行
cat file | xargs -n3 # 将file的内容每3列一行进行输出
find /home/data -name '*.gz' | xargs -n1 -I{} cp {} /archives/data/ # 查找gz文件并复制到/archives/data目录下
find /ifs/result -name '*.gz' | xargs tar czvf all.gz # 查找.gz文件并打包在一起
find . -type f -name '*.log' -print0 | xargs -0 rm -f # 当rm文件过多时,可以这样删除
find . -type f -name '*.py' -print0 | xargs -0 wc -l # 统计一个目录中所有python文件的行数

parallel - 并行工具

parallel 是增强版的 xargs。假如一个脚本文件中有 4 条命令:

假设有这样一个.sh

1
2
3
4
5
# cat run.sh
echo a
echo b
echo c
echo d

1
2
# 同时执行4个任务
cat run.sh | parallel -j 4
1
2
find *.fq | parallel -j 12 "fastqc {} --outdir ."    	# 同时执行12个Fastqc任务
find *.bam | parallel --dry-run 'samtools index {}' # 同时执行samtools index任务,--dry-run显示任务命令但不实际执行,用于命令检查

useradd - 添加用户

1
useradd -m username	    # 创建用户并为其在/home下创建一个以其名称命名的目录

groupadd - 添加用户组

1
groupadd UserGroup

usermod - 修改用户

1
2
3
4
5
6
usermod -c "Hello World !"  <username>    # 向用户添加信息
usermod -d /var/www <username> # 更多用户主目录
usermod -L <username> # 锁定用户
usermod -U <username> # 解锁用户
usermod -aG <usergroup> <username> # 将用户附加到组(不从原来的组中删除)
usermod -G <usergroup><username> # 将用户添加到组(从原来的组中移除)

passwd - 更改密码

1
2
passwd	    	   # 更改当前用户的密码
passwd username # 更改指定用户的密码

grep

用于查找文件里符合条件的字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

grep pattern files # 搜索文件中包含pattern的行
grep -v pattern files # 搜索文件中不包含pattern的行
grep -f pattern.txt files # 搜索的pattern来自于文件中
grep -i pattern files # 不区分大小写。默认搜索是区分大小写的
grep -i pattern files # 只匹配整个单词,而不是字符串的一部分(如搜索hello,不会匹配到helloworld)
grep -n pattern files # 显示行号信息
grep -c pattern files # 显示匹配的行数
grep -l pattern files # 只显示匹配的文件名
grep -L pattern files # 显示不匹配的文件名
grep -C number pattern files # 额外显示匹配行的上下[number]行
grep pattern1 | grep pattern2 files # 显示既匹配pattern1,又匹配pattern2的行
grep -E "pattern1|pattern2" files # 显示匹配pattern1或者pattern2的行, grep -E相当于egrep# 用于搜索的特殊字符^: 表示行前$: 表示行尾
grep '^#' result.vcf # 显示VCF文件的表头信息
grep '^hello$' files # 显示只包含hello的行
grep -v '^\s*$' file # 删除空白行

sed

sed 是 stream editor 的缩写,中文称之为“流编辑器”。

1
sed command file
  • command 部分,针对每行要进行的处理

  • file,要处理的文件

Actions

  • d:删除该行

  • p:打印该行

  • i:在行的前面插入新行

  • a:在行的后面插入新行

  • r:读取指定文件的内容。

  • w:写入指定文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    sed -n '10p' file	                    # 显示第10行
    sed -n '10,20p' file # 显示第10到20之间的行
    sed -n '/pattern/p' file # 显示含有pattern的行
    sed -n '/pattern1/,/pattern2/p' file # 显示patter1与pattern2之间的行
    sed '10d' file # 删除第10行
    sed '10,20d' file # 删除第10到20之间的行
    sed '/pattern/d' # 删除匹配pattern的行
    sed '/^\s*$/d' file # 删除空白行
    sed 's/^\s*//' file # 删除行前的空白:空格,制表符
    sed 's/\s*$//' file # 删除行尾的空白:空格,制表符
    sed 's/^\s*//;s/\s*$//' file # 删除行首和行尾的空白:空格,制表符
    sed 's/AA/BB/' file # 将文件中的AA替换成BB,只替换一行中第一次出现的AA,替换后的结果输出到屏幕
    sed 's/AA/BB/g' file # 将文件中的所有AA都替换成BB,替换后的结果输出到屏幕
    sed -i 's/AA/BB/g' file # 将文件中的所有AA都替换成BB,直接更改文件的内容
    sed '/CC/s/AA/BB/g' file # 只替换那些含有CC的行
    sed 's/pattern/&XXXX/' file # 在pattern之后加上XXXX。&表示之前被匹配的内容
    sed 's/pattern.*/&XXXX' file # 在匹配pattern的行尾加上XXXX。pattern.*表示包含pattern的整行内容
    sed 'y/ABC/XYZ/' file # 将ABC逐字替换成XYZ
    sed '1i\hello' file # 在第1行前面插入一行,内容为hello,通常用来为文件增加标题
    sed '1a\hello' file # 在第1行后面插入一行,内容为hello
    sed '1r file2' file1 # 在第1行后面读入file2的内容
    sed '/pattern/w file2' file1 # 将匹配的行写入file2中

Linux命令速查手册
https://blog.potential.icu/2024/01/16/Linux命令速查手册/
Author
Xt-Zhu
Posted on
January 16, 2024
Licensed under