linux基本操作

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ù),之間用空格隔開

目錄操作命令

  1. pwd (print working directory)
    查看當(dāng)前目錄完整路徑,分為絕對(duì)路徑和相對(duì)路徑,即從根目錄(/)or當(dāng)前目錄(./)

pwd /WORK/TRAIN/RNA

  1. cd (change directory) 切換目錄

cd . 當(dāng)前目錄

cd .. 上級(jí)目錄

cd - 返回上次訪問的目錄

cd ~ 進(jìn)入home目錄

  1. mkdir (make directory) 建立目錄

mkdir -p test/test1 建立多級(jí)目錄

mkdir Directory 建立目錄

  1. 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)

文件操作命令

  1. vi 是一個(gè)文本編輯器,若文件存在則打開編輯,否則創(chuàng)建新的文件

vi filename 進(jìn)入命令模式,i切換為編輯模式,esc退出返回命令模式

命令模式下:
:w 保存
:q! 強(qiáng)制退出
:wq 保存后退出
/pattern 向后查找
?pattern 向前查找
:%s///g 或:%s###g 全局替換

  1. 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í)間一樣

  1. cp (copy) 對(duì)文件或者目錄進(jìn)行拷貝

cp -r 遞歸復(fù)制目錄及目錄中的文件

cp -r /Work Test

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

  1. ln -s (link -solf) 建立軟連接。制作軟連接的時(shí)候,最好使用絕對(duì)路徑。硬鏈接除了文件名以外,其它的信息都是相同的,軟連接則是一個(gè)新的文件。
ln -s souce.txt destination.txt
ln -s `pwd`/test1.txt test4.txt
  1. mv (move file)

對(duì)文件或者目錄重命名 mv oldfile newfile

移動(dòng)文件(夾)位置 mv file destination

  1. rm (remove files)刪除文件和目錄

rm -r 遞歸刪除目錄及文件
rm -f 強(qiáng)制刪除

rm -rf test.txt

  1. stat 命令查看文件的附加屬性,包括文件名,inode號(hào)等

stat test.txt

文件內(nèi)容操作命令

  1. cat

一次性顯示整個(gè)文件,查看文件內(nèi)容 cat filename
合并文件 cat file1 file2 > file3

  1. less 查看一個(gè)文件的內(nèi)容

顯示行數(shù) less -N file.fasta
行超過(guò)屏幕部分舍去 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 字節(jié)數(shù)
wc -w print the character counts 字?jǐn)?shù)
wc -l print the newline counts 行數(shù)

  1. 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
  1. uniq 去重復(fù)

sort -u filename 等價(jià)于 sort filename | uniq

uniq -c 統(tǒng)計(jì)重復(fù)的數(shù)量

uniq -u 顯示沒有重復(fù)的行

uniq -d 顯示重復(fù)的行

  1. 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 ==列出所有文件夾==

  1. cut 顯示行中指定部分

cut -f 顯示指定字段內(nèi)容

cut -d 指定默認(rèn)的分隔符,默認(rèn)是tab鍵

  1. split 分割文件

split -b 10k filename 按10kb分割文件
split -d filename 分割后文件數(shù)字為后綴
split -a 3 filename 分割后后綴長(zhǎng)度
split -l 3 filename 按行分割

  1. >重定向

> 表示將標(biāo)準(zhǔn)輸出重定向到指定文件,并將原文件覆蓋
>> 表示將標(biāo)準(zhǔn)輸出重定向并追加到指定文件,原文件不覆蓋
| 表示重定向輸出到下一個(gè)命令的標(biāo)準(zhǔn)輸入

  1. 文件通配符

?和*

ls file? ? 表示任意 1 個(gè)字符

ls file* 表示任意個(gè)任意字符,包括 0 個(gè)

  1. 管道 |

很多l(xiāng)inux的命令輸出直接達(dá)到屏幕上,也就是輸出到stdout,這些輸出可以直接作為一些命令的輸入,也 就是stdin。這時(shí)候中間用 | 鏈接,也就是管道。

ls -l | less
  1. 文件的權(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
  1. 幫助信息

ls --help

man ls

集群操作命令

  1. who 系統(tǒng)登錄情況

who | wc -l 查看用戶數(shù)量

whoami 查看自己登錄用戶名

  1. 任務(wù)投遞

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

  1. 查看已投遞的任務(wù)狀態(tài)

qstat –j job-id
查看某個(gè)具體任務(wù)的詳細(xì)狀態(tài)信息

vjob 查看任務(wù)狀態(tài),包括JOBID CPU Mnow Mmax node VF Hours CMD

  1. 節(jié)點(diǎn)狀態(tài)查看

qhost 查看所有節(jié)點(diǎn)狀態(tài)信息

qhost –j 查看所有節(jié)點(diǎn)狀態(tài)信息,包含節(jié)點(diǎn)下面的任務(wù)列表

  1. 可用隊(duì)列、節(jié)點(diǎn)查看

qselect –U username

壓縮和解壓縮

  1. gzip 壓縮

gzip file

  1. gunzip 解壓縮

gunzip file.gz

  1. 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腳本與流程控制

  1. shell優(yōu)勢(shì):

簡(jiǎn)單性 效率高 開發(fā)容易

直接在命令行上測(cè)試;一旦找到適當(dāng)語(yǔ)法,將其放入獨(dú)立腳本中,設(shè)置可執(zhí)行權(quán)限后,可以直接使 用該腳本。

  1. 規(guī)范格式

第一行: #!/bin/sh

基本元素:命令 參數(shù)

  • 空白隔開命令行中各部分
  • 命令名稱為第一個(gè)項(xiàng)目
  • 選項(xiàng)開頭是一個(gè)減號(hào),后面接字母
  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,第一個(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腳本==

  1. 內(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)處理的文件名
  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:查看每一行的列數(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)錄本);

更多命令匯總

  1. tree
tree -C #顏色顯示
tree -f #顯示文件全路徑
tree -L #顯示路徑層級(jí)
tree -P #只顯示文件目錄
tree -F #顯示目錄后面的\;顯示可執(zhí)行文件*;功能類似ls -F
tree -N 直接列出文件和目錄名稱,包括控制字符。
tree -p 列出權(quán)限標(biāo)示
  1. 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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容