Linux學習筆記
1、Linux部分定義
linux哲學思想
1 一切皆文件,包括硬件node
2 小型,單一用途的程序(功能儘可能單一)--------> 目標是一個程序集合多個單一功能的程序完成複雜的功能python
3 連接程序,完成複雜的任務,須要用戶完成linux
4 避免使人困惑的用戶界面nginx
5 配置數據存儲在文件中git
開發接口標準
ABI:Application Binary Interface 描述了應用程序和OS之間的底層的接口,容許編譯好的代碼在使用兼容ABI的系統中運行 程序員
API:Application Programming interface 定義了源代碼和庫之間中接口,所以一樣的源代碼能夠在支持這個api的任何系統中編譯算法
用戶交互界面 shell
GUI:Graphic User Interface 圖形用戶界面 apache
CLI:Command Line Interface 命令行界面編程
文件結構:倒置樹結構,全部文件路徑都從根開始
basename 基名
dirname 路徑名
路徑
絕對路徑:文件路徑從根開始,指向要到達的文件。 eg:cd /bin/bash
相對路徑:從當前位置出發,到要到達的文件路徑。 eg:cd bin/tmp 進程init
進程
程序的安全上下文,運行的程序的能訪問的資源的權限取決於發起進程的用戶的權限。
程序運行時系統就會建立一個進程,併爲它分配資源,而後核心開始處理該進程。
子進程先於父進程結束。
殭屍進程:進程結束後,父進程才能結束,不然,父進程結束了,子進程沒有結束,可是子進程處於殭屍狀態。
操做系統下,程序員的主要工做圍繞兩棵樹展開。
兩棵樹,文件樹-/,進程樹-init;對其進行增刪改查四個操做。
程序=指令+數據
程序=算法+數據結構
以算法爲中心,數據結構服務於算法:過程式編程
以數據爲中心,算法服務於數據:對象式編程
設備終端
物理終端 /dev/console
虛擬終端 /dev/tty# [1-6] Ctrl+ Alt +F[1-6]
僞終端 /dev/pts/# (ssh遠程鏈接,圖形界面開啓的終端)
圖形終端 /dev/tty7
串行終端 /dev/ttyS#
查看當前的終端設備:#tty
2、Linux指令學習
bash的內部命令
enable command 啓用內部命令
enable command -n command禁用內部命令
enable command -n 查看禁用的內部命令
命令格式 【-w / --word 】 【參數】
type cmd 查看命令類型 內部命令是當前使用的shell的,其餘外部命令可經過whereis cmd或者which cmd (外部可執行命令的文件路徑獲取)查詢
eg:which eg:which which which tty
cd:change directory,改變工做會目錄,只輸入cd會回到當前用戶的家目錄,與cd~相同。
cd -:切換至上一目錄。
tty 顯示當前設備類型
whoami 顯示當前身份
w顯示全部當前用戶及操做
who顯示當前操做用戶
alias/unalias定義別名/取消定義別名,在指令最左端輸入\禁用別名。
hwclock :硬件時鐘
hwclock -s :硬件時鐘同步爲系統時鐘
-w :系統時鐘同步爲硬件時鐘
date:系統時間
+%a : 周幾的縮寫
+%A : 周幾的全寫
+%b :幾月的縮寫 +%h
+%B :幾月的全寫
+%c :本地日期時間
+%C :2018的20
+%d :某月的幾號 %e
+%D :日期 07/25/18
+%F : 日期 2018-07-25
+%g :2018的18
+%H :幾點-24小時制 00-23
+%I :幾點-12小時制 00-12
+%j :一年的第幾天
+%k : 0-23
+%l : 0-12
+%m : 月
+%M :分鐘
+%T : 08:42:11
+%u : 一週的第幾天 Monday是第一天 1-7
+%w : 一週的第幾天 SUNday是第一天 0-6
+%U :一年的第幾周
+%y : 2018 的18
+%Y :年
設置時間:date [-u] [MMDDhhmm][[cc]YY][.SS]]
shutdown 關機
-r重啓
-h 關機 等於halt
-c取消
+m延後關機
reboot重啓
獲取幫助
help:幫助指令,使用格式
help [COMMAND] [COMMAND] -h [ COMMAND] --help
man:手冊頁放在/usr/share/man
man章節:
一、用戶命令
二、系統調用
三、C庫調用
四、設備文件以及特殊文件
五、配置文件格式
六、遊戲
七、雜項 ·
八、管理類命令
九、linux內核API
man幫助段落說明:
NAME:名稱及簡要說明
SYNOPSIS:用法格式
DESCRIPTION:詳細描述
OPTIONS:選項說明
EXAMPLES:實例
查看手冊:man 1 cat
列出全部幫助:man -a cat
搜索man手冊:man -k cat
經過在線文檔獲取幫助:第三方應用官方文檔
http://www.nginx.org
http://tomcat.apache.org
http://httpd.apache.org
http://www.python.org
經過發行版官方的文檔光盤或網站能夠得到,安裝指南、部署指南、虛擬化指南等,紅帽知識庫和官方在線文檔
http://kbase.redhat.com
http://www.redhat.com/docs
http://access.redhat.com
3、Linux的文件管理
文件系統
文件和目錄被組織成一個單根倒置樹結構
文件系統從根目錄下開始,用「/」表示
根文件系統(rootfs):root filesystem
文件名稱區分大小寫
以.開頭的文件爲隱藏文件
路徑分隔的 /
文件有兩類數據:
元數據:metadata(保存屬性信息)
數據:data
文件系統分層結構:LSB Linux Standard Base
FHS: (Filesystem Hierarchy Standard)
http://www.pathname.com/fhs/
文件名規則
文件名最長255個字節
包括路徑在內文件名稱最長4095個字節
藍色-->目錄 綠色-->可執行文件 紅色-->壓縮文件 淺藍色-->連接文件 灰色-->其餘文件 紫色-->套接字文件
除了斜槓和NUL,全部字符都有效.但使用特殊字符的目錄名和文件不推薦使用,有些字符須要用引號來引用它們。
標準Linux文件系統(如ext4),文件名稱大小寫敏感。例如:MAIL, Mail, mail, mAiL
文件系統結構
/boot:引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader, grub)都存放於此目錄
/bin:供全部用戶使用的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序
/sbin:管理類的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序
/lib:啓動時程序依賴的基本共享庫文件以及內核模塊文件(/lib/modules)
/lib64:專用於x86_64系統上的輔助共享庫文件存放位置
/etc:配置文件目錄
/home/USERNAME:普通用戶家目錄
/root:管理員的家目錄
/media:便攜式移動設備掛載點(非強制)
/mnt:臨時文件系統掛載點(非強制)
/dev:設備文件及特殊文件存儲位置
b: block device,隨機訪問
c: character device,線性訪問
/opt:第三方應用程序的安裝位置
/srv:系統上運行的服務用到的數據
/tmp:臨時文件存儲位置,自動清除30天內未訪問的文件
/usr: universal shared, read-only data 全局共享只讀數據
bin: 保證系統擁有完整功能而提供的應用程序
sbin:
lib:32位使用
lib64:只存在64位系統
include: C程序的頭文件(header files)
share:結構化獨立的數據,例如doc, man等
local:第三方應用程序的安裝位置(非關鍵)
/var: variable data files 可變數據文件
cache: 應用程序緩存數據目錄
lib: 應用程序狀態信息數據
local:專用於爲/usr/local下的應用程序存儲可變數據;
lock: 鎖文件
log: 日誌目錄及文件
opt: 專用於爲/opt下的應用程序存儲可變數據;
run: 運行中的進程相關數據,一般用於存儲進程pid文件
spool: 應用程序數據池
tmp: 保存系統兩次重啓之間產生的臨時數據
/proc: 用於輸出內核與進程信息相關的虛擬文件系統,僞文件系統
/sys:用於輸出當前系統上硬件設備相關信息虛擬文件系統
/selinux: security enhanced Linux,selinux相關的安全策略等信息的存儲位置,初學者最好關掉selinux,輸出disabled爲關閉,輸出enforcing爲開啓輸出permissive爲許可模式。
getenforce 判斷安全系統是否開啓
setenforce 0 關閉安全系統
注意要想永久關閉要改配置文件,文件位於/etc/selinux/config,將其中SELINUX=後的參數改成disabled
Linux的文件類型
-:普通文件
d: 目錄文件
b: 塊設備
c: 字符設備
l: 符號連接文件
p: 管道文件pipe
s: 套接字文件socket
文件權限:
第一位表示文件類型,第2-4位表示屬主權限,第5-7位表示屬組權限,第8-10位表示其餘用戶權限,數字2的位置表示被硬連接的次數,後邊的兩個root表示的是屬主和屬組,後邊是大小、修改時間、文件名。文件的權限主要針對三類對象進行定義
owner: 屬主, u
group: 屬組, g
other: 其餘, o
每一個文件針對每類訪問者都定義了三種權限
權限 |
文件 |
目錄 |
|
r: Readable |
可以使用文件查看類工具獲取其內容 |
可使用ls查看此目錄中文件列表 |
|
w: Writable |
可修改其內容 |
可在此目錄中建立文件,也可刪除此目錄中的文件 |
|
x: eXcutable |
能夠把此文件提請內核啓動爲一個進程 |
可使用ls -l查看此目錄中文件列表,能夠cd進入此目錄 |
|
文件的權限由八進制的三位數表示000-777
文件默認的權限由管理員設定的umask碼(反向掩碼)決定。
目錄的算法爲777-umask=用戶對目錄的權限。
文件是666-umask=用戶隊文件的權限。
例如:管理員umask碼爲0022,看後三位,777-022=755,這表示目錄的屬主擁有文件的所有權限,屬組和其餘用戶擁有文件的讀和執行的權限,而文件則是666-022=644,這表示root用戶有寫和讀的權限,而屬組和其餘用戶只有讀的權限。
通常將普通用戶的umask碼默認爲002,普通用戶不要給執行的權限。
umask碼能夠修改,普通用戶修改後只對當前shell有效。永久修改要改配置文件,文件位於當前用戶家目錄下的隱藏文件.bashrc或.bashprofile,進入加umask=0002
在centOS 6下,設置umask碼後,文件可被其餘用戶執行時,系統會自動將結果加1,取消其餘用戶的執行權限。
文件名通配符
* 匹配零個或多個字符
? 匹配任何單個字符
~ 當前用戶家目錄
~mage 用戶mage家目錄
~+ 當前工做目錄
~- 前一個工做目錄
[0-9] 匹配數字範圍
[a-z]:字母
[A-Z]:字母
[wang] 匹配列表中的任何的一個字符
[^wang] 匹配列表中的全部字符之外的字符
預約義的字符類:man 7 glob
[:digit:]:任意數字,至關於0-9
[:lower:]:任意小寫字母
[:upper:]: 任意大寫字母
[:alpha:]: 任意大小寫字母
[:alnum:]:任意數字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:標點符號
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:圖形字符
[:xdigit:]:十六進制字符
4、LInux的目錄管理
目錄操做指令
pwd:至關於echo $PWD,當前所處目錄的信息儲存在PWD變量下。
CWD:current working directoey 當前工做目錄
OLDPWD:上一工做目錄
cd change directory,使用絕對或相對路徑,改變工做會目錄,只輸入cd會回到當前用戶的家目錄,與cd~相同
cd.. 返回上級目錄
cd. 其中.表示當前目錄 eg : cd ./bin/
cd - 切換至上一目錄,可在本目錄與上一目錄之間切換
ls 列出當前目錄的內容或指定目錄
ls -a 包含隱藏文件
ls -l 顯示額外的信息
ls -R 目錄遞歸經過
ls -ld 目錄和符號連接信息
ls -1 文件分行顯示
ls –S 按從大到小排序
ls –t 按mtime排序
ls –u 配合-t選項,顯示並按atime重新到舊排序
ls –U 按目錄存放順序顯示
ls –X 按文件後綴排序
ls-i 顯示inode號
cd:change directory,改變工做會目錄,只輸入cd會回到當前用戶的家目錄,與cd~相同。
cd -:切換至上一目錄。
touch 建立文件和刷新時間
touch [OPTION]... FILE...
-a 僅改變 atime和ctime
-m 僅改變 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]
指定atime和mtime的時間戳
-c 若是文件不存在,則不予建立
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
cp SRC DEST
SRC是一個文件:
若是目標不存在:新建DEST,並將SRC中內容填充至DEST中
若是目標存在:
若是DEST是文件:將SRC中的內容覆蓋至DEST中
基於安全,建議爲cp命令使用-i選項
若是DEST是目錄:在DEST下新建與原文件同名的文件,並將SRC中內容填充至新文件中
SRC多個文件
DEST必須存在,且爲目錄,其它情形均會出錯;
SRC是目錄:此時使用選項:-r(遞歸)
若是DEST不存在:則建立指定目錄,複製SRC目錄中全部文件至DEST中;
若是DEST存在:
若是DEST是文件:報錯
若是DEST是目錄:
-i:覆蓋前提示 –n:不覆蓋,注意二者順序
-r, -R: 遞歸複製目錄及內部的全部內容
-a: 歸檔,至關於-dR --preserv=all
-d:--no-dereference --preserv=links 不復制原文件,只複製連接名
--preserv[=ATTR_LIST]
mode: 權限
ownership: 屬主屬組
timestamp:
links
xattr
context
all
-p: 等同--preserv=mode,ownership,timestamp
-v: --verbose
-f: --force
-u:--update 只複製源比目標更新文件或目標不存在的文件
--backup=numbered 目標存在,覆蓋前先備份加數字後綴
mv 移動
-i: 交互式
-f: 強制 rm 刪除,(慎用刪除,數據珍貴)
-i: 交互式
-f: 強制刪除
-r: 遞歸 --no-preserve-root eg:rm -rf / 刪庫。。。
tree 樹形表示目錄
-d: 只顯示目錄
-L level:指定顯示的層級數目
-P pattern: 只顯示由指定pattern匹配到的路徑 mkdir 建立目錄
-p: 存在於不報錯,且可自動建立所需的各目錄
-v: 顯示詳細信息
-m MODE: 建立目錄時直接指定權限
-P:無父目錄先建立父目錄
rmdir 刪除空目錄
-p: 遞歸刪除父空目錄
-v: 顯示詳細信息
-r 遞歸刪除目錄樹
ln filename [linkname ] 硬連接。 原始路徑;鏈接路徑
硬連接:建立硬連接會增長額外的記錄項以引用文件
對應於同一文件系統上一個物理文件
每一個目錄引用相同的inode號
建立時連接數遞增
刪除文件時: rm命令遞減計數的連接
文件要存在,至少有一個連接數
當連接數爲零時,該文件被刪除
不能跨越驅動器或分區
ln -s 軟連接
軟連接:一個符號連接指向另外一個文件
ls - l的 顯示連接的名稱和引用的文件
一個符號連接的內容是它引用文件的名稱
能夠對目錄進行
能夠跨分區 指向的是另外一個文件的路徑;
其大小爲指向的路徑字符串的長度;
不增長或減小目標文件inode的引用計數
file [options] <filename>...查看文件類型
-b 列出文件辨識結果時,不顯示文件名稱
-f filelist 列出文件filelist中文件名的文件類型
-F 使用指定分隔符號替換輸出文件名後默認的」:」分隔符
-L 查看對應軟連接對應文件的文件類型
--help 顯示命令在線幫助
標準輸入和輸出
打開的文件都有一個fd: file descriptor (文件描述符),表示了文件的屬性。
Linux給程序提供三種I/O設備
標準輸入(STDIN)-0 默認接受來自鍵盤的輸入
標準輸出(STDOUT)-1 默認輸出到終端窗口
標準錯誤(STDERR)-2 默認輸出到終端窗口
I/O重定向:改變默認位置
STDOUT和STDERR能夠被重定向到文件
命令 操做符號 文件名
支持的操做符號包括:
> 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把全部輸出重定向到文件
> 文件內容會被覆蓋
>| file 強制覆蓋
>> 原有內容基礎上,追加內容
2> 覆蓋重定向錯誤輸出數據流
2>> 追加劇定向錯誤輸出數據流
標準輸出和錯誤輸出各自定向至不一樣位置
COMMAND > /path/to/file.out 2> /path/to/error.out
合併標準輸出和錯誤輸出爲同一個數據流進行重定向
&> 覆蓋重定向
&>> 追加劇定向
COMMAND > /path/to/file.out 2>&1 (順序很重要)
COMMAND >> /path/to/file.out 2>&1
():合併多個程序的STDOUT
( cal 2007 ; cal 2008 ) > all.txt
tr 轉換和刪除字符
tr [OPTION]... SET1 [SET2]
-c –C --complement:取字符集的補集
-d --delete:刪除全部屬於第一字符集的字符
-s --squeeze-repeats:把連續重複的字符以單獨一個字符表示
-t --truncate-set1:將第一個字符集對應字符轉化爲第二字符集對應的字符
inode(index node)表中包含文件系統全部文件列表
一個節點 (索引節點)是在一個表項,包含有關文件的信息( 元數據 ),包括:
文件類型,權限,UID,GID
連接數(指向這個文件名路徑名稱個數)
該文件的大小和不一樣的時間戳
指向磁盤上文件的數據塊指針
有關文件的其餘數據
bitmap 位圖
block bitmap 塊位圖
STDIN、STDOUT
管道(使用符號「|」表示)用來鏈接命令
命令1 | 命令2 | 命令3 | …
將命令1的STDOUT發送給命令2的STDIN,命令2的STDOUT發送到命令3的STDIN
STDERR默認不能經過管道轉發,可利用2>&1 或 |& 實現
最後一個命令會在當前shell進程的子shell進程中執行用來
組合多種工具的功能
ls | tr 'a-z' 'A-Z'
<<終止詞」命令從鍵盤把多行重導向給STDIN
直到 終止詞 位置的全部文本都發送給STDIN
有時被稱爲就地文本(heretext)
在命令尾部加-表示前一個命令的STDOUT eg :cat /etc/passwd|file -
tee 輸出重定向