Linux 介绍快速浏览
Linux 介紹
內核
庫: .so 共享對象,windows:dll 動態鏈接庫
應用程序
Linux的基本原則:
1、由目的單一的小程序組成;組合小程序完成復雜任務;
2、一切皆文件;
3、盡量避免捕獲用戶接口;
4、配置文件保存為純文本格式;
用戶接口
GUI接口:
CLI接口:
命令提示符,prompt, bash(shell)
#: root
$: 普通用戶
命令:
命令格式:
命令 選項 參數
選項:
短選項: -
多個選項可以組合:-a -b = -ab
長選項: --
參數:命令的作用對象
虛擬終端(terminal):Ctrl+Alt+F1-F6
Shell:
GUI: Graphic User Interface
Windows
X-Window
Gnome
KDE
Xface
CLI: Command Line Interface
sh
bash
csh
ksh
zsh
tcsh
prompt,命令提示符:
命令:
magic number: 魔數
shebang
#!/bin/bash
# command options... arguments...
選項:
短選項 -
長選項 --
參數:
list: ls
列出,列表
目錄:文件,路徑映射
路徑:從指定起始點到目的地所經過位置
文件系統:file system
列出指定路徑下的文件
目錄:working directory, current directory
pwd: Printing Working directory
ls
-l:長格式
文件類型:
-:普通文件 (f)
d: 目錄文件
b: 塊設備文件 (block)
c: 字符設備文件 (character)
l: 符號鏈接文件(symbolic link file)
p: 命令管道文件(pipe)
s: 套接字文件(socket)
文件權限:9位,每3位一組,3組 權限(U,G,O)每一組:rwx(讀,寫,執行), r-- ,第一組:文件的屬主用戶權限。第二組:文件的屬組用戶權限,第三組:其他用戶權限
文件硬鏈接的次數
文件的屬主(owner)
文件的屬組(group)
文件大小(size),單位是字節
時間戳(timestamp):最近一次被修改的時間
訪問:access
修改:modify,文件內容發生了改變
改變:change,metadata,元數據
-h:做單位轉換
-a: 顯示以.開頭的隱藏文件
. 表示當前目錄
.. 表示父目錄
-A
-d: 顯示目錄自身屬性
-i: index node, inode
-r: 逆序顯示
-R: 遞歸(recursive)顯示
cd: change directory
家目錄,主目錄, home directory
cd ~USERNAME: 進入指定用戶的家目錄
cd -:在當前目錄和前一次所在的目錄之間來回切換
命令類型:
內置命令(shell內置),內部,內建
外部命令:在文件系統的某個路徑下有一個與命令名稱相應的可執行文件
type: 顯示指定屬于哪種類型
date:時間管理
Linux: rtc
硬件時鐘
系統時鐘
獲得命令的使用幫助:
內部命令:
help COMMAND 比如:help cd
外部命令:
COMMAND --help 比如:date --help
命令手冊:manual
man COMMAND
whatis COMMAND
分章節:
1:用戶命令(/bin, /usr/bin, /usr/local/bin)
2:系統調用
3:庫用戶
4:特殊文件(設備文件)
5:文件格式(配置文件的語法)
6:游戲
7:雜項(Miscellaneous)
8: 管理命令(/sbin, /usr/sbin, /usr/local/sbin)
MAN:
NAME:命令名稱及功能簡要說明
SYNOPSIS:用法說明,包括可用的選項
DESCRIPTION:命令功能的詳盡說明,可能包括每一個選項的意義
OPTIONS:說明每一個選項的意義
FILES:此命令相關的配置文件
BUGS:
EXAMPLES:使用示例
SEE ALSO:另外參照
翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
向前翻一行:k
查找:
/KEYWORD: 向后
n: 下一個
N:前一個
q: 退出
練習:
使用date單獨獲取系統當前的年份、月份、日、小時、分鐘、秒
hwclock
-w:
-s:
練習:
1、echo是內部命令還是外部命令?
2、其作用?
3、如何顯示 echo “The year is 2013." echo "Today is 26.”為兩行?
請設置系統時間和硬件時間保持一致。
cp
mv
文件系統:
rootfs: 根文件系統 /
FHS:Linux
/boot: 系統啟動相關的文件,如內核、initrd,以及grub(bootloader)
/dev: 設備文件
設備文件:
塊設備:隨機訪問,數據塊
字符設備:線性訪問,按字符為單位
設備號:主設備號(major)和次設備號(minor)
/etc:配置文件
/home:用戶的家目錄,每一個用戶的家目錄通常默認為/home/USERNAME
/root:管理員的家目錄;
/lib:庫文件
靜態庫, .a
動態庫, .dll, .so (shared object)
/lib/modules:內核模塊文件
/lib64
/media:掛載點目錄,移動設備
/mnt:掛載點目錄,額外的臨時文件系統
/opt:可選目錄,第三方程序的安裝目錄
/proc:偽文件系統,內核映射文件
/sys:偽文件系統,跟硬件設備相關的屬性映射文件
/tmp:臨時文件, /var/tmp
/var:可變化的文件
/bin: 可執行文件, 用戶命令
/sbin:管理命令
絕對路徑:以跟目錄為起點到目標的路徑。
相對路徑:以當前目錄為起點到目標的路徑
mkdir:創建空目錄
-p:
-v: verbose
/root/x/y/z
/mnt/test/x/m,y
mkdir -pv /mnt/test/x/m /mnt/test/y
mkdir -pv /mnt/test/{x/m,y}
?
# tree:查看目錄樹
刪除目錄:rmdir (remove directory)
刪除空目錄
-p
文件創建和刪除
# touch
-a
-m
-t
-c
# stat 查看文件信息
創建文件,可以使用文件編輯器
nano
vi(另外一個文件)
刪除文件:rm
-i 刪除之前確認
-f 刪除之前不確認
-r 遞歸刪除
rm -rf / linux 自殺
cp: copy
cp SRC DEST
-r
-i 存在覆蓋前確認
-f
-p
-a:歸檔復制,常用于備份
cp file1 file2 file3
一個文件到一個文件
多個文件到一個目錄
cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp/
mv: move
移動文件
mv SRC DEST
mv -t DEST SRC
?
目錄管理:
ls、cd、pwd、mkdir、rmdir、tree
文件管理:
touch、stat、file、rm、cp、mv、nano,vi,vim
日期時間:
date、clock、hwclock、cal ,ntpdate
查看文本:
cat、tac、more、less、head、tail
分屏顯示:
more、less
more: 向后翻
less:
head:查看前n行
tail:查看后n行
-n
tail -f: 查看文件尾部,不退出,等待顯示后續追加至此文件的新內容;
文本處理:
cut、sort,join、sed、awk
?
文本文件:
Tom:23:male:2013/05/06
cut:
-d: 指定字段分隔符,默認是空格
-f: 指定要顯示的字段
-f 1,3
-f 1-3
文本排序:sort
-n:數值排序
-r: 降序
-t: 字段分隔符
-k: 以哪個字段為關鍵字進行排序
-u: 排序后相同的行只顯示一次
-f: 排序時忽略字符大小寫
文本統計:wc (word count)
-l
-w
-c
-L
sed基本用法:
sed: Stream EDitor
行編輯器 (全屏編輯器: vi)
sed: 模式空間
默認不編輯原文件,僅對模式空間中的數據做處理;而后,處理結束后,將模式空間打印至屏幕;
sed [options] 'AddressCommand' file ...
-n: 靜默模式,不再默認顯示模式空間中的內容
-i: 直接修改原文件
-e SCRIPT -e SCRIPT:可以同時執行多個腳本
-f /PATH/TO/SED_SCRIPT
sed -f /path/to/scripts file
-r: 表示使用擴展正則表達式
Command:
d: 刪除符合條件的行;
p: 顯示符合條件的行;
a \string: 在指定的行后面追加新行,內容為string
\n:可以用于換行
i \string: 在指定的行前面添加新行,內容為string
r FILE: 將指定的文件的內容添加至符合條件的行處
w FILE: 將地址指定的范圍內的行另存至指定的文件中;
s/pattern/string/修飾符: 查找并替換,默認只替換每行中第一次被模式匹配到的字符串
加修飾符
g: 全局替換
i: 忽略字符大小寫
s///: s###, s@@@
\(\), \1, \2
l..e: like-->liker
love-->lover
like-->Like
love-->Love
&: 引用模式匹配整個串
sed練習:
1、刪除/etc/grub.conf文件中行首的空白符;
sed -r 's@^[[:space:]]+@@g' /etc/grub.conf
2、替換/etc/inittab文件中"id:3:initdefault:"一行中的數字為5;
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
3、刪除/etc/inittab文件中的空白行;
sed '/^$/d' /etc/inittab
awk:
awk是一個強大的文本分析工具,
相對于grep的查找,sed的編輯,
awk在其對數據分析并生成報告時,顯得尤為強大。
簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。
awk '{pattern + action}' {commands}
其中 pattern 表示 AWK 在數據中查找的內容,而 action 是在找到匹配內容時所執行的一系列命令。
花括號({})不需要在程序中始終出現,但它們用于根據特定的模式對一系列指令進行分組。
pattern就是要表示的正則表達式,用斜杠括起來。
案例:
顯示最近登錄的5個帳號
#last -n 5 | awk '{print $1}'
讀入有'\n'換行符分割的一條記錄,然后將記錄按指定的域分隔符劃分域,填充域
$0則表示所有域,$1表示第一個域,$n表示第n個域。默認域分隔符是"空白鍵" 或 "[tab]鍵",
所以$1表示登錄用戶,$3表示登錄用戶ip,以此類推。
如果只是顯示/etc/passwd的賬戶
#cat /etc/passwd |awk -F ':' '{print $1}'
root
daemon
bin
sys
這種是awk+action的示例,每行都會執行action{print $1}。
-F指定域分隔符為':'。
?
如果只是顯示/etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以tab鍵分割
#cat /etc/passwd |awk -F ':' '{print $1"\t"$7}'
root /bin/bash
daemon /bin/sh
bin /bin/sh
sys /bin/sh
如果只是顯示/etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以逗號分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。
復制代碼
cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
name,shell
root,/bin/bash
daemon,/bin/sh
bin,/bin/sh
sys,/bin/sh
....
blue,/bin/nosh
awk工作流程是這樣的:先執行BEGING,然后讀取文件,讀入有/n換行符分割的一條記錄,然后將記錄按指定的域分隔符劃分域,填充域,$0則表示所有域,$1表示第一個域,$n表示第n個域,隨后開始執行模式所對應的動作action。接著開始讀入第二條記錄······直到所有的記錄都讀完,最后執行END操作。
?
搜索/etc/passwd有root關鍵字的所有行
#awk -F: '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
這種是pattern的使用示例,匹配了pattern(這里是root)的行才會執行action(沒有指定action,默認輸出每行的內容)。
搜索支持正則,例如找root開頭的: awk -F: '/^root/' /etc/passwd
?
搜索/etc/passwd有root關鍵字的所有行,并顯示對應的shell
# awk -F: '/root/{print $7}' /etc/passwd
/bin/bash
這里指定了action{print $7}
?
awk內置變量
awk有許多內置變量用來設置環境信息,這些變量可以被改變,下面給出了最常用的一些變量。
ARGC 命令行參數個數
ARGV 命令行參數排列
ENVIRON 支持隊列中系統環境變量的使用
FILENAME awk瀏覽的文件名
FNR 瀏覽文件的記錄數
FS 設置輸入域分隔符,等價于命令行 -F選項
NF 瀏覽記錄的域的個數
NR 已讀的記錄數
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符
$0變量是指整條記錄。$1表示當前行的第一個域,$2表示當前行的第二個域,......以此類推。
?
統計/etc/passwd:文件名,每行的行號,每行的列數,對應的完整行內容:
#awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh
filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh
filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh
使用printf替代print,可以讓代碼更加簡潔,易讀
awk -F ':' '{printf("filename:%s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd
print和printf
awk中同時提供了print和printf兩種打印輸出的函數。
其中print函數的參數可以是變量、數值或者字符串。字符串必須用雙引號引用,參數用逗號分隔。如果沒有逗號,參數就串聯在一起而無法區分。這里,逗號的作用與輸出文件的分隔符的作用是一樣的,只是后者是空格而已。
printf函數,其用法和c語言中printf基本相似,可以格式化字符串,輸出復雜時,printf更加好用,代碼更易懂。
?
awk編程
變量和賦值
除了awk的內置變量,awk還可以自定義變量。
下面統計/etc/passwd的賬戶人數
awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
......
user count is 40
count是自定義變量。之前的action{}里都是只有一個print,其實print只是一個語句,而action{}可以有多個語句,以;號隔開。
?
這里沒有初始化count,雖然默認是0,但是妥當的做法還是初始化為0:
awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd
[start]user count is 0
root:x:0:0:root:/root:/bin/bash
...
[end]user count is 40
統計某個文件夾下的文件占用的字節數
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'
[end]size is 8657198
如果以M為單位顯示:
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}'
[end]size is 8.25889 M
注意,統計不包括文件夾的子目錄。
?
條件語句
awk中的條件語句是從C語言中借鑒來的,見如下聲明方式:
復制代碼
if (expression) {
statement;
statement;
... ...
}
if (expression) {
statement;
} else {
statement2;
}
if (expression) {
statement1;
} else if (expression1) {
statement2;
} else {
statement3;
}
?
統計某個文件夾下的文件占用的字節數,過濾4096大小的文件(一般都是文件夾):
ls -l |awk 'BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}'
[end]size is 8.22339 M
循環語句
awk中的循環語句同樣借鑒于C語言,支持while、do/while、for、break、continue,這些關鍵字的語義和C語言中的語義完全相同。
?
數組
因為awk中數組的下標可以是數字和字母,數組的下標通常被稱為關鍵字(key)。值和關鍵字都存儲在內部的一張針對key/value應用hash的表格里。由于hash不是順序存儲,因此在顯示數組內容時會發現,它們并不是按照你預料的順序顯示出來的。數組和變量一樣,都是在使用時自動創建的,awk也同樣會自動判斷其存儲的是數字還是字符串。一般而言,awk中的數組用來從記錄中收集信息,可以用于計算總和、統計單詞以及跟蹤模板被匹配的次數等等。
?
顯示/etc/passwd的賬戶
awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
0 root
1 daemon
2 bin
3 sys
4 sync
5 games
......
這里使用for循環遍歷數組
linux 引號
1、反引號:`` ,命令替換
2、單引號:'' ,字符串
3、雙引號: "" ,變量替換
管道:前一個命令的輸出,作為后一個命令的輸入
命令1 | 命令2 | 命令3 | ...
?
練習:
1、統計/usr/bin/目錄下的文件個數;
# ls /usr/bin | wc -l
判斷 /home/goldin目錄是否有文件
2、取出當前系統上所有用戶的shell,要求,每種shell只顯示一次,并且按順序進行顯示;
# cut -d: -f7 /etc/passwd | sort -u
4、取出/etc/inittab文件的第6行;
# head -6 /etc/inittab | tail -1
5、取出/etc/passwd文件中倒數第9個用戶的用戶名和shell,顯示到屏幕上并將其保存至/tmp/users文件中;
# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/users
6、顯示/etc目錄下所有以pa開頭的文件,并統計其個數;
# ls -d /etc/pa* | wc -l
用戶管理:
useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage
組管理:
groupadd, groupdel, groupmod, gpasswd
權限管理:
chown, chgrp, chmod, umask
/etc/passwd:
用戶名:密碼:UID:GID:注釋:家目錄:默認SHELL
/etc/group:
組名:密碼:GID:以此組為其附加組的用戶列表
/etc/shadow:
用戶名:密碼:最近一次修改密碼的時間:最短使用期限:最長使用期限:警告時間:非活動時間:過期時間:
用戶管理:
useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage
useradd [options] USERNAME
-u UID
-g GID(基本組)
-G GID,... (附加組)
-c "COMMENT"
-d /path/to/directory
-s SHELL
-m -k
-M
-r: 添加系統用戶
userdel:
userdel [option] USERNAME
-r: 同時刪除用戶的家目錄
id:查看用戶的帳號屬性信息
-u
-g
-G
-n
finger: 查看用戶帳號信息
finger USERNAME
修改用戶帳號屬性:
usermod
-u UID
-g GID
-a -G GID:不使用-a選項,會覆蓋此前的附加組;
-c
-d -m:
-s
-l
-L:鎖定帳號
-U:解鎖帳號
chsh: 修改用戶的默認shell
chfn:修改注釋信息
密碼管理:
passwd [USERNAME]
--stdin
-l
-u
-d: 刪除用戶密碼
pwck:檢查用戶帳號完整性
組管理:
創建組:groupadd
groupadd
-g GID
-r:添加為系統組
groupmod
-g GID
-n GRPNAME
groupdel
gpasswd:為組設定密碼
newgrp GRPNAME <--> exit
chage
-d: 最近一次的修改時間
-E: 過期時間
-I:非活動時間
-m: 最短使用期限
-M: 最長使用期限
-W: 警告時間
權限管理:
r:
w:
x:
111 101 101
三類用戶:
u: 屬主
g: 屬組
o: 其它用戶
chown: 改變文件屬主(只有管理員可以使用此命令)
# chown USERNAME file,...
-R: 修改目錄及其內部文件的屬主
--reference=/path/to/somefile file,...
chown USERNAME:GRPNAME file,...
chown USERNAME.GRPNAME file,...
# chgrp GRPNAME file,...
-R
--reference=/path/to/somefile file,...
chmod: 修改文件的權限
修改三類用戶的權限:
chmod MODE file,...
-R
--reference=/path/to/somefile file,...
rwxr-x---
ps -aux
netstat -ntpl
grep
find
yum install lrzsz 上傳文件rz
-linux 安全性
登陸
等日志查看
限制某些IP才能ssh登陸
...
密碼一個月換一次
設置密碼:特殊符號,大寫,小寫,1223455,最少8位
防火墻
規則
添加規則
配置文件
總結
以上是生活随笔為你收集整理的Linux 介绍快速浏览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html wap 转换,html移动端w
- 下一篇: Win32学习(七) 鼠标消息