man - 获得帮助
man ls #可以通过man查看使用帮助
ls --help # 通过-h,--help 查看使用帮助
ls - 显示目录内容
ls #显示目录内容
ls -F #查看目录中的文件
ls -l #以列表的形式显示目录内容,通常在~/.bashrc文件中增加一行:alias ll='ls -l'
ll -h #以更可读的方式显示文件大小
ll -t #以文件的修改时间顺序, 最新修改文件在最前面
ll -tr #以文件的修改时间顺序, 最新修改的在最后面
ls -a #显示隐藏文件
ls *[0-9]* #显示包含数字的文件名和目录名
tree #显示文件和目录由根目录开始的树形结构(1)
lstree #显示文件和目录由根目录开始的树形结构(2
watch -n 3 -dc ls -l #追踪目录内容的变化, 每3秒刷新一次
pwd - 显示当前目录
pwd #显示当前目录的绝对路径
cd - 切换目录**
cd dir # 切换到目录dir
cd #切换到用户的home目录
cd ~ #同cd
cd .. #切换到上一级目录, 一个点表示当前目录, 两个点.. 表示上一级目录
cd ../.. #返回上两级目录
cd - # 切换到进入当前目录之前所在的目录
mkdir - 创建目录
mkdir dir # 创建dir目录
mkdir dir1 dir2 #同时创建两个目录
mkdir -p dir1/dir2 # 递归创建目录, 如dir1不存在, 会先创建dir1
cat -合并文件(按行)
cat file # 合并一个或多个文件至标准输出, 当只有一个文件时, 相当于显示所有文件内容
cat file1 file2 #合并file1和file2的内容, 并在屏幕上输出
cat rq1.gz rq2.gz #可以合并gzip压缩文件, 如测序数据原始reads的合并
paste - 合并文件(按列)
paste -d ' ' file1 file2 # 按列对列的方式一行一行合并文件。默认列中间加TAB键, -d参数可以改变列之间的分隔符
split - 分割文件
split -d -l 10000 file chunk_ # 按行数分割文件,每个文件最多10000行,分割成的文件名为chunk_01, chunk_02。。。
split -d -b 100m file chunk_ # 按大小分割文件,每个文件最多100m,分割成的文件名为chunk_01, chunk_02。。。
cut - 剪切文件
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 - 显示文件内容
less file # 分屏显示文件内容,按空格键显示下一页,按下/后可以搜索内容
# 浏览模式快捷键
↑ #上一行
↓ #下一行
G #最后一页
g #第一页
空格 #下一页
/关键词 #搜索关键词
# 退出浏览模式,回到Linux命令行模式
q #退出
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 - 统计文件内容
wc -l file # 统计文件行数
touch - 创建文件
touch file # 创建一个空文件
touch {file1,file2,file3} # 同时创建3个文件
cp, mv, rm- 文件/目录的复制,移动,删除
scp file1 file2 # 将file1复制一份,命名为file2,复制目录要加-r参数:scp -r
cp file1 file2 #复制一个文件
cp dir/* . #复制一个目录下的所有文件到当前工作目录
cp -a /tmp/dir1 . #复制一个目录到当前工作目录,相当于将原数据原封不动的拷贝过来,不改变里面的任何信息
cp -a dir1 dir2 #复制一个目录 相当于将原数据原封不动的拷贝过来,不改变里面的任何信息
cp -r dirold dirnew #拷贝文件夹 拷贝的结果是生成新的时间戳等信息
mv file1 dir1/ # 将file1移动到dir1/目录下
mv file1 file2 # 重命名:即将file1移动成为file2
rm -f file1 #删除一个叫做 'file1' 的文件'
rmdir dir1 #删除一个叫做 'dir1' 的目录'
rm -rf dir1 #删除一个叫做 'dir1' 的目录并同时删除其内容
rm -rf dir1 dir2 #同时删除两个目录及它们的内容
rm file # 删除文件,删除目录要加-r参数:rm -r
rm -f file # 文件若不存在,删除时会报错,加-f参数就不会报错
rm -rf file
tar - 文件打包/压缩
# 平时tar基本上就能完成打包、压缩、解压的任务了
bunzip2 file1.bz2 #解压一个叫做 'file1.bz2'的文件
bzip2 file1 #压缩一个叫做 'file1' 的文件
gunzip file1.gz #解压一个叫做 'file1.gz'的文件
gzip file1 #压缩一个叫做 'file1'的文件
gzip -9 file1 #最大程度压缩
rar a file1.rar test_file #创建一个叫做 'file1.rar' 的包
rar a file1.rar file1 file2 dir1 #同时压缩 'file1', 'file2' 以及目录 'dir1'
rar x file1.rar #解压rar包
unrar x file1.rar #解压rar包
tar -cvf archive.tar file1 #创建一个非压缩的 tarball
tar -cvf archive.tar file1 file2 dir1 #创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件
tar -tf archive.tar #显示一个包中的内容
tar -xvf archive.tar #释放一个包
tar -xvf archive.tar -C /tmp #将压缩包释放到 /tmp目录下
tar -cvfj archive.tar.bz2 dir1 #创建一个bzip2格式的压缩包
tar -jxvf archive.tar.bz2 #解压一个bzip2格式的压缩包
tar -cvfz archive.tar.gz dir1 #创建一个gzip格式的压缩包
tar czvf file.tar.gz files # 打包并压缩
tar -zxvf archive.tar.gz #解压一个gzip格式的压缩包
tar xvf file.tar.gz # 解包,解压缩
#压缩语法:tar -zcvf 压缩后文件名 被压缩文件
#解压缩语法 tar -zxvf 压缩文件名 -C 解压后文件所在目录
#参数1:
#参数 描述
# -z 操作tar.gz文件需要使用
#-x 解压缩
#-c 压缩
#-v 显示压缩或者解压缩的执行过程信息
#-f 要处理的文件file,必须放在最后
#参数2:-C 指定解压后的文件存放的位置
zip file1.zip file1 #创建一个zip格式的压缩包
zip -r file1.zip file1 file2 dir1 #将几个文件和目录同时压缩成一个zip格式的压缩包
unzip file1.zip #解压一个zip格式压缩包
文件的权限 改变文件/目录权限
使用 "+" 设置权限,使用 "-" 用于取消
ls -lh #显示权限
ls /tmp | pr -T5 -W$COLUMNS #将终端划分成5栏显示
chmod ugo+rwx directory1 #设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限
chmod go-rwx directory1 #删除群组(g)与其他人(o)对目录的读写执行权限
chown user1 file1 #改变一个文件的所有人属性
chown -R user1 directory1 #改变一个目录的所有人属性并同时改变改目录下所有文件的属性
chgrp group1 file1 #改变文件的群组
chown user1:group1 file1 #改变一个文件的所有人和群组属性
find / -perm -u+s #罗列一个系统中所有使用了SUID控制的文件
chmod u+s /bin/file1 #设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限
chmod u-s /bin/file1 #禁用一个二进制文件的 SUID位
chmod g+s /home/public #设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的
chmod g-s /home/public #禁用一个目录的 SGID 位
chmod o+t /home/public #设置一个文件的 STIKY 位 - 只允许合法所有人删除文件
chmod o-t /home/public #禁用一个目录的 STIKY 位
chmod +x file # 增加[本人]可执行权限
chmod -x file # 取消[本人]可执行权限
chmod a+x file # 增加[所有人]可执行权限
chmod a-x file # 取消[所有人]可执行权限
sort, uniq - 排序,去重
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 - 下载文件
wget https://repo.anaconda.com/archive/Anaconda3-2020.07-Linux-x86_64.sh # 下载文件到当前目录,文件名保持不变
top, htop, ps, kill - 任务管理
top -c # 查看CPU,内存的使用情况
# 实时查看系统进程
top
# 快捷键
↑ 下翻
↓ 上翻
q 退出
htop # top的完美替代品,Linux系统不自带,需要安装, ubuntu系统:apt install htop
ps aut # 查看后台任务运行情况,第2列是任务的PID号
kill -9 PID # 删除编号为PID的任务
killall -9 bwa # 删除所有名称为 bwa 的任务
killall -u username # 删除用户 username 的所有任务
find, locate, which - 文件查找
find / -name file1 #从 '/' 开始进入根文件系统搜索文件和目录
find dir/ -name file # 在dir/目录下查找名为file的文件
find dir/ -name '*file*' # 在dir/目录下查找包含file关键词的文件,-name参数支持正则表达式
find dir/ -name file -delete # 查找文件并删除
find / -user user1 #搜索属于用户 'user1' 的文件和目录
find /home/user1 -name \*.bin #在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件
find /usr/bin -type f -atime +100 #搜索在过去100天内未被使用过的执行文件
find /usr/bin -type f -mtime -10 #搜索在10天内被创建或者修改过的文件
find / -name \*.rpm -exec chmod 755 '{}' \; #搜索以 '.rpm' 结尾的文件并定义其权限
find / -xdev -name \*.rpm #搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
whereis halt #显示一个二进制文件、源码或man的位置
which halt #显示一个二进制文件或可执行文件的完整路径
which command # 显示命令的绝对路径
locate \*.ps #寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令
locate file # 查找文件
ssh - 远程登录
ssh username@host # ssh 远程连接至服务器
scp - 远程文件传输
scp username@host:/path/to/file . # 将远程服务器上的文件传输到当前目录,文件名保持不变,复制目录加参数-r
scp file username@host:/path/to/dir/ # 将本地文件复制到远程服务器,文件名保持不变,复制目录加参数-r
rsync - 远程文件拷贝
rsync与scp不同,它只是做增量更新且支持断点续传,也就是要复制的文件存在于目标文件夹且内容与当前要复制的相同,则不会复制。
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 - 查看磁盘/内存使用情况
df -h # 查看磁盘使用情况,-h表示以人类可读的方式显示容量大小
du -sh # 查看当前目录使用了多少磁盘空间
du -sh * # 查看当前目录下各文件或文件夹使用的磁盘空间
free -h # 查看内存使用情况
grep
用于查找文件里符合条件的字符串。
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 # 删除空白行
文本处理
cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT
cat file1 | command( sed, grep, awk, grep, etc...) > result.txt #合并一个文件的详细说明文本,并将简介写入一个新文件中
cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt #合并一个文件的详细说明文本,并将简介写入一个已有的文件中
grep Aug /var/log/messages #在文件 '/var/log/messages'中查找关键词"Aug"
grep ^Aug /var/log/messages #在文件 '/var/log/messages'中查找以"Aug"开始的词汇
grep [0-9] /var/log/messages #选择 '/var/log/messages' 文件中所有包含数字的行
grep Aug -R /var/log/* #在目录 '/var/log' 及随后的目录中搜索字符串"Aug"
sed 's/stringa1/stringa2/g' example.txt #将example.txt文件中的 "string1" 替换成 "string2"
sed '/^$/d' example.txt #从example.txt文件中删除所有空白行
sed '/ *#/d; /^$/d' example.txt #从example.txt文件中删除所有注释和空白行
echo 'esempio' | tr '[:lower:]' '[:upper:]' #合并上下单元格内容
sed -e '1d' result.txt #从文件example.txt 中排除第一行
sed -n '/stringa1/p' #查看只包含词汇 "string1"的行
sed -e 's/ *$//' example.txt #删除每一行最后的空白字符
sed -e 's/stringa1//g' example.txt #从文档中只删除词汇 "string1" 并保留剩余全部
sed -n '1,5p;5q' example.txt #查看从第一行到第5行内容
sed -n '5p;5q' example.txt #查看第5行
sed -e 's/00*/0/g' example.txt #用单个零替换多个零
cat -n file1 #标示文件的行数
cat example.txt | awk 'NR%2==1' #删除example.txt文件中的所有偶数行
echo a b c | awk '{print $1}' #查看一行第一栏
echo a b c | awk '{print $1,$3}' #查看一行的第一和第三栏
paste file1 file2 #合并两个文件或两栏的内容
paste -d '+' file1 file2 #合并两个文件或两栏的内容,中间用"+"区分
sort file1 file2 #排序两个文件的内容
sort file1 file2 | uniq #取出两个文件的并集(重复的行只保留一份)
sort file1 file2 | uniq -u #删除交集,留下其他的行
sort file1 file2 | uniq -d #取出两个文件的交集(只留下同时存在于两个文件中的文件)
comm -1 file1 file2 #比较两个文件的内容只删除 'file1' 所包含的内容
comm -2 file1 file2 #比较两个文件的内容只删除 'file2' 所包含的内容
comm -3 file1 file2 #比较两个文件的内容只删除两个文件共有的部分
sed
sed是stream editor的缩写,中文称之为“流编辑器”。
sed command file
- command部分,针对每行要进行的处理
- file,要处理的文件
Actions
- d:删除该行
- p:打印该行
- i:在行的前面插入新行
- a:在行的后面插入新行
- r:读取指定文件的内容。
- w:写入指定文件。
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 -n '1~4s/^@/>/p;2~4p' file.fq > file.fa # Fastq文件转Fasta文件
sed -n '2~4p' file.fq # 提取Fastq文件的序列
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中
用户和群组
groupadd group_name #创建一个新用户组
groupdel group_name #删除一个用户组
groupmod -n new_group_name old_group_name #重命名一个用户组
useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 #创建一个属于 "admin" 用户组的用户
useradd user1 #创建一个新用户
userdel -r user1 #删除一个用户 ( '-r' 排除主目录)
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 #修改用户属性
passwd #修改口令
passwd user1 #修改一个用户的口令 (只允许root执行)
chage -E 2005-12-31 user1 #设置用户口令的失效期限
pwck #检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户
grpck #检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组
newgrp group_name #登陆进一个新的群组以改变新创建文件的预设群组
JPS
jps存放在JAVA_HOME/bin/jps,使用时为了方便请将JAVA_HOME/bin/加入到Path.
$> jps
23991 Jps
23789 TimorMain
23651 Demo
比较常用的参数:
#-q 只显示pid,不显示class名称,jar文件名和传递给main 方法的参数
$> jps -q
28680
23789
23651
#-m 输出传递给main 方法的参数,在嵌入式jvm上可能是null
$> jps -m
28715 Jps -m
23789 TimorMain
23651 Demo -socketwait 32768 -stdout /data/aoxj/resin/log/stdout.log -stderr /data/aoxj/timor/log/stderr.log
#-l 输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
$> jps -l
28729 sun.tools.jps.Jps
23789 com.timor.TimorMain
23651 com.timor.cn.Demo
#-v 输出传递给JVM的参数
$> jps -v
23789 TimorMain
28802 Jps -Denv.class.path=/data/timor/cn/twsecurity/java/trustwork140.jar:/data/timor/cn/twsecurity/java/:/data/timor/cn/twsecurity/java/twcmcc.jar:/data/timor/jdk15/lib/rt.jar:/data/timor/jd
k15/lib/tools.jar -Dapplication.home=/data/timor/jdk15 -Xms8m
23651 Resin -Xss1m -Dresin.home=/data/timor/resin -Dserver.root=/data/timor/resin -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -
Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl
jps 192.168.1.200
#列出远程服务器192.168.1.200机器所有的jvm实例,采用rmi协议,默认连接端口为1099(前提是远程服务器提供jstatd服务)
#注:jps命令有个地方很不好,似乎只能显示当前用户的java进程,要显示其他用户的还是只能用unix/linux的ps命令。