linux結構圖
❶ linux快速入門第八章:Shell基礎
我們平時所說的 Shell 可以理解為 Linux 系統提供給用戶的使用界面。Shell 為用戶提供了輸入命令和參數並可得到命令執行結果的環境。當一個用戶登錄 Linux 之後,系統初始化程序 init 就根據 /etc/passwd 文件中的設定,為每個用戶運行一個被稱為 Shell(外殼)的程序。
確切地說,Shell 是一個命令行解釋器,它為用戶提供了一個向 Linux 內核發送請求以便運行程序的界面系統級程序,用戶可以用 Shell 來啟動、掛起、停止甚至編寫一些程序。
Shell 處在內核與外層應用程序之間,起著協調用戶與系統的一致性、在用戶與系統之間進行交互的作用。圖 1 是 Linux 系統層次結構圖,Shell 接收用戶輸入的命令,並把用戶的命令從類似 abed 的 ASCII 碼解釋為類似 0101 的機器語言,然後把命令提交到系統內核處理;當內核處理完畢之後,把處理結果再通過 Shell 返回給用戶。
換句話說:
Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。
Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。
Ken Thompson 的 sh 是第一種 Unix Shell,Windows Explorer 是一個典型的圖形界面 Shell。
Shell 與其他 Linux 命令一樣,都是實用程序,但它們之間還是有區別的。一旦用戶注冊到系統後,Shell 就被系統裝入內存並一直運行到用戶退出系統為止;而一般命令僅當被調用時,才由系統裝入內存執行。
與一般命令相比,Shell 除了是一個命令行解釋器,同時還是一門功能強大的編程語言,易編寫,易調試,靈活性較強。作為一種命令級語言,Shell 是解釋性的,組合功能很強,與操作系統有密切的關系,可以在 Shell 腳本中直接使用系統命令。大多數 Linux 系統的啟動相關文件(一般在 /etc/rc.d 目錄下)都是使用 Shell 腳本編寫的。
同傳統的編程語言一樣,Shell 提供了很多特性,這些特性可以使 Shell 腳本編程更為有用,如數據變數、參數傳遞、判斷、流程式控制制、數據輸入和輸出、子程序及中斷處理等。
說了這么多,其實我們在 Linux 中操作的命令行界面就是 Linux 的 Shell,也就是 Bash,但是我們的圖形界面是 Shell 嗎?其實從廣義講,圖形界面當然也是 Shell,因為它同樣用來接收用戶的操作,並傳遞到內核進行處理。不過,這里的 Shell 主要指的是 Bash。
Shell 腳本
Shell 腳本(shell script),是一種為 shell 編寫的腳本程序。
業界所說的 shell 通常都是指 shell 腳本,但讀者朋友要知道,shell 和 shell script 是兩個不同的概念。
由於習慣的原因,簡潔起見,本文出現的 "shell編程" 都是指 shell 腳本編程,不是指開發 shell 自身。
Shell的分類
目前 Shell 的版本有很多種,如 Bourne Shell、C Shell、Bash、ksh、tcsh 等,它們各有特點,下面簡要介紹一下。
最重要的 Shell 是 Bourne Shell,這個命名是為了紀念此 Shell 的發明者 Steven Bourne。從 1979 年起,UNIX 就開始使用 Boume Shell。Bourne Shell 的主文件名為 sh,開發人員便以 sh 作為 Bourne Shell 的主要識別名稱。
雖然 Linux 與 UNIX 一樣,可以支持多種 Shell,但 Boume Shell 的重要地位至今仍然沒有改變,許多 UNIX 系統中仍然使用 sh 作為重要的管理工具。它的工作從開機到關機,幾乎無所不包。在 Linux 中,用戶 Shell 主要是 Bash,但在啟動腳本、編輯等很多工作中仍然使用 Bourne Shell。
C Shell 是廣為流行的 Shell 變種。C Shell 主要在 BSD 版的 UNIX 系統中使用,發明者是柏克萊大學的 Bill Joy。C Shell 因為其語法和 C 語言類似而得名,這也使得 UNIX 的系統工程師在學習 C Shell 時感到相當方便。
Bourne Shell 和 C Shell 形成了 Shell 的兩大主流派別,後來的變種大都吸取這兩種 Shell 的特點,如 Korn、 tcsh 及 Bash。
Bash Shell 是 GNU 計劃的重要工具之一,也是 GNU 系統中標準的 Shell。Bash 與 sh 兼容,所以許多早期開發出來的 Bourne Shell 程序都可以繼續在 Bash 中運行。現在使用的 Linux 就使用 Bash 作為用戶的基本 Shell。
Bash 於 1988 年發布,並在 1995-1996年推出Bash 2.0。在這之前,廣為使用的版本是1.14,Bash 2.0增加了許多新的功能,以及具備更好的兼容性。表 2 中詳細列出了各版本的具體情況。
注意,Shell 的兩種主要語法類型有 Bourne 和 C,這兩種語法彼此不兼容。Boume 家族主要包括 sh、ksh、Bash、psh、zsh;C 家族主要包括 csh、tcsh(Bash 和 zsh 在不同程序上支持 csh 的語法)。
本章講述的腳本編程就是在 Bash 環境中進行的。不過,在 Linux 中除了可以支持 Bash,還可以支持很多其他的 Shell。我們可以通過 /etc/shells 文件來査詢 Linux 支持的 Shell。命令如下:
在 Linux 中,這些 Shell 是可以任意切換的,命令如下:
用戶信息文件 /etc/passwd 的最後一列就是這個用戶的登錄 Shell。命令如下:
大家可以看到,root 用戶和其他可以登錄系統的普通用戶的登錄 Shell 都是 /bin/bash,也就是 Linux 的標准 Shell,所以這些用戶登錄之後可以執行許可權允許范圍內的所有命令。不過,所有的系統用戶(偽用戶)因為登錄 Shell 是 /sbin/ndogin,所以不能登錄系統。
筆記:
sh/bash/csh/Tcsh/ksh/pdksh等shell的區別
❷ Linux操作系統由什麼組成
Linux系統結構一般有3個主要部分:內核kernel、命令解釋層Shell或其他操作環境、實用工具
1.Linux內核
內核是系統的核心,是運行程序和管理磁碟、列印機等硬體設備的核心程序。操作系統向用戶提供一個操作界面,它從用戶那裡接收命令,並且把命令送給內核去執行。
當 Linux安裝完畢之後,一個通用的內核就被安裝到主機中,這個通用內核能滿足絕大部分用戶的需求,但普遍適用性內核對具體的某台主機來說,可能有一些並不需要的內核程序將被安裝。因此,Linux允許用戶根據主機的實際配置定製 Linux的內核,從而有效地簡化 Linux內核,提高系統啟動速度。
2.Linux Shell
Shell是系統的用戶界面,提供了用戶與內核進行交互操作的介面。它接收用戶輸入的命今,並且把它送入內核執行。操作系統在系統內核與用戶之間提供操作界面, Linux存在多種操作環境,分別是基於圖形界面的集成桌面環境和基於Shell命令行環境。
Shell是一個命令解釋器,它解釋由用戶輸入的命令,並且送到內核。Shell編程語言具有普通編程語言的很多特點,如它也有循環結構和分支控制結構等,用這種編程語言編寫的Shell程序與其他應用程序具有同樣的效果。
作為命令行操作界面的替代, Linux還提供了像 Windows那樣的可視化圖形界面X-window的圖形用戶界面。
3.實用工具
標準的 Linux系統都有配套的實用工具程序,如編輯器、瀏覽器、辦公套件及其它系統管理工具等,用戶可以自行編寫需要的應用程序。
❸ Linux進程詳解
ps是Linux 中最基礎的瀏覽系統中的進程的命令。能列出系統中運行的進程,包括進程號、命令、CPU使用量、內存使用量等。接下來解讀一下Linux操作系統的進程和Windows「Ctrl+Alt+delete」直接的差異。
在進行了解進程命令之前需要知道進程的一些狀態
ps工具標識進程的5種狀態碼:
Linux操作系統進程執行的狀態轉換圖如圖所示:
下面來看一下 ps命令
ps --help命令可以查看ps命令的使用說明
或者使用 man ps命令 查詢ps的詳細說明
在 man手冊 關於ps的解讀中,總結了一下幾個參數的含義:
以上的參數是可以拼接使用的,那就了解一些常用的參數組合
ps aux命令
ps -ef命令
查看進程狀態這兩個是命令是最常用的,使用 ps aux 可以查看進程的詳細運行狀態等。使用 ps -ef 不僅可以顯示自身的PID,也可以顯示PPID(父進程)。但是顯示不了進程的運行狀態
top命令
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器
man手冊關於top的解釋
關閉進程,重啟進程
在上一片文章中 linux的目錄結構 裡面說過,在目錄/etc/init.d/目錄下包含許多系統各種服務的啟動和停止腳本。假設進程佔用內存較大或者進程異常,我們是重啟這個進程restart。如下圖所示:
我們重啟了mysqld這個進程,可以看出進程號已經改變(從15743到15964),說明進程已經重啟。
Linux下有3個特殊的進程,idle進程(PID=0), init進程(PID=1)和kthreadd(PID=2)
我們來看一下進程狀態[下面是刪減版,進程數量太多,列舉一部分]
可以看到很多進程的PPID號是1和2。也就是init進程和kthreadd進程。
在使用Windows系統的過程中,都碰到過應用程序卡死的情況。應對此問題,我們一般都是等待失去響應的程序恢復,或者是直接使用任務管理器將其強制關閉,然後再重新打開。
在Linux中,遇到特別耗費資源的進程,當然需要使用 top命令 查看進程佔用率高的進程。或者使用 free -m命令 查看內存剩餘。假設需要強殺進程來釋放空間。我們涉及到Linux中信號📶的知識,在這里簡單的描述一下,信號的詳解會在接下來的文章裡面敘述。
free -m命令查看內存空間
在linux中存在著64種信號
使用 kill -l命令 查看信號列表
在前面說過進程會被這些個信號> (進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號強制停止運行) 那問題就在於如何發信號給這些個進程。
使用kill命令發信號
我們從上面可以看到 mysqld進程被重啟了 。
關於Linux的這一塊進程的知識還有很多,後面的文章跟大家分享僵屍進程,孤兒進程等等知識,以及守護進程(daemon進程).
❹ linux操作系統的體系結構
看下操作系統原理就懂了,操作系統就是在用戶和硬體之間的一個媒介,因此它有兩個任務,一個是方便用戶操作,一個是管理硬體,所有的操作系統架構都離不開這兩個最初的動機,包括 windows、linux、mac等等。 另外內核主要實現的硬體管理,用戶操作主要通過shell來完成,比如windows上的cmd、explorer.exe,以及linux上的bash shell、kde、gnome。 其實說白了就是一種思想 ——封裝思想,譬如送人一台筆記本,你不用告訴它裡面有什麼CPU、內存,只要告訴他開機按鈕在哪裡就好了。 下面有一張linux體系的結構圖:
❺ 系統加固之Linux安全加固
Linux系統基本操作
文件結構圖及關鍵文件功能介紹
Linux文件結構
Linux文件結構圖
二級目錄
| 目錄 | 功能 |
| /bin | 放置的是在單人維護模式下能被操作的指令,在/bin底下的指令可以被root與一般賬號所使用 |
| /boot | 這個目錄只要在放置開機會使用到的文件,包括 Linux核心文件以及開機選單與開機所需配置的文件等等 |
| /dev | 在Linux系統上,任何裝置與介面設備都是以文件的形態存在於這個目錄當中的 |
| /etc |
系統主要的配置文件幾乎都放在這個目錄內,例如人員賬號密碼各種服務的啟動檔,系統變數配置等
|
| /home | 這個是系統默認的用戶家目錄(home directory) |
| /lib | /lib放置的則是在開機時會用到的函式庫,以及在/lib或/sbin底下的指令會呼叫的函式庫 |
| /media | /media底下放置的是可以移出的裝置,包括軟盤、光碟、DVD等等裝置都掛載於此 |
| /opt | 給第三方協議軟體放置的目錄 |
| /root | 系統管理員(root)的家目錄 |
| /sbin | 放置/sbin底下的為開機過程中所需要的,裡麵包括了開機、修復、還原系統所需的指令。 |
| /srv | srv可視為[service]的縮寫,是一些網路服務啟動之後,這些服務所需要取用的數據目錄 |
| /tmp | 這是讓一般使用者或是正在執行的程序暫時放置文件的地方 |
文件
賬號和許可權
系統用戶
超級管理員 uid=0
系統默認用戶 系統程序使用,從不登錄
新建普通用戶 uid大於500
/etc/passwd
/etc/shadow
用戶管理
許可權管理
解析文件許可權
文件系統安全
查看許可權:ls -l
修改許可權:
**chmod **
** chgrp**
設置合理的初始文件許可權
很奇妙的UMASK:
umask值為0022所對應的默認文件和文件夾創建的預設許可權分別為644和755
文件夾其許可權規則為:777-022-755
文件其許可權規則為:777-111-022=644(因為文件默認沒有執行許可權)
修改UMASK值:
1、直接在命令行下 umask xxx(重啟後消失)
2、修改/etc/profile中設定的umask值
系統加固
鎖定系統中多餘的自建賬號
檢查shadow中空口令賬號
檢查方法:
加固方法:
使用命令passwd -l <用戶名> 鎖定不必要的賬號
使用命令passwd -u <用戶名>解鎖需要恢復的賬號
使用命令passwd <用戶名> 為用戶設置密碼
設置系統密碼策略
執行命令查看密碼策略設置
加固方法:
禁用root之外的超級用戶
檢測方法:
awk -F ":" '( 1}' /etc/passwd
加固方法:
** passwd -l <用戶名>**
****
限制能夠su為root的用戶
查看是否有auth required /libsecurity/pam_whell.so這樣的配置條目
加固方法:
重要文件加上不可改變屬性
把重要文件加上不可改變屬性
Umask安全
SSH安全:
禁止root用戶進行遠程登陸
檢查方法:
加固方法:
更改服務埠:
屏蔽SSH登陸banner信息
僅允許SSH協議版本2
防止誤使用Ctrl+Alt+Del重啟系統
檢查方法:
加固方法:
設置賬號鎖定登錄失敗鎖定次數、鎖定時間
檢查方法:
修改賬號TMOUT值,設置自動注銷時間
檢查方法:
cat /etc/profile | grep TMOUT
加固方法:
vim /etc/profile
增加
TMOUT=600 無操作600秒後自動退出
設置BASH保留歷史命令的條目
檢查方法:
cat /etc/profile | grep HISTSIZE
加固方法:
vim /etc/profile
修改HISTSIZE=5即保留最新執行的5條命令
設置注銷時刪除命令記錄
檢查方法:
cat /etc/skel/.bash_logout 增加如下行
rm -f $HOME/.bash_history
這樣,系統中的所有用戶注銷時都會刪除其命令記錄,如果只需要針對某個特定用戶,,如root用戶進行設置,則可只在該用戶的主目錄下修改/$HOME/.bash_history文件增加相同的一行即可。
設置系統日誌策略配置文件
日誌的主要用途是 系統審計 、監測追蹤和分析。為了保證 Linux 系 統正常運行、准確解決遇到的各種樣統問題,認真地讀取日誌文件是管理員的一項非常重要任務。
UNIX/ Linux 採用了syslog 工具來實現此功能,如果配置正確的 話,所有在主機上發生的事情都會被記錄下來不管是好還是壞的 。
檢查方法:
cat /etc/profile | grep HISTSIZE
確定syslog服務是否啟用
查看syslogd的配置,並確認日誌文件是否存在
阻止系統響應任何從外部/內部來的ping請求
加固方法:
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all