linux基本操作

linux简介

linux 是一套操作系统

  • Linux系统内核为linux
  • 内核是一个电脑程序组成操作系统的核心,链接系统硬件和应用程序。
  • Linux系统是自由和开源的。

连接linux集群

  • 将多个计算机(节点)连接在一起组成集群,我们可以登录到其中某个节点,通过这个节点向其它节点投 递任务。
  • Windows 使用putty等支持ssh连接的工具(rna_192.168.48.100_22)
  • mac 终端 ssh rna@192.168.48.100
  • password rna@2016

linux系统目录结构

(了解)

  • / 根目录,有且只有一个根目录
  • /etc: 系统配置文件存放目录
  • /bin:/usr/bin: 可执行文件(命令)存放目录
  • /sbin:供超级用户使用的可执行文件
  • /home:存储普通用户的个人文件
  • /lib:/usr/lib:/usr/local/lib:系统使用的函数库的目录
  • /opt:给主机额外安装软件的目录
  • /usr:应用程序存放目录。
    /usr/bin 存放可执行文件。/usr/share 存放共享数据。/usr/lib存放程序运行所必需的一些函数库文件。/usr/local 软件默认安装目录。/usr/share/doc 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录
  • /var:系统服务。
    系统日志文件/var/log,/var/log/message 所有的登录文件存放目录,/var/spool/mail 邮件存放的目录,/var/run 程序或服务启动,/var/www web服务器目录

操作命令

命令一般有两部分组成:命令名称+命令参数,之间用空格隔开

目录操作命令

  1. pwd (print working directory)
    查看当前目录完整路径,分为绝对路径和相对路径,即从根目录(/)or当前目录(./)

pwd /WORK/TRAIN/RNA

  1. cd (change directory) 切换目录

cd . 当前目录

cd .. 上级目录

cd - 返回上次访问的目录

cd ~ 进入home目录

  1. mkdir (make directory) 建立目录

mkdir -p test/test1 建立多级目录

mkdir Directory 建立目录

  1. ls (list)显示指定工作目录下的内容

ls -a 显示所有子目录和文件,包括隐藏文件

ls -l 以长格式显示文件详细信息

ls -h 表示大小一栏转为便于人类识别的形式,加上单位。 默认情况下单位为字节。

ls -lh

ls -i 同时展示inode号

文件操作命令

  1. vi 是一个文本编辑器,若文件存在则打开编辑,否则创建新的文件

vi filename 进入命令模式,i切换为编辑模式,esc退出返回命令模式

命令模式下:
:w 保存
:q! 强制退出
:wq 保存后退出
/pattern 向后查找
?pattern 向前查找
:%s///g 或:%s###g 全局替换

  1. touch 创建空文件
    修改以后文件的日期([yyyyMMDDhhmm])

touch filename 新建文件

touch -t 201808080808.08 filename 修改文件修改时间和访问时间

touch -m filename 改变修改时间为当前时间

touch -a filename
改变访问时间为当前时间

touch -r file1 file2 将file2时间改成file1时间一样

  1. cp (copy) 对文件或者目录进行拷贝

cp -r 递归复制目录及目录中的文件

cp -r /Work Test

echo dirname* | xargs -n 1 cp -v filename

  1. ln -s (link -solf) 建立软连接。制作软连接的时候,最好使用绝对路径。硬链接除了文件名以外,其它的信息都是相同的,软连接则是一个新的文件。
ln -s souce.txt destination.txt
ln -s `pwd`/test1.txt test4.txt
  1. mv (move file)

对文件或者目录重命名 mv oldfile newfile

移动文件(夹)位置 mv file destination

  1. rm (remove files)删除文件和目录

rm -r 递归删除目录及文件
rm -f 强制删除

rm -rf test.txt

  1. stat 命令查看文件的附加属性,包括文件名,inode号等

stat test.txt

文件内容操作命令

  1. cat

一次性显示整个文件,查看文件内容 cat filename
合并文件 cat file1 file2 > file3

  1. less 查看一个文件的内容

显示行数 less -N file.fasta
行超过屏幕部分舍去 less -S unigene.fasta
查看文件 less file.txt

  1. head/tail 查看文件前几行/后几行

head -5 unigene.fa
tail -10 unigene.fa

  1. wc (wordcount)

wc -c print the byte counts 字节数
wc -w print the character counts 字数
wc -l print the newline counts 行数

  1. sort 排序

sort -kx,y 对第x列到y列进行排序

sort -n 按大小排列,作为数字

sort -r 按相反顺序排列

sort -k 1.2 对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序

sort -k 1.2,1.2 只对第一个域的第二个字符排序

sort -k 2,3 对第三列到第四列排序

sort -t $'\t' 指定以tab键分割

sort -t : test 以冒号分割

  • 使用sort按1,2,4,3列排序,其中1,2,4是数字,同时使用tab作为分隔符,第4列逆序排列
sort -t $'\t' -k 1n,1 -k 2n,2 -k 4rn,4 -k3,3 file
  1. uniq 去重复

sort -u filename 等价于 sort filename | uniq

uniq -c 统计重复的数量

uniq -u 显示没有重复的行

uniq -d 显示重复的行

  1. grep 命令(global regular expression printer)

逐行对文件进行指定模式的搜索。

grep -c 查看行数

grep -i 忽略字母大小写

grep -v 输出不匹配的行

grep ^C test.txt 列出C开头的行

grep T$ test.txt 列出T结尾的行

ls -l | grep ^d ==列出所有文件夹==

  1. cut 显示行中指定部分

cut -f 显示指定字段内容

cut -d 指定默认的分隔符,默认是tab键

  1. split 分割文件

split -b 10k filename 按10kb分割文件
split -d filename 分割后文件数字为后缀
split -a 3 filename 分割后后缀长度
split -l 3 filename 按行分割

  1. >重定向

> 表示将标准输出重定向到指定文件,并将原文件覆盖
>> 表示将标准输出重定向并追加到指定文件,原文件不覆盖
| 表示重定向输出到下一个命令的标准输入

  1. 文件通配符

?和*

ls file? ? 表示任意 1 个字符

ls file* 表示任意个任意字符,包括 0 个

  1. 管道 |

很多linux的命令输出直接达到屏幕上,也就是输出到stdout,这些输出可以直接作为一些命令的输入,也 就是stdin。这时候中间用 | 链接,也就是管道。

ls -l | less
  1. 文件的权限

chmod =x test.txt #将user group other的权限都设成x即只可执行,---x--x--x

chmod u=w test.txt #user只读 --w---x--x

chmod u+r test.txt #user的权限增加r

chmod o-x test.txt #other的权限减少x

chmod 124 test.txt # ---x-w-r--

chmod 731 test.txt # -rwx-wx--x

chmod -R 775 test1 #递归文件夹中文件以及文件夹递归实现权限变更

数序为二进制的十进制值

x=2^0

w=2^1 

r=2^2
  1. 帮助信息

ls --help

man ls

集群操作命令

  1. who 系统登录情况

who | wc -l 查看用户数量

whoami 查看自己登录用户名

  1. 任务投递

qsub -cwd -l vf=* -q all.q *.sh

  1. 查看已投递的任务状态

qstat –j job-id
查看某个具体任务的详细状态信息

vjob 查看任务状态,包括JOBID CPU Mnow Mmax node VF Hours CMD

  1. 节点状态查看

qhost 查看所有节点状态信息

qhost –j 查看所有节点状态信息,包含节点下面的任务列表

  1. 可用队列、节点查看

qselect –U username

压缩和解压缩

  1. gzip 压缩

gzip file

  1. gunzip 解压缩

gunzip file.gz

  1. tar 打包压缩与解压缩

-v 压缩过程显示文件

-c 创建新压缩文件的指令

-z 用gzip压缩

-f 使用文档名,后直接接文件

-x 解压缩

tar -zvcf test.tar.gz file1.txt file2.txt 压缩

tar -zvxf test.tar.gz 解压缩

shell脚本与流程控制

  1. shell优势:

简单性 效率高 开发容易

直接在命令行上测试;一旦找到适当语法,将其放入独立脚本中,设置可执行权限后,可以直接使 用该脚本。

  1. 规范格式

第一行: #!/bin/sh

基本元素:命令 参数

  • 空白隔开命令行中各部分
  • 命令名称为第一个项目
  • 选项开头是一个减号,后面接字母
  1. 变量
  • 本地变量

a=rna

$a vs a # rna vs a $a为本地变量

  • echo 输出与printf 输出

a=please b=enter c=your d=name

g="$a $b $c $d"

echo $g # 本地变量 please enter your name

echo '$g' #纯文本 $9

printf $g #只输出please,第一个

echo -n 不换行输出

echo -e echo -e 处理特殊字符

eg1:

echo -e '1\ta\n2\tb\n3\tc\n4\td\n5\te\n6\tf\n7\tg\n8\th\n9\ti\n10\tj\n11\tk\n12\tl' > test1.tsv

eg2:

DATE=`date` #date的结果赋值给DATE
echo $DATE
  • 定义不可变的变量
readonly Whome=sth

readonly 定义后整个脚本不再能更改

  • 位置变量

$0 脚本本身

$1 第一个参数

  • 特殊变量

$# 传递到脚本的参数个数,eg 3

$* 以一个单字符串显示所有脚本传递的参数,默认tab键分割 返回"$1 $2 $3"

$@ 与$#类似,但每个变量是独立的。返回 “$1”,"$2","$3"

$? 显示命令最后退出状态,0表示没有错,其他值表示有错

  • 双引号

可以进行变量替换

a = helo

echo "$a world" # 输出hello world

  • 单引号

不进行任何变量替换

  • 反引号

执行系统命令赋给变量 等效于$()

a=ls *
echo $a

  • 反斜线 转义元字符

4.1 布尔值

0表示false,1或者非零值表示true

4.2 条件测试

  • test [condition]

test -e 判断是否存在
test -f 判断是否存在且为file
test -d 判断是否存在且为directory
test -r 判断是否存在且可读
test -w 判断是否存在且可写
test -x 判断是否存在且可执行

条件 与或非 -a -o !

test -r txt.sh -o -w txt.sh -a -x txt.sh |echo $?

  • 测试字符串

相等 ==
不等 !=
空串 -z
非空串 -n

  • 测试数字

-eq 等于
-ne 不等于
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数

test 5 -ne 10 && echo Yes || echo No

test -f /etc/resolv.conf && echo "File /etc/resolv.conf found." || echo "File /etc/resolv.conf not found."

5.流程控制

  • if then else
if condition; then ...
elif condition; then ...
else
... fi

eg1:

#!/bin/sh
if [ ! -e "study" ]; then
    mkdir study
fi

eg2:

#!/bin/sh
echo -n "Enter your login name: "
read NAME
if [ -z $NAME ] || [ "$NAME" = "" ]; then
    echo "You did not enter a name"
elif [ "$NAME" = "root" ]; then
    echo "Hello root"
elif [ "$NAME" = "rna" ]; then
    echo "Hello rna"
else
    echo "You are not root or rna but Hi $NAME"
fi

eg3:

#!/bin/bash
read -p "Enter a password" pass
if test "$pass" == "novo2017"
then
    echo "Password verified."
else
    echo "Access denied."
fi

eg4:

#!/bin/bash
read -p "Enter a number : " n
if [ $n -gt 0 ]; then
  echo "$n is a positive."
elif [ $n -lt 0 ]; then
  echo "$n is a negative."
elif [ $n -eq 0 ];then
  echo "$n is zero number."
else
  echo "Oops! $n is not a number."
fi
  • case
case value in pattern1)
    ...
    ;;
pattern2)
    ...
    ;;
*)
    ...
    ;; 
    esac

eg1

#!/bin/sh
echo -n "Do you wish to proceed [y..n]: "
read ANS
case $ANS in
y|Y|yes|Yes)
    echo "yes is selected"
    ;; 
n|N)
    echo "no is selected"
    ;;
*)
    echo " $0: Unknown response"
    ;;
esac
  • for
for var in list
do
    ...
done

eg1:

#!/bin/sh
for file in `ls $PWD`
do
    echo $file
done
  • while
while command
do
    ... 
done

eg1:

#!/bin/sh
file=$1
while read Line
do
    echo $Line
done < $file

eg2:

#!/bin/sh
count=0
while [ $count -lt 5 ] 
do
    count=`expr $count + 1`
echo $count
done

正则匹配

literal (逐字匹配) 匹配字符串的值

re1|re2 匹配表达式re1或re2

. 匹配任何字符(换行符除外)

^ 匹配字符串的开始

$ 匹配字符串的结尾

* 匹配前面出现的正则表达式零次或多次

+ 匹配前面出现的正则表达式一次或多次

? 匹配前面出现的正则表达式零次或一次

{N} 匹配前面出现的正则表达式N次

{M,N} 匹配重复出现M次到N次的正则表达式

.*? 非贪婪匹配

sed 命令

(stream editor), 用来对输入文件或者数据流进行编辑,逐行进行编辑,通常用来做替换。

sed -e 多次匹配

sed -i 对输入文件本身进行修改

sed -n 列出sed处理行,不加-n则列出所有行,重复处理行

==sed -f 加脚本文件使用脚本文件中的命令==

sed '1,5 s/\t/:/g' test.xls > result.xls
#一到五行全局替换

sed -i '1d' test.xls
#删除第一行

sed 's/T/U/g' input.txt 
#这是一个将DNA序列转成RNA列的例子

sed -e 's/T/U/g' -e 's/A/a/g' input.txt #当想使用多个命令的时候,使用-e,每个-e后边跟一个命令,可以有很多

echo -e "s/T/U/g\ns/A/a/g" > edit.sed
sed -f edit.sed input.txt
#通过-f加脚本文件使用脚本文件中的命令

sed -n '/^A/=' input.txt 
#返回以A开头的行。^表示开头,而 = 表示行号

sed 'y/ACGT/acgt/' input.txt
# y/.../.../ 字符转换,字符依次对应

sed '/^A/y/ACGT/acgt/' input.txt
sed '/^A/!y/ACGT/acgt/' input.txt
sed '2,4y/ACGT/acgt/' input.txt
sed '2,4!y/ACGT/acgt/' input.txt
#只对以A开头的行进行转换,/^A/ #不对以A开头的行进行转换,/^A/!
#只对2-4行进行转换
#不对2-4行进行转换

sed -i '1iAddThisBeforeThe1stLine' input.txt
#在第一行前加入一行
sed -i '$iAddThisBeforeTheLastLine' input.txt
#在最后一行前加入一行

awk 命令

awk 会对文件的每一行进行识别

  • awk -F {s} '{pattern + action}' {filenames}

{s} 分隔符

pattern :查找的内容,一般为正则表达式,用斜杠括起来。

action :在找到匹配内容时所执行的一系列命令。

==awk -f address.awk address.tx

执行address.awk脚本==

  1. 内置变量
变量名 含义
FS 输入文件fields之间的分隔,-F指定内容
OFS awk输出是fileds之间的分隔符
RS 输入时记录(RECORD)之间的分隔符,默认\n
ORS 输出时RS
NR numbers of records
FNR 每个文件的records
filename 现处理的文件名
  1. 操作符
Operator Description
> is greater than
>= is greater than or equal to
< is less than
<= is less than or equal to
== is equal to
!= is not equal to
&& Both the conditional expressions are ture
| either one of the conditional expressions is ture
+ addition
- subtraction
* multipliction
/ division
% modulo division

eg1:

who |awk -F ' ' 'BEGIN{print "name\ttime"} {print $1"\t"$3} END{print "haha"}'

eg2:查看每一行的列数

awk -F '\t' '{print NR ":" NF}' sed_sample.xls

eg3:查找特定行

awk '/ENSRNOT00000058031/' sed_sample.xls

eg4:提取特定的列,比如所有正在登录的用户名

awk -F: '/home/ {print $6}' /etc/passwd | awk -F / '{print $3}'

eg5:根据某一列的条件进行筛选

awk -F "\t" '{if ($9<=0.05)print $0}' RNT_vs_RNC.isoform.xls>diff.xls
awk 'NR>100 && NR<200' RNT_vs_RNC.isoform.xls

eg6:查看 gtf 文件中第三列不是 exon 的行

awk '$3 !~ /exon/' Niben101_annotation.gene_models.exon.gtf | les

ex1:
操作文件: /WORK/TRAIN/RNA/rna/HAOJING/part2/RNT_vs_RNC.isoform.xls 请完成以下操作:
1.查看该差异列表共展示多少转录本定量结果; 2.其中lncRNA明显标示的共有多少个(id为:LNC_****);
3.查看 RNT_vs_RNC.isoform.xls 文件中qvalue<=0.05的lncRNA,输出:
1)差异lnc的个数;
2)lncRNA来源基因列表;
3)lncRNA来源基因的个数(去重);
4)调参pvalue<=0.05后的结果; 5)筛除其中fpkm均为0的转录本(筛除所有样品表达量均小于0.5的转录本);

更多命令汇总

  1. tree
tree -C #颜色显示
tree -f #显示文件全路径
tree -L #显示路径层级
tree -P #只显示文件目录
tree -F #显示目录后面的\;显示可执行文件*;功能类似ls -F
tree -N 直接列出文件和目录名称,包括控制字符。
tree -p 列出权限标示
  1. read

-n(不换行) -p(提示语句) -n(字符个数) -t(等待时间) -s(不回显)

-a :将内容读入到数值中
-n :用于限定最多可以有多少字符可以作为有效读入
-p :用于给出提示符
-r :在参数输入中,'/'表示没有输入完, /n 这类特殊字符生效
-t :用于表示等待输入的时间,单位为秒,等待时间超过,将继续执行后面的脚本
-s :不在terminal上打印
-d :表示delimiter,即定界符,一般情况下是以IFS为参数的间隔,但是通过-d,我们可以定义一直读到出现执行的字符位置。

eg1: 输入不在终端显示

read -p "Input passwd:" -s Passwd
echo $Passwd

eg2: 限时输入,否则退出

read -p "Input a number:" -t 5 Number

eg3: 读取限定字符

read -p "Input a word:" -n 5 Word

eg4:等待输出q退出

read -dq -p "Input some words end with q:" word
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容