Linux 組成 終端terminal 互動式介面 命令提示符 執行命令 執行外部命令 命令別名 命令格式 簡單命令 date 顯示日期和時間 d: 顯示字元串所指的日期與時間。字元串前後必須加上雙引號; s: 根據字元串來設置日期與時間。字元串前後必須加上雙引號; u: 顯示GMT; date d ...
Linux 組成
Linux:kernel+rootfs+庫+程式
kernel: 進程管理、記憶體管理、網路管理、驅動程式、文件系統、安全功能
rootfs: 程式和glibc
庫:函數集合, function, 調用介面(頭文件負責描述)
過程調用:procedure ,無返回值
函數調用:function
程式:二進位執行文件
內核設計流派:
單內核(monolithic kernel) :Linux
把所有功能集成於同一個程式
[root@centos6 ~]#ls /boot/vmlinuz-2.6.32-696.el6.x86_64
/boot/vmlinuz-2.6.32-696.el6.x86_64
微內核(micro kernel) :Windows, Solaris
每種功能使用一個單獨子系統實現
終端terminal
設備終端
鍵盤,滑鼠顯示器
物理終端( /dev/console )
控制台console
虛擬終端(tty :teletypewriters,/dev/tty# ,#為[1-6])
tty可有n 個,Ctrl+Alt+F[1-6]
圖形終端( /dev/tty7 )startx, xwindows
CentOS 6: Ctrl + Alt + F7
CentOS 7: 在哪個終端啟動,即位於哪個虛擬終端
串列終端( /dev/ttyS# )
ttyS
偽終端( pty :pseudo-tty, /dev/pts/# )
pty, SSH 遠程 連接
查看當前的終端設備:tty
互動式介面
互動式介面:啟動終端後,在終端設備附加一個互動式應用程式
GUI :Graphic User Interface
X protocol, window manager, desktop
Desktop:
GNOME (C, 圖形庫gtk),
KDE (C++, 圖形庫qt)
XFCE ( 輕量級桌面)
CLI :Command Line Interface
shell 程式:sh (bourn 史蒂夫· 伯恩),csh,tcsh
ksh (korn),bash (bourn again shell),GPL,zsh
命令提示符
命令提示符:prompt
[root@localhost ~]#
# 管理員
$ 普通用戶
顯示提示符格式
[root@localhost ~]#echo $PS1
修改提示符格式
PS1="\[\e[31m\][\u@\h \W]\\$\[\e[0m\]"
\[\e[31m :開始位 cat /etc/DIR_COLORS 查看顏色代碼
\[\e[0m:結束位
\u 當前用戶
\h 主機名簡稱
\H 主機名
\w 當前工作目錄
\W 當前工作目錄基名
\t 24 小時時間格式
\T 12 小時時間格式
\! 命令歷史數
\# 開機後命令歷史數
PS1="\[\e[1;36m\][\[\e[35m\]\u\e[0m\]@\[\e[33m\]\h \[\e[34m\]\W\[\e[36m\]]\[\e[31m\]\\$\[\e[0m\]"
PS1="\[\e[1;36m\][\[\e[35m\]\u\e[0m\]@\[\e[33m\]\h \[\e[34m\]\W\[\e[36m\]]\[\e[40;31;5m\]\\$\[\e[0m\]"
PS1="\[\e[1;37m\][\[\e[35;4m\]\u\e[0m\]@\[\e[33m\]\h \[\e[34;4m\]\W\e[0m\[\e[36m\]]\[\e[40;33;5m\]\\$\[\e[0m\]"
echo -e '\033[1;43;31;5mmagedu\033[0m'
\033 顏色啟用
43代表背景顏色
31代表字的顏色
5m代表什麼效果
如果想永久保存,可以在/etc/profile.d下建立env.sh來作為保存
自己建立自己操作環境:/etc/profile.d/env.sh‘’
執行命令
輸入命令後回車
提請shell程式找到鍵入命令所對應的可執行程式或代碼,並由其分析後提交給內核分配資源將其運行起來
在shell 中可執行的命令有兩類
內部命令:由shell 自帶的,而且通過某命令形式提供
help 內部命令列表
enable cmd 啟用內部命令
enable –n cmd 禁用內部命令
enable –n 查看所有禁用的內部命令
外部命令:在文件系統路徑下有對應的可執行程式文件
查看路徑:
which --skip-alias ;
whichh:查找並顯示給定(外部)命令的絕對路徑
-n<文件名長度>: 指定文件名長度,指定的長度必須大於或等於所有文件中最長的文件名;
-p<文件名長度>: 與-n參數相同,但此處的<文件名長度>包含了文件的路徑;
whereis
whereis:查找二進位程式、代碼等相關文件路徑
-b: 只查找二進位文件;
-B <目錄>: 只在設置的目錄下查找二進位文件;
-f: 不顯示文件名前的路徑名稱;
-m: 只查找說明文件;
-M<目錄>: 只在設置的目錄下查找說明文件;
-s: 只查找原始代碼文件;
-S<目錄> 只在設置的目錄下查找原始代碼文件;
-u: 查找不包含指定類型的文件。
區別指定的命令是內部或外部命令
type -a COMMAND
type:顯示指定命令的類型
-t: 輸出“file”、“alias”、“builtin”,分別表示給定的指令為“外部指令”、“命令別名”、“內部指令”;
-p: 如果給出的指令為外部指令,則顯示其絕對路徑;
-a: 在環境變數“PATH”指定的路徑中,顯示給定指令的信息,包括命令別名。
執行外部命令
Hash 緩存表
系統初始hash表為空,當外部命令執行時,預設會從PATH 路徑下尋找該命令,找到後會將這條命令的路徑記錄到
hash表中,當再次使用該命令時,shell解釋器首先會查看hash表 ,存在將執行之,如果不存在,將會去PATH 路徑下尋找 。利
用hash 緩存表可大大提高命令的調用速率
hash 常見用法
hash 顯示hash緩存
hash –l 顯示hash緩存,可作為輸入使用
hash –p path name 將命令全路徑path起別名為name
hash –t name 列印緩存中name 的路徑
hash –d name 清除name 緩存
hash –r 清除緩存
命令別名
·顯示當前shell進程所有可用的命令別名
alias
·定義別名NAME,其相當於執行命令VALUE
alias NAME='VALUE'
·在命令行中定義的別名,僅對當前shell 進程有效
·如果想永久有效,要定義在配置文件中
僅對當前用戶:~/.bashrc
對所有用戶有效:/etc/bashrc
·編輯配置給出的新配置不會立即生效。需要bash進程重新讀取配置文件,也就是重新登錄,或使用sourc or 。
·bash 進程重新讀取配置文件
source /path/to/config_file
. /path/to/config_file
·撤消別名:unalias
unalias [-a] name [name ...]
-a 取消所有別名
要想永久撤銷也得在配置文件中刪除
·如果別名同原命令同名,如果要執行原命令,可使用
"\COMMAND"
'COMMAND'
/PATH/COMMAND
命令格式
·COMMAND [OPTIONS...] [ARGUMENTS...]
選項:用於啟用或關閉命令的某個或某些功能
短選項:-c 例如:-l, -h
長選項:--word 例如:--all, --human-readable
參數:命令的作用對象,比如文件名,用戶名等
·註意:
多個選項以及多參數和命令之間使用空白字元分隔
取消和結束命令執行:Ctrl+c ,Ctrl+d
多個命令可以用; 符號分開
一個命令可以用\分成多行
簡單命令
date 顯示日期和時間
-d<字元串>: 顯示字元串所指的日期與時間。字元串前後必須加上雙引號;
-s<字元串>: 根據字元串來設置日期與時間。字元串前後必須加上雙引號;
-u: 顯示GMT;
date -d"tomorrow" +"%F %H:%M:%S"
date -d"1 day ago" +"%F %H:%M:%S"
date -d"1 day " +"%F %H:%M:%S
第一個數字可以是負數,負數表示將來時間,正數表示前面已經過去的時間,第二個參數minute、hour、day、month、week。
%Y year
%m month (01..12)
%d day of month (e.g., 01)
%F full date; same as %Y-%m-%d
%H hour (00..23)
%M minute (00..59)
%S second (00..60)
修改時間:
date + 月日小時分年.秒 或指定日期形式
ntpdate 172.18.0.1(伺服器地址)
ntpdate - set the date and time via NTP
ntpdate [ -46bBdqsuv ] [ -a key ] [ -e authdelay ] [ -k keyfile ]
[ -o version ] [ -p samples ] [ -t timeout ] [ -U user_name ] server [ ... ]
Linux的兩種時鐘
系統時鐘:由Linux 內核通過CPU 的工作頻率進行的,date
硬體時鐘:主板上的
hwclock ,clock: 顯示硬體時鐘
-s, --hctosys 以硬體時鐘為準,校正系統時鐘
-w, --systohc 以系統時鐘為準 , 校正硬體時鐘
--set --date=<日期與時間>:設定硬體時鐘;
--test:僅測試程式,而不會實際更改硬體時鐘;
--utc:若要使用格林威治時間,請加入此參數,hwclock會執行轉換的工作;
時區:/etc/localtime
(centos 7)
timedatectl set-timezone +時區 更改時區
cal 顯示日曆
cal :顯示當前日曆或指定日期的日曆
-l: 顯示單月輸出;
-3: 顯示臨近三個月的日曆;
-s: 將星期日作為月的第一天;
-m: 將星期一作為月的第一天;
-j: 顯示“julian”日期;
-y: 顯示當前年的日曆
關機:halt, poweroff
重啟:reboot
-f: 強制,不調用shutdown
-p: 切斷電源
關機或重啟:shutdown
shutdown [OPTION]... TIME [MESSAGE]
-r: reboot
-h: halt
-c :cancel
TIME:無指定,預設相當於 +1
now: 立刻, 相當於+0
+m: 相對時間表示法,幾分鐘之後;例如 +3
hh:mm: 絕對時間表示,指明具體時間
用戶登錄信息查看命令:
whoami: 顯示當前登錄有效用戶
who: 系統當前所有的登錄會話
w: 系統當前所有的登錄會話及所做的操作
screen 命令:
創建新screen 會話
screen –S [SESSION]
加入screen 會話
screen –x [SESSION]
退出並關閉screen 會話
exit
剝離當前screen 會話
Ctrl+a,d
顯示所有已經打開的screen 會話
screen -ls
恢復某screen 會話
screen -r [SESSION]
echo 命令
功 能:顯示字元
語 法: echo [-neE][ 字元串]
說 明: echo 會將輸入的字元串送往標準輸出。輸出的字元串間以空白字元隔開, 併在最後加上換行號
選項:
-E (預設)不支持 \ 解釋功能
-n 不自動換行
-e 啟用 \ 字元的解釋功能
顯示變數
echo "$VAR_NAME“ 變數會替換,弱引用
echo '$VAR_NAME‘ 變數不會替換,強引用
``最聰明
“” 中間
‘’最傻
啟用命令選項-e,若字元串中出現以下字元,則特別加以處理,而不會將它當成一般文字輸出
\a 發出警告聲 alarm
\b 退格鍵 backspace
\c 最後不加上換行符號
\e escape character 跳過字元
\f form feed 換頁
\n 回車換行,換行且游標移至行首 new line
\r 回車,即游標移至行首,但不換行
\t 插入tab
\\ 插入\ 字元
\0nnn 插入nnn (八進位)所代表的ASCII 字元
\xHH 插入HH (十六進位)所代表的ASCII字元
echo -e '\033[43;31;5mmagedu\033[0m'
\033 顏色啟用
43代表背景顏色
31代表字的顏色
5m代表什麼效果
命令行擴展、被括起來的集合
命令擴展:$( ) 或 ``
把一個命令的輸出列印給另一個命令的參數
echo "This system's name is $(hostname ) "
echo "i am `whoami ` "
括弧擴展:{ }
列印重覆字元串的簡化形式
echo file{1,3,5}
file1 file3 file5
rm -f file{1,3,5}
echo {1..10}
echo {a..z}
echo {000..20..2}
tab鍵
命令補全
內部命令:
外部命令:bash 根據PATH環境變數定義的路徑,自左而右在每個路徑搜尋以給定命令名命名的文件,第一次找到的命令即為要執行的命令
用戶給定的字元串只有一條唯一對應的命令,直接補全否則,再次Tab 會給出列表
路徑補全
把用戶給出的字元串當做路徑開頭,併在其指定上級目錄下搜索以指定的字元串開頭的文件名,如果唯一:則直接補全否則:再次Tab 給出列表
雙擊Tab鍵
command 2Tab 所有子命令或文件補全
string2Tab 以string 開頭命令
/2Tab 顯示所有根目錄下一級目錄,包括隱藏目錄
./2Tab 當前目錄下子目錄,包括隱藏目錄
*2Tab 當前目錄下子目錄,不包括隱藏目錄
~2Tab 所有用戶列表
$2Tab 所有變數
@2Tab /etc/hosts 記錄 (centos7 不支持)
=2Tab 相當於ls –A (centos7 不支持)
命令行歷史
·保存你輸入的命令歷史。可以用它來重覆執行命令
·登錄shell時,會讀取命令歷史文件中記錄下的命令~/.bash_history
·登錄進shell後新執行的命令只會記錄在緩存中;這些命令會用戶退出時“追加”至命令歷史文件中
·重覆前一個命令,有4 種方法
重覆前一個命令 使用上方向鍵,並回車執行
按 !! 並回車執行
輸入 !-1 並回車執行
按 Ctrl+p 並回車執行
·使用up (向上)和down(向下)鍵來上下瀏覽從前輸入的命令
!:0 執行前一條命令(去除參數)
Ctrl + n 顯示當前歷史中的下一條命令,但不執行
Ctrl + j 執行當前命令
!n 執行history 命令輸出對應序號n的命令
!-n 執行history 歷史中倒數第n個命令
!string 重覆前一個以“string ”開頭的命令
!?string 重覆前一個包含string 的命令
!string:p 僅列印命令歷史,而不執行
!$:p 列印輸出上一條命令的最後一個參數的內容
!*:p 列印輸出上一條命令的所有參數的內容
^string 刪除上一條命令中的第一個string
^string1^string2 將上一條命令中的第一個string1 替換為string2
!:gs/string1/string2 將上一條命令中所有的string1 都替換為 string2
ctrl +r 來在命令歷史中搜索命令
Ctrl +g 從歷史搜索模式退出
·要重新調用前一個命令中最後一個參數:
!$ 表示
Esc, . (點擊Esc擊 鍵後鬆開,然後點擊 . 鍵)
Alt+ . (按住Alt擊 鍵的同時點擊 . 鍵)
調用歷史參數
command !^ : 利用上一個命令的第一個參數做cmd的參數
command !$ : 利用上一個命令的最後一個參數做cmd的參數
command !* : 利用上一個命令的全部參數做cmd的參數
command !:n : 利用上一個命令的第n個參數做cmd的參數
command !n:^ 調用第n條命令的第一個參數
command !n:$ 調用第n條命令的最後一個參數
command !n:m 調用第n條命令的第m個參數
command !n:* 調用第n 條命令的所有參數
command !string:^ 以從命令歷史中搜索以string開頭的命令,並獲取它的第一個參數
command !string:$ 以從命令歷史中搜索以string開頭的命令, 並獲取它的最後一個參數
command !string:n 以從命令歷史中搜索以string開頭的命令,並獲取它的第n個參數
command !string:* 以從命令歷史中搜索以 string開頭的命令,並獲取它的所有參數
·命令history
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
-c: 清空命令歷史
-d offset: 刪除歷史中指定的第offset個命令,也就是history列表中的數值
n: 顯示最近的n條歷史
-a: 追加本次會話新執行的命令歷史列表至歷史文件,add
-n: 讀歷史文件中未讀過的行到歷史列表
-r: 讀歷史文件附加到歷史列表
-w: 保存歷史列表到指定的歷史文件,預設為歷史文件.bash_history
-p: 展開歷史參數成多行,但不存在歷史列表中
-s: 展開歷史參數成一行,附加在歷史列表後
·清除已經做過的敏感歷史命令
[root@centos7 ~]#rm -rf /
rm: it is dangerous to operate recursively on ‘/’
rm: use --no-preserve-root to override this failsafe
[root@centos7 ~]#history -w
[root@centos7 ~]#rm -rf .bash_history
[root@centos7 ~]#history -c
命令歷史相關環境變數
·存放在 /etc/profile 或 ~/.bash_profile
·export 變數名="值" 這個只是暫時能用,如果退出所在終端,則會還原。
HISTSIZE : 命令歷史記錄的條數
HISTFILE : 指定歷史文件,預設為~/.bash_history
HISTFILESIZE : 命令歷史文件記錄歷史的條數
HISTTIMEFORMAT=“%F %T “ 顯示時間
HISTIGNORE=“str1:str2*:… “ 忽略str1 命令,str2 開頭的歷史
·控制命令歷史的記錄方式:
環境變數:HISTCONTROL
ignoredups 預設,忽略重覆的命令,連續且相同為“重覆”
ignorespace 忽略所有以空白開頭的命令
ignoreboth 相當於ignoredups, ignorespace 的組合
erasedups 刪除重覆命令
bash 的快捷鍵
Ctrl + l 清屏,相當於clear 命令
Ctrl + o 執行當前命令,並重新顯示本命令
Ctrl + s 阻止屏幕輸出,鎖定
Ctrl + q 允許屏幕輸出
Ctrl + c 終止命令
Ctrl + z 掛起命令
Ctrl + a 游標移到命令行首,相當於Home
Ctrl + e 游標移到命令行尾,相當於End
Ctrl + f 游標向右移動一個字元
Ctrl + b 游標向左移動一個字元
Alt + f 游標向右移動一個單詞尾
Alt + b 游標向左移動一個單詞首
Ctrl + xx 游標在命令行首和游標之間移動
Ctrl + u 從游標處刪除至命令行首
Ctrl + k 從游標處刪除至命令行尾
Alt + r 刪除當前整行
Ctrl + w 從游標處向左刪除至單詞首
Alt + d 從游標處向右刪除至單詞尾
Ctrl + d 刪除游標處的一個字元
Ctrl + h 刪除游標前的一個字元
Ctrl + y 將刪除的字元粘貼至游標後
Alt + c 從游標處開始向右更改為首字母大寫的單詞
Alt + u 從游標處開始,將右邊一個單詞更改為大寫
Alt + l 從游標處開始,將右邊一個單詞更改為小寫
Ctrl + t 交換游標處和之前的字元位置
Alt + t 交換游標處和之前的單詞位置
Alt + N 提示輸入指定字元後,重覆顯示該字元N次
註意:Alt 組合快捷鍵經常和其它軟體衝突
gnome-terminal
應用程式-> 附件-> 終端
支持多個“標簽”shell 的圖形化終端模擬器
Ctrl-Shift-n 創建新視窗
Ctrl-Shift-q 關閉當前視窗
Ctrl-Shift-t 創建一個標簽頁
Ctrl-Shift-w 關閉一 個標簽頁
Ctrl-PaUp/PgUn 切換到下一個/ 前一個標簽頁
Ctrl-Shift-c 複製選中的文本
Ctrl-Shift-v 把文本粘帖到當前游標處