1. 程式人生 > >Linux入門(四)

Linux入門(四)

fhs man bash特性 文件管理 目錄管理

目錄:

一、根文件系統層級標準FHS
二、bash的基礎特性(一)
    1.命令歷史
    2.命令行補全
    3.路徑補全
    4.命令行展開
    5.命令執行的狀態結果
    6.引用
    7.快捷鍵
三、目錄管理相關命令mkdir、rmdir、tree
四、引用命令的執行結果
五、文件查看類命令
六、文件管理和變量命令:cp、mv、rm
七、浮點數據如何存儲

一、根文件系統FHS:

1.幫助信息獲取:

help,--helpl,man,info

自帶文檔(README,CHANGELOG)官方文檔,

google

發行版的文檔:

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入門(四)