linux之bash shell
GNU bash
========================================================
通常計算機硬件是由運算器、控制器、存儲器、輸入/輸出設備等等這些物理設備共同組成的,而能夠讓機箱內各種硬件設備各司其職的東西就叫做系統內核。Linux系統的內核負責驅動硬件、管理活動和分配/管理硬件資源等等任務,如此說來系統內核對計算機正常穩定的運行來講可真的是太重要了,因此一般不建議直接去編輯內核中的參數,而是讓用戶通過基於“系統調用接口”開發出的程序/服務來管理計算機,這樣一層層環環相扣來滿足咱們的日常工作需要。
Shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。它接收用戶輸入的命令並把它送入內核去執行。
我們可以使用SHELL實現對Linux系統的大部分管理例如:
1. 文件管理
2. 用戶管理
3. 權限管理
4. 磁盤管理
5. 軟件管理
6. 網絡管理
......
內容提要:
Linux控制臺使用
系統與硬件
bash shell提示符
shell 語法
bash 特性
Linux獲得幫助
1 Linux控制臺使用
虛擬終端和控制臺
虛擬終端
屏幕和鍵盤只是一個終端,可能不夠用,又不想增加設備投入,就產生了虛擬終端。像gnome-terminal,urxvt,mlterm,xterm等等:
是一個程序,職責是模擬終端設備,和虛擬終端的區別表面上在於它以 GUI 形式的窗口出現,內部則是程序結構和系統控制結構有所不同,但本質上差不多。
控制臺tty
顯示系統消息的終端就叫控制臺,Linux 默認所有虛擬終端都是控制臺,都能顯示系統消息。
但有時專指CLI下的模擬終端設備的一個程序,和gnome-terminal,urxvt,mlterm,xterm等相同,只是CLI和GUI界面的區別。一般console有6個,tty1-6,CTRL+ALT+fn切換。
控制臺切換
Linux 預設的情況下會提供六個Terminal 來讓使用者登入, 切換的方式為使用:[Ctrl] + [Alt] + [F1]~[F6]的組合按鈕。
圖形界面切換到字符界面終端: Ctrl+Alt+F2-6
切換到圖像界面 Alt+F1或按ctrl+alt+F1
字符界面之間切換: [Alt] + [Fn]
虛擬終端(pty、pts)
如果我們遠程telnet到主機時,需要一個終端交互。這就是虛擬終端pty(pseudo-tty)。而 pts/ptmx(pts/ptmx結合使用,進而實現pty)
偽終端(/dev/pty/)這個是終端的發展,為滿足現在需求(比如網絡登陸、xwindow窗口的管理)。
偽終端(Pseudo Terminal)是成對的邏輯終端設備,例如/dev/ptyp3和/dev/ttyp3(或著在設備文件系統中分別是/dev/pty/m3和/dev/pty/s3)。
已經打開的終端上開啟新窗口、並列、切換、縮小、放大
放大:ctrl+shift+"+"
縮小 ctrl -
新建一個獨立窗口 ctrl+shift+n
新建一個並列窗口 ctrl+shift+t
2 系統與硬件
2.1 Linux硬件資源管理
1. 查看系統pci設備
lspci 列出所有的pci設備,比如主板、聲卡、顯卡、網卡等。
通過lspci -v 可以查看更詳細信息。
2. 查看cpu信息
more /proc/cpuinfo
3. 查看內存信息
more /proc/meminfo
free -m
free -h
4. 查看磁盤分區信息
fdisk -l
2.2 常見文件系統類型
點擊這裏 | 點擊這裏 |
---|---|
文件系統格式 | 備註 |
msdos | dos文件系統類型 |
vfat | 支持長文件名的DOS分區文件系統類型 |
iso9660 | 光盤格式文件系統類型 |
ext2/ext3/ext4 | Linux文件系統類型 |
xfs | Linux下高性能的日誌文件系統,RHEL7 默認文件系統類型 |
3 bash shell提示符
===================
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
[root@localhost ~]# -->root用戶提示符
[test@localhostr ~]$ -->普通用戶提示符
PS1常用的參數含義如下:
\d :#代表日期,格式為weekday month date,例如:"Mon Aug 1"
\H :#完整的主機名稱
\h :#僅取主機的第一個名字
\t :#顯示時間為24小時格式,如:HH:MM:SS
\T :#顯示時間為12小時格式
\A :#顯示時間為24小時格式:HH:MM
\u :#當前用戶的賬號名稱
\v :#BASH的版本信息
\w :#完整的工作目錄名稱
\W :#利用basename取得工作目錄名稱,所以只會列出最後一個目錄
\# :#下達的第幾個命令
\$ :#提示字符,如果是root時,提示符為:# ,普通用戶則為:$
[root@localhost ~]# date
2012年 10月 24日 星期三 09:38:54 CST
[root@localhost ~]# whoami
root
[root@localhost ~]# useradd jack
[root@localhost ~]# passwd jack
Changing password for user jack.
New UNIX password:
BAD PASSWORD: it is WAY too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
4 shell 語法
=====================
命令 選項 參數
[root@localhost ~]# ls
[root@localhost ~]# ls -a
[root@localhost ~]# ls -a /home
命令:整條shell命令的主體
選項:會影響會微調命令的行為 //通常以 -, --
- 短格式,比如-a -l 和 -al等價
--長格式
參數:命令作用的對象,一般情況下參數是文件或目錄。
5 bash基本特性
系統的shell:cat /etc/shells
當前系統默認的shell:echo $SHELL
1. 自動補全<tab> //Tab只能補全命令和文件 RHEL6
# ls /etc/sysconfig/network-scripts/
# ls /etc/sysconfig/network-scripts/ifcfg-eth0
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# service network restart
# service sshd restart
# date -s 12:30
2. 快捷鍵
^C 終止前臺運行的程序 //ping 172.16.8.100
^D 退出 等價exit
^L 清屏
^A 光標移到命令行的最前端 //編輯命令
^E 光標移到命令行的後端 //編輯命令
^U 刪除光標前所有字符 //編輯命令
^K 刪除光標後所有字符 //編輯命令
^R 搜索歷史命令,利用關鍵詞
Alt+. 引用上一個命令的最後一個參數,等價於!$,服務器端使用
ESC, .引用上一個命令的最後一個參數,等價於!$
# ls /etc/sysconfig/network-scripts/ifcfg-eth0
# cat ESC .
3. 歷史命令
# history
a. 光標上下鍵
b. ^R //搜索歷史命令(輸入一段某條命令的關鍵字:必須是連續的)
c. !220 //執行歷史命令中第220條命令
!字符串 //搜索歷史命令中最近一個以xxxx字符開頭的命令,例如!ser
!$ //引用上一個命令的最後一個參數
示例1:
[root@instructor ~]# ls /root /home
[root@instructor ~]# cd !$
cd /home
示例2:
[root@instructor ~]# ls /root /home
[root@instructor ~]# touch !$/file1
touch /home/file1
示例3:
[root@instructor ~]# service nfs restart
[root@instructor ~]# ls
[root@instructor ~]# date
[root@instructor ~]# !se
4. 命令別名
# alias //查看系統當前的別名
ll=‘ls -l --color=tty‘
# alias localhost=‘cat /etc/sysconfig/network-scripts/ifcfg-eth0‘ //建立別名(臨時的,僅在當前Shell生效)
# unalias localhost //取消localhost這個別名
[root@localhost ~]# type -a ls
ls is aliased to `ls --color=auto‘
ls is /bin/ls
[root@localhost ~]# /bin/ls
[root@localhost ~]# ls //別名優先
[root@localhost ~]# \ls //跳過別名
[root@localhost ~]# cp -rf /etc /tmp
[root@localhost ~]# cp -rf /etc /tmp
[root@localhost ~]# \cp -rf /etc /tmp
永久別名:
[root@localhost ~]# gedit /etc/bashrc //添加如下行
alias localhost=‘cat /etc/sysconfig/network-scripts/ifcfg-eth0‘
6 Linux獲得幫助
如何判斷一個命令是內部命令還是外部命令呢?
type
#help可以列出系統所有內部命令
內部命令一般可以使用 help 命令,查看幫助
1. 命令 --help
# ls --help
用法:ls [選項]... [文件]...
ls 常見選項
-a all,查看目錄下的所有文件,包括隱藏文件
-l 長列表顯示
-h human 以人性化方式顯示出來
-d 只列出目錄名,不列出其他內容
-t 按修改時間排序
-S 按文件的Size排序
-r 逆序排列reverse
-i 顯示文件的inode號(索引號)
# date --help
Usage: date [OPTION]... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
# date
# date +%H
# date +%F
# date 0214080014
# date 0214080014.00
2. man 手冊名 (針對命令幫助,針對配置文件幫助,針對函數幫助)
[root@localhost ~]# man man
MANUAL SECTIONS
The standard sections of the manual include:
1 User Commands
2 System Calls
3 C Library Functions
4 Devices and Special Files
5 File Formats and Conventions
6 Games et. Al.
7 Miscellanea
8 System Administration tools and Deamons
命令幫助: 章節1,章節8
函數幫助: 章節2,章節3
文件格式: 章節5
一般情況是不需要使用章節號,例如:
# man ls
# man useradd
# man setfacl (/EXAMPLES)
技巧1:按章節查詢
/usr/bin/passwd 修改用戶口令命令
/etc/passwd 包含用戶信息的配置文件
# man -f passwd 列出所有章節中的passwd手冊
# man 1 passwd passwd命令的幫助
# man 5 passwd 用戶配置文件的幫助
技巧2:在所有章節中查詢
# man -a passwd
3. 官方手冊
http://docs.redhat.com Enterprise Linux (5/6/7)
http://www.mysql.com docs
4. baidu, google
man搜索:
/ -a,從上往下,n向下繼續搜索,N向上繼續搜索
?-a,從下往上
[]可選項
<>必選
...可以出現多次
|多選一
{}分組,無特殊意義
MAN:
NAME:命令名稱及功能簡要說明
SYNOPSIS:用法說明,包括可用的選項
DESCRIPTION:命令功能的詳盡說明,可能包括每一個選項的意義
OPTIONS:說明每一個選項意義
FILES:此命令相關的配置文件
BUGS:
EXAMPLES:使用示例
SEE ALSO:另外參照
==========================================================
本節作業:
1. 完成課堂中學習的所有內容
2. 學習bash shell 命令的搜索順序 hash aliase builtin $PATH keyword function
3. mysql openstack docker zabbix
linux之bash shell