shell環境: shell:命令解釋器,是Linux 系統的用戶界面,提供了用戶與內核進行交互操作的一種介面,它接收用戶輸入的命令並把它送入內核去執行。 bash:是GNU 計劃中重要的工具軟體之一,目前也是 Linux 標準的shell ,與sh相容 echo $PATH 顯示當前使用的shel ...
shell環境:
shell:命令解釋器,是Linux 系統的用戶界面,提供了用戶與內核進行交互操作的一種介面,它接收用戶輸入的命令並把它送入內核去執行。
bash:是GNU 計劃中重要的工具軟體之一,目前也是 Linux 標準的shell ,與sh相容
echo $PATH 顯示當前使用的shell
cat /etc/shells 顯示系統使用的所以shell
PATH:決定了shell將到哪些目錄中尋找命令或程式,PATH的值是一系列目錄,當您運行一個程式時,Linux在這些目錄下進行搜尋編譯鏈接。
echo $PATH 查看PATH環境變數的值
linux命令的分類:
內部命令:屬於shell解釋器的一部分
外部命令:獨立於shell解釋器之外的程式
命令的通用格式:
命令字 [選項] [參數]
長選項:例如“ls -a”
短選項:例如“ls --help”
多個短選項可合併使用,例如“ls -alh”
長選項不能合併,只能分開
參數:命令的對象,如文件、目錄名等
查看命令的類型:
type命令:type [選項] [參數]
-p 如果給出的指令為外部指令,則顯示其絕對路徑。
-a 在環境變數“PATH”指定的路徑中,顯示給定指令的信息,包括命令別名。
-t 輸出“file”、“alias”或者“builtin”,分別表示給定的命令為“外部指令”、“命令別名”或者“內部指令”。
[root@localhost ~]# type cd cd is a shell builtin #cd 是一個shell內部命令 [root@localhost ~]# type ifconfig ifconfig is /sbin/ifconfig #ifconfig是一個外部命令
查看命令的位置:
which命令:which 可執行文件名
-n 指定文件名長度指定的長度必須大於或等於所有文件中最長的文件名
-p 與-n參數相同但此處的包括了文件的路徑
-a 將PATH目錄中可以找到指令均列出不止第一個而已
-w 指定輸出時欄位的寬度
-V 顯示版本信息
[root@bogon ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@bogon ~]# which ip
/usr/sbin/ip
[root@bogon ~]#
whereis命令:whereis [選項] 文件名
-b 定位可執行文件。
-m 定位幫助文件。
-s 定位源代碼文件。
-u 搜索預設路徑下除可執行文件、源代碼文件、幫助文件以外的其它文件。
-B 指定搜索可執行文件的路徑。
-M 指定搜索幫助文件的路徑。
-S 指定搜索源代碼文件的路徑。
[root@bogon ~]# whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz
[root@bogon ~]# whereis -b cd
cd: /usr/bin/cd
命令別名:
#alias NAME='VALUE'
僅對當前用戶:~/.bashrc
對所有用戶有效:/etc/bashrc
撤銷別名:unalias
[root@bogon ~]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias netconf='vim /etc/sysconfig/network-scripts/ifcfg-eno16777728' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
命令的補全:
用戶給定的字元串只有一條惟一對應的命令,直接補全,否則再次Tab會給出列表
路徑補全:Tab如果唯一則直接補全,否則再次Tab給出列表
命令的歷史:
歷史文件:~/.bash_history
history命令:顯示曾經執行過的命令
-c: 清空命令歷史
-d: 刪除歷史中指定的命令
#: 顯示最近的# 條歷史
-a: 追加本次會話新執行的命令歷史列表至歷史文件
-n: 讀歷史文件中未讀過的行到歷史列表
-r: 讀歷史文件附加到歷史列表
-w: 保存歷史列表到指定的歷史文件
-p: 展開歷史參數成多個行,但不存在歷史列表中
-s: 展開歷史參數成一行,附加在歷史列表後
命令歷史相關變數:
HISTSIZE :命令歷史記錄的條數;
HISTFILE :指定歷史文件,預設為~/.bash_history;
HISTFILESIZE :命令歷史文件記錄歷史的條數;
HISTTIMEFORMAT=“%F %T“ 顯示時間
HISTIGNORE=“str1:str2:… “ 忽略string1,string2
命令行歷史快捷鍵
上下鍵:可瀏覽之前使用過的命令
ctrl+p:重覆前一個命令
!字元串: 重覆前一個以“字元串”開頭的命令
!num: 按照history 命令輸出中的序號重覆對應命令
!?:字元串: 重覆前一個包含abc的命令
!-n : 重覆n
strl -r:從命令歷史中搜索命令
esc . :調用上一個命令中最後一個參數
!$:調用上一個命令中最後一個參數
!^:調用上一個命令中的第一個參數
!*:調用上一個命令中的全部參數
!n:調用上一個命令中的第n個參數
命令的幫助:
help命令:
用法1:help 內部命令字
用法2:命令字 --help #使用於大多數外部命令
man命令:提供命令幫助的文件
手冊頁存放在/usr/share/man
man 命令的配置文件:/etc/man.config | man_db.conf
man命令操作方法:使用less命令實現
Space: 向文件尾翻屏
b, ^B: 向文件首部翻屏
d, ^D: 向文件尾部翻半屏
u, ^U: 向文件首部翻半屏
RETURN: 向文件尾部翻一行
y :向文件首部翻一行
q: 退出
# :跳轉至第#行 行
1G: 回到文件首部
G:直接到文件尾部
/KEYWORD:字元串搜索 n下一個匹配到的字元串 N上一個
man章節:
1 使用者在shell中可以操作的指令或可執行檔
2 系統核心可呼叫的函數與工具等
3 一些常用的函數(function)與函數庫(library),大部分是C的函數庫(libc)
4 裝置檔案的說明,通常在/dev下的檔案
5 設定檔或者是某些檔案的格式
6 游戲(games)
7 慣例與協定等,例如Linux檔案系統、網路協定、ASCII code等等的說明
8 系統管理員可用的管理指令
9 跟kernel有關的文件
SYNOPSIS 摘要 :
[] :可選內容
<>: 必選內容
a|b :二選一
...: 同一內容可出現多次
紅帽知識庫和官方線上文檔:
http://kbase.redhat.com
http://www.redhat.com/docs
http://access.redhat.com
Linux 的兩種時鐘:
系統 時鐘:由Linux 內核通過CPU 的工作頻率進行的;
硬體 時鐘:主板
hwclock ,clock: 顯示硬體時鐘
-s, --hctosys 以硬體時鐘為準,校正系統時鐘
-w, --systohc 以系統時鐘為準,校正硬體時鐘
時間管理:
date命令:按格式顯示或設置時間
data [選項]... [格式]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
-d, –date=STRING 顯示STRING指定的時間
-f, –file=DATEFILE 類似–date參數顯示DATEFILE文件中的每行時間
-ITIMESPEC, –iso-8601[=TIMESPEC] 以ISO 8601 格式顯示日期/時間。TIMESPEC為”date”(只顯示日期)、”hours”、”minutes”、”senconds”(顯示時間精度)之一,預設為”date”。
-r, –reference=FILE 顯示文件的最後修改時間
-R, –rfc-2822 以RFC-2822相容日期格式顯示時間
-s, –set=STRING 設置時間為STRING
-u, –utc, –universal 顯示或設定為Coordinated Universal Time時間格式
格式:可以使用“+”開頭的字元串指定其格式
%n : 下一行
%t : 跳格
%H : 小時(00-23)
%I : 小時(01-12)
%k : 小時(0-23)
%l : 小時(1-12)
%M : 分鐘(00-59)
%p : 顯示本地 AM 或 PM
%r : 直接顯示時間 (12 小時制,格式為 hh:mm:ss [AP]M)
%s : 從 1970 年 1 月 1 日 00:00:00 UTC 到目前為止的秒數
%S : 秒(00-60)
%T : 直接顯示時間 (24 小時制)
%X : 相當於 %H:%M:%S
%Z : 顯示時區
%a : 星期幾 (Sun-Sat)
%A : 星期幾 (Sunday-Saturday)
%b : 月份 (Jan-Dec)
%B : 月份 (January-December)
%c : 直接顯示日期與時間
%d : 日 (01-31)
%D : 直接顯示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第幾天 (001-366)
%m : 月份 (01-12)
%U : 一年中的第幾周 (00-53) (以 Sunday 為一周的第一天的情形)
%w : 一周中的第幾天 (0-6)
%W : 一年中的第幾周 (00-53) (以 Monday 為一周的第一天的情形)
%x : 直接顯示日期 (mm/dd/yy)
%y : 年份的最後兩位數字 (00.99)
%Y : 完整年份 (0000-9999)
[root@bogon ~]# date "+現在時間是:%Y-%m-%d %H:%M:%S" 現在時間是:2017-05-01 21:59:23 [root@bogon ~]# date "+%Y-%m-%d %H:%M:%S" -d "-3 year" 2014-05-01 21:59:38 ## 顯示三年前的時間 [root@bogon ~]# date "+%Y-%m-%d %H:%M:%S" -d "+10 day" 2017-05-11 22:00:15 ##顯示十天後的時間 [root@bogon ~]# date "+%s" 1493647224 ##顯示十天後的時間
設置時間:
date -s "20161128 10:10:10"
[root@bogon ~]# cal ##顯示日曆 May 2017 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
echo 命令:顯示文字
語法:echo [-neE][ 字元串]
說明:echo 會將輸入的字元串送往標準輸出。echo 需要使用-e 參數來列印轉義字元.
-n 不要在最後自動換行
-e 若字元串中出現以下字元,則特別加以處理,而不會將它當成一般文字輸出:
\a 發出警告聲;
\b 退格鍵
\c 最後不加上換行符號;
\n 換行且游標移至行首;
\r 游標移至行首,但不換行;
\t 插入tab;
\\ 插入\ 字元;
\0nnn 插入nnn (八進位)所代表的ASCII 字元
\xHH 插入HH (十六進位)所代表的ASCII 字元
括弧擴展:{ }
列印重覆字元串的簡化形式
[root@bogon ~]# echo file{1,3,5} file1 file3 file5
''單引號:強引用,單引號里的內容原樣不變,防止任何變數替換
""雙引號:弱引用,可防止通配符擴展,但允許變數替換
``反引號:命令引用,反引號里的指令會替換為執行結果
[root@bogon ~]# echo '$PATH' $PATH [root@bogon ~]# echo "$PATH" /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@bogon ~]# echo `pwd` /root
重定向和管道:
標準輸入輸出:
標準輸入:stdin-0 預設接受來自鍵盤的輸入
標準輸出:stdout-1 預設輸出到終端視窗
標準錯誤:stderr-2 預設輸出到終端視窗
程式:指令+數據
讀取數據:Input
輸出數據:Output
I/O重定向:改變預設位置
重定向操作符:標準輸出和標準錯誤可以重定向到文件
> 把標準輸出重定向到文件
2> 把標準錯誤重定向到文件
&> 把所以輸出重定向到文件
註:>文件內容會被覆蓋,禁止內容覆蓋已有文件:set -c ,強制覆蓋:>|
>> 原有內容基礎上,追加內容
2> 覆蓋重定向錯誤數據流
2>> 追加從定向錯誤數據流
&> 標準輸出和錯誤輸出合併覆蓋重定向
&>> 標準輸出和錯誤輸出合併追加重定向
< 標準輸入重定向
<<終止詞 把多行發送給stdin
[root@bogon ~]# uname -p > kernel.txt [root@bogon ~]# cat kernel.txt x86_64 [root@bogon ~]# uname -r >> kernel.txt [root@bogon ~]# cat kernel.txt x86_64 3.10.0-327.el7.x86_64
管道操作:
管道操作為不同命令提供了協同工作的一種機制,位於管道符號左側的命令輸出的結果,將作為右側命令的輸入(處理對象),同一行命令中可以使用多個管道。 命令1 |命令2 |命令3
[root@bogon ~]# df -Th |grep "/$" /dev/mapper/centos-root xfs 32G 1.3G 31G 4% / [root@bogon ~]# df -Th |grep "/$" |awk '{print $6}' 4%