馬哥預習視頻第三天
linux 根文件系統
回顧:linux文件系統的特性,命令的使用幫助,常用的命令
如何使用幫助,內部命令help,外部man
官方文檔
自帶文檔(README,CHANGELOG,INSTALL)
發行版的文檔
Linux 內核:documentation
man非常重要:manual,使用手冊
章節有很多whatis keyword
man # KEYWORD
SECTION:
NAME:
SYNOPSIS
[],<>,|,{}
..
控制命令
space,b
enter,k
ctrl+d,ctrl+u
q
#G
/keyword
?keyword
基礎命令:pwd,cd,ls,echo,date,clock,cal,hwclock,cat,tac,file,type,tty,shutdown,reboot,
linux的組成部分
硬件的組成部分,由內而外,能夠操作硬件的只能是內核,因此內核整個把硬件封裝起來,所有硬件提供的hardware被隱藏起來,把硬件的功能轉化為了系統調用,程序要和內核打交道,要通過系統調用。內核把硬件隱藏起來,抽象為系統調用。外面要打交道,需要通過系統調用。文件系統,硬件功能,安全加密等,很多通用的功能在內核。所有的工作要通過應用程序。也可以通過庫函數來實現,庫只是為了簡化程序員研發困難度的,有了庫以後可以把很多功能提供成公共功能模塊,庫文件沒有獨立單獨的執行入口,只能被其他程序調用時方可運行。各種應用程序,程序員研發應用程序時調用了庫,這個程序執行啟動為進程時,首先把它依賴的庫裝載到內存中才能運行的,因為庫本身就是這個程序的組成部分。如果一個程序員在開發時, 調用了庫,在編譯時做了靜態編譯(程序員編譯好以後,也調用了庫,但在編譯的時候把所調用的每一個庫都直接編譯到程序中去,把每一個用到的庫復制了一個副本,直接放在程序中,程序到任何位置都能運行)
linux的文件系統:
linux要用的庫,是由glibc提供,
程序編譯方式:
動態鏈接
靜態鏈接
進程的類型:
終端:硬件設備,關聯一個用戶接口
與終端相關:通過終端啟動
與終端無關:操作引導啟動過程當中自動啟動
操作系統的組成:
靜態:內核文件(kernel),應用程序(application)
文件系統:層級結構,方便去查找每一個文件,
FHS;
filesystem hierachy standard標准文件系統
/bin:供所有用戶使用的二進制用戶文件;
/sbin:供系統管理員使用的工具程序;
/boot:引導加載器必須用到的各靜態文件:kernel,initramfs(initrd),grub等
/dev:所有硬件設備的設備文件,存儲特殊文件或設備文件;
設備有兩種類型:字符設備(線性設備)、塊設備(隨機設備);
/etc:系統程序的靜態配置文件,只能是靜態
/home :普通的家目錄的集中位置;一般每個普通用戶的家目錄默認此目錄下與用戶同名的子目錄,/home/USERNAME
/root:管理員的家目錄;可選;
/lib:為系統啟動或根文件系統上的應用程序(/bin,/sbin等)提供共享庫以及為內核提供內核模塊,
libc.so.*:動態鏈接的C庫;
ld*:運行時鏈接器/加載器;
modules:用於存儲內核模塊的目錄;
/lib64:64位系統特有的存放64位共享庫的路徑;
/media:便攜式設備掛載點,cdrom,floppy等;
/mnt:其他文件系統的臨時掛載點;
/opt:附加應用程序的安裝位置;可選路徑
/srv:當前主機為服務提供的數據;主機特有
/tmp:為那些會產生臨時文件的程序提供的用於存儲臨時文件的目錄;可供所用戶執行寫入操作;有特殊權限;
/usr:/usr hierarchy,全局共享的只讀數據路徑;重要
bin,sbin
lib,lib64
include:C程序頭文件;
share:命令手冊頁和命令自帶文檔等架構特有的文件存放位置
local:另一個層級目錄;
X11R6:x-windows程序的安裝位置
src:程序源代碼文件的存儲位置
/usr/local:local hierarchy,讓系統管理員安裝本地應用程序;也通常用於安裝第三方程序;
/var:/var hierarchy,存儲常發生變化的數據的目錄;
cache application cache data
lib variable state information
local variable data for /usr/local
lock lock files
log log files and directories
opt variable data for /opt
run data relevant to running processes
spool application spool data
tmp temporary files preserved between system reboots
/proc:基於內存的虛擬文件系統,用於內核及進程存儲其相關信息:他們多為內核參數,例如net.ipvt4.ip_forward,虛擬為net/ipv4/ip_forward,存儲於/proc/sys/,因此期完整路徑為/proc/sys/net/ipv4/ip_forward;
/sys:sysfs虛擬文件系統提供了一種比proc更為理想的訪問內核數據的途徑;其主要作用在於為管理linux設備提供一種統一模型的接口;
bash基礎特性
linux基礎命令及命令歷史
linux系統上的文件類型:
-:常規文件:即f;
d:directory,目錄文件:完成路徑映射的
b:block device,塊設備文件,以“block”為單位進行隨機訪問;特殊文件
c:charactor device,字符設備文件,支持以“character”
為單位進行線性訪問;
major number:主設備號,用於標識設備類型,進而確定要加載的驅動程序
minor number:次設備號,用於標識同一類型的不同的設備;
8位二進制:0-255
l:symbolic link,符號鏈接文件;
p:pipe,命名管道;
s:socket,套接字文件;兩個進程通信時套接的;
基本命令:
命令類型:
外部命令
shell內嵌命令原名被隱藏
bash:
type COMMAND
內部:builtin
外部:顯示為命令文件路徑;
注意:命令可以有別名;別名可以與原名相同,此時原名被隱藏;此時如果要運行原命令,則使用\COMMAND;
命令別名:
獲取所有可用別名的的定義;
~]# alias
定義別名:
~]#alias NAME='COMMAND'
撤銷別名:
~]#unalias 有效NAME
注意:僅對當前shell進程有效
which命令
顯示命令完整路徑
which [options] programname [...]
--skip-alias:忽略別名
whereis 命令
whereis - locate the binary, source, and manual page files for a command
whereis [options] name...
-b:僅搜索二進制程序路徑:
-m:僅搜索使用手冊文件路徑
who命令:
who - show who is logged on
who [OPTION]...
-b:系統此次啟動的時間;
-r:運行級別;
w命令:
增強版的who命令;
bash的基礎特性:
命令歷史:shell進程會其回話中保存此前用戶提交執行過的命令;
~]# history
定制history的功能,可通過環境變量實現;
HISTSIZE:shell進程可保留的命令歷史的條數;
HISTFILE:持久保存命令歷史的文件;
.bash_history (ls -a 家目錄下的隱藏文件)
HISTFILESIZE:命令歷史文件的大小
echo $HISTFILESIZE 結果1000
history -c清空命令歷史 history -r 恢復
history -r:把文件讀取命令歷史至歷史列表中;
history -d: 刪除指定命令history -d 100
history -w:把歷史列表中的命令追加至歷史文件中; (保存到.bash_history裡)
history #:顯示最近的#條命令;
調用命令歷史列表中的命令:
!#:再一次執行歷史列表中的第#條命令;
!!:再一次執行上一條命令;
!STRING:再一次執行命令歷史列表中最近一個以STRING開頭的命令;
注意:命令的重復執行有時候需要依賴於冪等性;
調用上一條命令的最後一個參數:
快捷鍵:ESC,. 按ESC松開,再按.
字符串:!$
控制命令歷史記錄的方式:
環境變量:HISTCONTROL ignoredups
ignoredups:忽略重復的命令;
ignorespace:忽略以空白字符開頭的命令;
ignoreboth:以上兩者同時生效;
修改變量的值:(僅對當前shell有效)
NAME='VALUE'
回顧:
FHS、命令及bash命令歷史
FHS:linux的根文件系統是有特定格式標准,由某種層級結構組成的,其中有好多個一級子目錄,任何一個程序都有四部分組成,這四個部分有
二進制程序文件bin,通常安裝操作系統自身需要的
庫文件lib,
配置文件etc ,
幫助文件usr
普通用戶家目錄home,
管理員的家目錄root,
放引導文件boot,
掛載點media,mnt。
兩個虛擬文件proc,sys
臨時文件tmp,
為服務提供數據srv,
獨立的文件opt
設備目錄,dev
usr下可以有很多二進制程序,獨立的用來專門提供全局共享的只讀文件路徑,經常用來安裝程序
bin,sbin,lib,lib64,share。local。。
var幾個存放文字會經常發生變化
cache緩存,lib,log,。。。
命令:which,whereis,who,w,alias,unalias
命令歷史:history
文件類型:-,d,b,c,l,p,s
linux基礎知識
bash的基礎特性:
命令補全:
shell程序在接收到用戶執行命令的請求,分析完成之後,最左側的字符串會被當成命令;
命令處理機制:
查找內部命令:
根據PATH環境變量中設定的目錄,自左而右逐個搜索目錄下的文件名;
給定的打頭字符串如果能唯一標識某命令程序文件,則直接補全;如果不能唯一標識某命令程序文件,再擊tab鍵,會給出列表;
路徑補全:
在給定的起始路徑下,以對應路徑下的打頭字串來逐一匹配起始路徑下的每個文件;
tab:
如果能唯一標識,則直接補全;
否則,再一次tab,給出列表;
目錄管理類的命令:
mkdir,rmdir,
mkdir:make directory
mkdir [OPTION]... DIRECTORY...
重要: mkdir /tmp/x/y/z
注意: z(機名),方為命令的作用對象;機名之前的路徑必須要存在;
-p:自動按需創建父目錄;
-v:verbose,顯示詳細過程;
-m MODE(選項參數):在創建目錄時設置權限的;否則默認權限
rmdir:remove empty director
僅用於刪除空目錄
rmdir [OPTION]... DIRECTORY...
-p:刪除某目錄後,如果其父目錄為空,則一並刪除
-v:顯示過程;
問題1:如何創建/tmp/x/y1,/tmp/x/y2,/tmp/x/y1a,/tmp/x/y1/b?
問題2:如何創建a_c,a_d,b_c,b_d:
mkdir {a,b}_{c,d}
問題3:創建如下目錄結構:
/tmp/mysysroot/
bin
sbin
etc
sysconfig
network_scripts
usr
bin
sbin
local
bin
sbin
etc
lib
lib
lib64
var
cache
log
run
/tmp/mysysroot
├── bin
├── etc
│ ├── sysconfig
│ └── network-scripts
│
│
├── sbin
├── usr
│ ├── bin
│ ├── lib
│ ├── lib64
│ ├── local
│ │ ├── bin
│ │ ├── etc
│ │ ├── lib
│ │ └── sbin
│ └── sbin
└── var
├── cache
├── log
└── run
bash的基礎特性之一:命令行展開
~:自動展開為用戶的家目錄,或指定的用戶的家目錄;
{}:可承載一個以逗號分隔的路徑列表,並能夠將其展開為多個路徑;
例如:/tmp/{a,b},相當於/tmp/a /tmp/b
centos7:安裝tree命令;yun install tree
tree命令:
tree [option] [directory]要顯示的層級;
-L level:指定
bash的基礎特性:命令的執行狀態結果
命令執行的狀態結果:
bash通過狀態返回值來輸出此結果:
成功:0
失敗:1-255
命令執行完成之後,其狀態返回值保存於bash的特殊變量$!中;
注意:立即獲取,只能獲得最近一條的狀態結果
命令正常執行時,有的還會有命令返回值;
根據命令及其功能不同,結果各不相同;
命令的狀態返回值(狀態結果),命令自己的運行結果
狀態結果:看返回值
命令結果:執行的命令
可以引用命令的執行結果:
$(COMMAND)
或者`COMMAND` 反引號,引用命令的執行結果
bash的基礎特性:引用
強引用:'' 其內部字串直接顯示
弱引用:"" 變量會替換,會顯示變量中所存儲的值
命令引用:`` 建議使用$()
bash的基礎特性:快捷鍵
ctrl+a:跳轉至命令行首
ctrl+e:跳轉至命令行尾
ctrl+u:刪除行首到光標所在處之間的所有字符
ctrl+k:刪除光標所在處到行尾的所有字符
ctrl+l:清屏,相當於clear(目前不能用)
linux文件查看及管理
文本查看類命令:cat,tac,head,tail,more,less
分屏查看命令:more和less
cat /etc/rc.d/init.d/functions 記住這個路徑
more命令:
more FILE
特點:翻屏至文件尾部後自動退出;
less命令:
less FILE
head命令:
查看文件的前n行:
head [options] FILE
-n #
-#
tail命令:
查看文件的後n行:
tail [options] FILE
-n #
-#
-f:查看文件尾部內容結束後不退出,跟隨顯示新增的行;
stat命令:
stat - display file or file system status
stat FILE...
文件:兩類數據
元數據:metadata
數據:data
區別意思:一本書前面有索引,索引幫助快速檢索,索引也需要占用空間,目錄就是元數據,正文才叫數據;
時間戳:
訪問時間Access: 2016-07-29 13:12:46.140365682 +0800
更改時間Modify: 2016-07-29 13:12:43.255365765 +0800
最近改動Change: 2016-07-29 13:12:43.255365765 +0800
stat看到的是元數據,cat看到的是數據
touch命令:
change file timestamps
touch [OPTION]... FILE...
-c:指定的文件路徑不存在時不予創建;
-a:僅修改access time
-m:僅修改modify time
-t STAMP
[[CC]]YY]MMDDhhmm[.ss]
文件管理類命令及變量基礎
文件管理工具:cp,mv,rm
cp命令:copy
源文件;目標文件;
文件復制,新建一個文件,復制文件的數據,不是
元數據
單源復制:cp [OPTION]... [-T] SOURCE DEST(目標目錄) 單個文件(文件或目錄)
多遠復制:cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
targe目標之一
單源復制:
如果DEST不存在:則事先創建此文件,並復制源文件的數據流至DEST中;
如果DEST存在:
如果DEST是非目錄文件:則會覆蓋目標文件;
如果DEST是目錄文件:則現在DEST目錄下創建一個與源文件同名的文件,並復制其數據流至目標文件
cp只能復制文件,不能復制目錄
多源復制:cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
如果DEST不存在:錯誤;
如果DEXT存在:
如果DEST是非目標文件:錯誤;
如果DEST是目錄文件:分別復制每個文件至目標目錄中,並保持原名;
-i :-interactive,交互式復制,覆蓋之前提醒用戶確認
-f:強制覆蓋目標文件;
-r:遞歸復制目錄;
-d:復制符號鏈接文件本身,而非其指向的源文件;
-a:archice,用於實現歸檔(備份)
--preserv=
mode:權限
ownership:屬主和屬組
timestamps:時間戳
context:安全標簽
xattr:擴展屬性
links:符號鏈接
all:上述所有屬性
mv命令 :move
mv 文件 文件
常用選項:
-i:交互式
-f:force
rm 命令:remore
rm [option] file
常用選項:
-i:interactive
-f:force
-r:recursive
刪除目錄:rm -rf /PATH/TO/DIR
rm -rf / 非常危險,刪除根目錄
注意:所有不用的文件建議不要直接刪除,而是移動至某個專用目錄:(模擬回收站)
變量:
命名的內存空間;
變量類型:
字符型
數值型
精確數值型
近似數值型
存儲格式、數據范圍、參與運算;
8:1000 ,計算機0000 1000
16:10000 0001 0000
ASCII碼:
變量的賦值操作:
name=tom 左側是名字,右側是值,把值存儲名字所指定的內存空間