Linux入門(四)
目錄:
一、根文件系統層級標準FHS 二、bash的基礎特性(一) 1.命令歷史 2.命令行補全 3.路徑補全 4.命令行展開 5.命令執行的狀態結果 6.引用 7.快捷鍵 三、目錄管理相關命令mkdir、rmdir、tree 四、引用命令的執行結果 五、文件查看類命令 六、文件管理和變量命令:cp、mv、rm 七、浮點數據如何存儲
一、根文件系統FHS:
1.幫助信息獲取:
help,--helpl,man,info
自帶文檔(README,CHANGELOG)官方文檔,
發行版的文檔:
Linux Kernel:Documentation
whatis COMMAND
man 章節號碼 COMMAND
1.用戶命令
2.系統調用
3.庫調用
4.設備文件及特殊文件
5.文件格式,配置文件格式等
7.雜項
8.管理工具及守護進程
1,5用戶最直接接觸,4最特殊,8守護
man 內容:
NAME :功能說明
SYNOPSIS:語法格式 //英語摘要,大綱
OPTIONS:選項
man語法格式
【】可省略
《》必須提供的
|多選一
{} 分組
... 同類的內容可以出現多次
man後的操作:
j,k 行
ctrl+d/u 半瓶
空格/b 一個屏幕
q 退出
G 定行
/keyword 關鍵字
?keyword 向上
基礎命令:
pwd,cd,ls,echo,date,clock,cal,hwclock,cat,tac,file,tty
halt,poweroff,shutdown,reboot
2.Linux的組成部分
|——————————---|
|應用 |
|-----|-------| |
|shell|庫函數 | | //有的程序可以直接調用system call
|—————---|———---|
|系統調用 | //內核把不同的硬件規格封裝,然後對外提供系統調用
|---------------————|
|內核 |
|---------------————|
|硬件 | //只有內核才能夠驅動硬件
|---------------————|
//應用只有通過系統調用,和內核交互
靜態編譯:庫直接在程序中,程序運行的時候,不再調用系統的庫
動態編譯:程序運行的時候,需要調用系統的庫
區別:在編譯的時候,是否將對應的庫,復制編譯到該程序中
Linux:glibc庫
靜態:移植方便,但是體積大
動態:需要移動響應的庫文件,體積小
假如多個程序運行,都需要動態鏈接一個庫,只需要在內存中放一份即可
3.終端:
硬件設備,關聯的一個用戶接口
進程的類型:
與終端相關:通過終端啟動
與終端無關:不是通過終端啟動,操作引導啟動過程當中
OS:就是內核文件+各種程序文件 //shell也可以認為是一種應用程序
靜態:kernel,application
應用程序的文件:二進制文件,庫文件,配置文件,幫助文件
文件系統:
層級結構
分區:就是把一個大空間,分割成多個小空間
4.FHS
OS開機剛啟動的時候,目錄樹是沒有被激活的
開機後先加載;BIOS中的一段程序,然後加載內核文件//但是內核文件是放在目錄樹中的
FHS:filesystem hierarchy standard文件系統層級結構標準
/bin:所有用戶管理使用的基本命令程序文件
/sbin:供系統管理使用的工具程序
/boot:引導加載器必須用到的各種靜態文件:kernel,initramfs(initrd),grub等
/dev:存儲特殊文件或設備文件
設備有兩種類型:字符設備{線性設備}有時序的 //發送abc,一個挨著一個發,鍵盤塊設備{隨機設備}
//發送abc,打包成一個進行發送,硬盤
//硬盤上事劃分大小相等的塊block,例如16個,4096個,
//這樣訪問速度快
//可以任意,訪問隨機位置
/etc:系統程序的配置文件,只能為靜態
/etc下也有層級目錄,有的是必須的。包含著各種
/etc/X11 X-window目錄所在地
/home :普通的家目錄的集中位置;一般每個普通用戶的家目錄
/root:管理員的家目錄,建議使用普通用戶登錄,su到root
/lib:庫文件和內核模塊所在地
libc.so.* 動態鏈接C庫
ld* 執行時 鏈接器/加載器
modules 可裝載的內核模塊
/lib64 :64bit系統特有的存放在64位共享庫的路徑;
但是modules目錄在centos中,依然放在 /lib下
/mdeia :常見便攜設備掛在點:floppy,cdrom,cd
/mnt :其它文件系統的臨時掛載點
/opt :第三方的軟件安裝位置
/src:當前主機為服務提供的數據
/tmp:臨時文件,幾乎所有的程序,都會產生臨時文件,可供所有用戶寫入,有特殊權限
/usr:全局,共享,只讀數據路徑,是一個層級目錄
bin,sbin,lib,lib64,...
include:C程序頭文件
share:命令手冊頁和自帶文檔架構特有的文件的存放位置
local:另一個層級目錄,安裝本地應用
X11R6:X-window程序的安裝位置
src:程序源碼文件的存儲位置
//安裝兩個版本的軟件時候,一個可以安裝在usr上{一個層級目錄},另一個安裝在/usr/local{另一個層級目錄}
//也通常用於安裝第三方程序
/var 層級目錄,存儲常發生變化的數據的目錄
cache:應用緩存數據
lib:變量狀態信息
local:/usr/local提供變化的數據
lock:鎖文件
log:日誌文件
opt:變化的數據for /opt
run:運行進程相關的數據
spool:應用程序的spool數據
tmp:系統重啟之後,依然需要保留的臨時數據
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.ipv4.ip_forward,虛擬為net/ipv4/ip_forward,存儲於/proc/sys,因此其完整路徑為/proc/sys/net/ipv4/ip_forward
//虛擬文件系統:基於內存的,重啟丟失
/sys:sysfs虛擬文件系統,提供了一種比proc更為理想的訪問內核數據的途徑
sys比/proc/sys更為新穎和方便,站在前任的肩膀上的
主要用來管理linux設備提供統一模型的接口
https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/
5.Linux系統上的文件類型:
-:常規文件,即
d:directory,目錄文件
b:block device塊設備,映射塊設備,支持以“block”為單位進行隨機訪問
c:character device:字符設備,支持以“character”為單位進行線性訪問
主設備號,次設備號 //一個設備對應一個主設備號
8位二進制:0-255
l:symbolic link 符號鏈接文件,類似於windows的快捷方式
p:pipe 管道符,命名管道
s:socket,套接字文件:
6.基本命令://
shell內建命令 //但是shell自身是外部命令
bash:bash命令自帶很多命令//type,alias就是自建命令
外部命令
ifconfig
註意:命令可以有別名,別名可以與原名相同,此時原名被隱藏
例如
type ls //是ls --color的縮寫
\ls //此時就不會執行 --color,調用原命令
命令別名:
alias //查看所有的別名記錄
alias NAME=‘COMMAND‘ //只對當前shell有效
unalias cls //取消別名記錄 //只對當前shell進程有效
限制:時間限制:重啟無效,位置限制:只對當前shell有效
自動有效:/root/.bashrc
/etc/aliases 是偽每個賬號取別名,例如常見的email
which 顯示命令的完整路徑
which --skip-alias ls
whatis 查看幫助文檔
whereis
-b 二進制程序文件路徑
-m 手冊文件
-s 源碼文件
w:增強版本的who,誰登陸了,都在做什麽
who 查看登錄的用戶
-b 系統上一次啟動時間
-r 當前的運行級別
-l 登錄進程
-u 登錄的用戶
type 是否為內建的命令
二、bash的基礎特性(一)
1.命令歷史 2.命令行補全 3.路徑補全 4.命令行展開 5.命令執行的狀態結果 6.引用 7.快捷鍵
============================================================================
1.命令歷史
每一個用戶使用的命令歷史是不同的
命令保存在 /root/.bash_history 文件中
定制history的功能,可通過環境變量實現
echo $HISTSIZE //改變命令歷史的條數
每一個用戶登錄的時候,是加載本地的history文件到內存中的,
系統關機或用戶退出的時候,會把內存中的數據寫入到硬盤中去
echo $HISTFILESIZE
history文件大小1000 //保留1000條命令
history [-c] [-d偏移量] [n]
-c 清空命令歷史,清空的事內存中的記錄
-r 讀取已經保存的文件
-d 指定刪除某條記錄
history -d 676 5 //從第幾條,向後刪除幾條
history -anrw [文件名]
-a 同步:當前命令的歷史,追加到歷史文件中,//把內存中的命令歷史,追加到文件中
-n 從歷史文件中,毒素所有未被讀取的行
-r 讀取歷史文件並將內容追加到歷史列表中
-w 常用:寫入到歷史文件中
history -ps 參數 [參數..]
history 10 //顯示最近10條
history > a //追加到該文件中
history 《 b //還原該文件
!1024
!STRING 執行命令歷史列表中最近一次以開頭STRING開頭的命令
!! 再一次執行上一條命令,上下鍵功能一樣
ESC . 按住esc然後松開,句號,調用上一個命令的參數
!$ 也會調用最後一個值
註意:命令的重復執行,有時候需要依賴於冪等性
控制命令記錄的方式
HISTCONTROL 取值有三個
ignoredeups :忽略重復的命令
ignorespace :忽略以空白字符開頭的命令
ignoreboth :以上兩者同時生效
2.命令行補全
shell程序在接受到用戶執行命令的請求,分析完成之後,最左側的字符串會被當做命令
命令處理機制:
查找內部命令:
根據PATH環境變量中設定的目錄,自左向右逐個搜索目錄下的文件名
修改PATH,建議修改.bashrc文件
export PATH=“$PATH:/usr/bin"
給定的大頭字符串如果能唯一標識某命令程序文件,則直接補全
不能唯一標識某命令,再擊tab鍵一次,會給出列表
shell內建--->$PATH(自左向右)
3.路徑補全
在給定的起始路徑下,以對應路徑下的打頭子串來逐一匹配起始路徑下的每一個文件;
tab:
如果能唯一標識,則直接補全
否則,再一次tab,給出列表
4.命令行展開
~:自動展開為用戶的家目錄,或指定的用戶的家目錄
{}:可承載一個以逗號分隔的路徑列表,並能夠將其展開為多個路徑。
5.命令執行的狀態結果
bash通過狀態返回值來輸出此結果
成功:0
失敗:1-255
echo $?
6.引用
強引用:‘’
若引用:“”
命令引用:· · 反引號
命令引用:建議使用$(COMMAND)
$(COMMAND)
或者‘COMMAND‘
mkdir $(date +%H-%M-%S).dir
7.快捷鍵
ctrl + a //跳轉到命令行首部
ctrl + e //跳轉到行尾
ctrl + u //刪除光標位置到行首
ctrl + k //刪除光標所在處,到行尾的所有字符
ctrl + l :清屏,相當於clear
三、目錄管理相關命令mkdir、rmdir、tree
文件類型:-,d,c,b,l,p,s
目錄:
mkdir [OPTIION] ... DIRECTORY
-p:自動創建父目錄
-v:顯示創建過程
-m:直接設定其權限
mkdir -p x/y/{A,c,b}
rmdir 刪除空目錄
-p 刪除某目錄,如果其父目錄為空,則一並刪除之
tree 顯示目錄樹
-L 顯示的層級,深度,默認顯示所有層級
-d 只顯示目錄
-f 顯示全路徑
四、引用命令的執行結果
$(COMMAND)
或者‘COMMAND‘
mkdir $(date +%H-%M-%S).dir
五、文件查看類命令
cat,tac,head,tail,more,less,stat,touch
分屏查看命令:more ,less
more /etc/rc.d/init.d/functions 查看內容
特點:翻屏至文件尾部後自動退出
less /etc/rc.d/init.d/functions
head 前幾行,默認前10行
-n 10
-10
tail 尾幾行
-n 10
-10
-f //查看文件尾部內容結束後不退出,跟隨顯示新增的行
stat 顯示文件的狀態
文件:兩類數據
元數據:metadata
數據:data
時間戳:
access time最近訪問:最近查看,cat命令獲取,
文件系統優化了以後,最近幾s內的頻繁訪問,時間戳是不會改變的
modify time最近更改:修改,新增加,減少
change time最近改變{改動}:元數據改變
touch 修改文件的時間戳 //摸一下,就可以改變時間戳
touch bb //bb存在,就會修改為當前的時間戳,沒有就會創建該文件
//bb存在,bb的內容是不會改變的
-c file存在,就修改時間戳,否則不進行任何操作
-a|-m|-c //改變時間是不能手動指定的
-t STAMP
[CC|YY]MMDDhhmm[.ss] //年月日時分.秒
六、文件管理類命令及變量cp、mv、rm
文件管理命令:copy
1.cp命令:復制文件
源文件:目標文件
1)單源復制:cp [OPTION]... [-T] SOURCE DEST
//如果DEST不存在,則事先創建此文件,並復制源文件的數據流至DEST中
//如果DEST存在:
且為非目錄文件:覆蓋文件DEST的數據流
為目錄:現在DEST目錄下創建一個與源文件同名的文件,並復制其數據流
2)多源復制:cp [OPTION]... SOURCE... DIRECTORY
如果DEST不存在,則必須為目錄
如果DEST存在,
且為文件:錯誤
且為目錄文件:分別復制每一個文件到目標目錄中,並保持原名
3)cp [OPTION]... -t DIRECTORY SOURCE...
alias cp=“cp -i"
-i 交互interactive,覆蓋之前,提醒用戶確認
-f 強制覆蓋目標文件
-r,-R recursive遞歸復制目錄
在linux中目錄及文件,在同一目錄中,不能文件和目錄同名
-d 復制鏈接文件本身,而不是源文件//假如符號鏈接使用的事相對路徑的話,可能會失效
--preserve{ALTER_LIST} 保留屬性,
默認:
mode,權限
ownership,屬主
timestamp,時間戳
其他:
context,安全上下文
links,符號鏈接,復制符號鏈接本身
xattr,擴展屬性
all,相當於-a,復制所有屬性
-a archive,用於實現歸檔,所有權限內容
cp 直接復制的是,源文件,假如目標文件是符號鏈接的話
2.mv
mv [OPTION]... [-T] SOURCE DEST //一對一
mv [OPTION]... SOURCE ... DIRECTORY //多個源一個t
mv [OPTION]... -t DIRECTORY SOURCE... //多個源一個t
mv a b //重命名a為b,可以為目錄
-i 交互式
-f force
3.rm //linux刪除後,找回來是特別困難的
-r,-R ,recursive//遞歸刪除,包括目錄
-i interactive交互式詢問
-f force強制
危險操作:rm -rf /*
註意:所有不用的文件,建議不要直接刪除,而是移動至某個專用目錄;{模擬回收站}
變量:
命名的內存空間,
因為考慮到變量占用內存大小
變量具有類型的概念:整形,浮點型,字符型,布爾型,日期時間型
基本的類型:字符和數值
變量類型:
字符型
數值型:
精確數值型
近似數值型
變量類型確定後:存儲格式、數據範圍、參與運算
存儲數值:用二進制
存儲字符:ASCII碼 //0-127個
字符集:用0和1對應了,和字符的關系
變量的賦值操作:
name=tom
把變量占用的內存空間,替換為tom
七、浮點數如何存儲
十進制的3.5,也就是二進制的11.1,移位後就是1.11×2的1次方。
所以符號位為0,階碼為(1+127)10 = (128)10 = 1000 0000b,尾數為110 0000 0000 0000 0000 0000。
所以全部連在一起就是 0100 0000 0110 0000 0000 0000 0000 0000,
3整數部分:3 = 11
0.5小數部分:0.5=1 乘2取余法
3.5=11.1b=1.11*2^1
11.1b=111*(2^-1)=35*(10^-1)
Linux入門(四)