linux簡(jiǎn)介
linux 是一套操作系統(tǒng)
- Linux系統(tǒng)內(nèi)核為linux。
- 內(nèi)核是一個(gè)電腦程序組成操作系統(tǒng)的核心,鏈接系統(tǒng)硬件和應(yīng)用程序。
- Linux系統(tǒng)是自由和開源的。
連接linux集群
- 將多個(gè)計(jì)算機(jī)(節(jié)點(diǎn))連接在一起組成集群,我們可以登錄到其中某個(gè)節(jié)點(diǎn),通過(guò)這個(gè)節(jié)點(diǎn)向其它節(jié)點(diǎn)投 遞任務(wù)。
- Windows 使用putty等支持ssh連接的工具(rna_192.168.48.100_22)
- mac 終端 ssh rna@192.168.48.100
- password rna@2016
linux系統(tǒng)目錄結(jié)構(gòu)
(了解)

- / 根目錄,有且只有一個(gè)根目錄
- /etc: 系統(tǒng)配置文件存放目錄
- /bin:/usr/bin: 可執(zhí)行文件(命令)存放目錄
- /sbin:供超級(jí)用戶使用的可執(zhí)行文件
- /home:存儲(chǔ)普通用戶的個(gè)人文件
- /lib:/usr/lib:/usr/local/lib:系統(tǒng)使用的函數(shù)庫(kù)的目錄
- /opt:給主機(jī)額外安裝軟件的目錄
- /usr:應(yīng)用程序存放目錄。
/usr/bin 存放可執(zhí)行文件。/usr/share 存放共享數(shù)據(jù)。/usr/lib存放程序運(yùn)行所必需的一些函數(shù)庫(kù)文件。/usr/local 軟件默認(rèn)安裝目錄。/usr/share/doc 系統(tǒng)說(shuō)明文件存放目錄。/usr/share/man: 程序說(shuō)明文件存放目錄 - /var:系統(tǒng)服務(wù)。
系統(tǒng)日志文件/var/log,/var/log/message 所有的登錄文件存放目錄,/var/spool/mail 郵件存放的目錄,/var/run 程序或服務(wù)啟動(dòng),/var/www web服務(wù)器目錄
操作命令
命令一般有兩部分組成:命令名稱+命令參數(shù),之間用空格隔開
目錄操作命令
- pwd (print working directory)
查看當(dāng)前目錄完整路徑,分為絕對(duì)路徑和相對(duì)路徑,即從根目錄(/)or當(dāng)前目錄(./)
pwd /WORK/TRAIN/RNA
- cd (change directory) 切換目錄
cd . 當(dāng)前目錄
cd .. 上級(jí)目錄
cd - 返回上次訪問的目錄
cd ~ 進(jìn)入home目錄
- mkdir (make directory) 建立目錄
mkdir -p test/test1 建立多級(jí)目錄
mkdir Directory 建立目錄
- ls (list)顯示指定工作目錄下的內(nèi)容
ls -a 顯示所有子目錄和文件,包括隱藏文件
ls -l 以長(zhǎng)格式顯示文件詳細(xì)信息
ls -h 表示大小一欄轉(zhuǎn)為便于人類識(shí)別的形式,加上單位。 默認(rèn)情況下單位為字節(jié)。
ls -lh
ls -i 同時(shí)展示inode號(hào)
文件操作命令
- vi 是一個(gè)文本編輯器,若文件存在則打開編輯,否則創(chuàng)建新的文件
vi filename 進(jìn)入命令模式,i切換為編輯模式,esc退出返回命令模式
命令模式下:
:w 保存
:q! 強(qiáng)制退出
:wq 保存后退出
/pattern 向后查找
?pattern 向前查找
:%s///g 或:%s###g 全局替換
- touch 創(chuàng)建空文件
修改以后文件的日期([yyyyMMDDhhmm])
touch filename 新建文件
touch -t 201808080808.08 filename 修改文件修改時(shí)間和訪問時(shí)間
touch -m filename 改變修改時(shí)間為當(dāng)前時(shí)間
touch -a filename
改變?cè)L問時(shí)間為當(dāng)前時(shí)間
touch -r file1 file2 將file2時(shí)間改成file1時(shí)間一樣
- cp (copy) 對(duì)文件或者目錄進(jìn)行拷貝
cp -r 遞歸復(fù)制目錄及目錄中的文件
cp -r /Work Test
echo dirname* | xargs -n 1 cp -v filename
- ln -s (link -solf) 建立軟連接。制作軟連接的時(shí)候,最好使用絕對(duì)路徑。硬鏈接除了文件名以外,其它的信息都是相同的,軟連接則是一個(gè)新的文件。
ln -s souce.txt destination.txt
ln -s `pwd`/test1.txt test4.txt
- mv (move file)
對(duì)文件或者目錄重命名 mv oldfile newfile
移動(dòng)文件(夾)位置 mv file destination
- rm (remove files)刪除文件和目錄
rm -r 遞歸刪除目錄及文件
rm -f 強(qiáng)制刪除
rm -rf test.txt
- stat 命令查看文件的附加屬性,包括文件名,inode號(hào)等
stat test.txt
文件內(nèi)容操作命令
- cat
一次性顯示整個(gè)文件,查看文件內(nèi)容 cat filename
合并文件 cat file1 file2 > file3
- less 查看一個(gè)文件的內(nèi)容
顯示行數(shù) less -N file.fasta
行超過(guò)屏幕部分舍去 less -S unigene.fasta
查看文件 less file.txt
- head/tail 查看文件前幾行/后幾行
head -5 unigene.fa
tail -10 unigene.fa
- wc (wordcount)
wc -c print the byte counts 字節(jié)數(shù)
wc -w print the character counts 字?jǐn)?shù)
wc -l print the newline counts 行數(shù)
- sort 排序
sort -kx,y 對(duì)第x列到y(tǒng)列進(jìn)行排序
sort -n 按大小排列,作為數(shù)字
sort -r 按相反順序排列
sort -k 1.2 對(duì)第一個(gè)域的第二個(gè)字符開始到本域的最后一個(gè)字符為止的字符串進(jìn)行排序
sort -k 1.2,1.2 只對(duì)第一個(gè)域的第二個(gè)字符排序
sort -k 2,3 對(duì)第三列到第四列排序
sort -t $'\t' 指定以tab鍵分割
sort -t : test 以冒號(hào)分割
- 使用sort按1,2,4,3列排序,其中1,2,4是數(shù)字,同時(shí)使用tab作為分隔符,第4列逆序排列
sort -t $'\t' -k 1n,1 -k 2n,2 -k 4rn,4 -k3,3 file
- uniq 去重復(fù)
sort -u filename 等價(jià)于 sort filename | uniq
uniq -c 統(tǒng)計(jì)重復(fù)的數(shù)量
uniq -u 顯示沒有重復(fù)的行
uniq -d 顯示重復(fù)的行
- grep 命令(global regular expression printer)
逐行對(duì)文件進(jìn)行指定模式的搜索。
grep -c 查看行數(shù)
grep -i 忽略字母大小寫
grep -v 輸出不匹配的行
grep ^C test.txt 列出C開頭的行
grep T$ test.txt 列出T結(jié)尾的行
ls -l | grep ^d ==列出所有文件夾==
- cut 顯示行中指定部分
cut -f 顯示指定字段內(nèi)容
cut -d 指定默認(rèn)的分隔符,默認(rèn)是tab鍵
- split 分割文件
split -b 10k filename 按10kb分割文件
split -d filename 分割后文件數(shù)字為后綴
split -a 3 filename 分割后后綴長(zhǎng)度
split -l 3 filename 按行分割
- >重定向
> 表示將標(biāo)準(zhǔn)輸出重定向到指定文件,并將原文件覆蓋
>> 表示將標(biāo)準(zhǔn)輸出重定向并追加到指定文件,原文件不覆蓋
| 表示重定向輸出到下一個(gè)命令的標(biāo)準(zhǔn)輸入
- 文件通配符
?和*
ls file? ? 表示任意 1 個(gè)字符
ls file* 表示任意個(gè)任意字符,包括 0 個(gè)
- 管道 |
很多l(xiāng)inux的命令輸出直接達(dá)到屏幕上,也就是輸出到stdout,這些輸出可以直接作為一些命令的輸入,也 就是stdin。這時(shí)候中間用 | 鏈接,也就是管道。
ls -l | less
- 文件的權(quán)限
chmod =x test.txt #將user group other的權(quán)限都設(shè)成x即只可執(zhí)行,---x--x--x
chmod u=w test.txt #user只讀 --w---x--x
chmod u+r test.txt #user的權(quán)限增加r
chmod o-x test.txt #other的權(quán)限減少x
chmod 124 test.txt # ---x-w-r--
chmod 731 test.txt # -rwx-wx--x
chmod -R 775 test1 #遞歸文件夾中文件以及文件夾遞歸實(shí)現(xiàn)權(quán)限變更
數(shù)序?yàn)槎M(jìn)制的十進(jìn)制值
x=2^0
w=2^1
r=2^2
- 幫助信息
ls --help
man ls
集群操作命令
- who 系統(tǒng)登錄情況
who | wc -l 查看用戶數(shù)量
whoami 查看自己登錄用戶名
- 任務(wù)投遞
qsub -cwd -l vf=* -q all.q *.sh
- 查看已投遞的任務(wù)狀態(tài)
qstat –j job-id
查看某個(gè)具體任務(wù)的詳細(xì)狀態(tài)信息
vjob 查看任務(wù)狀態(tài),包括JOBID CPU Mnow Mmax node VF Hours CMD
- 節(jié)點(diǎn)狀態(tài)查看
qhost 查看所有節(jié)點(diǎn)狀態(tài)信息
qhost –j 查看所有節(jié)點(diǎn)狀態(tài)信息,包含節(jié)點(diǎn)下面的任務(wù)列表
- 可用隊(duì)列、節(jié)點(diǎn)查看
qselect –U username
壓縮和解壓縮
- gzip 壓縮
gzip file
- gunzip 解壓縮
gunzip file.gz
- tar 打包壓縮與解壓縮
-v 壓縮過(guò)程顯示文件
-c 創(chuàng)建新壓縮文件的指令
-z 用gzip壓縮
-f 使用文檔名,后直接接文件
-x 解壓縮
tar -zvcf test.tar.gz file1.txt file2.txt 壓縮
tar -zvxf test.tar.gz 解壓縮
shell腳本與流程控制
- shell優(yōu)勢(shì):
簡(jiǎn)單性 效率高 開發(fā)容易
直接在命令行上測(cè)試;一旦找到適當(dāng)語(yǔ)法,將其放入獨(dú)立腳本中,設(shè)置可執(zhí)行權(quán)限后,可以直接使 用該腳本。
- 規(guī)范格式
第一行: #!/bin/sh
基本元素:命令 參數(shù)
- 空白隔開命令行中各部分
- 命令名稱為第一個(gè)項(xiàng)目
- 選項(xiàng)開頭是一個(gè)減號(hào),后面接字母
- 變量
- 本地變量
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,第一個(gè)
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的結(jié)果賦值給DATE
echo $DATE
- 定義不可變的變量
readonly Whome=sth
readonly 定義后整個(gè)腳本不再能更改
- 位置變量
$0 腳本本身
$1 第一個(gè)參數(shù)
- 特殊變量
$# 傳遞到腳本的參數(shù)個(gè)數(shù),eg 3
$* 以一個(gè)單字符串顯示所有腳本傳遞的參數(shù),默認(rèn)tab鍵分割 返回"$1 $2 $3"
$@ 與$#類似,但每個(gè)變量是獨(dú)立的。返回 “$1”,"$2","$3"
$? 顯示命令最后退出狀態(tài),0表示沒有錯(cuò),其他值表示有錯(cuò)
- 雙引號(hào)
可以進(jìn)行變量替換
a = helo
echo "$a world" # 輸出hello world
- 單引號(hào)
不進(jìn)行任何變量替換
- 反引號(hào)
執(zhí)行系統(tǒng)命令賦給變量 等效于$()
a=ls *
echo $a
- 反斜線 轉(zhuǎn)義元字符
4.1 布爾值
0表示false,1或者非零值表示true
4.2 條件測(cè)試
- test [condition]
test -e 判斷是否存在
test -f 判斷是否存在且為file
test -d 判斷是否存在且為directory
test -r 判斷是否存在且可讀
test -w 判斷是否存在且可寫
test -x 判斷是否存在且可執(zhí)行
條件 與或非 -a -o !
test -r txt.sh -o -w txt.sh -a -x txt.sh |echo $?
- 測(cè)試字符串
相等 ==
不等 !=
空串 -z
非空串 -n
- 測(cè)試數(shù)字
-eq 等于
-ne 不等于
-gt 第一個(gè)數(shù)大于第二個(gè)數(shù)。
-lt 第一個(gè)數(shù)小于第二個(gè)數(shù)。
-le 第一個(gè)數(shù)小于等于第二個(gè)數(shù)。
-ge 第一個(gè)數(shù)大于等于第二個(gè)數(shù)
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 匹配表達(dá)式re1或re2
. 匹配任何字符(換行符除外)
^ 匹配字符串的開始
$ 匹配字符串的結(jié)尾
* 匹配前面出現(xiàn)的正則表達(dá)式零次或多次
+ 匹配前面出現(xiàn)的正則表達(dá)式一次或多次
? 匹配前面出現(xiàn)的正則表達(dá)式零次或一次
{N} 匹配前面出現(xiàn)的正則表達(dá)式N次
{M,N} 匹配重復(fù)出現(xiàn)M次到N次的正則表達(dá)式
.*? 非貪婪匹配
sed 命令
(stream editor), 用來(lái)對(duì)輸入文件或者數(shù)據(jù)流進(jìn)行編輯,逐行進(jìn)行編輯,通常用來(lái)做替換。
sed -e 多次匹配
sed -i 對(duì)輸入文件本身進(jìn)行修改
sed -n 列出sed處理行,不加-n則列出所有行,重復(fù)處理行
==sed -f 加腳本文件使用腳本文件中的命令==
sed '1,5 s/\t/:/g' test.xls > result.xls
#一到五行全局替換
sed -i '1d' test.xls
#刪除第一行
sed 's/T/U/g' input.txt
#這是一個(gè)將DNA序列轉(zhuǎn)成RNA列的例子
sed -e 's/T/U/g' -e 's/A/a/g' input.txt #當(dāng)想使用多個(gè)命令的時(shí)候,使用-e,每個(gè)-e后邊跟一個(gè)命令,可以有很多
echo -e "s/T/U/g\ns/A/a/g" > edit.sed
sed -f edit.sed input.txt
#通過(guò)-f加腳本文件使用腳本文件中的命令
sed -n '/^A/=' input.txt
#返回以A開頭的行。^表示開頭,而 = 表示行號(hào)
sed 'y/ACGT/acgt/' input.txt
# y/.../.../ 字符轉(zhuǎn)換,字符依次對(duì)應(yīng)
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
#只對(duì)以A開頭的行進(jìn)行轉(zhuǎn)換,/^A/ #不對(duì)以A開頭的行進(jìn)行轉(zhuǎn)換,/^A/!
#只對(duì)2-4行進(jìn)行轉(zhuǎn)換
#不對(duì)2-4行進(jìn)行轉(zhuǎn)換
sed -i '1iAddThisBeforeThe1stLine' input.txt
#在第一行前加入一行
sed -i '$iAddThisBeforeTheLastLine' input.txt
#在最后一行前加入一行
awk 命令
awk 會(huì)對(duì)文件的每一行進(jìn)行識(shí)別
- awk -F {s} '{pattern + action}' {filenames}
{s} 分隔符
pattern :查找的內(nèi)容,一般為正則表達(dá)式,用斜杠括起來(lái)。
action :在找到匹配內(nèi)容時(shí)所執(zhí)行的一系列命令。
==awk -f address.awk address.tx
執(zhí)行address.awk腳本==
- 內(nèi)置變量
| 變量名 | 含義 |
|---|---|
| FS | 輸入文件fields之間的分隔,-F指定內(nèi)容 |
| OFS | awk輸出是fileds之間的分隔符 |
| RS | 輸入時(shí)記錄(RECORD)之間的分隔符,默認(rèn)\n |
| ORS | 輸出時(shí)RS |
| NR | numbers of records |
| FNR | 每個(gè)文件的records |
| filename | 現(xiàn)處理的文件名 |
- 操作符
| 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:查看每一行的列數(shù)
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:根據(jù)某一列的條件進(jìn)行篩選
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 請(qǐng)完成以下操作:
1.查看該差異列表共展示多少轉(zhuǎn)錄本定量結(jié)果; 2.其中l(wèi)ncRNA明顯標(biāo)示的共有多少個(gè)(id為:LNC_****);
3.查看 RNT_vs_RNC.isoform.xls 文件中qvalue<=0.05的lncRNA,輸出:
1)差異lnc的個(gè)數(shù);
2)lncRNA來(lái)源基因列表;
3)lncRNA來(lái)源基因的個(gè)數(shù)(去重);
4)調(diào)參pvalue<=0.05后的結(jié)果; 5)篩除其中fpkm均為0的轉(zhuǎn)錄本(篩除所有樣品表達(dá)量均小于0.5的轉(zhuǎn)錄本);
更多命令匯總
- tree
tree -C #顏色顯示
tree -f #顯示文件全路徑
tree -L #顯示路徑層級(jí)
tree -P #只顯示文件目錄
tree -F #顯示目錄后面的\;顯示可執(zhí)行文件*;功能類似ls -F
tree -N 直接列出文件和目錄名稱,包括控制字符。
tree -p 列出權(quán)限標(biāo)示
- read
-n(不換行) -p(提示語(yǔ)句) -n(字符個(gè)數(shù)) -t(等待時(shí)間) -s(不回顯)
-a :將內(nèi)容讀入到數(shù)值中
-n :用于限定最多可以有多少字符可以作為有效讀入
-p :用于給出提示符
-r :在參數(shù)輸入中,'/'表示沒有輸入完, /n 這類特殊字符生效
-t :用于表示等待輸入的時(shí)間,單位為秒,等待時(shí)間超過(guò),將繼續(xù)執(zhí)行后面的腳本
-s :不在terminal上打印
-d :表示delimiter,即定界符,一般情況下是以IFS為參數(shù)的間隔,但是通過(guò)-d,我們可以定義一直讀到出現(xiàn)執(zhí)行的字符位置。
eg1: 輸入不在終端顯示
read -p "Input passwd:" -s Passwd
echo $Passwd
eg2: 限時(shí)輸入,否則退出
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