Linux常用命令

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命令。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容