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命令。