簡單的linux運用
** 簡述**
linux是一套自由加開放源代碼的類Unix操作系統,誕生於1991年10月5日(第一次正式向外公布),由芬蘭學生linus Torvalds和後來陸續加入的眾多愛好者共同開發完成的。
linux是一個基於POSIX和Unix多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的Unix工具軟件,應用程序和網絡協議,可以支持32位和64位硬件,Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩定的多用戶網路操作系統。
Linux存在許多不同版本,但他們都是用了Linux內核。Linux可安裝再各種計算機硬件設備中,比如手機,平板電腦,路由器、視屏遊戲控制臺,臺式計算機,大型和超大計算機。
嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基於Linux內核,並且使用GNU工程各種工具和數據庫的操作系統。
但是也有些人使用Linux來做一些壞事,例如釣魚WiFi,或者使用BTLinux和CBLinux這個兩個版本來暴力破解別人的路由,進行抓包,可以獲取使用這個路由器連上外網的人的信息,一般可以獲取賬號、信息、視屏、圖片、之類的東西。曾今看到一個網站上的教學,上面著述,純粹教學科技演示,不是不黑你,只是你沒有黑的價值。
** Linux內核**
內核是Linux系統最底層,提供了核心功能並且允許進行以一種有序的方式來訪問硬件。
用於控制進程,輸入輸出設備,文件系統操作,管理內存,這個都需要內核來操作。
當以一個程序要運行,就會產生一個進程,shell翻譯成內核所能理解的二進制指令,內核收到,把程序加載到CPU上,這個程序不是一直運行下去的,有個時間片,內核規定你在CPU運行多長時間,把這個這個程序放到內存的一個地方,給他表上地址,然後運行下一個進程,假如說這個進程運行完之後,內核就會找到上一個程序沒有結束的地址,加載CPU上運行。這個進程需要什麽,內核從磁盤放到內存裏。
軟件安裝
以Ubuntu系統為例
dpkg命令:當你沒有網絡時,你有軟件包,此時,dpkg起到決定的性作用
-i:安裝一個在本地文件系統上存在的Debian軟件包 -r: 溢出一個已經安裝的軟件包 -P:移除已安裝的軟件包及配置文件 -L: 查看軟件安裝到那些目錄中 -s:顯示軟件包的安裝狀態 -l:列出系統所有已經安裝的軟件 例如 dpkg i +軟件包名 dpkg -P 軟件名 完全卸載軟件 與dpkg相對應的是apt-get,有網絡時你可以通過apt-get來安裝軟件 apt-get: -f:修復系統中存在軟件依賴關系 -m:當發現缺少關聯軟件包時,仍是圖繼續執行 -q:當輸出作為日誌保留,不獲取命令執行進度 --purge:與remove一起使用,完全卸載軟件包相當於dpkg -P --reinstall:與install子命令一起使用,重新安裝軟件包apt-get install --reinstall -b:在下載完源碼包後,編譯生成相應的軟件包 -s:不做實際操作,只是模擬命令執行結果 -y:對所有詢問都做肯定回答,apt-get不在進行任何提示 -u:獲取已升級的軟件包列表 -h:獲取升級軟件包列表 -v:獲取apt-get版本信號 使用apt-cache命令完成查詢軟件源和軟件包的相關信息 +pkg show:獲取二進制軟件包的詳細描述信息 search:根據正則表達式檢索軟甲包 depends:獲取所有依賴於該軟件包的軟件包 rdepends:獲取所有依賴該軟件包的軟件包 policy:獲取軟件包當前安裝狀態 stats:獲取軟件源的基本統計信息 **介紹幾個常用的命令** whereis 查找命令 命令 ,函數 等其他的東西所在的位置 whereis ls which: 查找使用程序 whatis:查看命令或函數的來時類型種類 time :統計使用時間的函數 time ls 示執行的時間 shutdown -r +10 :十分鐘後重啟 必須時超級用戶權限才可以 +now :立刻關機 -h +10 : 十分鐘後關機 df命令:顯示磁盤使用情況 -a:列出所有文件系統 -b:列出總的空閑空間 -e:僅列出空閑的文件 -k:列出磁盤的分配情況 -h:同-k,但大小以G,M,K,單位顯示 -l:僅列出本地文件系統 touch +文件名 :創建文件 ,或者使用> filename tocuh可以修改時間戳,當別人入侵你的電腦之後,離開要幹的事就是修改你的文件的時間和寫一個腳本來清除histroy(歷史紀錄) kill 殺死進程 -9 + pid :強制殺死進程 -2 pid :終止就是Ctrl +C -19 pid :進程停止(到後臺) 快捷鍵 Ctrl +z 恢復 fg killall -15 +進程名:發送15信號給所有這個進程名 killall5 -9 後果嚴重:殺死所有的進城
文件系統
一直使用微軟Windows操作系統的用戶似乎已經習慣了將硬盤的幾個分區,並用A:、B:、C:、D:等符號標識,存取文件一定要清除存放在那個磁盤的那個目錄下。
Linux的文件組織模式猶如一顆倒置的樹,這與windows文件系統有很大區別。所有存儲設備作為這棵樹的一個子目錄存儲位置。這一點很難理解,只是剛剛接觸Linux的使用者不太習慣
下面簡單介紹Linux文件系統的份分類
/:Linux文件根目錄
/bin:存放系統文件最常用的可執行文件見(二進制)
/boot:存放Linux內核和系統啟動文件,包括Grub、lilo啟動器程序
/dev:存放所有設備文件,包括硬盤,分區,鍵盤、鼠標、USB、tty等
/home:用戶目錄的默認位置,用戶在這個文件夾就是土皇帝
/initrd:存放啟動時掛載initrd.img映像文件目錄,以及載入所需設備模塊的目錄
/lib:存放共享的庫文件,包含許多被/bin和/sbin中程序使用的庫文件
/lost+found:存放fsck放置零散文件
/media:Ubuntu自動掛載CD=ROM、軟驅、USB存儲器後,存放臨時讀入文件
/mnt該目錄通常用於作為,被掛載的文件系統的掛載點
/opt:作為可選文件和程序存放目錄,主要被第三方開發者用來簡易安裝和卸載他們安裝的程序
/proc:存放所有標誌為文件的進程,他們是通過進程號或者其他的系統動態信息進行標識,例如cpuinfo文件存放CPU當前工作狀態的數據
/root:根用戶(超級用戶)的主目錄
/sbin:存放更多的可執行文件(二進制),包括系統管理、目錄查詢等關鍵命令文件
/tmp“存放用戶臨時文件,所有用戶對目錄查詢等關鍵命令讀寫權限
連接
連接分為硬鏈接和軟連接,硬鏈接是當文件新建時,文件系統會給文件一個index,根據index來創建文件,源文件修改對目標文件有影響。但是刪除源文件,不會對目標文件有任何影響,相當於這個源文件創建一個不副本,修改其內容源文件和目標文件都會進行相應的修改。但是硬鏈接不能創建硬鏈接文件夾,軟連鏈接:類似windows快捷鍵,軟鏈接只是對應指定的路徑和文件名或文件夾名,如果軟文件更改路徑或換個新名字,軟鏈接將失效。
ln:用來創建文件鏈接。
語法
ln (選項)(參數)
-b:刪除,覆蓋目標文件之前的備份
-f或——force:強行建立文件或目錄的連接,不論文件或目錄是否存在;
-i或——interactive:覆蓋既有文件之前先詢問用戶;
-n或--no-dereference:把符號連接的目的目錄視為一般文件;
-s或——symbolic:對源文件建立符號連接,而非硬連接;
-S<字尾備份字符串>或--suffix=<字尾備份字符串>:用"-b"參數備份目標文件後,備份文件的字尾會被加上一個備份字符串,預設的備份字符串是符號“~”,用戶可通過“-S”參數來改變它;
-v或——verbose:顯示指令執行過程;
-V<備份方式>或--version-control=<備份方式>:用“-b”參數備份目標文件後,備份文件的字尾會被加上一個備份字符串,這個字符串不僅可用“-S”參數變更,當使用“-V”參數<備份方式>指定不同備份方式時,也會產生不同字尾的備份字符串;
alias 命令起別名
例如 ls 手速快點容易打成sl 那麽給ls 七個別名叫sl 這樣就不會出現錯誤了
alias sl = ‘ls’
tar文件歸檔壓縮解壓
作用:主要用於將若幹文件夾或目錄合並成為一個文件以便備份和壓縮,當然,之後出現tar程序的改進版本,可以實現合並歸檔的同時進行壓縮,
格式: tar [-t | -x | -u | -f | -j | -z | tarfile filelist
-t :顯示歸檔文件的內容
-x:釋放歸檔文件
-u:更行歸檔文件
-c : 創建一個新的歸檔文件
-v:顯示歸檔和釋放的過程
-j:由tar生成歸檔,然後由bzip2壓縮
-z:由tar生成歸檔,然後由gzip壓縮
ping 地址查看網絡通不通
ttl:顯示經過幾個路由到達目標網址 time:從你開始到目的網站再回來所使用的時間
nslookup:查看域名地址
sudo dhclient 設置為自動獲取
**shell腳本**
shell是命令行解釋器
shell腳本時命令的有序集合
shell腳本以#!/bin/bash 表示使用bash的shell進行解釋
常用shell環境變量:
HOME:/etc/passwd文件中列出的用戶主目錄
IFS:Internal Field Separator,默認認為空格,tab及換行符
PATH:shell命令的搜索路徑
PS1,PS2:默認提示符($)級還行符提示符(>)
SHELL:默認shell
例如 打印第一行話 echo "hello world"
打印字符串的長度:
string=”ni hao"
echo ${#string} 顯示字符長度為6
unset string :刪除這個變量
在shell編程中通常使用全大寫變量,方便識別
$COUNT=1
變量的調用:在變量前加$
$echo $HOME
linux shell/bash 從右向左賦值
y=Y
使用unset命令刪除變量賦值
Z=hell
echo $Z
unset Z
在shell腳本中單引號時強類型,雙引號時弱類型,使用單引號引用時變量不發生任何變化,例如:echo ‘$Z‘ 打印出來還是$Z
$@ 在for循環中是一個一個輸出
read -s 輸入隱藏
-n:限制輸出次數
-p :打印一句話 在輸出
expr:只能用於用於進行簡單的正數運算。
expr 12+5\*3 結果為27
test 命令用於檢查某個條件是否成立,與方括號([ ])類似。
測試文件類型:test -d file :測試是否為一個目錄
-d:測試是否為一個目錄
-e:是否為一個文件
-f:是否為一個普通文件
-L:是否為符號鏈接
-r :是否存在可讀
-w:是否可寫
-x:是否執行
-s:文件是否存在且長度不為0
f1 -nt f2:測試是否比文件f2更新
f1 -ot f2:是否比文件f2更舊
if 、elif 、continue,break使用
if 語句通過關系運算符判斷表達式的真假來決定執行哪個分支。Shell 有三種 if ... else 語句:
if ... fi 語句;
if ... else ... fi 語句;
if ... elif ... else ... fi 語句
if ... else 語句的語法:
if [ expression ]
then
Statement(s) to be executed if expression is true
fi
如果 expression 返回 true,then 後邊的語句將會被執行;如果返回 false,不會執行任何語句。
最後必須以 fi 來結尾閉合 if,fi 就是 if 倒過來拼寫,後面也會遇見。
註意:expression 和方括號([ ])之間必須有空格,否則會有語法錯誤。
舉個例子:
#!/bin/sh
a=10
b=20
if [ $a == $b ]
then
echo "a is equal to b"
fi
if [ $a != $b ]
then
echo "a is not equal to b"
fi
運行結果:
a is not equal to b
if ... elif ... fi 語句
if ... elif ... fi 語句可以對多個條件進行判斷,語法為:
if [ expression 1 ]
then
Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
Statement(s) to be executed if expression 3 is true
else
Statement(s) to be executed if no expression is true
fi
哪一個 expression 的值為 true,就執行哪個 expression 後面的語句;如果都為 false,那麽不執行任何語句。
case...esac
多路分支語句case用於多重條件測試,語法結構清晰自然,其語法為
case 字符串變量 in #case語句只能測試字符串變量
模式1)
命令表
;;
模式2|模式3)
命令表
;;
*)
命令表
;; #最後一個雙分號可以省略
esac #結束標誌
for...do..done
當循環次數已知或確定時,使用for循環語句來多次執行一條或一組命令。循環體由語句括號do和done來限定
格式為:
for 變量名 in 單詞表 #意味者在變量名的大小從單詞表中查找
do
命令表
done
變量一次取單詞表中的各個單詞,每取一次單詞,就執行一次循環體中的命令,循環次數由單詞表中的單詞數確定。命令表中的命令可以時一條,也可以是由分號或換行符分開的多條
如果單詞表使命令行上的所有位置參數時,可以在for語句中省略in單詞表部分。
用for實現死循環
例如:
for i
do
echo
done
break,continue:不同於C語言,java等其他語言
break 後面不加數字,表示跳過一個循環
break 2 意味著:跳過兩成循環
continue後面什麽也不加意味著結束本次循環
continue 2 意味著 第一層為break;第二層為continue。
寫的不好勿噴,嘻嘻。如果有錯的,請多多指教。鄙人將不勝感激。
簡單的linux運用