一、shell和核心的關系
1.1核心
1)計算機由各種硬體(運算器--CPU、控制器---CPU 、存儲器、輸入輸出裝置等)組成,系統核心就是使硬體間互相獨立工作和協同工作即對硬體資源的管理、排程等。因為核心過于重要 是以不建議直接對核心操作(對于某些服務需要修改核心參數一般是通過管理工具進行)
2)Linux中具備一些圖形工具如LVM---邏輯卷管理(儲存設備)、RAID磁盤備援陣列
圖形界面的根本是調用腳本,通用性并不強
3)安裝圖形界面: yum groupinstall "X window System" Desktop;啟動:startx
1.2 shell
1)Linux系統中輸入的大多數指令,系統核心不能直接識别,能夠解釋這些指令讓系統核心識别的工具就是shell,是以shell也叫解釋器。
2)shell包裹着核心,接通核心某些API(使用者接口),包括紅帽在内的Linux版本,預設使用bash shell 解釋器
二、bash解釋器的優勢
1)通過上下鍵調取曾經使用的指令(指令很多,可以用history指令查詢)
2)指令或者參數,可以通過tab補全
3)可以批處理(如建立使用者)
4)具備某些實用的環境變量(預設值的某些參數,如PATH、 SHELL)
三、Linux下常用的指令集
3.1指令格式:(指令+參數+對象)
參數:長格式(如--help):服務、程式調試等額外參數
短格式(如-h):執行簡單的指令
對象:要處理的檔案、目錄、使用者等等資源
3.1.1檢視幫助指令
1)help 幫助指令 (屬于Linux内部指令)
2)man 幫助指令 (屬于Linux外部指令)
3)man 用法:man+指令名:用于查詢指令的使用方式和參數
按鍵
用處
空格鍵
向下翻一頁
PaGe down
PaGe up
向上翻一頁
Home
直接前往首頁
End
直接前往尾頁
/
從上至下搜尋某個關鍵詞,如“/linux”
?
從下至上搜尋某個關鍵詞,如“?linux”
N
定位到下一個搜尋到的關鍵詞
定位到上一個搜尋到的關鍵詞
Q
退出幫助文檔
結構名稱
代表意義
NAME
指令的名稱
SYNOPSIS
參數的大緻使用方法
DESCRIPTION
介紹說明
EXAMPLES
示範(附帶簡單說明)
OVERVIEW
概述
DEFAULTS
預設的功能
OPTIONS
具體的可用選項(帶介紹)
ENVIRONMENT
環境變量
FILES
用到的檔案
SEE ALSO
相關的資料
HISTORY
維護曆史與聯系方式
3.2常用系統工作指令
3.2.1 echo指令
用于在終端輸出字元串或者變量提取後的值:
[root@RHEL6 ~]# echo i am a learner
i am a learner
3.2.2 date指令
用于顯示及設定時間的指令,用+開頭的參數:
參數
作用
%t
跳格[Tab鍵]
%H
小時(00~23)
%I
小時(00~12)
%M
分鐘(00~59)
%S
秒(00~59)
%j
%m
%Y
今年中的第幾天
月(01~12)
年
[root@RHEL6 ~]# date "+%Y-%m-%d %H:%M:%S"
2018-04-04 16:20:16
[root@RHEL6 ~]# date -s "20150101 10:10:10" //設定時間
Thu Jan 1 10:10:10 CST 2015
[root@RHEL6 ~]# date
Thu Jan 1 10:10:11 CST 2015
[root@RHEL6 ~]# ntpdate server 192.168.2.1 //指定ntp時間伺服器
3.2.3 reboot 、poweroff 、shutdown
用于裝置重新開機、關閉(必須具備超級管理者權限):
[root@RHEL6 ~]# su test
[test@RHEL6 root]$ poweroff
poweroff: Need to be root
[test@RHEL6 root]$ reboot
reboot: Need to be root
3.2.4 wget指令
用于在終端下載下傳網絡檔案,格式:wget + url(網站位址):
[root@RHEL6 ~]# wget http://www.mqzzl.fun/mu.jpg
--2018-05-07 00:27:27-- http://www.mqzzl.fun/mu.jpg
Resolving www.mqzzl.fun... 47.104.195.140
Connecting to www.mqzzl.fun|47.104.195.140|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 29497 (29K) [image/jpeg]
Saving to: “mu.jpg”
100%[================================================>] 29,497 --.-K/s in 0.02s
2018-05-07 00:27:27 (1.57 MB/s) - “mu.jpg” saved [29497/29497]
-b
背景下載下傳模式
-P
下載下傳到指定目錄
-t
最大嘗試次數
-c
斷點續傳
-p
下載下傳頁面内所有資源,包括圖檔、視訊等
-r
遞歸下載下傳(目前站點所有的目錄和目錄内的内容)
[root@RHEL6 ~]# wget -r -p http://www.mqzzl.fun/
3.2.5 ps指令
用于檢視系統中程序狀态,主要還是抓取PID(端口号):
-a
顯示所有程序(包括其他使用者的程序)
-u
使用者以及其他詳細資訊
-x
顯示沒有控制終端的程序
[root@RHEL6 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19360 1536 ? Ss May06 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S May06 0:00 [kthreadd]
注意:參數使用上,長指令不允許聯合使用;短格式和長格式也不能聯和使用;短格式和短格式可以
3.2.6 top指令
用于動态的監控程序活動和系統負載資訊,類似windows任務管理器:
[root@RHEL6 ~]# top
top - 00:52:12 up 2:16, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 142 total, 1 running, 141 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 1906556k total, 1100336k used, 806220k free, 52916k buffers
Swap: 4194296k total, 0k used, 4194296k free, 812312k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2553 root 20 0 45096 884 584 S 0.3 0.0 0:01.12 udisks-daemon
3003 root 20 0 15036 1256 948 R 0.3 0.1 0:00.10 top
3.2.7 pidof指令
用于查詢某個進行服務的PID值(每個服務程序PID都是唯一的):
[root@RHEL6 ~]# pidof sshd
2764 1402
3.2.8 kill指令
用于終止指定的PID服務:
[root@RHEL6 ~]# pidof httpd
3086 3085 3084 3083 3082 3081 3080 3079 3077
[root@RHEL6 ~]# kill 3086 3085
3084 3083 3082 3081 3080 3079 3077 //隻能殺死指定的PID
3.2.9 killall指令
用于終止一類服務(通過服務名稱):
[root@RHEL6 ~]# killall httpd
[root@RHEL6 ~]# netstat -lnt | grep 80
[root@RHEL6 ~]# //PID被全部殺死
3.3常用系統狀态檢測指令
3.3.1 ifconfig指令
用于檢視本機目前的網絡配置和網絡狀态資訊:
[root@RHEL6 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:BF:DE:31
inet addr:192.168.2.200 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fd7b:a22e:43e6:0:20c:29ff:febf:de31/64 Scope:Global
inet6 addr: fe80::20c:29ff:febf:de31/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8003 errors:0 dropped:0 overruns:0 frame:0
TX packets:7430 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1405291 (1.3 MiB) TX bytes:1303049 (1.2 MiB)
還可以臨時修改IP位址重新開機網卡失效
[root@RHEL6 ~]# ifconfig eth0 add 192.168.2.201
3.3.2 uname指令
用于檢視目前系統相關資訊(核心版本号、硬體架構、主機名稱和作業系統類型等)
-a:完整檢視系統核心、主機名、核心發行版本、節點名、發行時間、硬體名、硬體
台、處理器類型、作業系統名稱等等:
[root@RHEL6 ~]# uname –a
Linux RHEL6 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64
x86_64 x86_64 GNU/Linux
-r:隻檢視系統核心:
[root@RHEL6 ~]# uname -r
2.6.32-431.el6.x86_64
-n:隻顯示主機名:
[root@RHEL6 ~]# uname -n
RHEL6
檢視系統版本:
[root@RHEL6 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)
3.3.3 uptime指令
用于檢視系統負載資訊:
[root@RHEL6 ~]# uptime
02:53:12 up 34 min, 2 users, load average: 0.00, 0.00, 0.00
3.3.4 free指令
用于顯示目前系統中記憶體使用資訊:
[root@RHEL6 ~]# free
total used free shared buffers cached
Mem: 1906556 219524 1687032 0 14432 73100
-/+ buffers/cache: 131992 1774564
Swap: 4194296 0 4194296
注:buffers:磁盤緩存;cached:記憶體緩存
3.3.5 who指令
用于檢視目前登入主機使用者終端資訊:
[root@RHEL6 ~]# who
root tty1 2018-05-07 02:19
root pts/0 2018-05-07 02:37 (192.168.100.1)
3.3.6 last指令
用于檢視所有系統登入記錄:
[root@RHEL6 ~]# last
root pts/0 192.168.100.1 Mon May 7 02:37 still logged in
root pts/0 192.168.100.1 Mon May 7 02:20 - 02:37 (00:17)
root tty1 Mon May 7 02:19 still logged in
reboot system boot 2.6.32-431.el6.x Mon May 7 02:18 - 03:03 (00:44)
3.3.7 history指令
1)用于檢視使用過的指令,可以用!+數字執行曆史指令:
[root@RHEL6 ~]# history
1 history
2 ifconfig
3 history
4 uname -r
5 ping
6 history
[root@RHEL6 ~]# !4
uname –r
2)預設存儲最近的1000條,可以通過修改/etc/profile中的HISTSIZE變量進行變更
3)清空history指令:
-c:全部清空
[root@RHEL6 ~]# history -c
-d+數字:清空指定指令
1 uname -r
2 history
[root@RHEL6 ~]# history -d 1
2 history -d 1
/etc/profile内增加一個參數 HISTCONTROL=ignorespace,可以靈活選擇儲存指令(指令前+空格)
[root@RHEL6 ~]# vi /etc/profile
[root@RHEL6 ~]# source /etc/profile
[root@RHEL6 ~]# history //可以看到沒有儲存uname-n
3.4工作目錄切換指令
3.4.1 pwd指令
用于檢視目前的路徑:
[root@RHEL6 ~]# pwd
/root
3.4.2 cd指令
用于目錄切換
cd ~
傳回目前使用者家目錄下
cd -
傳回上次所在位置
cd .
進入目前目錄
cd ..
進入父目錄(上級目錄)
cd +路徑
最好從根開始
[root@RHEL6 ~]# cd /etc/sysconfig
[root@RHEL6 sysconfig]#
[root@RHEL6 sysconfig]# cd /var/
[root@RHEL6 var]# cd -
/etc/sysconfig
[root@RHEL6 sysconfig]# cd ~
[root@RHEL6 ~]#
[root@RHEL6 var]# cd /var/
[root@RHEL6 var]# cd ../root
3.4.3 ls 指令
用于顯示目前指令的檔案資訊
顯示所有(包括隐藏檔案)
-l
以列顯示檔案屬性、時間、大小等
-d
顯示目錄屬性等
-h
以G/M/K為機關顯示
[root@RHEL6 ~]# ls
anaconda-ks.cfg Documents install.log Music Public Videos
Desktop Downloads install.log.syslog Pictures Templates www.mqzzl.fun
[root@RHEL6 ~]# ls -l Downloads/ //不加參數d顯示檔案夾内的内容
total 0
[root@RHEL6 ~]# ls -ld Downloads/
drwxr-xr-x. 2 root root 4096 Apr 4 15:09 Downloads/ //加參數d顯示檔案夾的屬性
3.5文本編輯指令---增删改查
3.5.1 檢視指令
1)cat:用于檢視純文字檔案,适用于内容較少的檔案:
[root@RHEL6 ~]# cat install.log
Installing libgcc-4.4.7-4.el6.x86_64
Installing setup-2.8.14-20.el6_4.1.noarch
Installing tzdata-2013g-1.el6.noarch
-n 顯示行号
[root@RHEL6 ~]# cat -n install.log
1 Installing libgcc-4.4.7-4.el6.x86_64
2 Installing setup-2.8.14-20.el6_4.1.noarch
3 Installing tzdata-2013g-1.el6.noarch
2)more:适用于檢視長文本,顯示百分比,隻能向下翻頁,不能回翻
[root@RHEL6 ~]# more install.log
Installing filesystem-2.4.30-3.el6.x86_64
--More--(4%)
3)less:适用于檢視長文本,可以上下翻頁
4)head:用于檢視檔案頭部,預設頭10行
–n指定顯示多少:
[root@RHEL6 ~]# head -n 4 install.log
5)tail:用于檢視檔案尾部,預設尾10行
-n 指定顯示多少:
[root@RHEL6 ~]# tail -n 5 install.log
Installing rootfiles-8.1-6.1.el6.noarch
Installing man-pages-3.22-20.el6.noarch
Installing words-3.0-17.el6.noarch
Installing redhat-indexhtml-6-6.el6.noarch
*** FINISHED INSTALLING PACKAGES ***
-f 用于動态檢視
3.5.2 tr指令
用于臨時替換:
[root@RHEL6 Downloads]# cat test.txt
hello
[root@RHEL6 Downloads]# cat test.txt | tr [a-z] [A-Z]
HELLO
3.5.3 diff指令
用于比較多個文本的差別:
[root@RHEL6 Downloads]# diff test.txt test1.txt
1c1,2
< hello
---
> HELLo
> good
注意:以<開始的行屬于檔案1,以>開始的行屬于檔案2。
3.6檔案目錄管理指令
3.6.1 touch指令
用于建立空白檔案:
[root@RHEL6 Downloads]# touch test
[root@RHEL6 Downloads]# ls -l
-rw-r--r--. 1 root root 0 May 7 08:30 test
3.6.2 mkdir指令
用于建立目錄:
[root@RHEL6 Downloads]# mkdir temp
[root@RHEL6 Downloads]# ll
total 4
drwxr-xr-x. 2 root root 4096 May 7 08:34 temp
-p:遞歸建立目錄:
[root@RHEL6 Downloads]# mkdir -p ./a/b/c
[root@RHEL6 Downloads]# ls -d ./a/b/c
./a/b/c
3.6.3 cp指令
用于複制:cp 源檔案 目的檔案:
[root@RHEL6 Downloads]# ls
a temp test
[root@RHEL6 Downloads]# cp test tsep
a temp test tsep
3.6.4 mv指令
用于移動(重命名):mv 源檔案 目的檔案:
[root@RHEL6 Downloads]# mv a b
b temp test tsep
3.6.5 rm指令
用于删除
-r:删除目錄
b temp
[root@RHEL6 Downloads]# rm -r b
rm: descend into directory `b'? y
rm: descend into directory `b/b'? y
rm: remove directory `b/b/c'? y
rm: remove directory `b/b'? y
rm: remove directory `b'? y
Temp
-f:強制删除:
temp
[root@RHEL6 Downloads]# rm -rf temp/
[root@RHEL6 Downloads]#
注意:慎用rm -rf /*
四、組合使用指令集
4.1管道符
把前一個指令原本要輸出到螢幕上的内容,當作後一個指令執行的條件
格式:指令A | 指令B | 指令C | …
如:輸出ps aux指令的行數:
[root@RHEL6 Downloads]# ps aux | wc –l
135
如:修改root密碼:
[root@RHEL6 Downloads]# echo zaq1xsw2 | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
4.2指令行的通配符
*
比對零個或者多個字元
?
比對單個字元
[0-9]
比對任何數字
[a-z]
比對小寫字母
[A-Z]
比對大寫字母
[135]
比對1、3、5中任何一個數字
[root@RHEL6 ~]# ll /dev/[a-z]da
brw-rw----. 1 root disk 8, 0 May 7 02:18 /dev/sda
[root@RHEL6 ~]# ps aux | grep -E ?shd
root 1719 0.0 0.0 66604 1184 ? Ss 02:18 0:00 /usr/sbin/sshd
root 2051 0.0 0.2 100352 4048 ? Ss 02:37 0:02 sshd: root@pts/0
root 6711 0.0 0.0 103252 836 pts/0 S+ 09:14 0:00 grep -E ?shd
4.3轉義字元
4.3.1反斜杠(\)
用于使反斜杠後面的一個變量變成單純字元串:
[root@RHEL6 ~]# echo $SHELL
/bin/bash
[root@RHEL6 ~]# echo \$SHELL
$SHELL
4.3.2單引号(' ')
用于轉義其中所用變量作為單純字元串:
[root@RHEL6 ~]# echo '$SHELL'
4.3.3雙引号(“ ”)
用于保留其中的變量屬性,不進行轉義:
[root@RHEL6 ~]# echo "$SHELL"
4.3.3反引号(` `)
用于把引号裡面的指令執行後傳回結果:
[root@RHEL6 ~]# echo uname -r
uname -r
[root@RHEL6 ~]# echo `uname -r`