學習Shell編程,首先要對Shell命令有足夠了解。所以,從本講開始,分類對常用的Shell命令及其常用參數進行講解。因爲本講義並不是專門針對Shell編程或Linux系統管理,所以只講解一些常用的知識。有興趣的童鞋可以課後進行討論。
1.uname
之所以將這個命令作爲第一個介紹,是因爲Linux系統的差異性,有些問題首先要明確操作系統談論起來纔有意義。
如果是簡單的uname命令,將顯示最基本的信息,只是告訴你“老子是Linux”,加上“-a"參數後,該說的就都說了。這裏只需要記住-a 就行了,其他的現用現查就好。
[densintian@rachel ~]$ uname Linux [densintian@rachel ~]$ uname -a Linux rachel 3.16.6-200.fc20.x86_64 #1 SMP Wed Oct 15 13:06:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [densintian@rachel ~]$
2. uptime
系統運行時間
[densintian@rachel ~]$ uptime 23:11:18 up 1:59, 2 users, load average: 0.06, 0.03, 0.05 [densintian@rachel ~]$
3. su
進入根用戶權限(最高權限),在此權限下,一切操作都要謹慎小心。
[densintian@rachel ~]$ uptime 23:11:18 up 1:59, 2 users, load average: 0.06, 0.03, 0.05 [densintian@rachel ~]$
4. exit
Shell的退出指令。當進入su下,exit將退出根用戶模式。如果在一般用戶下,將直接退出Shell界面,如果是遠程終端訪問,將直接關閉Session[root@rachel ~]# exit 登出 [densintian@rachel ~]$
5. pwd
當前的工作目錄。雖然在fedora下,提示符中有當前的目錄信息,但是別的Linux可不一定有。而且fedora下,也都是最後一個層級的目錄信息。比如在$HOME下有一個文件夾叫bin,而根目錄下,也有一個文件夾叫bin,這時候提示符是相同的。所以需要pwd命令來確定當前的工作目錄到底是誰。下面就是這種情況的判斷,請注意目錄的跳轉和提示符的變化
[densintian@rachel bin]$ pwd /bin [densintian@rachel bin]$ cd ~/bin [densintian@rachel bin]$ pwd /home/densintian/bin [densintian@rachel bin]$
6. man
這個命令的名字就是單詞manual的縮寫。功能就是打印命令的手冊。包括常用參數等信息。因爲手冊的長度都比較長,在輸出的過程中,回車是向下延伸一行,空格是翻頁。q是隨時退出。我個人的用法是經常用輸出轉向把手冊弄到文件裏面去看。[densintian@rachel ~]$ man man [densintian@rachel ~]$ man man > 1.txt [densintian@rachel ~]$ cat 1.txt
7. date
這就是一個顧名思義的命令。輸出現在的系統時間。可以簡單的設置一些格式。[densintian@rachel ~]$ date 2014年 11月 01日 星期六 21:46:47 CST [densintian@rachel ~]$ date +%Y/%m/%d.%H:%M:%S 2014/11/01.21:46:26 [densintian@rachel ~]$ date +%Y%m%d%H%M%S #這個參數經常用戶在Shell程序中拼接日誌文件的文件名 20141101214641 [densintian@rachel ~]$
8. ps
查詢運行的進程。主要有三個參數ps -a 當前終端所有進程ps -e 除核心進程外的所有進程ps -f 產生一個完整的列表,作爲非系統管理員的話,前兩個參數用處不是很大,而-f 是經常被用到的。因爲它能夠看出進程間的關係。[densintian@rachel ~]$ ps PID TTY TIME CMD 1740 pts/0 00:00:00 bash 2008 pts/0 00:00:00 vim 2009 pts/0 00:00:00 ps [densintian@rachel ~]$ ps -f UID PID PPID C STIME TTY TIME CMD densint+ 1740 1718 0 21:43 pts/0 00:00:00 -bash densint+ 2008 1740 0 22:02 pts/0 00:00:00 vim densint+ 2010 1740 0 22:02 pts/0 00:00:00 ps -f [densintian@rachel ~]$
可以看到ps 和 ps -f 現實的進程是一樣的,但是-f會現實進程的父進程。-bash 是我們登錄Shell界面的進程,而其他的進程,都是這個進程的子進程。
9. env
Linux系統有很多環境變量,這些變量可以在Shell中直接調用。當然,不用的用戶登錄,env變量會不用。這個東西可以在用戶的.bashrc文件中設定。env命令可以查看全部的環境變量
[densintian@rachel ~]$ env REMOTEHOST=localhost XDG_SESSION_ID=1 HOSTNAME=rachel SHELL=/bin/bash TERM=xterm HISTSIZE=1000 QTDIR=/usr/lib64/qt-3.3 TIME_STYLE=+%Y/%m/%d.%H:%M:%S QTINC=/usr/lib64/qt-3.3/include QT_GRAPHICSSYSTEM_CHECKED=1 USER=densintian ......# 省略了一些過長的變量 SHLVL=1 HOME=/home/densintian LOGNAME=densintian QTLIB=/usr/lib64/qt-3.3/lib LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/1000 DISPLAY=192.168.0.105:0.0 _=/bin/env [densintian@rachel ~]$
10. df
檢查磁盤空間的佔用情況。簡單知道就好,初學的情況下,作爲一個超省資源的操作系統,基本不太考慮佔用情況。
[densintian@rachel ~]$ df 文件系統 1K-blocks 已用 可用 已用% 掛載點 /dev/mapper/fedora_rachel-root 51475068 5724844 43112400 12% / devtmpfs 4050704 0 4050704 0% /dev tmpfs 4061004 80 4060924 1% /dev/shm tmpfs 4061004 980 4060024 1% /run tmpfs 4061004 0 4061004 0% /sys/fs/cgroup tmpfs 4061004 20 4060984 1% /tmp /dev/sda2 487652 132696 325260 29% /boot /dev/sda1 204580 9748 194832 5% /boot/efi /dev/mapper/fedora_rachel-home 1141335660 2603556 1080732540 1% /home [densintian@rachel ~]$
11. init 0/6 & reboot
init 是Linux必不可少的一個引導進程。進程號永遠爲1。這裏我們只講解他的兩個參數,0 和 60 -- 操作系統停機1 -- 操作系統重啓Linux還有一個重啓命令reboot那麼reboot和init 6 有什麼區別呢?'init 6' 調用一系列shutdown腳本(/etc/rc0.d/K*)來使系統優雅關機;
'reboot'並不執行這些過程,reboot更是一個 kernel級別的命令,不對應用使用shutdown腳本。 .
我們應該在通常情況下使用 init 6.
在出問題的狀況下或強制重啓 時使用reboot.
12. which
which可以輸出命令所在的位置[densintian@rachel ~]$ which cd /bin/cd [densintian@rachel ~]$ which ls alias ls='ls --color=auto' #這一行表示的是,這個命令會自動應用“--color=auto”這個參數。 /bin/ls #這是命令的實際位置 [densintian@rachel ~]$
[densintian@rachel ~]$ which ls alias ls='ls --color=auto' /bin/ls [densintian@rachel ~]$ which ll alias ll='ls -l --color=auto' # 通過which 命令,使用者能夠發現,一些命令實際上是由另外的命令添加特別的參數實現的。 /bin/ls [densintian@rachel ~]$
13. who
who 是查看誰正在登錄這臺電腦。管理登錄對於服務器或者在公網上的服務器來說尤其重要。[densintian@rachel ~]$ who densintian :0 2014-11-01 22:47 (:0) #這表示的是直接在服務器上登錄 densintian pts/0 2014-11-01 21:43 (localhost) #pts表示通過終端登錄 [densintian@rachel ~]$