Linux系統是一種開源高穩定性的操作系統,在服務器領域得到廣泛的應用。作為一個Java后台開發工程師經常需要登錄Linux服務器部署應用程序,或者是查看程序的運行狀態。一般的Linux服務器上是不會安裝界面程序的,因此熟練掌握常用的Linux命令對工程師來說非常重要。
本篇日志是我在學習過程的總結,記錄了Linux系統常用的命令,適合已經對Linux操作系統有基本概念的開發人員參考學習。如果沒有接觸過Linux操作系統,可以參考我Linux的其他系列文章。
Linux的命名非常多,我們也沒有必要掌握所有的命令。本篇博客先來整理平時常用的,比較基礎的命令。后續的博客會陸續介紹網絡相關、系統性能相關等命令。
系統相關命令
shutdown
shutdown命令用來關閉系統。Linux大多使用在服務器領域,所以一般情況下是很少需要關機的。我們在關機時一定要謹慎,因為你關機的時候很可能其他用戶正在遠程登錄(推薦使用xshell)這台機器進行某些操作。因此你關機前需要查看下當前系統有哪些用戶登錄。
# 查看當前登錄用戶
who
# 同步內存數據到文件系統
sysnc
# 十分鍾后重啟
shutdown -h now //shutdown -h +10
# 重啟
reboot
uname
uname(unix name)用於查看系統相關信息
[root@SHA-L0029026 ~]# uname -a
Linux SHA-L0029026 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 03:43:06 PDT 2015 x86_64 x86_64 x86_64 GNU/Linux
- SHA-L0029026 是主機名;
- 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 03:43:06 PDT 2015 (Linux內核信息)
- x86_64 系統架構
- GNU/Linux Linux發行版本
用戶相關命令
adduser
在使用adduser
命令的時候,系統會添加這個用戶名,並且還會自動地創建與這個用戶名名字一樣的用戶組作為這個用戶的初始用戶組。此外,還會自動地在/home目錄下面創建一個與用戶同名的目錄,接着執行cp /etc/skel /home/
用戶名"的操作,實現新增用戶的主目錄的初始化。用adduser這個命令創建的賬號是系統賬號,可以用來登錄到我們的系統(區別於Ftp賬號,一般不能通過ssh遠程登錄到機器)。
# 添加用戶
adduser codeer
# 為新添加的用戶修改密碼
passwd codeer
# 查看當前用戶屬於哪個用戶租(或者 groups codeer)
groups
# 這個用戶不想用了,刪除
deluser -r codeer
還有一個很相似的命令useradd。這個命令不會自動為我們創建組、創建用戶home目錄,需要我們手動設置參數去設定。並且useradd這個命令創建的是普通賬號,並不能用來登錄系統。
useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]
-u 自定義UID
-g 使其屬於已經存在的某個GID
-d 自定義用戶的家目錄
-M 不建立家目錄
-s 自定義shell
chgrp
更改用戶所屬的用戶組, 語法:chgrp [組名][文件名1 文件名2...]
# 查看用戶屬於哪個用戶組
groups codeer
# 添加一個新的用戶組
groupadd group1
# 添加用戶組並指定用戶號
groupadd -g 501 group2
# 刪除用戶組
groupdel group2
# 將dir1文件夾下的文件修改用戶組
chgrp -vR group1 ./dir1
chown
更改文件的所有者和用戶組,這個命令可以取代chgrp
的功能。
# 將dir文件夾下的文件所有者和用戶組修改
chown -Rv own_name:group_name ./dir
chmod
更改文件的屬性。
chmod -Rv 755 ./dir
chmod -Rv -u=rwx,g=rx,o=rx ./dir
umask
umask命令用來顯現創建文件或者目錄時默認的權限。
[root@SZB-L0026548 tmp]# umask
0022
//上面顯示0022,我們一般看后3位002,用777-002得755就是默認的權限。
//假如你創建的是目錄,owner有rwx權限,用戶組有rx權限,其他也有rx權限
//假如創建文件,owner有rw權限,用戶組有r全新啊,其他也有讀權限
[root@SZB-L0026548 tmp]# umask -S
u=rwx,g=rx,o=rx
chattr/lsattr
修改文件的特殊屬性。
chattr +i codeer.txt // i的作用很大。它可以讓一個文件“不能被刪除、改名、設置連接,也無法寫入或新增數據”。對於系統安全性有相當大的幫助。
chattr -i codeer.txt
man
查看幫助文檔
文件目錄相關命令
ls
ls命令是Linux系統下使用頻率很高的一個命令,用來列出文件或目錄的詳細信息
ls [option] [文件|目錄](文件名和目錄名支持通配符)
ls //默認列出當前目錄下文件的信息,橫向排列
ls -al //列出文件的詳細信息
ls -alh //顯示文件的大小
[root@SHB-L0048478 tmp]# ls -alh
-rw-r--r-- 1 root root 1.2K Nov 30 20:07 chen.txt
ls -alht //時間近的在前面
ls -alhtr //時間遠的在前面
ls -alhr //根據文件名字母排序
pwd
查看當前路徑
[root@SHB-L0048478 chen]# pwd
/tmp/test/chen
mkdir/rmdir
mkdir用於創建目錄,rmdir用來刪除目錄,這個命令不是很常用,rm命令可以替代其功能。
# 設置目錄的訪問權限
mkdir -m 755
# 遞歸循環創建目錄
mkdir -p ./test/codeer
# 刪除test目錄下的codeer目錄
rmdir test/codeer
# 聯通test目錄一起刪除
rmdir -p test/codeer
rm
rm命令可以刪除一個目錄中的一個或多個文件或目錄,也可以將某個目錄及其下屬的所有文件及其子目錄均刪除掉。對於鏈接文件,只是刪除整個鏈接文件,而原有文件保持不變。
# 強制遞歸刪除文件,建議備份
rm -rf file
# 交互式刪除文件
rm -i file
cp
cp [選項][ 來源文件 ] [目的文件]
cp -a * /tmp //該選項通常在拷貝目錄時使用。它保留鏈接文件、文件屬性,並遞歸地拷貝目錄,其作用等於dpr選項的組合。
cp -d * /tmp //不加這個選項時會把連接文件指向的原文件復制過來,加這個選項就復制連接文件
cp -v * /tmp //顯示都復制了哪些文件
# 拷貝整個文件夾到另外一個
cp -r ./src/* ./src_bak
mv
mv [選項] [ 來源文件 ] [目的文件]
# 這個命令有重命名的作用 備份
mv -i file1 file2
ln
建立連接文件
# 給source file建立軟連接文件(快捷方式)
ln -s source_file_name link_file_name
修改軟鏈接
ln –snf [新的源文件或目錄] [快捷方式]
touch
沒有文件就創建文件,有這個文件就修改文件的訪問時間
文件查看命令
-
cat:cat經常用來顯示文件的內容,適合文件內容較少的文件;(cat -n file_name)
-
tac:和cat一樣,只不過是反向顯示文件內容;
-
more:一屏一屏的查看文件內容
more -10 file_name //每屏顯示10行;
按Space鍵:顯示文本的下一屏內容。
按enter鍵:顯示一行內容 -
less:"J"鍵向上 "K"建向下;"/"向下搜索,"n"鍵顯示下一個;"?"鍵向上搜索,"n"鍵顯示下一個,"G":到文件底部;"gg":到文件頭部;
-
head:head -10 file_name;顯示文件前10行;
-
tail:tail -10 file_name;顯示文件后10行; tail -f file_name; 動態顯示文件;tail -1000 fileName >>tmp.log(日志文件較大,一次性打開較慢,只取后面幾行放入臨時日志文件,這個命令很快)
查找命令
which
查找一個可執行命令的絕對路徑
which java //輸出/usr/bin/java
whereis
通過預先生成的一個文件列表庫去查找跟給出的文件名相關的文件。
locate
類似於whereis,也是通過查找預先生成的文件列表庫來告訴用戶要查找的文件在哪里.有時候你執行這個命令可能沒找到想要的文件。這是因為系統還沒有生成那個文件列表庫。你可以使用updatedb 命令立即生成(更新)這個庫。如果你的服務器上正跑着重要的業務,那么你最好不要去運行這個命令,因為一旦運行,服務器的壓力會變大。這個數據庫默認情況下每周更新一次。所以你用locate命令去搜索一個文件,正好是在兩次更新時間段內,那你肯定是得不到結果的。你可以到/etc/updated.conf 去配置這個數據庫生成(更新)的規則。locate命令筆者用的也並不多,所以你只要明白有這么一個東西即可。你用到時再去深究其用法吧。
find
find / -mmin -5 # 查找在系統中最后5分鍾里修改過的文件
find / -mtime -1 #查找在系統中最后24小時里修改過的文件
find /home -size +512k查大於512k的文件
find /home -size -512k 查小於512k的文件
find . app* #查找當前目錄下以app打頭的文件
find . -name "harbor.yml" # 當前目錄下全局搜索某個文件
type
type命令其實不能算查找命令,它是用來區分某個命令到底是由shell自帶的,還是由shell外部的獨立二進制文件提供的。如果一個命令是外部命令,那么使用-p參數,會顯示該命令的路徑,相當於which命令。
type命令的使用實例:
$ type cd
系統會提示,cd是shell的自帶命令(build-in)。
$ type grep
系統會提示,grep是一個外部命令,並顯示該命令的路徑。
$ type -p grep
加上-p參數后,就相當於which命令。
磁盤管理相關
df
查看已掛載磁盤的總容量、使用容量、剩余容量等,可以不加任何參數,默認是按k為單位顯示的
df -h
du
du 用來查看某個目錄所占空間大小
# 查看dir這個目錄占用空間的大小
du -sh dir
# 列出dir目錄下每個文件占用空間的大小
du -ah dir
# 將wll目錄下的文件根據大小排序
du -s /wll/* | sort -nr
壓縮相關命令
gzip
gzip一般用於壓縮單個文件,不能用來壓縮目錄,gzip 壓縮的文件可以直接使用vim
命令查看。
gzip codeer.txt //壓縮文件
gzip -d codeer.txt.gz //解壓文件
bzip2
bzip2也是用於壓縮一個文件。使用 gzip要比bzip2快,但是bzip2會獲得比gzip高的壓縮率
bzip2 codeer.txt //壓縮單個文件
bzip2 -d codeer.txt.bz2
tar
將幾個文件打包成一個文件,不進行壓縮。通常打成tar包之后,需要進行gzip。
tar -zcvf test.tar.gz ./* //生成test.tar.gz
tar -zxvf test.tar.gz
zip
zip -r test.zip ./* //將當前目錄下的文件壓縮
zip test2.zip test2/* //將test2目錄打包
unzip test.zip //將文件默認解壓到testmulu
unzip test.zip -d /tmp //解壓到指定目錄