【树】Linux笔记 -1

以下内容是参与【生信技能树-全球听第7期】的课程笔记,记录人:小瑛 ,有问题可在公众号后台留言

小白小白,请注意:笔记中出现的所有文件路径,仅作为参考,请勿模仿!

1. 登录服务器

● Mac电脑登录前的设置

对于 Mac pro 来说,经常出现一种情况是 :登录没问题,但是超过 5 分钟不操作就会出现问题,没法输入,不得不重启终端或者 iTerm 。解决方法是:

【1】在mac,打开终端,不要登录服务器

【2】然后在本地运行下面命令

cat  >~/.ssh/config
Host *
    ServerAliveInterval 120
    TCPKeepAlive no
^C     # Ctrl + C

● 登录服务器

打开邮箱找到曾老师给大家发的邮件,里面有用户名、密码和ip地址,登录方式为:ssh 用户名@ip地址,如:

ssh  vip28@94.191.82.93

回车,然后输入密码

● 修改命令行配色

复制粘贴下面两行代码:

echo  'export PS1="\[\033]2;\h:\u \w\007\033[33;1m\]\u \033[35;1m\t\033[0m \[\033[36;1m\]\w\[\033[0m\]\n\[\e[32;1m\]$ \[\e[0m\]"' >> ~/.bashrc
source  ~/.bashrc

注意:如果管理员没有对你开放修改权限,可能你这次修改之后的内容,下次登录会失效。

● 查看帮助文档

man 命令,help 命令,或者某个命令的 --help 参数

man  ls      # 用 man 命令查看 ls 命令的帮助文档
help  ls     # 用 help 命令查看 ls 命令的帮助文档   
ls  --help   # 用 --help 参数查看 ls 命令的帮助文档

● 文件属性

文件属性:1+3+3+3.png

2. 命令格式

● ls

列出目录文件情况

ls              # 列出当前目录的文件
ls  ./          # 同上,‘.’号代表当前目录
ls  ./*txt      # 列出当前目录下以 txt 结尾的文件
ls  ../         # 列出上层目录的文件
ls  -a          # 列出当前目录下的所有文件,包括隐藏文件
ls  -l          # 列出当前目录下文件的详细信息
ll              # ls  -la 的简写,这个需要管理员自定义
ls  -lh         # 加上 -h 参数,以 K、M、G 的形式显示文件大小
ls  -lh  /      # 列出根目录下文件的详细信息
ls  -S          # 以文件大小排序
ls  -t          # 以时间排序
ls  -R          # 递归目录列出文件
ls  -d          # 显示目录本身,而非目录下文件

● cd

切换工作目录

cd  ..       # 切换到上层目录,相对路径
cd  /        # 切换到根目录
cd  /teach/  # 切换到根目录下的teach,绝对路径
cd  -        # 返回上一次的工作目录
cd  ~        # 回到用户家目录
cd           # 同上,回到用户家目录

● mkdir

创建目录

mkdir dir                 # 创建一个叫dir的文件夹
mkdir dir/sub1            # 想要创建一个含有sub1子文件夹的文件夹dir,会报错
mkdir -p dir/sub1         # 想要递归创建文件夹必须加参数-p
mkdir f{1..3}             # 批量创建 f1 f2 f3 文件夹
mkdir -p  f{1..3}/f{1..3} # 批量递归创建 f1 f2 f3 文件夹分别包含f1 f2 f3
tree                      # 会显示文件夹树状结构图

● tree

查看目录结构

tree -L 1     # 查看当前目录的1层树结构
tree -L 2     # 查看当前目录的2层树结构,在一层的基础上再显示一层子目录

● touch

创建文件(文本文件)要区别于mkdir

touch  file.txt  new.txt  # 创建个别文本文件
touch  file{1..5}         # 批量创建文本文件

● rm

删除文件或文件夹,不可撤销

-f            # force不显示警告讯息,强制删除
-i            # 在删除会先询问用户,交互性删除
-r            # 递归删除文件夹,一层一层删除,系统默认不会删除文件夹,加上此参数即可
rm  file.txt  #文件是可以直接删除的
rm  file*     # 批量删除以file开头的文件,如果有file开头的文件夹可能会报错,因为文件夹不能直接删除

● mv

移动 / 重命名

mv  file1  Data/      # 把file1移动到Data路径下
mv  file1  file2      # 把file1重命名为file2
mv  file1  Data/file2 # 把file1移动到Data路径下并且重命名file2
mv  file*  Data/      # 把file*来头的文件都移动到Data路径下

● cp

拷贝

-r                           # 递归拷贝,由于拷贝文件夹
cp   readme.txt   Data/      # 将readme.txt拷贝到Data/路径下
cp   readme.txt   Data/read  # 将readme.txt拷贝到Data/路径下且重命名为read
cp  -r  dir  Data/           # 将文件夹dir递归拷贝到Data/路径下

● ln

Link链接,分软链接(常用)和硬链接(默认)

       # 不加参数即为硬链接
-s     # 参数即为软链接,软链接的作用类似快捷方式
ln -s /teach/software/Miniconda3-latest-Linux-x86_64.sh  ./
       # 被链接的文件采用绝对路径会比较不容易出错

● tar

解压 & 压缩文件

-c  # 创建一个新的tar归档文件(创建压缩文件)
-X  # 从已有tar归档文件中提取文件(解压缩)
-f  # 输出结果到文件或设备
-V  # 在处理文件时显示文件(显示处理进度)
-j  # 将输出重定向给bzip2命令
-Z  # 将输出重定向给gzip命令

tar  -zxvf  Data.tar.gz   # 解压.gz文件
tar  -jxvf  Data.tar.bz2  # 解压.bz2文件
tar  -zcvf  Data.tar.gz  Data  ...# 压缩多个文件为Data.tar.gz
____________________________________________________________
# 其他压缩和解压命令:只能处理一个文件
zip     unzip      # 用于压缩和解压*zip 文件
gzip    gunzip     # 用于压缩和解压*gz文件
bzip2   bunzip2    # 用于压缩和解压*bz2 文件

● cat

查看文本文件的内容,输出到屏幕,不会修改文件内容

-A   # 列出所有内容,包括特殊字符,如制表符、隐藏文件等
-n   # 打印出所有行号
-b   # 仅打印非空白行行号

cat  readme.txt      # 查看readme.txt文件内容
cat  -n  readme.txt  # 查看readme.txt文件内容并显示行号(包含空白行)
cat >file            # 写入文件 ,如果文件存在就会覆盖原来的内容
Welcome to Biotrainee() !  # 写入的内容
^C                         # 这里是按Crtl+C
# cat 在写入内容时直接按backspace无效,必须 Crtl+ backspace
# 只能删除末尾的,如果前面还有问题,只能重写,覆盖写入

cat >>file                 # 追加写入文件 
Welcome to Biotrainee() !  # 写入的内容
^C                         # 这里是按 Crtl+C

zcat  # 可以查看压缩的文本文件
tac   # 逆向查看,一行不会倒序,多行时倒序显示

● head - tail

查看文件的前/后n行,默认10行

head  Data/example.fq         # 查看example.fq文件的前10行(默认)
head  -n  2  Data/example.fq  # 查看example.fq文件的前2行
tail  Data/example.fq         # 查看Data/example.fq文件的最后 10 行
tail  -n  2  Data/example.fq  # 查看Data/example.fq文件的最后 2行,空白行也算一行也会显示
head  -n  2  Data/example.fq | tail -1 # 只查看第2行
# 行数可以简写:-n 2 = -2

● less - more

逐页查看,按空格翻页,按回车换行,用的比较少,一般用 less 比较多,按 q 退出同样是查看文件内容,当不明确文件大小,cat 可能会导致刷屏,建议使用 less 命令。

less  Data/example.fq       # 默认格式没行号且会自动换行,一般比较凌乱
less -S Data/example.fq     # 单行显示,格式会比较规整
less -N Data/example.fq     # 显示行号
zless -N Data/reads.1.fq.gz # 查看压缩文件

● wc

统计文本

wc readme.txt       # 默认形式是行数、单词数、字符数都统计
6 29 207 readme.txt # 上一步的返回结果

wc -l readme.txt    # 统计文本行数
wc -w readme.txt    # 统计文本字符串(单词)数,不管单词有没有含义
wc -l readme.txt    # 统计文本字节(字符)数

cat readme.txt| wc -l # 合理利用计算资源

● cut

文本切割

-d  # 指定分隔符,默认\t制表符
-f  # 指定输出哪几列(字段fields)

cut -f 1,3-5     # 切割文件的第1列和第345列
cut -d 'h' -f 1  # 以'h'为分隔,取出第1列

● sort

排序

-n  # 按照数值从小到大进行排序,默认是按照1 10 2 20排序
-V  # 字符串中含有数值时,按照数值从小到大排序
-r  # 逆向排序,20 2 10 1排序,不是从大到小
-nr # 实现从大到小排序
-k  # 指定区域,不指定就按一整行排序
-t  # 指定分隔符

sort -k 3 | less -S     # 按文件第3列排序,方便查看结果使用less -S
sort -n -k 4 | less -S  # 遇到数字排序一定要小心,记得加上-n

● uniq

去重复,==只去除相邻两行==,一般先排序,然后再去重复

-c  ## 统计每个字符串连续出现的行数
less -S Data/example.gtf | cut -f 3 | sort | uniq    # 对排序后的结果去重复,保留唯一值
less -S Data/example.gtf | cut -f 3 | sort | uniq -c # 会显示每个值重复的次数

● paste

文本合并,但数量不一致时,不会像R那样循环补齐,没有就空着

-d  # 指定分隔符,默认是制表符
-s  # 按行合并,默认是左右按列合并
less -S Data/example.fq | paste - -      # 将1列变成2列(按行)
less -S Data/example.fq | paste - - -    # 将1列变成3列(按行)
paste file1 file2   # 将 file1 file2 按左右合并 file1 左,file2 右

● tr

字符替换

-d   # 删除指定字符
-s   # 缩减连续重复字符
cat readme.txt | tr 'e' 'E'     # 'e'被替换成'E'
cat readme.txt | tr 'abc' 'ABC' # 'abc'被替换成'ABC',一一对应。
cat readme.txt | tr '\n' '\t'   # '\n'被替换成'\t'
cat readme.txt | tr -d 'e'      # 删除字符'e' 

3. 正则表达式

是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑

符号 含义 符号 含义
^ 行首 \ {n\ } 匹配之前项n次
$ 行尾 \ {n,\ } 匹配之前项至少n次
. 换行符之外的任意单个字符 \ {m,n\ } 之前项至少m, 最多n
? 匹配之前项0次或者一次(?) [ ] 匹配[ ]内任意一个
+ 匹配之前项1次或者多次(\ +) [^ ] 排除^后的字符
* 匹配之前项0次或者多次 | 或者
cat readme.txt  | grep '^T'        # 匹配行首为T的行
cat readme.txt  | grep ')$'        # 匹配用)结尾的行
cat readme.txt  | grep 'f.ee'      # .可以是任意单词
cat readme.txt  | grep 'f\?ee'     # 匹配ee/fee,f出现0/1次
cat readme.txt  | grep 're\+'      # 匹配re/ree/reee...
cat readme.txt  | grep 'f*ee'      # f可以出现任意次
cat readme.txt  | grep 'fe\{2\}l'  # e匹配2次,花括号需要转义
cat readme.txt  | grep [bB]        # 可以匹配大写或者小写b
cat readme.txt  | grep '[bB]'      # 同上,有没有''都一样
cat readme.txt  | grep [^Tt]       # 匹配除了Tt以外的所有

4. 文本处理三驾马车

● grep

文本搜索工具,可匹配正则表达式使用

格式:grep [options] pattern file

​ 参数 关键词 作用文件

-W   # word精确查找某个关键词pattern
-C   # 统计匹配成功的行的数量,不是个数!
-v   # 反向选择,即输出没有没有匹配的行
-n   # 显示匹配成功的行所在的行号
-r   # 从目录中递归式地查找关键词pattern
-e   # 指定多个匹配模式
-f   # 从指定文件中读取要匹配的关键词pattern
-i   # 忽略大小写

grep Biotrainee -r ./      # 在当前目录下递归式查找 Biotrainee 这个关键词
grep 'gene'                # 包含'gene'的所有单词,不仅仅是单词 gene
grep -w 'gene'             # 只查找单词 gene ,不包含gene_xxx
grep -v -w 'gene'          # 除了单词 gene 以外的
grep -w -e 'gene' -e 'UTR' # 查找多个关键词用-e连接
grep -w -f file            # 关键词太多,可以把它们写入一个文件file然后用文件查找
grep -w 'gene' | -w 'UTR'  # 找完'gene'再找'UTR',注意和上面的-e区别 

● sed

流编辑器,一般用来对文本进行 增删改查 !!!

格式:sed [-options] 'script' file(s)

​ 参数 代码 作用文件

代码:[address] [ ! ] command

​ 作用的行 取反 具体命令

1. address的表示方式

            # 不指定具体的行就是对全局操作
2           # 第2行
2,4         # 第2行到第4行
2,+4        # 从第2行到2+4行
2,$         # 第2行到最后一行,$表示最后
2~3         # 从第2行开始,每隔3行取一行,不是2-3行
/pattern/   # 匹配上关键词pattern 的行
[!]         # 表示否定,取反

2. 常用命令(增删改查)

i   # insert,在指定行的前增加一行,内容为i的后面接的字串
a   # append,在指定行的后面增加一行,内容为a后面接的字串
d   # delete, 删除某一行或者某几行,也可以指定删除匹配上的行
c   # change, 改变指定行的内容
s   # 替换,使用格式为's/old/new/ [flags]', 把old替换成new,默认只替换一个,可以指定flags
y   # 转换,实现字符一对一转换,格式'y/inchars/outchars/ '
p   # print,把匹配或修改过的行打印出来,通常与-n参数合用

3. 常用参数

-n   # 禁止显示所有输入内容,只显示经过sed处理的行(常用)
-e   # 直接在命令模式上进行sed的动作编辑,接要执行的一个或者多个命令,和grep的-e参数很像
-f   # 执行含有sed动作的文件
-r   # sed的动作支持的扩展正则(默认基础正则)
-i   # 直接修改读取的文件内容,不输出(慎用!)

cat readme.txt | sed '1i xxxxx '    # 在第一行前面插入xxxxx
cat readme.txt | sed '1a xxxxx '    # 在第一行后面插入xxxxx
cat readme.txt | sed '1,3d'         # 删除1-3行都
cat readme.txt | sed '1c xxxxx '    # 第一行替换为xxxxx
cat readme.txt | sed 's/is/IS/'     # 把每一行的is替换完为IS,每一行的第二个is不会改变
cat readme.txt | sed 's/is/IS/g'    # 把每一行的is替换完为IS,flags为全局
cat readme.txt | sed '/^$/d'        # 删除空白行
cat readme.txt | sed '/ww/ s/ee/EE' # 定位到含有ww的行,把ee替换为EE
cat readme.txt | sed -n '/ee/p'     # 只输出含有ee的行,效果和 grep "ee" 一样
cat readme.txt | sed 'y/abc/ABC/'   # 用ABCf分别替换abc,效果和 tr 'abc' 'ABC' 一样
cat readme.txt | sed 's/^../**/'    # 把每一行的前两个字符替换为*
cat readme.txt | sed '1~2 s/^../*/' # 把奇数行的前两个字符替换为*
cat readme.txt | sed '2~2 s/^../*/' # 把偶数行的前两个字符替换为*
cat xxx.fa | sed '2,$ y/ATCG/TAGC'  # 互补序列的转换
# Shell脚本获得核酸反向互补序列参考下方链接
# https://blog.csdn.net/qq_42491125/article/details/102718191
_____________________________________________________________________________________
## sed 大小写转换
sed 's/[A-Z]/\l&/g'        # 大写转小写
sed 's/\b[a-z]/\u&/g'      # 小写转大写
tr  '[a-zA-Z]' '[A-Za-z]'  # 大小写互相转换

● awk

也称gawk,编程语言,可对文本和==数据==进行处理

用法:awk [options] ' {script} ' file

​ 参数 代码 文件

代码的结构类型:

基础结构:'{script}'
匹配结构:'/pattern/{script}'
扩展结构:'BEGIN{script}  {script}   END{script}'
             热身        逐行执行      最后执行

运行原理:awk在读取一行文本时,会用预定义的字段分隔符划分每个数据字段(行),并分配给一个变量。

$0    # 代表整个文本行
$1    # 代表文本行中的第1个数据字段
......
$NF-1 # 代表文本行中倒数第二个数据字段
$NF   # 代表文本行中的最后一个数据字段

参数及命令:

-F   # 默认的字段分隔符是任意空白字符(如:空格or制表符),也可以用-F参数自定义分隔符
     # 切割行的时候建议使用cut,以为在一列中包含空格或者制表符时awk只能切除某一列的部分
-v   # var=value,定义awk程序中的一个变量及其默认值

## 基础结构
less -S  Data/example.gtf | awk '{print $9}' | less -S           # 切出第9行
less -S  Data/example.gtf | awk '{print $9,$10}' | less -S       # 切出第9、10行
less -S  Data/example.gtf | awk -F '\t' '{print $9}' | less -S   # 以制表符分割切出第9行

## 基础结构--加强版,加入条件判断和循环语句
less -S  Data/example.gtf | awk '{if($3=="gene") print $0}' | less -S 
less -S  Data/example.gtf | awk '{if($3=="gene") {print $0} else{print $3 " is not gene "}}' | less -S
less -S  Data/example.gtf | awk '{for(i=1;i<4;i++){print $i}}' | less -S  # 打印多列

## 匹配结构:将含有gene关键词的行,整行打印
less -S Data/example.gtf | awk '/gene/{print $0}' | less -S

## 扩展结构标准版
less -S Data/example.gtf | awk 'BEGIN{print "find UTR feature"} /UTR/{print $0} END{print "end"}'
## 扩展结构省略END版
less -S Data/example.gtf | awk 'BEGIN{FS="\t"} {print $9}' | less -S
   # {}内的多个代码可以用;分开
less -S Data/example.gtf | awk 'BEGIN{FS="\t";OFS="\t"} {gsub("gene","Gene",$3);print $0}' | less -S     

awk内置变量:

FS    # 定义输入字段分隔符, IField Separator,同-F
RS    # 定义输入记录分隔符,Record Separator
OFS   # 定义输出字段分隔符,0ut Field Separator,默认是 分隔符不是制表符
ORS   # 定义输出记录分隔符,0ut Record Separator
NF    # 数据文件中的字段总数,可以简单理解为列数
NR    # 已处理的输入记录数,可以简单理解为行数
自定义 # 也可以通过-v参数自定义变量或传递外部变量

awk数学运算:

+        # (加)
-        # (减)
*        # (乘)
^        # (幂)
/        # (除)
**       # (平方)
%        # (取余)
int(x)   # x的整数部分,取靠近零一侧的值
         # 如要实现四合五入,可在原数据基础上+0.5,再取整
1og(x)   # x的自然对数

5. 操作技巧

以下是老师在讲解过程中穿插的小技巧,可以让操作更流畅、更高效。

  1. 查看历史命令:↑键、history
  2. 文件名和路径的补齐:Tab键(每天100次)
  3. 选中文件:双击
  4. 选中行:三击
  5. 文件命名:不要有空格、不要涉及保留字、不要有中文
  6. 查看文件结构:tree
  7. 登录服务器的第一个命令:ls(每天100次)
  8. 查看帮助文档:--help
  9. 巧用管道符:|
  10. Linux操作系统中,严格区分大小写
  11. 直接到达行首:Home键 、Ctrl + a
  12. 直接到达行末:End键 、Ctrl + e
  13. 如果一个命令不想运行了就 Ctrl + c 结束掉
  14. 看到奇怪的结果也可以按 Ctrl + c 结束掉
  15. Ctrl + c 不要和 Windows 操作系统里的复制混淆,要复制用鼠标
  16. 操作过程中所有修改在不赋值的情况下,都是不会被保存的,也不会修改原文件
  17. 保存文件可以用 >文件 ,重定向
  18. 对文档操作前,先 less 初步查看文档
  19. 空格和制表符在正常情况下看不出来,cat -A 可以将制表符可视化,制表符是^I
  20. 加参数的时候要么-w -c 分开,要么-wc合并,-w-c会报错
  21. 单行命令太长可以用 \ 连接
  22. 在less不加参数 -S 时,可以用鼠标双击具体的命令,看谁和谁是一起的
  23. 代码最外层一般都是成对的 ' ',里面嵌套成对的 " "
  24. 出现串列,可以使用 column -t | less -S
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352