1. 程式人生 > >java工程師linux命令,這篇文章就夠了

java工程師linux命令,這篇文章就夠了

sep 實戰 reads href 改變 sig 腳本 喜歡 這樣的

精彩內容推薦
  • 一套java架構師學習資源,等你拿

  • 你所需要的大數據視頻教程

  • 微服務資源springboot、springcloud、docker、dubbo項目實戰等傾心分享

shell簡介

1.1 shell家族

shell:命令解釋器,根據輸入的命令執行相應命令。

察看當前系統下有哪些shell:

cat /etc/shells

察看當前系統正在使用的shell

echo $SHELL

常見shell:

/bin/sh (已經被 /bin/bash 所取代)
/bin/bash (就是 Linux 默認的 shell)
/bin/ksh (Kornshell 由 AT&T Bell lab. 發展出來的,兼容於 bash)
/bin/tcsh (整合 C Shell ,提供更多的功能)
/bin/csh (已經被 /bin/tcsh 所取代)
/bin/zsh (基於 ksh 發展出來的,功能更強大的 shell)

1.2 bash

bash 是一個為GNU計劃編寫的Unix shell。它的名字是一系列縮寫:Bourne-Again SHell — 這是關於Bourne shell(sh)的一個雙關語(Bourne again / born again)
bash 是 許 多 Linux 平 臺 的 內 定 Shell, 事 實 上, 還 有 許 多 傳 統 UNIX 上 用 的 Shell, 像 tcsh、csh、ash、bsh、ksh等等,Shell Script大致都類同,當您學會一種Shell以後,其 它的Shell會很快就上手,大多數的時候,一個Shell Script通常可以在很多種Shell上使用。

bash是大多數Linux系統以及Mac OS X v10.4默認的shell,它能運行於大多數Unix風格 的操作系統之上,甚至被移植到了Microsoft Windows上的Cygwin系統中,以實現windows的POSIX虛擬接口。此外,它也被DJGPP項目移植到了MS-DOS上。

1.3 命令和路徑補齊

在bash下敲命令時,Tab鍵可以補全已經敲了一部分的文件名和目錄名。如果是Ubuntu 系統,系統默認啟用了bash completion,還可以補全命令的某些參數、Makefile目標等 等。如果是Debian系統,可以用以下命令啟用bash completion:

$ source /etc/bash_completion

建議將這一行加入~/.bashrc啟動腳本中。比如使用sudo後面接命令,如果沒有bash completion則只有sudo可以補全,後面的命令不能補全。如果啟用了bash completion,則 後面的命令,包括命令的某些參數(比如aptitude命令的install)都可以補全了。

比如在主目錄下要列出桌面目錄的內容,輸入(不回車)

$ ls De

然後敲Tab鍵,如果以De開頭的文件或文件夾只有Desktop一個,就自動補全為

$ ls Desktop

否則,再敲一次Tab鍵,將會把所有以De開頭的文件或文件夾列在下面供你選擇(在這裏 我們手動創建另外一個以De開頭的文件)

$ touch Death
$ ls De
Death   Desktop/

你可以再補敲一個s再Tab,這次Desktop就會補全到命令後面了。有 的 人 是 從 DOS 時 代 過 來 的, 留 下 一 個 很 不 好 的 習 慣 就 是 在 找 一 個 文 件 時 反 復 地cd、ls、cd、ls等找到了要找的文件時再想回到先前的目錄,已經不記得先前是 從哪個目錄轉到這裏來的了。

我們從上面可以看出,Tab補全本身就具備了ls的功能,上面的Tab補全相當於ls -Fd De*命令。所以我們完全不必反復地cd到別的目錄然後ls去找文件,多按幾次Tab就可以一條 命令完成了,這樣的好處是我們的當前目錄不用變,不需要找完了文件再cd回來,同時省去 了大量的按鍵次數。更重要的是,自動補全同時兼具了檢查拼寫錯誤的功能,如果前面幾個 字母拼寫錯了,就補全不出東西來,用戶就知道拼寫錯了,如果前面幾個字母沒有拼寫錯, 那麽由系統補全出來的文件名肯定也不會有拼寫錯誤,避免了用戶在敲很長的文件名時易犯 的拼寫錯誤。

1.4 歷史記錄

history

歷史記錄是另外一個非常方便的功能。按上下移動光標鍵(或者Ctrl-p、Ctrl-n)可以 一條一條瀏覽以前輸過的命令。如果有需要重復輸入的命令就不用輸第二次了。如果你能記 住以前輸過的某條命令中的某個關鍵字,可以按Ctrl-r,然後輸入關鍵字,隨著你每輸入一 個字母,bash會做增量式(increasingly)查找,也可以反復按Ctrl-r或Ctrl-s向前向後查 找。如果找到了,按左右移動光標鍵或Home鍵(Ctrl-a)或End鍵(Ctrl-e)將該命令帶回提示 符下進一步修改,或者直接按Enter鍵原封不動地執行該命令。

1.5 主鍵盤快捷鍵

bash的快捷鍵和emacs保持一致,用慣其中之一再用另一個程序會很順手的。請記住一條原則:盡量使用主鍵盤快捷鍵而不使用移動光標鍵和編輯鍵。因為手不必離開主鍵盤是效 率最高的,這樣在你一生之中所節省的來回移動手的時間絕對可以用星期來計算,是絕對值 得你花十分鐘的時間記住這些快捷鍵的。

功能 快捷鍵 助記
Ctrl-p previous
Ctrl-n next
Ctrl-b backward
Ctrl-f forward
Del Ctrl-d delete光標後面的
Home Ctrl-a the first letter
End Ctrl-e end
Backspace Backspace delete光標前面的

目錄和文件

2.1 類Unix系統目錄結構

ubuntu沒有盤符這個概念,只有一個根目錄/,所有文件都在它下面

/   根目錄
bin //系統可執行程序,如命令
boot        //內核和啟動程序,所有和啟動相關的文件都保存在這裏 grub //引導器相關文件
dev //設備文件
etc //系統軟件的啟動和配置文件,系統在啟動過程中需要讀取的文件都在這個目錄。如LILO參數、用 戶賬戶和密碼。
home    //用戶的主目錄。下面是自己定義的用戶名的文件夾
lib //系統程序庫文件,這個目錄裏存放著系統最基本的動態鏈接共享庫,類似於Windows下的system32 目錄,幾乎所有的應用程序都需要用到這些共享庫。
media //掛載媒體設備,如光驅、U盤等
mnt //目錄是讓用戶臨時掛載別的文件系統,如掛載Windows下的某個分區,ubuntu默認還是掛載在/media 目錄。
opt //可選的應用軟件包(很少使用)
proc    //這個目錄是系統內存的映射,我們可以直接訪問這個目錄來獲取系統信息。也就是說,這個目錄 的內容不在硬盤上而是在內存裏。
sbin    //管理員系統程序 selinux
srv
sys //udev用到的設備目錄樹,/sys反映你機器當前所接的設備 tmp //臨時文件夾
usr //這是個最龐大的目錄,我們要用到的很多應用程序和文件幾乎都存放在這個目錄下。] bin    // 應用程序
game //遊戲程序 include
lib //應用程序的庫文件 lib64
local   //包含用戶程序等 sbin  //管理員應用程序

2.2 用戶目錄

位於/home/user,稱之為用戶工作目錄或家目錄,表示方式:

/home/user
~
2.2.1 相對路徑和絕對路徑

絕對路徑

從/目錄開始描述的路徑為絕對路徑,如:

cd /home ls /usr

相對路徑

從當前位置開始描述的路徑為相對路徑,如:

cd ../../ ls abc/def

.和..

每個目錄下都有.和..
. 表示當前目錄
.. 表示上一級目錄,即父目錄 根目錄下的.和..都表示當前目錄

2.3 ls

ls [OPTION]… [FILE]…

ls是英文單詞list的簡寫,其功能為列出目錄的內容。這是用戶最常用的一個命令,因 為用戶需要不時地查看某個目錄的內容。該命令類似於DOS下的dir命令。 對於每個目錄, 該命令將列出其中的所有子目錄與文件。對於每個文件,ls將輸出其文件名以及所要求的其 他信息。默認情況下,輸出條目按字母順序排序。當未給出目錄名或是文件名時,就顯示當 前目錄的信息。

主要的OPTION有:

-a 列出隱藏文件,文件中以“.”開頭的均為隱藏文件,如:~/.bashrc
-l 列出文件的詳細信息
-R 連同子目錄中的內容一起列出

ls -l命令顯示的信息中,開頭是由10個字符構成的字符串,其中第一個字符表示文 件類型,它可以是下述類型之一:

- 普通文件 d 目錄
l 符號鏈接
b 塊設備文件
c 字符設備文件
s socket文件,網絡套接字 p 管道

後面的9個字符表示文件的訪問權限,分為3組,每組3位。第一組表示文件屬主的權 限,第二組表示同組用戶的權限,第三組表示其他用戶的權限。每一組的三個字符分別表示 對文件的讀、寫和執行權限。各權限如下所示:

r 讀
w 寫
x 可執行。對於目錄,表示進入權限。
s 當文件被執行時,把該文件的UID或GID賦予執行進程的UID(用戶ID)或GID(組 ID)。
t 設置標誌位(sticky bit)。如果是有sticky bit的目錄,在該目錄下任何用戶只要有適當的權限即可創建文 件,但文件只能被超級用戶、目錄擁有者或文件屬主刪除。如果是有sticky bit的可執行文件,在該文件執行後, 指向其正文段的指針仍留在內存。這樣再次執行它時,系統就能更快地裝入該文件。
- 沒有相應位置的權限。

訪問權限後面的數字表示與該文件共享inode的文件總數,即硬鏈接數(參見下面ln命 令)。

2.4 cd

change dir 改變當前所在路徑

cd ~
cd dir1/dir2 cd ..

2.5 which

查看指定命令所在路徑

which ls

2.6 pwd

查看當前所在路徑

pwd

2.7 mkdir

mkdir [OPTION] DIRECTORY…

創建目錄DIRECTORY,可以一次創建多個。OPTION如果是-p,表示可以連同父目錄一起 創建。

2.8 rmdir

rmdir [OPTION]… DIRECTORY…

刪除空目錄,可以一次刪除多個。OPTION如果是-p,表示可以連同空的父目錄一起刪 除。mkdir和rmdir的用法舉例:

$ mkdir a
$ mkdir a/b
$ ls a b
$ rmdir a/b
$ ls a
$ rmdir a
$ mkdir a/b
mkdir: cannot create directory `a/b‘: No such file or directory
$ mkdir -p a/b
$ rmdir -p a/b

2.9 touch

touch [OPTION]… FILE…
  • 將每個文件的訪問及修改時間都更新為目前的時間。
  • 如果文件不存在,則創建一個字節數為0的文件。

2.10 rm

刪除文件:

rm file

刪除目錄:

rm dir -rf

2.11 mv

重命名:

mv file1 file2

移動文件:

mv file1 ~/

2.12 cp

拷貝文件:

cp file1 file2 cp file1 dir/ cp file1 ../

拷貝目錄:

cp dir1 dir2 -r cp dir1 ~/ -r

2.13 cat

查看文件裏內容,輸出到終端,如果cat時沒跟文件名,則讀標準輸入,遇到\n後,輸 出到標準輸出,終端下輸入Ctrl-d表示結束

2.14 more

more [OPTION] FILE…

查看文本文件的內容,屏幕顯示完一屏就等待用戶按下任意鍵再滾動到下一屏,如果中 途不想繼續看下去了,可以按Ctrl+C或q終止顯示。

2.15 less

less [OPTION] FILE…

查看文本文件的內容,屏幕顯示完一屏就等待用戶按鍵,用戶可以向上或向下查看,如 果中途不想繼續看下去了,可以按Ctrl+C或q終止顯示。

2.16 head

head [OPTION]… FILE… 顯示指定文件的前面幾行。如果沒有指定文件,將從標準輸入(鍵盤)上讀取。如果沒
有指定要顯示的行數,則默認顯示前10行。如果要顯示文件的前5行:

$ head -5 file1

2.17 tail

tail [OPTION]… FILE… 顯示文件的最後幾行。若沒有指定顯示的行或字符數,則默認顯示末尾10行。如果要顯
示文件末5行:

$ tail -5 file1

2.18 ln

鏈接有兩種,一種被稱為硬鏈接(Hard Link),另一種被稱為符號鏈接(Symbolic Link)。建立硬鏈接時,鏈接文件和被鏈接文件必須位於同一個文件系統中,並且不能建立 指向目錄的硬鏈接。而對符號鏈接,則不存在這個問題。默認情況下,ln產生硬鏈接。如果 給ln命令加上-s選項,則建立符號鏈接。舉例如下,註意ls -l列出文件的硬鏈接數和字節 數:

硬鏈接:

touch hello
ln hello word_h

軟鏈接:

ln -s hello word_s

2.19 tree

這個命令需要下載安裝,ubuntu下

sudo apt-get install tree

按結構樹的形狀顯示目錄和文件

2.20 wc

利用 wc 指令我們可以計算文件的 Byte 數、字數、或是列數,若不指定文件名稱、或 是所給予的文件名為“-”,則 wc 指令會從標準輸入設備讀取數據。

wc -l ./*

-c 或–bytes 或–chars 只顯示 Bytes 數。
-l 或–lines 只顯示列數。
-w 或–words 只顯示字數。

2.21 od

od -tcx file1

-t 指定數據的顯示格式,主要的參數有:
c ASCII字符或反斜杠序列
d[SIZE] 有符號十進制數,每個整數SIZE字節。 f[SIZE] 浮點數,每個整數SIZE字節。
o[SIZE] 八進制(系統默認值為02),每個整數SIZE字節。 u[SIZE] 無符號十進制數,每個整數SIZE字節。
x[SIZE] 十六進制數,每個整數SIZE字節。

2.22 du

查看某個目錄的大小: 以M為單位

du -hm /home/sihai/test

以B為單位

du -hb ./*

以K為單位,4k的整數倍

du -hk ./*

2.23 df

df查看磁盤使用情況

df --block-size=GB df --block-size=MB

文件屬性和用戶用戶組

3.1 whoami

查看當前登陸用戶

3.2 chmod

  • 文字設定法

chmod [who] [+|-|=] [mode] 文件名

操作對象who可是下述字母中的任一個或者它們的組合:

u 表示“用戶(user)”,即文件或目錄的所有者。
g 表示“同組(group)用戶”,即與文件屬主有相同組ID的所有用戶。 o 表示“其他(others)用戶”。
a 表示“所有(all)用戶”。它是系統默認值。

操作符號可以是:

  • +添加某個權限。
  • -取消某個權限。
  • = 賦予給定權限並取消其他所有權限(如果有的話)。

設置mode所表示的權限可用下述字母的任意組合:

r 可讀。 w 可寫。
x 可執行。

  • 數字設定法

chmod [mode] 文件名 我們必須首先了解用數字表示的屬性的含義:

0表示沒有權限,
1表示可執行權限,
2表示可寫權限,
4表示可讀權限,

然後將其相加。所以數字屬性的格式應為3個從0到7的八進制數,其順序是
(u)(g)(o)

例如,如果想讓某個文件的屬主有“讀/寫”二種權限,需要把4(可讀)+2(可寫)= 6(讀/寫)。

比如設置一個文件允許所有用戶可寫

$ chmod a+w file1

設置一個文件允許所有用戶可讀、可寫、不可執行

$ chmod 666 file1

3.3 chown

chown [OPTION]… [OWNER:GROUP] FILE…

chown [OPTION]… –reference=RFILE FILE… 更改某個文件或目錄的屬主和屬組。這個命令也很常用。例如root用戶把自己的一個文件拷貝給用戶A, 為了讓用戶A能夠存取這個文件,root用戶應該把這個文件的屬主設為A, 否則,用戶A無法存取這個文件。

OPTION的主要參數:

  • -R 遞歸式地改變指定目錄及其下的所有子目錄和文件的擁有者。
  • -v 顯示chown命令所做的工作。 比如把一個文件改為sihai用戶和nogroup用戶組所有
$ sudo chown sihai:nogroup file1

註意:

  • chown需要特權用戶才能執行
  • 一個文件的owner和owning group是沒有關聯的。一個文件屬於用戶A,也屬於用戶組 B,並不表示用戶A屬於用戶組B。

3.4 chgrp

chgrp [OPTION]… GROUP FILE…

chgrp [OPTION]… –reference=RFILE FILE… 該命令改變(指定)指定文件所屬的用戶組。其中group可以是用戶組ID,也可以是/etc/group文件中用戶組的組名。

文件名是以空格分開的要改變屬組的文件列表,支持通配 符。如果用戶不是該文件的屬主或超級用戶,則不能改變該文件的組。

OPTION的主要參數:

  • -R 遞歸式地改變指定目錄及其下的所有子目錄和文件的屬組。

查找與檢索

4.1 find

根據文件名查找

find [OPTION] path… [expression] 在目錄中搜索文件,path指定目錄路徑,系統從這裏開始沿著目錄樹向下查找文件。它是一個路徑列表,相互用空格分離,如果不寫path,那麽默認為當前目錄。Expression 是 find命令接受的表達式,find命令的所有操作都是針對表達式的。

一條最常用的find命令--在當前目錄及子目錄下查找所有以file開頭的文件名。

$ find . -name ‘file*‘

$ find / -name ‘vimrc‘

$ find ~ -name ‘*.c‘

4.2 grep

根據內容檢索

grep [options] PATTERN [FILE...]

在指定文件中搜索特定的內容,並將含有這些內容的行輸出到標準輸出。若不指定文件 名,則從標準輸入讀取。
[options]部分包含的主要參數:

  • -c:只輸出匹配行的計數。

  • -I:不區分大小寫(只適用於單字符)。

  • -h:查詢多文件時不顯示文件名。

  • -l:查詢多文件時只輸出包含匹配字符的文件名。

  • -n:顯示匹配行及行號。

  • -s:不顯示不存在或無匹配文本的錯誤信息。

  • -v:顯示不包含匹配文本的所有行。

  • -R: 連同子目錄中所有文件一起查找。

比如到系統頭文件目錄下查找所有包含printf的文件

$ grep ‘printf‘ /usr/include -R

安裝卸載軟件

5.1 apt-get

更新源服務器列表

sudo vi /etc/apt/sources.list

更新完服務器列表後需要更新下源

sudo apt-get update 更新源
sudo apt-get install package 安裝包
sudo apt-get remove package 刪除包
sudo apt-cache search package 搜索軟件包
sudo apt-cache show package 獲取包的相關信息,如說明、大小、版本等 sudo apt-get install package --reinstall 重新安裝包
sudo apt-get -f install 修復安裝
sudo apt-get remove package --purge 刪除包,包括配置文件等 sudo apt-get build-dep package 安裝相關的編譯環境
sudo apt-get upgrade 更新已安裝的包 sudo apt-get dist-upgrade 升級系統
sudo apt-cache depends package 了解使用該包依賴那些包 sudo apt-cache rdepends package 查看該包被哪些包依賴 sudo apt-get source package 下載該包的源代碼
sudo apt-get clean && sudo apt-get autoclean 清理無用的包 sudo apt-get check 檢查是否有損壞的依賴

5.2 deb包安裝

安裝deb軟件包命令: sudo dpkg -i xxx.deb
刪除軟件包命令: sudo dpkg -r xxx.deb
連同配置文件一起刪除命令: sudo dpkg -r --purge xxx.deb
查看軟件包信息命令: sudo dpkg -info xxx.deb
查看文件拷貝詳情命令: sudo dpkg -L xxx.deb
查看系統中已安裝軟件包信息命令: sudo dpkg -l
重新配置軟件包命令: sudo dpkg-reconfigure xxx

5.3 原碼安裝

  • 解壓縮源代碼包
  • cd dir
  • ./configure 檢測文件是否缺失,創建Makefile,檢測編譯環境
  • make 編譯源碼,生成庫和可執行程序
  • sudo make install 把庫和可執行程序,安裝到系統路徑下

磁盤管理

6.1 mount

命令格式:

mount [-t vfstype] -o options device dir

其中:

  • -t vfstype 指定文件系統的類型,通常不必指定。mount 會自動選擇正確的類型。常 用類型有:

光盤或光盤鏡像:iso9660

DOS fat16文件系統:msdos Windows 9x fat32文件系統:vfat Windows NT ntfs文件系統:ntfs

Mount Windows文件網絡共享:smbfs UNIX(LINUX) 文件網絡共享:nfs

  • -o options 主要用來描述設備或檔案的掛接方式。常用的參數有: loop:用來把一個文件當成硬盤分區掛接上系統
    ro:采用只讀方式掛接設備
    rw:采用讀寫方式掛接設備 iocharset:指定訪問文件系統所用字符集

  • device 要掛接(mount)的設備。
  • dir設備在系統上的掛接點(mount point)。
6.1.1 掛接光盤鏡像文件

由 於 近 年 來 磁 盤 技 術 的 巨 大 進 步, 新 的 電 腦 系 統 都 配 備 了 大 容 量 的 磁 盤 系 統, 在 Windows下許多人都習慣把軟件和資料做成光盤鏡像文件通過虛擬 光驅來使用。這樣做有 許多好處:一、減輕了光驅的磨損;二、現在硬盤容量巨大存放幾十個光盤鏡像文件不成問 題,隨用隨調十分方便;三、硬盤的讀取速度要遠 遠高於光盤的讀取速度,CPU占用率大大 降低。其實linux系統下制作和使用光盤鏡像比Windows系統更方便,不必借用任何第三方軟 件包。

1.從光盤制作光盤鏡像文件。將光盤放入光驅,執行下面的命令。

cp /dev/cdrom /home/sunky/mydisk.iso

dd if=/dev/cdrom of=/home/sunky/mydisk.iso

註:執行上面的任何一條命令都可將當前光驅裏的光盤制作成光盤鏡像文件/home/ sunky/mydisk.iso

2.文件和目錄制作成光盤鏡像文件,執行下面的命令。

mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir

註:這條命令將/home/sunky/mydir目錄下所有的目錄和文件制作成光盤鏡像文件/ home/sunky/mydisk.iso,光盤卷標為:mydisk

3.光盤鏡像文件的掛接(mount)

mkdir /mnt/vcdrom

註:建立一個目錄用來作掛接點(mount point)

mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom

註:使用/mnt/vcdrom就可以訪問盤鏡像文件mydisk.iso裏的所有文件了。

6.1.2 掛載U盤

1.檢測存儲設備名稱

sudo fdisk -l

2.掛載存儲設備sdb1到掛載點/mnt目錄

sudo mount /dev/sdb1 /mnt

3.訪問/mnt

4.卸載/mnt

sudo umount /mnt

6.2 umount

卸載命令

sudo umount 掛在點

6.3 dd

dd:拷貝

例1:拷貝光碟(註意,你的光碟是標準的 iso9660格式才可以這麽做)

dd if=/dev/cdrom of=cdrom.iso

例2:將文件sfile拷貝到文件 dfile中。

$ dd if=sfile of=dfile

例3:創建一個100M的空文件

dd if=/dev/zero of=hello.txt bs=100M count=1

/dev/null,外號叫無底洞,你可以向它輸出任何數據,它通吃,並且不會撐著!

/dev/zero,是一個輸入設備,你可你用它來初始化文件,從裏面讀出來的數據都是0。

壓縮包管理

7.1 tar

tar [主選項+輔選項] 文件或者目錄 tar可以為文件和目錄創建檔案。

利用tar命令用戶可以為某一特定文件創建檔案(備份文件),也可以在檔案中改變文件,或者向檔案中加入新的文件。使用該命令時,主選項是 必須要有的,輔選項是輔助使用的,可以選用。

主選項包括:

  • c 創建新的檔案文件。如果用戶想備份一個目錄或是一些文件,就要選擇這個選項。
  • r 把要存檔的文件追加到檔案文件的未尾。
  • t 列出檔案文件的內容,查看已經備份了哪些文件。
  • u 更新文件。用新增的文件取代原備份文件,如果在備份文件中找不到要更新的文件,則把它追加到備份文件的最 後。
  • x 從檔案文件中釋放文件。(常用)

輔選項包括:

  • f 使用檔案文件或設備,這個選項通常是必選的。(常用) k 保存已經存在的文件。
  • m 在還原文件時,把所有文件的修改時間設定為現在。 M 創建多卷的檔案文件,以便在幾個磁盤中存放。
  • v 詳細報告tar處理的文件信息。如無此選項,tar不報告文件信息。(常用) w 每一步都要求確認。
  • z 用gzip來壓縮/解壓縮文件,加上該選項後可以將檔案文件進行壓縮,但還原時也一定要使用該選項進行解壓 縮。(常用)

  • j 用bzip2來壓縮/解壓縮文件,加上該選項後可以將檔案文件進行壓縮,但還原時也一定要使用該選項進行解壓 縮。(常用)

要將文件備份到一個特定的設備,只需把設備名作為備份文件名。 打包:

tar cvf dir.tar dir tar xvf dir.tar dir

打gz壓縮包:

tar zcvf dir.tar.gz dir tar zxvf dir.tar.gz

打bz2壓縮包:

tar jcvf dir.tar.bz2 dir tar jxvf dir.tar.bz2

指定目錄解壓縮:

tar zxvf dir.tar.gz -C ~/test

7.2 rar

打包:把dir壓縮成newdir.rar

rar a -r newdir dir

解包:把newdir.rar解壓縮到當前目錄

unrar x newdir.rar

####7.3zip
打包:

zip -r dir.zip dir

解包:

unzip dir.zip

進程管理

8.1 who

查看當前在線上的用戶情況。所有的選項都是可選的,不使用任何選項時,who命令將 顯示以下三項內容:

login name:登錄用戶名; terminal line:使用終端設備; login time:登錄到系統的時間。

sihai@ubuntu:~/demo$ who -uH
名稱  線路  時間  空閑  進程號 備註 sihai tty2   2014-08-14 13:31        .   6798
sihai tty7  2014-08-14 01:31 舊  2423
sihai pts/1 2014-08-14 01:31 12:00  2843 (:0)
sihai pts/3 2014-08-14 10:39    .   2843 (:0)

####8.2 ps

ps [選項]

ps命令用於監控後臺進程的工作情況,因為後臺進程是不和屏幕鍵盤這些標準輸入/輸 出設備進行通信的,所以如果需要檢測其情況,便可以使用ps命令了。選項部分如下:

  • -e 顯示所有進程。

  • -f 全格式。

  • -h 不顯示標題。

  • -l 長格式。

  • -w 寬輸出。

  • a 顯示終端上的所有進程,包括其他用戶的進程。 r 只顯示正在運行的進程。
  • x 顯示沒有控制終端的進程。

這個命令參數有很多,但一般的用戶只需掌握一些最常用的命令參數就可以了。

最常用的三個參數是u、a、x, 我們首先以root身份登錄系統,查看當前進程狀況

sihai@ubuntu:~$ ps aux
USER    PID %CPU %MEM   VSZ RSS TTY STAT START  TIME COMMAND
root    1 0.0 0.0   3672    2008 ?  Ss  08:46   0:01 /sbin/init

sihai@ubuntu:~$ ps ajx
PPID    PID PGID    SID TTY TPGID STAT  UID TIME COMMAND 4592 6948 6948 4592 pts/3      6948 R+ 1000    0:00 ps ajx

sihai@ubuntu:~$ ps -Lf 2423
UID PID PPID    LWP C NLWP STIME TTY    STAT    TIME CMD
1000    2423 2282 2423 0    4 08:46 ?   Ssl 0:00 gnome-session --session=ubuntu
1000    2423 2282 2465 0    4 08:46 ?   Ssl 0:00 gnome-session --session=ubuntu
1000    2423 2282 2466 0    4 08:46 ?   Ssl 0:00 gnome-session --session=ubuntu
1000    2423 2282 2468 0    4 08:46 ?   Ssl 0:00 gnome-session --session=ubuntu

Head標頭:

USER 用戶名
UID 用戶ID(User ID)
PID 進程ID(Process ID)
PPID 父進程的進程ID(Parent Process id) SID 會話ID(Session id)
%CPU 進程的cpu占用率
%MEM 進程的內存占用率
VSZ 進程所使用的虛存的大小(Virtual Size)
RSS 進程使用的駐留集大小或者是實際內存的大小,Kbytes字節。 TTY 與進程關聯的終端(tty)
STAT 進程的狀態:進程狀態使用字符表示的(STAT的狀態碼)
R 運行 Runnable (on run queue) 正在運行或在運行隊列中等待。
S 睡眠 Sleeping 休眠中, 受阻, 在等待某個條件的形成或接受到信號。 I 空閑 Idle
Z 僵死 Zombie(a defunct process) 進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調 用後釋放。
D 不可中斷 Uninterruptible sleep (ususally IO) 收到信號不喚醒和不可運行, 進程必須等待直到有中 斷發生。
T 停止 Terminate 進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止運行運行。 P 等待交換頁
W 無駐留頁 has no resident pages 沒有足夠的記憶體分頁可分配。 X 死掉的進程
< 高優先級進程 高優先序的進程
N 低優先 級進程 低優先序的進程
L 內存鎖頁 Lock 有記憶體分頁分配並縮在記憶體內 s 進程的領導者(在它之下有子進程);
l 多進程的(使用 CLONE_THREAD, 類似 NPTL pthreads)

  • 位於後臺的進程組
    START 進程啟動時間和日期 TIME 進程使用的總cpu時間
    COMMAND 正在執行的命令行命令 NI 優先級(Nice)
    PRI 進程優先級編號(Priority)
    WCHAN 進程正在睡眠的內核函數名稱;該函數的名稱是從/root/system.map文件中獲得的。 FLAGS 與進程相關的數字標識

8.4 fg

fg [job…]

把指定的後臺作業或掛起作業移到前臺運行。 參數job是一個或多個進程的PID,或者 是命令名稱,或者是作業號(作業號前面要帶一個%號)。

通常在shell中輸入命令啟動進程後,如果該進程需要與用戶交互,那麽此後用戶的鍵 盤輸入都被該進程讀取,直到該進程退出後才出現shell提示符$,這種進程為前臺進程。

如果在命令行的末尾加上&字符,則shell為這個命令創建一個後臺進程,它雖然也可以 輸出到屏幕,但是不能讀取鍵盤輸入,不管執行命令的進程有沒有退出都立刻回到shell提 示符接受下一條命令的輸入。如果該進程也需要讀取鍵盤輸入,則被掛起等待直到用戶用fg 命令把它變成前臺進程。如果一個命令需要較長的處理時間並且不需要與用戶交互,就適合 把它放在後臺執行。

8.5 bg

bg [job…]

把被掛起的進程提到後臺執行。 其中,job是一個或多個進程的PID、命令名稱或者作 業號,在參數前要帶%號。

8.6 kill

向指定進程發送信號

kill [ -signal | -s signal ] pid ...

查看信號編號

kill -l [ signal ]

給一個進程發信號,或終止一個進程的運行。

kill命令如果不帶參數而直接跟pid,就是發給該進程SIGTERM信號,大部分進程收到該 信號就會終止。但是被掛起的進程不能處理信號,所以必須發SIGKILL信號,由系統強制終 止進程。

8.7env

查看當前進程環境變量

$env
  • vim ~/.bashrc 配置當前用戶環境變量
  • vim /etc/profile 配置系統環境變量,配置時需要有root權限

用戶管理

9.1 創建用戶

sudo useradd -s /bin/bash -g sihai -d /home/sihai -m sihai sudo useradd -s /bin/sh -g group -G adm,root xwp

此命令新建了一個用戶xwp,該用戶的登錄Shell是/bin/sh,他屬於group用戶組,同時 又屬於adm和root用戶組,其中group用戶組是其主組。

  • -s 指定新用戶登陸時shell類型

  • -g 指定所屬組,該組必須已經存在

  • -G 指定附屬組,該組必須已經存在

  • -d 用戶家目錄

  • -m 用戶家目錄不存在時,自動創建該目錄

9.2 設置用戶組

sudo groupadd sihai

9.3 設置密碼

sudo passwd sihai

9.4 切換用戶

su 用戶名

su sihai

9.5 root用戶

變成root用戶

sudo su

設置root密碼

passwd

9.6 刪除用戶

userdel 選項 用戶名

常用的選項是-r,他的作用是把用戶的主目錄一起刪除。 例如:

sudo userdel -r sihai

此命令刪除用戶sihai在系統文件(主要是/etc/passwd,/etc/shadow,/etc/ group等)中的記錄,同時刪除用戶的主目錄。

網絡管理

10.1 ifconfig

1.查看網卡信息

 ifconfig 

2.關閉網卡

sudo ifconfig eth0 down 

3.開啟網卡eth0

sudo ifconfig eth0 up 

4.給eth0配置臨時IP

sudo ifconfig eth0 IP

10.2ping

ping [選項] 主機名/IP地址

查看網絡上的主機是否在工作。它向該主機發送ICMP ECHO_REQUEST包。有時我們想從網絡上的某臺主機上下載文件,可是又不知道那臺主機是否開著,就需要使用ping命令查看。

命令中各選項的含義如下:

-c 數目 在發送指定數目的包後停止。
-d 設定SO_DEBUG的選項。
-f 大量且快速地送網絡封包給一臺機器,看它的回應。
-I 秒數 設定間隔幾秒送一個網絡封包給一臺機器,預設值是一秒送一次。
-l 次數 在指定次數內,以最快的方式送封包數據到指定機器(只有超級用戶可以使用此選項)。
-q 不顯示任何傳送封包的信息,只顯示最後的結果。
-r 不經由網關而直接送封包到一臺機器,通常是查看本機的網絡接口是否有問題。
-s 字節數 指定發送的數據字節數,預設值是56,加上8字節的ICMP頭,一共是64ICMP數據字節。

10.3netstat

netstat [選項]

顯示網絡連接、路由表和網絡接口信息,可以讓用戶得知目前都有哪些網絡連接正在運 作。命令中各選項的含義如下:

-a 顯示所有socket,包括正在監聽的。
-c 每隔1秒就重新顯示一遍,直到用戶中斷它。
-i 顯示所有網絡接口的信息,格式同“ifconfig -e”。
-n 以網絡IP地址代替名稱,顯示出網絡連接情形。
-r 顯示核心路由表,格式同“route -e”。
-t 顯示TCP協議的連接情況。
-u 顯示UDP協議的連接情況。
-v 顯示正在進行的工作。

####10.4nslookup

nslookup name

查詢一臺機器的IP地址和其對應的域名。它通常需要一臺域名服務器來提供域名服務。 如果用戶已經設置好域名服務器,就可以用這個命令查看不同主機的IP地址對應的域名。

不帶參數使用nslookup命令時,出現提示符“>”,在後面輸入要查詢的IP地址或域名 並回車即可。如果要退出該命令,輸入exit並回車即可。

sihai@ubuntu:~$ nslookup
> www.sihai.cn
Server: 127.0.0.1
Address:    127.0.0.1#53

10.5 finger

finger [-lmsp] user [user@host …] 查詢用戶的信息,通常會顯示系統中某個用 戶的用戶名、主目錄、停滯時間、登錄時間、登錄shell等信息。如果要查詢遠程機上的用 戶信息,需要在用戶名後面接“@主機名”,采用[用戶名@主機名]的格式,不過要查詢的網 絡主機需要運行finger守護進程。

命令中各選項的含義如下:

-s 顯示用戶的註冊名、實際姓名、終端名稱、寫狀態、停滯時間、登錄時間等信息。
-l 除了用-s選項顯示的信息外,還顯示用戶主目錄、登錄shell、郵件狀態等信息,以 及用戶主目錄下的.plan、.project和.forward文件的內容。
-p 除了不顯示.plan文件和.project文件以外,與-l選項相同。

sihai@ubuntu:~$ finger sihai
Login: sihai    Name: sihai
Directory: /home/sihai  Shell: /bin/bash
On since Mon Sep 8 08:55 (CST) on tty7  14 hours 48 minutes idle On since Mon Sep 8 21:57 (CST) on pts/1 from :0
11 minutes 18 seconds idle
On since Mon Sep 8 23:12 (CST) on pts/2 from :0 6 seconds idle
No mail. No Plan.

常用服務器構建

11.1 ftp

11.1.1ftp服務器

1.安裝vsftpd服務器

sudo apt-get install vsftpd

2.配置vsftpd.conf文件

sudo vi /etc/vsftpd.conf

添加下面設置

anonymous_enable=YES 
anon_root=/home/sihai/ftp 
no_anon_password=YES 
write_enable=YES 
anon_upload_enable=YES 
anon_mkdir_write_enable=YES 
anon_umask=0022

3.重啟服務器,重新加載/etc/vsftpd.conf配置文件

ubuntu12.04下
sudo /etc/init.d/vsftpd restart

ubuntu14.04下
sudo /lib/init/upstart-job vsftpd restart

4.進入你的/home/sihai/ftp目錄下創建一個空目錄,供用戶上傳

cd ~/ftp

mkdir anonymous chmod 777 anonymous

5.測試上傳功能,登陸ftp服務器,進入到anonymous目錄

ftp IP
cd anonymous

6.上傳命令,可以把你當前目錄下的文件上傳到ftp服務器的anonymous目錄

put somefile 
get somefile
11.1.2 ftp客戶端

Ubuntu 默認已經安裝ftp客戶端

11.1.3 lftp客戶端

lftp 也 是 一 種 ftp 客 戶 程 序。 它 是 以 文 本 方 式 操 作 的, 但 是 比 起 圖 形 界 面 更 為 方 便。lftp幾乎具有bash的所有方便功能,Tab 補全,bookmark, queue, 後臺下載等可以 得到支持。用法與ftp類似,主要的指令如下:

put 上傳文件
mput 上傳多個文件 get 下載文件
mget 下載多個文件
mirror 下載整個目錄及其子目錄 mirror –R 上傳整個目錄及其子目錄
!command 調用本地shell執行命令command

註意,有的發行版可能缺省沒有安裝lftp工具,需要用戶自己安裝。如果是Debian或 Ubuntu系統,則安裝lftp軟件包。

sudo apt-get install lftp

11.2 nfs

1.安裝nfs服務器

sudo apt-get install nfs-kernel-server

2.設置/etc/exports配置文件

sudo vi /etc/exports

添加這行配置

/home/用戶名/nfs   *(rw,sync,no_root_squash)

3.在用戶目錄下創建nfs目錄

mkdir /home/用戶名/nfs

4.重啟服務器,重新加載配置文件

sudo /etc/init.d/nfs-kernel-server restart

5.在/home/用戶名/nfs目錄下創建測試文件hello

cd /home/用戶名/nfs touch hello

6.測試服務器,把服務器共享目錄nfs掛在到/mnt節點

sudo mount -t nfs -o nolock -o tcp IP:/home/用戶名/nfs /mnt

7.進入/mnt目錄可以看到hello文件,表示構建成功

8.卸載網絡共享目錄

sudo umount /mnt

11.3ssh

1.安裝ssh服務器

sudo apt-get install openssh-server

2.遠程登陸

ssh 用戶名@IP

其它命令

12.1 終端翻頁

Shift-pageup 
Shift-pagedown

12.2 man

看手冊(叫做manual或man page)。每一個命令和系統函數都有自己的man page。

man man
man read 

查看read命令的man page

man 2 read 

查看read系統函數的man page(在第二個section中,表示為read(2)) man -k read 以read為關鍵字查找相關的man page

12.3 clear

清屏。使光標和提示符回到屏幕第一行。

快捷鍵:Ctrl-l

####12.4 alias
alias [-p] name=value … 將 value 字 符 串 起 個 別 名 叫 name, 以 後 在 命 令 行 輸 入 name,shell 自 動 將 其 解 釋 為value,如果不帶參數執行本命令,或以參數-p執行,則顯示當前定義的別名列表。

$ alias
alias ls=‘ls --color=auto‘ alias rm=‘rm -i‘

12.5 echo

echo [-n] 字符串

在顯示器上顯示一段文字,一般起到一個提示的作用。其中選項n表示輸出文字後不換 行;字符串可以加引號,也可以不加引號。用echo命令輸出加引號的字符串時,將字符串原 樣輸出;用echo命令輸出不加引號的字符串時,將字符串中的各個單詞作為字符串輸出,各 字符串之間用一個空格分割。

查看上一個程序退出數值,正常情況程序退出值是0

echo $?

12.6 date

查看當前時間

12.7 umask

umask [-p] -S [mode]

umask指定用戶創建文件時的掩碼,其中的mode和chmod的命令中的格式一樣。如果不用 mode參數,則顯示當前的umask設置。如果用-S參數,則以符號形式顯示設置。

$ umask 0022
$ umask -S u=rwx,g=rx,o=rx

比如該用戶touch或gedit創建一個文件,則其默認權限為-rw-r-r–,如果該用戶創 建一個可執行文件(比如編譯生成的程序),則其默認權限為-rwxr-xr-x。也就是說,由於 umask的設定,創建的文件默認是不具有g的w權限和o的w權限的,除非用chmod更改權限。

12.8 創建終端

創建終端標簽

Ctrl + Shift + t 

切換標簽

 Alt+n(n=1)

新開終端

Ctrl + Shift + n

關機重啟

關機重啟這些操作都需要有root權限

13.1 poweroff

13.2 shutdown

shutdown -t 秒數 [-rkhncfF] 時間 [警告訊息]

選項:

-t 秒數 : 設定在切換至不同的runlevel之前, 警告和刪除二訊號之間的延遲時間(秒).
-k : 僅送出警告訊息文字, 但不是真的要 shutdown.
-r : shutdown 之後重新開機
-h : shutdown 之後關機.
-n : 不經過 init , 由 shutdown 指令本身來做關機動作.(不建議你用)
-f : 重新開機時, 跳過 fsck 指令, 不檢查檔案系統.
-F : 重新開機時, 強迫做 fsck 檢查.
-c : 將已經正在 shutdown 的動作取消.

例子:

shutdown -r now 立刻重新開機 shutdown -h now 立刻關機
shutdown -k now ‘Hey! Go away! now....‘ 發出警告訊息, 但沒有真的關機 shutdown -t3 -r now 立刻重新開機, 但在警告和刪除processes 之間, 延遲3秒鐘. shutdown -h 10:42 ‘Hey! Go away!‘ 10:42 分關機
shutdown -r 10 ‘Hey! Go away!‘ 10 分鐘後關機
shutdown -c 將剛才下的 shutdown 指令取消,必須切換至其它tty, 登入之後, 才能下此一指令. shutdown now 切換至單人操作模式(不加任何選項時)

註意事項:
時間參數務必要加: 不是用 now, 便是用 hh:mm 或 mm now 其實就是 0 的意思.

13.3 reboot

13.4 查看內核版本信息

uname -a

13.5 查看發行版信息

lsb_release -a

13.6 查看空閑內存

free -m

vim

16.1 vi簡介

vi是“Visual interface”的簡稱,它在Linux上的地位就仿佛Edit程序在DOS上一樣。 它可以執行輸出、刪除、查找、替換、塊操作等眾多文本操作,而且用戶可以根據自己的需 要對其進行定制。Vi不是一個排版程序,它不象Word或WPS那樣可以對字體、格式、段落等 其他屬性進行編排,它只是一個文本編輯程序。 vi沒有菜單,只有命令,且命令繁多。

Vi有三種基本工作模式:

  • 命令模式
  • 文本輸入模式
  • 末行模式。
16.1.1 命令行模式

任何時候,不管用戶處於何種模式,只要按一下ESC鍵,即可使Vi進入命令模式;我們 在shell環境(提示符為$)下輸入啟動Vi命令,進入編輯器時,也是處於該模式下。在該模式 下,用戶可以輸入各種合法的Vi命令,用於管理自己的文檔。此時從鍵盤上輸入的任何字符 都被當做編輯命令來解釋,若輸入的字符是合法的Vi命令,則Vi在接受用戶命令之後完成相 應的動作。但需註意的是,所輸入的命令並不在屏幕上顯示出來。若輸入的字符不是Vi的合 法命令,Vi會響鈴報警。

16.1.2 文本輸入模式

在命令模式下輸入插入命令i、附加命令a 、打開命令o、修改命令c、取代命令r或替換 命令s都可以進入文本輸入模式。在該模式下,用戶輸入的任何字符都被Vi當做文件內容保 存起來,並將其顯示在屏幕上。在文本輸入過程中,若想回到命令模式下,按鍵ESC即可。

16.1.3 末行模式

末行模式也稱ex轉義模式。在命令模式下,用戶按“:”鍵即可進入末行模式下,此時 Vi會在顯示窗口的最後一行(通常也是屏幕的最後一行)顯示一個“:”作為末行模式的提示 符,等待用戶輸入命令。多數文件管理命令都是在此模式下執行的(如把編輯緩沖區的內容 寫到文件中等)。末行命令執行完後,Vi自動回到命令模式。例如:

:sp newfile

則分出一個窗口編輯newfile文件。如果要從命令模式轉換到編輯模式,可以鍵入命令a 或者i;如果需要從文本模式返回,則按Esc鍵即可。在命令模式下輸入“:”即可切換到末 行模式,然後輸入命令。

16.2 vim基礎操作

進入插入模式:

i: 插入光標前一個字符 I: 插入行首
a: 插入光標後一個字符 A: 插入行未
o: 向下新開一行,插入行首 O: 向上新開一行,插入行首

進入命令模式: ESC:從插入模式或末行模式進入命令模式 移動光標:

h: 左移 j: 下移 k: 上移 l: 右移
M: 光標移動到中間行
L: 光標移動到屏幕最後一行行首 G: 移動到指定行,行號 -G
w: 向後一次移動一個字 b: 向前一次移動一個字
{: 按段移動,上移
}: 按段移動,下移 Ctr-d: 向下翻半屏 Ctr-u: 向上翻半屏 Ctr-f: 向下翻一屏 Ctr-b: 向上翻一屏
gg: 光標移動文件開頭 G: 光標移動到文件末尾

刪除命令:

x: 刪除光標後一個字符,相當於 Del
X: 刪除光標前一個字符,相當於 Backspace
dd: 刪除光標所在行,n dd 刪除指定的行數 D: 刪除光標後本行所有內容,包含光標所在字符 d0: 刪除光標前本行所有內容,不包含光標所在字符
dw: 刪除光標開始位置的字,包含光標所在字符

撤銷命令:

u: 一步一步撤銷
U: 一次性撤銷當前行所作的所有操作 Ctr-r: 反撤銷

重復命令:

.: 重復上一次操作的命令

文本行移動:

  • >>: 文本行右移
  • <<: 文本行左移

復制粘貼:

yy: 復制當前行,n yy 復制 n 行
p: 在光標所在位置向下新開辟一行,粘貼

可視模式:

v: 按字符移動,選中文本
V: 按行移動,選中文本可視模式可以配合 d, y, >>, << 實現對文本塊的刪除,復制,左右移動

替換操作:

r: 替換當前字符
R: 替換當前行光標後的字符

查找命令:

/: str查找
n: 下一個
N:上一個

替換命令: 把abc全部替換成123

:%s/abc/123/g

代碼排版:

gg=G: 代碼自動縮進排版

16.3 vim分屏操作

分屏操作:

sp: 上下分屏,後可跟文件名
vsp: 左右分屏,後可跟文件名
Ctr+w+w: 在多個窗口切換

啟動分屏

1.使用大寫O參數進行垂直分屏

$ vim -On file1 file2 ...

2.使用小寫o參數進行水平分屏

$ vim -on file1 file2 ...

註: n是數字,表示分屏的數量,n要大於等於文件個數

關閉分屏

1.關閉當前窗口

ctrl+w c

2.關閉當前窗口,如果只剩最後一個,則退出vim

ctrl+w q

編輯中分屏

1.上下分割當前打開的文件

ctrl+w s

2.上下分割,並打開一個新的文件

:sp filename

3.左右分割當前打開的文件

ctrl+w v

4.左右分割,並打開一個新的文件

:vsp filename

分屏編輯中光標的移動 vi中的光標鍵是h,j,k,l,要在各個屏之間切換,只需要先按一下ctrl+w

1.把光標移動到上邊的屏

ctrl+w k

2.把光標移動到下邊的屏

ctrl+w j

3.把光標移動到右邊的屏

ctrl+w l

4.把光標移動到左邊的屏

ctrl+w h

5.把光標移動到下一個的屏

ctrl+w w

移動分屏 1.向上移動

ctrl+w K

2.向下移動

ctrl+w J

3.向右移動

ctrl+w L

4.向左移動

ctrl+w H

屏幕尺寸

1.增加高度

ctrl+w +

2.減少高度

ctrl+w -

3.讓所有屏的高度一致

ctrl+w =

4.左加寬度

ctrl+w >

5.右加寬度

ctrl+w <

6.右增加n寬 (如:n=30)

ctrl+w n <

文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關註我的微信公眾號:好好學java,獲取優質學習資源。

java工程師linux命令,這篇文章就夠了