馬哥學習周總結第一週→linux簡介、’文件系統及基礎命令------李洋個人筆記。

linux計算機的設備有兩種
1 字符設備(順序數據) 鍵盤,顯示器 共同點是數據交換時是一個一個字符來進行的.
2 塊設備(隨機數據) 硬盤 交換數據按包爲單位進行.

Linux的文件:在存儲空間存儲的一段流式數據。命名嚴格區分大小寫且同一路徑下不能重名(也不能與根目錄重名,因爲目錄也算文件,linux上一切皆文件)
文件名可以使用除了“/”之外的任何字符,包括空白。但最長不能超過255個字符. 以點好.開頭的文件名爲隱藏文件
特殊的標記 .:表示當前目錄 ..: 表示上一級目錄
一條完整的路徑中:最右側的叫基名basename,其餘叫目錄名 dirname

linux程序的編譯方式
1 動態鏈接式編譯 編寫程序時,沒有將所調用的 庫 複製入程序中,程序只能在包含有該類型庫的計算機上運行,缺點對計算機適應性差,但體積很小。
2 靜態鏈接式編譯 編寫程序時,將所調用的 庫 複製入程序中.優點程序可在任意計算機上運行.缺點體積很大.

Linux哲學思想 一切皆爲文件 具體表現:硬件設備也通過文件來表現
linux開源協定主要有 GPL LGPL BSD Apache 幾種\
BSD主要幾點:
1、如果二次發佈的產品中包括源代碼,則在源代碼中必須帶有原來的代碼中的BSD協定
2、如果二次發佈的產品是二進制的格式的庫或程序,則需要在發佈的文檔或版權聲明中說明原來的代碼所遵守的BSD協定
3、不可以用開源代碼的作者或組織,以及原來的產品的名字做市場推廣。

linux下的 FHS:(文件的層級結構)
/bin 供所有用戶使用的基本命令程序文件。與/sbin大體相同.

/sbin 供系統管理員使用的命令程序文件.

/boot 引導加載器必須用到的各靜態文件.比如內核.

/dev 設備文件.啓動時計算機所識別的硬件.以及存儲特殊文件(虛擬硬件之類)

/etc 存放系統程序的配置文件.只能爲靜態的,不能爲二進制程序.

/home 可選目錄,非基本系統路徑.但是每個主機上都會有的路徑.
普通用戶的家目錄路徑(默認爲在此文件下與用戶名相同的子目錄).比如cenos用戶下的就是 /home/centos

/lib 基礎共享庫與模塊.一般爲系統啓動或根文件系統上的應用程序
(如/bin /sbin) 提供庫,其下子目錄:

libc.so. 動態鏈接的c庫
ld
執行時鏈接器或加載器
modules 用來存儲內核模塊的目錄.

/lib64 64位系統獨有的存放處,與lib相同.如系統是32位,則顯示/lin32.
64位兼容32位.

/usr 全局共享的只讀數據.除了根之外最主要的文件系統.不建議在此目錄下創建文件.本身也是層結構,目錄下 /bin /sbin /lib /lib64 的子目錄雖然不是系統啓動必需程序,運行一些附加功能會用到(圖形界面程序).這個目錄下的庫文件,也會調用/lib根目錄的庫文件. 其下的子目錄:
bin : 所有可執行文件,如 gcc,firefox 等(指不包含在 /sbin 和 /bin 內的);
include C程序頭文件, 各種頭文件,編譯文件等時需要使用
include/’package-name’ 程序特定的頭文件;
lib : 所有可執行文件所需要的庫文件
share 命令手冊頁和自帶文檔等. man幫助命令就在這.
local 另一個層級目錄
X11R6 x-windows程序的安裝位置
src 程序源碼文件的存儲位置
local 可以再次單獨架構一個層級目錄(再掛載一個設備).存放本地第三方安裝程序的位置.讓系統管理員安裝的本地應用程序,大部分存在此處。此目錄下的文件與usr基本一致,但這裏的子目錄無論是bin或ect都只爲本地計算機提供服務。

/media 便攜式設備掛載點,比如 USB,光盤等等.

/mnt 其他非關鍵性文件系統的臨時掛載店.

/opt 通常是裝一些第三方非關鍵性軟件安裝位置.

/root 管理員的家目錄(可選).

/srv 當前主機爲服務提供的數據,具有特有性,不具有通用性.

/tmp 臨時文件目錄,可供所有用戶都可寫入操作或使用.有特殊權限.

/var 存儲經常變化的數據的目錄(比如日期),其下子目錄:
cache 應用程序的緩存數據.
lib 程序的狀態書數據.
local 專門爲/usr/local目錄下的程序存放經常發生變化的數據.
lock 鎖文件
log 日誌文件
opt 專門爲/opt目錄下的程序存放經常發生變化的數據.
run 運行中的進程相關的數據.如pmd數據.
spool 應用程序的spool數據.可理解爲 暫存 管道這樣.
tmp 系統重啓之後依然需要留存的的臨時數據.

特殊目錄 /proc 和/sys
/proc 虛擬文件系統,爲內核和進程存儲相關信息.多爲內核參數,並將內核參數虛擬爲文件目錄的形式
比如內核net.ipv4.ip_forward的參數,就虛擬爲 net/ipv4/ip_forward.
參數的值就保存在ip_forward裏面.完成路徑爲 /pock/sys/net/ip_forward.
/sys 和/proc類似,除了可以查看內核參數外.主要爲管理linux的設備接口,提供了一種統一模型的接口.
/sys和/proc都是臨時性文件,關機不再存在.
/sys子目錄下,以多種視角的方式將不同的設備類型數據,分類(外接,內接,電源總線,等等)保存在不同的文件目錄下.

linux終端分類
虛擬終端 /dev/ttys+{1----6}數字
串行終端 /dev/tty+數字
物理終端 /dev/console
僞終端 /dev/pts+數字
終端 terminal

命令提示行
格式(中括號部分) 用戶名+@主機名+~ 其中~表示用戶所在目錄
#表示用戶爲root
$ 表示普通用戶 非root
從root切換到非root
命令 先 useradd(創建一個普通用戶) centos
後 su - centos (-前後均有空格)

獲取命令幫助的辦法

1、命令--(兩個減號)+help

2、使用手冊(說明書) manual 位於 /usr/share/man目錄下 命令格式 man+空格+命令
幫助後的選項:
SECTION下的
1、NAME 功能性說明
2、SYNOPSIS 語法格式
3、DESCRTPION 描述
4、OPTIONS 選項
5、EXAMPLES 使用範例
6、AUTHOR 作者
7、BUGS 報錯方式
8、SEE ALSO 參考

SYNOPTS下的內容用來,表示命令的使用方式,其中
帶中括號[]的表示可選內容
帶尖括號<>的表示必須提供的內容
帶豎線並且左右倆側都有的,表示二選一或多選一
帶省略號...的表示同類內容可出現多個

使用手冊:壓縮格式的文件,有章節之分:舉例
/usr/share/man目錄下
存在 man1 man2 man3...的目錄,而一個幫助文件的內容或許在man1有一段,man2有一段...
第一章節 用戶命令 所有用戶都能用的命令
第二章節 系統調用
第三章節 C庫調用
第四章節 設備文件及特殊文件
第五章節 配置文件格式
第六章節 系統自帶的遊戲的使用幫助
第七章節 不便歸類的雜項
第八章節 管理工具及守護進程 只有管理員才能運行的命令

查看指定目錄的命令格式 man+章節目錄數字+所查看的命令

查看某一命令在哪一章節 whatis+所查看的命令

幫助命令man是通過數據庫來實現的,更新數據庫命令 makewhatis

使用man後,再彈出的界面裏 空格表示向後翻一屏幕 b表示向前翻一屏幕

ctrl+D或+u分別是向尾及向首翻半屏 回車表示向下一行,k表示向上一行

G表示跳躍到最後一行 #G(#表示數字)表示跳轉至第#行

查找命令: /或?+想要查找的內容 然後小寫n表示查看下一個,大寫N表示查看上一個

/ 表示從文件首部依次向尾部查找,且不區分大小寫

? 與/相反.除此之外,大小寫的N是按照命令順序查看下一個的,故/命令下的n是從頭到尾,?命令反之.
退出按q 表示quit

有時候man幫助文件不在默認目錄下,可以使用-M(大寫)+空格+指定位置來查看並打開

第三種獲取幫助辦法: info+命令名 獲取在線幫助
第四種 應用程式自帶的幫助文檔 通常路徑 /usr/share/doc/目錄下.多爲命令名+版本號的形式存在.
有三個文件
1 README 程序的相關信息
2 INSTALL 安裝幫助
3 CHANGES 版本迭代時的改動信息

第五種 互聯網幫助
google 用法
搜索指定文檔類型 名字+filetype+格式名(txt,exe之類)
在指定網站上搜索 名字+site+域名

常用命令
type 顯示指定命令的類型,判斷給出的指令是內部指令還是外部指令.
如果給出的指令是外部指令,則顯示絕對路徑.
type -t 會顯示以下字符代表所輸命令的意義,比如:
file 該指令爲外部指令
alias 該指令爲命令別名所設定的名稱
builtin 該指令爲bash內置的命令功能.

type -p 只有指令爲外部命令時,纔會顯示其絕對路徑.
type -a 會PATH髮量定義的路徑中,將所有包含名字的指令都列出來.包含alias(別名).

pwd顯示當前所在的絕對路徑
-P 如果當前所在位置是軟鏈接目錄,則顯示源路徑

絕對路徑與相對路徑
絕對:從根位置到文件的路徑。
相對:從當前位置到文件的路徑。
pwd 以及$pwd 分別是shell環境中,兩個保存當前位置和上一次位置的變量.

enable 查看內核命令
命令格式 選項 參數

-a 顯示所有已激活的內部命令.
-n 關閉指定的內部命令.
-f 從指定文件中讀取內部命令.

enable –n pwd 禁用了pwd內部命令

pwd 依然可以使用

enable pwd 重新啓用pwd

因爲在linux當中,pwd不光在內部命令中存在,/usr/bin/pwd下也有這個命令.在linux中,執行命令時候,優先從內部命令中查找,如果沒有,就從$PATH環境變量中指定的路徑依次去尋找該命令.

hash 查看、記錄緩存命
格式 選項+命令
-l 列出當前所有緩存過的命令,包括路徑及別名(如果有的話)
-d+命令名 刪除指定緩存命令
-p 原命令路徑+新名字 創建hash命令

hash –p /bin/ls aa

aa 此時的aa等於/bin/ls

hash –d aa 刪除aa

Linux當中,命令執行的優先級依次爲
別名>內部命令>hash(可理解爲緩存)>外部命令.

cd 切換目錄 如不帶任何參數,則表示切換爲用戶的(跟)家目錄
cd+~+指定用戶名 表示切換到指定的用戶名的跟目錄下
cd+ - 表示在當前目錄與上一次目錄之間來回切換 cd+..表示回到上一個目錄 加入指定路徑可改爲到指定路徑目錄下
cd+空格+文件名 表示從當前路徑進去到該文件裏。也可以cd /的形式進入

init 進程管理工具,這是一個由內核創建的用戶級進程.其進程號始終爲1.它的位置/sbin/init,如沒有,嘗試運行bin/sh,還沒有,系統啓動失敗.
命令格式 選項+參數
Init+0(此處是數字0) 關機
Init1 單用戶模式,只能root用戶進行維護\
Init2 多用戶模式,不能使用NFS(Net File Syetem)
Init3 完全多用戶模式(標準模式)
Init4 安全模式
Init5 圖形化模式
Init6 重啓

mount 掛載命令
linux中,根文件系統之外的其他文件要想能被訪問,必須通過關聯跟目錄上的某個文件來實現,這一關聯的過程叫做掛載,關聯的目錄被叫做掛載點.解除此關聯過程叫做卸載. Ps:掛載點最好爲
命令格式 選項+參數1 參數2 參數1爲被掛載的文件,參數2爲掛載點
-t 指定文件系統,通常可省略,linux可自動識別文件系統.
-o 將決定用何種方式掛載
loop 將被掛載的文件當做一個硬盤分區來掛載.
ro 只讀的方式來掛載
rw 只寫的方式來掛載
iocharset:指定訪問文件系統所用字符集
舉例

mount –o loop /dev/sr0/centos7.iso /mnt/cdrom

將目錄/dev/sr0以硬盤分區的方式掛載到/mnt/cdrom下

screen 創建新會話命令,這個命令在終端被關閉後仍能正常運行.
一般命令在進程樹上輸入子級命令,終端被關閉也隨着關閉,screen命令
可自己創建進程命令樹,只要其所依附的服務器沒被關閉就可一直運行.
命令格式 選項
-S+名字 創建 screen會話 S是大寫的
-x+名字 加入screen會話
exit 退出
-d 轉爲後臺運行
-r 恢復轉爲後臺的會話
-ls 顯示所有screen會話
-wipe 檢查所有screen,並刪除已經無法使用的screen會話.

bc計算命令

bc 回車

#44*44
#1936
#CTRL+c 退出計算。

ls 列出指定目錄下的文件
ls / 顯示跟目錄下的文件.
ls -a 顯示隱藏文件 -A 表示顯示除. 和..外的所有的文件
ls -a +指定路徑,則顯示指定路徑下的內容
ls -l 顯示文件的詳細信息 最左側是文件類型(- d b c l s d)接着左三位rw-表示文件屬主.中三位文件屬組,右三位表示其他用戶(非屬主,屬組)訪問的權限.再向右的數字,表示文件硬連接的次數,root表示文件的屬主,第二個root表示文件的屬組.最右邊的數字表示文件的大小,單位是字節,最後的一組數字表示上一次文件被使用的時間.
文件類型(- d b c l s d) ,-是普通文件,d是目錄文件,b是塊設備文件,l是軟鏈接文件,s是套接字文件,p是管道文件。
ls -l -h 把詳細列出的文件信息大小單位換算成人容易理解的.比如b換算成k.
ls -d 顯示目錄自身屬性,而不是內部屬性。必須跟l命令一起使用。例:ls -ld
ls -r 反順序展開目錄文件
ls -R 顯示文件子目錄的內容。
ls後文件的默認顏色:
白色:表示普通文件
藍色:表示目錄
綠色:表示可執行文件
紅色:表示壓縮文件
淺藍色:鏈接文件
紅色閃爍:表示鏈接的文件有問題
×××:表示設備文件
灰色:表示其他文件

文本文件查看命令
cat 連接文件並顯示(一個文本文件)使用不當會損壞文件。text格式的是文本文件。
cat可以同時打開多個文件,不同文件路徑用空格分開
-n 會在打開的文件行數進行編號,存在多個文件時則一起編號,不會單獨編號.
-e 顯示文件的行結束符號$.
-E 顯示結束符$
-T 顯示TAB(^I)
-v 顯示windows換行符(^M)
-t = -vT
-A = -vTE 表示所有控制符
-n 顯示行號
-b 空行不參加行數編號

  • s 將連續的空行壓縮爲一個空行

使用cat在重定向時候,可以創建之前不存在的文件。舉例
cat /etc/issue > /tmp/issue.out 執行後,會先在/tmp目錄下創建一個issue.out
的文件,再把/etc/issue當中的值複製過去.

tac 連接文件並顯示(與cat相反,tac是將文件內容倒序顯示).舉例

tac /app/123 內容爲,執行後顯示

1 5

2 4

3 3

4 2

5 1

rev 一樣是倒序顯示,與tac不同的是rev是在一行之中倒序顯示的。

echo ”abcde”|rev 顯示 edcba

head 看指定文件的前n行(默認爲10) head -n 20 +指定文件 效果爲 顯示指定文件的頭20行.其中-n+數字 可省略爲 -數字 即 head -n 20+指定文件 = head -20+指定文件.

tail 看指定文件的後n行(默認爲10) tail -n 20 +指定文件 效果爲 顯示指定文件的尾20行 其中-n+數字 可省略爲 -數字 即 tail -n 20+指定文件 = tail -20+指定文件.
-c 看最後的字節,加上數字則顯示多少位字節。

tail –c 10 123 # 顯示123文件的最後10個字節。

-f 查看文件尾部內容結果後,不自動退出,跟隨顯示新增的行,直至使用ctrl+c退出爲止。但文件被刪除後自動停止. 因爲-f是基於文件描述符追蹤,一個文件對應一個描述符,刪除文件等於刪掉了描述符,所以不再繼續追蹤。

-F查看文件尾部內容結果後,不自動退出,跟隨顯示新增的行,直至使用ctrl+c退出爲止。但文件被刪除立即自動重新創建一個同名文件繼續顯示新增的行.因爲-F是基於文件名追蹤,tail會自己創建事先不存在的文件,而只要文件名在,tail –F 就會自動追蹤。

tailf
tailf 和taili – f 比較類似,共同點是文件被刪除都停止追蹤,區別是tailf是隻有文件數據發生了改變之後,才繼續追蹤。相對來說減少了對硬盤的訪問量。
PS:打開一個文件,再複製一份打開,使用了-F 參數後,修改複製後的內容時,會在原文件中同步顯示。
在工作中,多用於人工監控日誌新增內容來使用。

more 分屏查看命令 格式 more+文件路徑 翻屏至文件尾部後自動退出 (空格向後翻 b劍向前翻)

less 分屏查看命令 格式 less+文件路徑 等同與man.

cut 按列抽取文本
格式cut + 選項 +文件

-d 指明分隔符

-f 第幾列 1,3,6,表示分散的字段 1-6表示連續的字段

-c 按字符切割.

cp /etc/passwd /app/shiyan 複製passwd到shiyan中

cut -d: -f1,3 /app/shiyan -d:之間沒有空格.用來指明分隔符爲:,-f後面的數字指明第幾列.

顯示賬號以及UID號.

cut -d: -f1-3 /app/shiyan -d:之間沒有空格.用來指明分隔符爲:而1-3表示第一列到第三列.

顯示賬號密碼位及UID.

--output-delimiter= 將默認分隔符替換爲指定的

cut -d: -f1,3 --output-delimiter="的UID是" /app/shiyan

顯示root的UID是0,這裏將分隔符由:替換爲了"的UID是"

將df中磁盤佔用了多少百分比提取爲數字形式,不要%符號

df |tr -s " " % |cut -d% -f5 |cut -d% -f1

df內容傳給管道tr命令,-s " " %將多餘的空格壓縮爲一個並改變爲%,然後管道給cut命令-d% -f5 去掉分隔符%並取出第五列的數字,結束.

取出ifconfig當中的ip地址.

ifconfig |head -2 |tail -1 |tr -s " " |cut -d" " -f3

ifconfig內容管道給head,-2打開頭兩行後管道給tail,-1只要最後一行後管道給tr將多餘的空格

變爲一個,最後管道給cut,去掉空格,取出第三列的ip地址.

wc 統計命令,統計指定文件的行數,字節數,字數,並將統計結果輸出。
命令格式:選項+文件。
-c 統計字節數。
-l 統計行數。
-m 統計字符數。這個標誌不能與 -c 標誌一起使用。
-w 統計字數。一個字被定義爲由空白、跳格或換行字符分隔的字符串。
-L 打印最長行的長度。
舉例

wc -c /etc/issue 輸出/etc/issue文件的字節數

31 /etc/issue 顯示31

paste 合併兩個文件同行號的列到一行
格式 選項+文件,多個文件用空格隔開.
-d 分隔符:指定分隔符,默認用TAB
-s : 所有行合成一行顯示 只對一個文件有效,不能將多個文件內容變爲一行。

vim 123 創建並輸入內容 # vim 123 創建並輸入內容

a b # c d

1 2 # 3 4

paste 123 456 合併123 456兩個文件,將按照行數進行合併。

a b c d 第一個文件的第一行放在行首,第二個文件的放行尾。

1 2 3 4 第一個文件的第一行放在行首,第二個文件的放行尾。

paste -d " " 123 456 將默認分隔符由tab鍵改爲了空格,所以間距變小了。

a b c d

1 2 3 4

vim 789 創建並編輯如下內容

a b c d

1 2 3 4

paste -s 789 將789文件內容合爲一行,默認分隔符是tab,故間距大

a b c d 1 2 3 4 顯示內容。

sort 文本排序,把整理過的文本顯示在STDOUT(標準輸出),不改變原始文件.
格式 選項+文件
默認不加選項的默認排序方式---- 受LC_COLLATE影響.爲UTF8的影響,按首字母來排列. 使用locale 顯示當前終端使用了什麼編碼.

常用選項

-r 執行反方向(從大到小)整理 即倒序排列.

-n 執行按數字大小整理 它是按照數字的首列大小,由低向高排序,拍完第一列,再排第二列..依次類推.不會按照整體的數字來排序.比如輸入 111 22 排序,先開始排111,再開始排22.

-f 選項忽略(fold摺疊)字符串中的字符大小寫

-u 選項(獨特,unique)刪除輸出中的重複行(重要)

-t c選項使用c做爲字段界定符 舉例: 將/etc/passwd文件,按UID數字順序來排.

cat /etc/passwd |sort -t:-k3 -n

-t相當於cut的-d ,-k相當與cut的-f, -n按數字來排序. -k後面可加多個數字,用逗號分隔.

-k X 選項按照使用c字符分隔的X列來整理能夠使用多次.相當於cut中的-f.

uniq 從輸入中刪除前後相接的重複的行,一般都是與sort搭配使用來去除重複.
格式 選項+文件
常用選項
-c: 顯示每行重複出現的次數.

-d: 僅顯示重複過的行. -cd可以表示出第幾行重複了幾次的意思.

-u: 僅顯示不曾重複的行(連續且完全相同才判定爲重複).

sort abc.txt | uniq - c 顯示出abc.txt文件中每行重複的次數.

diff 比較文件,比較兩個文件之間的區別.
格式 選項+ 文件+文件 ,文件之間用空格隔開.
如果兩個文件有不同的地方,則會以第幾行第幾個字符不同的方式告訴你.

-u 打補丁形式

diff -u 老文件 新文件 > 補丁.patch 將新老文件的不同之處導入到補丁文件中.

patch -b 老文件 補丁.patch 將補丁打入到新文件中,使之變的和新文件一樣.

patch 複製對文件改變,通常用來打補丁.
格式 選項+文件
-b 選項來自動備份改變了的文件
與diff比較命令一起使用.(未來對於軟件升級有很好的幫助.)

grep 文本搜索工具,以行爲單位。
根據用戶指定的“規則”對目標文本逐行進行匹配檢查;打印匹配到的行
格式 選項+制定的規則+文件
制定的規則,可以是字符串,引用的變量
grep root /etc/passwd 顯示passwd中包含root的行

grep "$USER" /etc/passwd 顯示passwd中包含變量值 "用戶"的行

grep '$USER' /etc/passwd 顯示passwd中包含字符串USER的行

grep whoami /etc/passwd 顯示passwd中包含,引用命令值whoami (登錄用戶)的行。

常用選項:
--color=auto: 對匹配到的文本着色顯示. centos7默認作爲別名,centos6可以手動設置.

-v: 顯示不被pattern匹配到的行. 只顯示規則之外的行,即反向選擇.

-i: 忽略字符大小寫 . 將大小寫一起列出(大小寫之間按源文件先後順序排序)

-n:顯示匹配的行號. 匹配到的選項前面加上編號(行數號)

-c: 統計匹配的行數. 只顯示行數不顯示匹配的內容.

-o: 僅顯示匹配到的字符串. 這個結果區分大小寫

-q: 靜默模式,不輸出任何信息 一般在只使用命令結果的時候用

-A #: after, 後#行 顯示匹配結果及#號代表的數字再接着向上顯示#行

-B #: before, 前#行 顯示匹配結果及#號代表的數字再接着向下顯示#行

-C #:context, 前後各#行 等於-A # -B #,顯示匹配選項及本身的上下n行.

-e:實現多個選項間的邏輯or關係 搜索多個匹配項,-e 條件1 -e 條件2 -e...
-e 條件1 -e 條件2 = "條件1/|條件2" 兩個條件之間是或的關係不是和.條件可存在多個.

-w:匹配整個單詞 只匹配單詞本身,不匹配包含這個單詞的選項.

文件中有a aa aaa,使用# grep -w a 文件後,只會顯示a,不會顯示其餘的.

-E:使用ERE,相當於egerrp 使用擴展正則表達式.

-F:相當於fgrep,不支持正則表達式 不使用正則表達式.

stat 顯示文件或文件系統的狀態 (即元數據)
元數據 文件的概況,相當於一本書的索引部分,不是正文.
格式 stat+文件路徑/名 顯示指定文件的 名稱,大小,佔據磁盤空間多少塊(比如佔據32塊,一塊io塊是5000,那麼就是32*5000的大小.),
什麼類型的文件,設備所在的設備號.索引節點號,權限,環境,最近訪問,最近更改,最近改動等等,
其中 最近訪問,最近更改,最近改動被稱爲時間戳,基本每個文件都有.

文件管理工具
cp 文件複製 單個文件目錄/多個文件目錄

單個文件複製
格式 cp+源文件路徑+空格+目標文件路徑

源文件(被複制的文件),目標文件(複製後的文件)

單個文件複製,如果目標(dest)不存在,則先創建出目標文件,再複製源文件數據至目標。
舉例 cp /etc/a /tmp/b 將etc目錄下的a文件複製到/tmp下的b文件裏面去
如果b不存在的話,將先建立b文件,再將a文件裏面的內容複製進去執行後的結果是目錄tmp裏面新增了一個b文件,且其內容與目錄etc中的a一致。

單個文件複製,目標存在的話,有兩種情況
1 目標文件是非目錄文件:則會將源目標的數據,覆蓋目標文件中的數據。(被覆蓋後無法撤銷)
舉例 cp /etc/a /tmp/b 將etc目錄下的a文件複製到/tmp下的b文件裏面去
b已經存在,那麼結果就是名字爲b,但b裏面的內容會被a裏面的內容覆蓋。

2 目標文件是目錄文件:先在指定的目錄中創建與源文件同名的文件,再將源文件的數據流複製進來。
cp /etc/a /tmp/b/ 將etc目錄下的a文件複製到/tmp下的b目錄裏面去
若b事先存在,則a的名字和內容都放在b目錄下,執行後爲 /tmp/b/a
若b不存在,則直接報錯:不是目錄.

多個文件複製
轉移後的目錄,在同一個目錄下
cp 文件名 文件名 目標目錄
舉例 cp a b /c/ 執行結果,將a,b複製到目錄c下.

轉移後的目錄,不在同一個目錄下
cp /原目錄/{文件名+逗號+文件名}+空格+目標目錄/子目錄/

舉例 cp /etc/{a,b} /tmp/c/
執行結果 將/etc下的a,b兩個文件,複製到/tmp下的c目錄內

如果目標不存在,報錯
如果目標不是目錄文件,報錯
如果目標是目錄文件,分別複製每個文件到目標目錄中,並保存原名.
多文件複製目標必須爲目錄文件且事先存在這個目錄。

cp /etc/a /tmp/b與cp /etc/a /tmp/b/ 相差一個/符號,差距很大.
前者是複製文件到另一個文件中,後者是複製文件到另一個目錄中,
複製目錄文件必須加-r參數,否則會忽略該目錄,複製失敗.

-a 保留文件屬性,否則可能導致文件的擁有者改變導致其他問題.(例如源文件屬主爲a.,直接cp會改變源文件屬主爲root)多用於備份.

-d 拷貝時保留鏈接(即複製快捷方式本身,不是快捷方式指向的源文件數據).

-f 刪除已經存在的目標文件而不提示,強制覆蓋目標文件.

-i 覆蓋目標文件之前提示用戶確認,回覆y時目標文件被源文件覆蓋,是交互式(詢問是否)拷貝,恢復n 則取消.

-p 此時cp除複製源文件的內容外,還將其修改時間和訪問權限也複製到新文件中.
-r 若給出的源文件是一目錄文件,此時cp將遞歸複製該目錄下所有的子目錄和文件,但要求目標文件必須爲一個目錄名,不能爲文件或其它.

-1 不作拷貝,只是鏈接文件,

mv: 移動並重命名文件

單個文件 若目標名字不存在,先創建一個指定的目標名字的文件,再將輸入轉入。
單個目錄 若目標名字不存在,則報錯。 必須事先存在目標目錄,纔可以移動。

源文件和目標文件在同一個目錄下相當於改名 格式 mv a b 把a改爲b的名字,但其的內容不變. 相當於把a改名爲b.

源文件和目標文件在不在同一目錄是移動 格式 mv 根/a 根/b 把a文件轉移到b目錄下。

mv命令轉移目錄不需要-r選項。

多個文件,同cp一樣,目標文件必須是目錄形式。轉移的目錄必須事先存在.

rm 刪除文件
格式 rm+文件路徑即可

刪除目錄
格式 rm -r+目錄路徑即可 rm -r /tmp/123/ 刪除tmp目錄下的123目錄文件.
若要刪除的子目錄過多,可以rm -rf+目標路徑即可。 rm -rf /tmp/z123/ 徹底刪除tmp目錄下的
z123及其子目錄且不在交互(問詢).

複製,移動,刪除,可在目錄後加號鍵代表所有的意思。
cp/etc
就是複製所有etc目錄下的文件的意思.

自殺命令 rm -rf /* 刪除所有跟目錄下的文件=系統崩潰.

linux的文件有兩種數據
1 元數據 文件的概況,相當於一本書的索引部分,不是正文.
2 數據 文件的具體內容,相當於一本書的正文.
最近訪問 access time
最近更改 modify time
最近改動 change time

linux上沒有回收站,可以自建一個目錄當回收站.切忌將無用文件徹底刪除,很難找回.

更改是指文件的數據發生了變化,改動是指文件的元數據發生了變化.如果文件的數據發生了變化,哪麼這個文件的元數據也必定會隨之變化.最近訪問和最近更改是可以任意改變的,但最近改動無法更改,並以最後一次的訪問/更改時間爲準.

touch命令 手動修改時間戳
直接運行 touch+文件名 將指定文件的時間戳(atime訪問mtime修改,ctime改變)修改爲當前系統的時間,如果所輸入的文件不存在,則自動創建一個空文件.
創建名字包含空白字符的文件時,需使用轉意符\,舉例
touch p a 這樣執行後是創建兩個文件(a和b)
touch p\ a 這樣執行後創建的文件纔是名字爲p a的一個文件.
不加轉意符,touch p a中,p和a之間的空格是用來表示兩各參數的分隔符的
加入轉意符\,則表示p和a之間的空格就是空白字符本身,不再作爲參數分隔數識別.
-c 如果指定的文件路徑不存在時,不予創建.
-a 只改訪問時間 access time
-m 只改更改時間 modify time
-t 修改的時間爲指定值.格式 年月日時分秒
舉例 toouch -m -t 0212010303.03/tmp/functions
執行後:將 /tmp/functions的更改時間變爲2002年12月1號凌晨3點3分3秒.
確認執行後的結果 stat /tmp/functions 即可查看.

file 用來看文件內容屬於什麼類型的. 文本,二進制之類.file+文件路徑 可同時存在多個

echo 回顯命令
echo -n 運行命令後不自動換行.
echo -e 讓轉義符生效.比如\表示換行.
echo \n 換行 \t 製表符(橫向),相當與一個(TAB鍵)字段的位置
echo 加上單引號,表示變量引用不執行替換變量值,雙引號會被替換.
舉例 echo $SHELLl命令 是替換一個變量的名字爲變量名當中所存儲的值,
假設shell值爲123,則顯示123,而加單引號則爲顯示命令本身.不在替換變量名中所包含的值. 而echo $’SHELL’ 則只會顯示SHELL.

日期命令
linux啓動時從硬件(主板之類)讀取日期和時間信息,讀取完成後,不再與硬件時間關聯.故linux時間分系統時間及硬件時間,date是關於系統時間的,clock則是硬件時間.
date 顯示和修改時間 直接date 顯示當前年月日星期幾時幾分幾秒
加入字符串+%Y(年)%m(月)%d(日)%H(時)%M(分)%S(秒)可指定只顯示其中一項
同時顯示指定的幾個 例如 年月日 格式爲 +%Y-%m-%d 或者+“%Y %m %d”不能同時使用多個加號。
同理,想要電腦認爲這是同一個指令時,用雙引號把指令集圈起來即可,指令之間以空格隔開。
+%T 則以 時:分:秒的 形式顯示,
+%s 表示從1970年1月1號凌晨開始計算到命令個執行的那一刻經過了多少秒。
設置時間命令格式 date 月日時分年.秒 舉例 改爲 2013年8月8號8點8分8秒
命令爲 date 080808082013.08
clock 顯示或設定硬件時鐘.
-s (hctosys的簡寫 hc代表硬件,sys代表系統,以to之前的時間爲準,也就是以硬件時間爲準統一系統跟硬件的時間).
-w (systohc) 以系統時鐘爲準統一系統跟硬件的時間,
hwclock 跟hwclock一樣
cal 日曆 格式 cal+年份或月份 例子 cal 2015 顯示2015全年日曆
cal 10 2015 查看2015年的10月份。

linux下的文件類型

  • 常規文件
    d 目錄文件 路徑映射之用
    b 塊設備文件 支持隨機訪問
    c 字符設備文件 支持順序訪問
    l(L) 符號鏈接文件(軟鏈接文件) 大體相當於WINDOWS上的快捷方式。
    p 命名管道:
    s 套接字文件 兩個進程之間進行通信時進行套接。主要用於服務提供。

linux下的設備文件都有自己的編號,同一類型的多個設備分主次編號
用 ls -l(是L不是1)顯示的詳細信息中,中間用逗號隔開的數字(在大小那一欄中作特殊顯示)
左側是主編號(major numbei):不同設備,它們的主編號不同,同一設備的主設備號相同,但次設備號不同。
主設備號只要是爲了標識設備類型,進而確定要加載的驅動程序。
右側是次編號(minor number):主要用於標識同一種類型設備中的不同設備。
主設備號是爲標識設備類型,次設備號是爲了標識設備本身。
以前編號是8進制,也就是2的8次方取值爲0----255。即共有255個。

目錄管理類的命令
mkdir:創建目錄
mkdir /tmp/x/y/z 是創建z的.z屬於基名,基名前方的路徑必須要存在,否則會報錯.
/tmp/x/y這個絕對路徑如果不存在,z是無法建立目錄.

-p 自動按需創建副目錄
-v 顯示命令執行過程(大部分命令都支持v)
-pv 自動按需創建並顯示執行過程.
-m 給定目錄權限,如無則爲默認權限.

rmdir:移除空目錄
-p 刪除指定目錄後,如果上一級是空的也會被刪除,直到上一級目錄不爲空爲止。
-v 顯示命令執行過程(大部分命令都支持v).

bash基礎特性之 :命令行展開
~ 自動展開爲用戶的家目錄,或指定的用戶的家目錄.
{} 可承載一個以逗號分隔的路徑列表,並能夠將其展開爲多個路徑.
舉例:tmp/{a,b}相當於 /tmp/a /tmp/b
問題1 如何創建/tmp/x/y1, /tmp/x/y2 /tmp/x/y1/a, /tmp/x/y1/b?
mkdir -v /tmp/x/{y1{a,b},y2}
問題2 如何創建a_c,a_d,b_c,bd
mkdir -v {a,b}
{c,d} 兩花括號類似於互乘的關係.
問題3 創建如下目錄結構.
/tmp/mysysroot
/tmp/mysysroot/bin
/tmp/mysysroot/sbin
/tmp/mysysroot/etc/sysconfig
/tmp/mysysroot/etc/sysconfig/network-scripts
/tmp/mysysroot/usr
/tmp/mysysroot/usr/bin
/tmp/mysysroot/usr/sbin
/tmp/mysysroot/usr/local
/tmp/mysysroot/usr/local/bin
/tmp/mysysroot/usr/local/sbin
/tmp/mysysroot/usr/local/etc
/tmp/mysysroot/usr/local/lib
/tmp/mysysroot/usr/lib
/tmp/mysysroot/usr/lib64
/tmp/mysysroot/var
/tmp/mysysroot/var/cache
/tmp/mysysroot/var/log
/tmp/mysysroot/var/run

mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}

tree命令
以樹狀顯示用戶目錄的層級結構。
無任何附加選項的話,就顯示當前目錄的所有層級結構。
-L+數字 顯示指定的層級。
舉例 tree -L 2 /etc 效果是顯示/etc 目錄下最多2層的目錄,超過的不予顯示.

bash的基礎特性: 命令的執行狀態結果
bash通過狀態返回值來輸出命令執行後的結果:
1 成功 用0來標會
2 失敗 用非0來表示1---255之間.
命令執行完成之後,其狀態返回值保存於bash的特殊變量$?中.
舉例 運行 ls /etc 此命令會成功,再使用echo $? 顯示變量值,只會是0
再次 運行 ls /tecc 或 lss /etc 則必定失敗(無此目錄或命令),
再使用 echo $?顯示變量值,則爲1--255之間的數字.($?只顯示最近一條的命令的值).
$? 變量也叫 命令的狀態結果,ls則爲運行結果.

命令正常運行時,有時還會有命令返回值,根據命令及其功能不同,結果也不相同.
引用命令的執行結果:
格式 $(命令)或反引號把命令圈起來
舉例 $date就是引用日期的值
可以用來重複執行,用來創建不同的文件
舉例 mkdir $(date +%H-%M-%S) 執行結果就是創建以當前日期爲名字的目錄,因爲時間不斷變化,所以重複執行的時候,創建的目錄不會重名.($默認保存最近一次的值).

bash的基本特性 引用
1 強引用 ' ' 單引號 不會替換原有變量值,只顯示變量本身.
舉例 執行命令 ls /erc 後,變量$?的值爲0. 執行 echo ‘$?’ 後顯示 $?

2 弱引用 “” 雙引號 會替換原有變量值,只顯示變量的值.
舉例 執行命令 ls /erc 後,變量$?的值爲0. 執行 echo “$?” 後顯示0

3 命令引用$() 只引用當前變量的值.

bash的快捷鍵
ctrl+a 跳轉命令行首.
ctrl+e 跳轉命令行尾.
ctrl+u 刪除光標所在處至行首之間的所有字符.
ctrl+k 刪除光標坐在出至行尾之間的所有字符.
ctrl+l 清屏 相當於 clear命令.
Tab 自動補全命令,存在多個命令時按兩下列出符合條件的供選擇.若什麼都不顯示可能命令、目錄等有錯誤。
命令類型
外部命令:所有命令都屬於外部命令,共同點在計算上必定有一個與命令本身同名的文件
內嵌命令:一些外部命令本身,自帶的命令,如 bash, shell .

命令的別名:即自命名,可以跟原名相同,這是原名被隱藏。
運行被隱藏原名的命令,使用+命令原名即可.
alias 顯示當前計算機上的所有命令別名.
如何自定義命令名.
命令 alias 別名=’’命令原名’’即可(命令原名可爲組合指令,如abc=“ls /tmp” ,使用組合指令需用引號圈起來) 只爲當前sheel及系統使用,重新登錄就無效
如何撤銷別名
命令 unalias 別名 即可.
永久命名一個自定義名字的命令,分爲這幾步驟
1 命令提示行下輸入自己想自定義的命令名稱並回車,檢查是否有重名
2 在定義永久別名的文件裏面加入自己要設置的永久別名,這個文件是根目錄下的 .bashrc 文件,輸入命令 vim ~/ .bashrc來打開.bashrc 文件。
在alias下面插入想修改的命名即可 舉例 alias a=ls .

which 顯示命令的完整路徑
顯示別名命令及其所指向的命令本身.
which --skip-alias+命令 就能跳過別名直接顯示原名的命令路徑.
whereis命令 顯示命令路徑,源碼及手冊頁.
-b 只搜索二進制程序路徑.
-m 僅使用手冊文件路徑.

who命令 顯示已登錄的相關用戶信息
-b 上一次的啓動時間
-d 顯示死亡的進程.
-l 顯示登錄進程.
-u 顯示誰登錄的 比不加-u多了時間和進程編號.
-r 運行級別
w命令
w可以理解爲增強版的who命令,可以顯示誰登錄了,還能顯示做什麼,資源佔用等等.

bash的基礎特性 查看歷史 能輔助我們完成系統管理

命令歷史:使用上下箭頭可以查看之前使用過的命令.
也可以使用history命令來列表查看之前執行過的.
shell進程會在它的會話中保存用戶執行過的命令.
history可以通過環境變量來實現,定製一些功能,比如選擇性的保存之前執行過的命令.
history命令用法
-c 清空歷史記錄
-d 從指定位置刪除歷史
history -d+數字 刪除指定數字的歷史記錄.history -d 30 表示刪除第三十行的歷史記錄.
history -d+數字+數字 則表示 從第一個數字開始,刪除其後面的第二個數字的記錄數.(包括第一條數本身)
-a 將當前內存的歷史記錄追加到歷史文件中去(從內存到文件)
-n 從歷史文件中讀取所有未被讀取的行
-r 讀取歷史文件並將內容追加到歷史列表(內存)中(從文件到內存)
-w 將當前歷史寫入到歷史文件中並追加到歷史列表(內存)裏.
直接輸入 history+數字 則爲顯示最近的命令歷史,顯示數量與數字一致。

環境變量 HSITSIZE 是設置shell進程保存命令的條數的,
初始值爲1000,即保存1000條.(查看方法 echo $HSITSIZE).
保存在 .bash_history文件裏. root目錄下 ls -a 可見.
使用命令 cat .bash_history 也可以顯示以往命令.但相比HISTSIZE來說會少點,因爲還有一些開機
後的命令仍在內存當中,還沒放入到存儲文件中去.

HISTFILESIZE 命令歷史文件大小 此文件只保存1000個命令(前面的會被後面的刷新掉)
特殊情況會超過 比如歷史文件中有800個命令,而內存中有300個.但這倆個是單獨的,只有等到用戶登出系統時,內存中的纔會保存到文件中去,此時,由於上限1000個的緣故,文件當中所保存的800個裏面,最前面的100個會被刷掉.

調用命令歷史中的命令
1 上下箭頭翻到後回車
2 !+數字,再一次執行歷史列表中的相應數字的命令。
3 !!再一次執行上一條命令。
4 !+命令 再一次執行最近一次(倒序的順序)指定名字的命令。 可簡化爲首字母的形式。
一些命令不適合重複執行,比如創建文件,再次執行就會提示文件已存在。
幫助手冊,查看日期等可以重複。這些命令重複執行多次,結果是一樣的,具有冪等性的。
調用上一條命令的最後一個參數
1 esc鍵,點號鍵 逗號表示分開按,加號表示一起按.
2 file !$

控制命令歷史記錄的方式:
環境變量:HISTCONTROL 有三個選項
默認屬性 ignoredups 忽略重複的命令

ignorespace 忽略以空白字符開頭的命令 不想被別人看到自己的命令歷史,就先設置爲這個,然後所有命令都以空白字符打頭就不會被保存了. 更改方式 HISTCONTROL=ignorespace即可.

ignoreboth 忽略重複及空白字符開頭的.

修改變量的格式 變量名稱=要修改的值 =號鍵等於賦值.(只對當前shell有效).

命令補全:shell在接受到用戶執行命令的請求後,分析完成之後,最左側的字符串會被當做命令,會在其內部尋找,沒有就在外部尋找(根據PATH)環境變量中設定的目錄,自左而右逐個搜索目錄下的文件名.直到找出與用戶給出的一致,並將此程序啓動爲進程.

比如 輸入 whereis時候,輸入wher按tab鍵,那麼系統會自動補齊爲 whereis
但是,只輸入wh的話,由於存在多個wh開頭的命令,第一次按tab鍵無反應,第二次按則把所有wh開頭的命令全部列出,供用戶自選.

路徑補全:與命令補齊差不多.
區別 命令補全是根據起始命令來進行補全,路徑補全是按起始路徑來逐一匹配與用戶給出的相同路徑,
同時當路徑補全遇到,多個目錄一致時,列表供用戶選擇.

利用補充特性,可以有效避免錯誤,提前察覺到一些根本不存在的文件或命令.

變量就是 有名稱的內存空間。
變量類型:×××,浮點型,字符型,布爾型,日期時間型等,分兩大類。
1 字符型
2 數值型 分爲 精確數值型,近似數值型
變量類型決定了 存儲格式,數據的存儲範圍,參與運算的方式。
1 存儲格式
十進制的8,二進制是1000, 8進制是0000 0100,
十進制的16 二進制是10000, 8進制是 0001 0000
數字轉換爲字符,稱爲字符集
ASCII碼錶:一共128個 英文大寫26個,小寫26個,加上一些數字及控制符號共127(128)個。
每一個二進制對應每一個字符。8個二進制編成一組,叫1字節byte。
2的8次方即256個,超過了英文字符本身,所以通常一個英文字母需要佔用1個字節的位置。
但是漢字的數量遠遠超過256個,所以一個漢字就佔用2個字節,也就是2的16次方=65536個。

存儲格式不同,佔用位置不同。8個位置等於1字節byte
比如存儲數字16,當做數值的話,只佔用5個位置。但作爲字符,則需要16個位置。
存儲數字160,當做數值的話,8個位置也足夠。10100000
但作爲字符,則需要三個字節,一個字節存1,一個字節存6,一個字節存0.共計3*8=24個位置。

變量的賦值操作,就是向變量所代表的存儲空間去存數據,
比如 name=tom 就是把name這個變量所指向的存儲空間,替換爲tom這三個名字的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章