歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> linux 基礎與shell編程[筆記]

linux 基礎與shell編程[筆記]

日期:2017/3/1 11:51:40   编辑:SHELL編程
linux 基礎與shell編程
linux 系統知識
linux是一個OS ,也是一個完全免費 開源 自由軟件
linux 1991 荷蘭大學生課程設計 unix
GPL協議
GPL:General Public License
是一份GNU(完全自由軟件操作系統)是一個廣泛使用的自由軟件許可證條款

常見的linux發行版本:
Debian:Debian為一款提供您安裝在計算機上使用的操作系統 (OS)。操作系統就是能讓您的計算機工作 的一系列基本程序和實用工具。由於 Debian 采用了 Linux Kernel (操作系統的核心),但是大部分基礎的操作系統工具都來自於 GNU 工程, 因此又稱為 GNU/Linux

Ubuntu:Ubuntu是一個以桌面應用為主的Linux操作系統,其名稱來自非洲南部祖魯語或豪薩語的“ubuntu”一詞(譯為吾幫托或烏班圖)意思是“人性”“我的存在是因為大家的存在”
Ubuntu基於Debian發行版和GNOME桌面環境,與Debian的不同在於它每6個月會發布一個新版本。Ubuntu的目標在於為一般用戶提供一個最新的、同時又相當穩定的主要由自由軟件構建而成的操作系統。Ubuntu具有龐大的社區力量,用戶可以方便地從社區獲得幫助

Fedora:Fedora 是一個開放的、創新的、前瞻性的操作系統和平台,基於 Linux。它允許任何人自由地使用、修改和重發布,無論現在還是將來。它由一個強大的社群開發,這個社群的成員以自己的不懈努力,提供並維護自由、開放源碼的軟件和開放的標准

readhat:RedHat是美國RedHat公司的產品,是相當成功的一個Linux發行版本,也是目前使用最多的Linux發行版本,原來的Red Hat版本早已停止技術支持其中一個是由Red Hat公司提供收費技術支持和更新的Red Hat Enterprise Linux系列;另一個是由社區開發的免費的Fedora Core系列


linux內核五大模塊:進程調度模塊 內存管理模塊 文件系統模塊 進程間通信模塊 網絡接口模塊
進程調度模塊:用來負責控制進程對CPU資源的使用
內存管理模塊:用於確保所有進程能夠安全地共享機器主存區,同時內存管理模塊還支持虛擬內存管理方式,使得linux支持進程使用比實際內存空間更多的內存容量
文件系統模塊:用於支持對外部設備的驅動和存儲
進程間通信模塊 :用於支持多種進程間的信息交換方式
網絡接口模塊:提供對多種網絡通信標准的訪問並支持許多網絡硬件

linux系統框架
Kernel(內核)--》庫,庫函數--》Shell--》Applications

linux OS系統組成:
a.內核(kernel)(五大模塊組成)
b.外殼(shell)
c.庫函數包
d 應用程序(application)

系統用戶名:root
密碼:123456

終端:字符終端,通過輸入字符命令 操作系統

ctrl+alt+enter 全屏/退出全屏
終端提示符:
a.[root@localhost ~]#
b.[lzl@localhost root]$
root/lzl:當前用戶名
localhost:主機名
~/root:當前目錄
#:當前用戶是一個管理用戶
$:當前用戶是一般用戶

[root@localhost ~]# cd /home 切換到 home 目錄
[root@localhost home]#

linux系統版本信息:
[root@localhost home]# uname -a //查看系統版本信息命令
Linux localhost.localdomain 2.6.23.1-42.fc8 #1 SMP Tue Oct 30 13:55:12 EDT 2007 i686 i686 i386 GNU/Linux
linux系統版本信息=內核版本+系統版本+系統修改次數
2.6.23
2:表示內核版本,內核一般為:1,2,3
6:表示系統版本
穩定版本: 偶數
開發版本: 奇數
23:完成23次重大修改次數

MBR:系統主引導記錄區,是硬盤前512個字節,存放時bootloader 程序

linux系統引導程序:bootloader(.s 機器匯編指令)
啟動過程:
1.硬件通電 初始化
2.MBR中的程序加載到內存0x0000000位置
3.cpu主動從0x0000000位置讀取指令,並執行,軟件初始化

linux系統引導方式:
a.GRUB
B.LILO

內核空間:在內核中運行的程序,用戶是不能直接訪問內核,必須通過內核提供接口函數
用戶空間:用戶程序運行空間

init進程 是用戶空間第一個執行進程,初始化用戶空間環境變量等
pid:進程編號
pid=1 進程編號 init 進程 ,用戶空間第一個運行也是最後結束進程

init進程讀取初始化文件 initab
initab 在 etc目錄下,記錄系統運行級別
linux 系統運行級別:
[root@localhost proc]# cd /etc
[root@localhost proc]# vim inittab

Default runlevel. The runlevels used by RHS are:
0:關機
1:單用戶模式,不需要登錄
2:多用戶模式,不支持NFS(網絡文件系統)
3:多用模式
4:未使用
5:桌面運行模式(x11 windows)
6:重啟模式
id:5:initdefault: //設置默認初始模式

如何在終端切換模式:
[root@localhost etc]# init 3 //純字符模式
[root@localhost etc]# init 5 //圖形窗體模式
[root@localhost etc]# startx //圖形窗體模式

關機命令:
[root@localhost ~]# init 0 //必須是root用戶
[root@localhost ~]# shutdown -h now //必須是root用戶
[root@localhost ~]# halt

重啟命令:
[root@localhost ~]# init 6 //必須是root用戶
[root@localhost ~]# shutdown -r now //必須是root用戶
[root@localhost ~]# reboot

linux是一個文件系統,都是以樹形結構形式存在
"/" linux 系統跟文件
常用的跟目錄介紹:
bin:存放二進制文件目錄,是一般用戶可執行文件,命令所對應的文件
sbin:存放二進制文件目錄,是管理用戶執行文件
etc:存放系統配置文件信息目錄
/etc/inittab 運行級別
/etc/passwd 系統用戶名
/etc/shadow 用戶密碼
C:\WINDOWS\system32\config\SAM window用戶名
/etc/sysconfig/network-scripts/ifcfg-eth4 網絡信息
dev:設備映射目錄(每個設備都必須存在一個文件,操作文件就是操作該設備)
/dev/cdrom 光驅
/dev/stdin 輸入設備
/dev/stdout 輸出設備
/dev/stderr 錯誤輸出設備
/dev/sda
/dev/hda

/dev/sda :SCSI 總線
/dev/hda :IDE 總線
硬盤:系統區(c:) 邏輯區(擴展區)(d: e: f:) window
sda1 c盤
sda5 d盤
sda6 e盤

root:root用戶主目錄(用戶信息配置文件)
[root@localhost ~]# "~"當前用戶主目錄
home:其它用戶的主目錄 (.bashrc .bash_history .bash_logout)
usr:linux 最大目錄存放系統庫文件 頭文件 內核文件等
#include
/usr/inlcude:系統默認搜索頭文件目錄
/usr/lib:系統默認搜索庫文件目錄
/usr/src/kernels/2.6.23.1-42.fc8-i686 內核存放目錄
/usr/local:存放第三方文件

mnt:掛載目錄(掛在外圍設備)
[root@localhost mnt]# cd hgfs //hgfs掛在window共享文件目錄
window共享目錄掛載linux:
1.window系統中創建一個共享目錄
2.vm-->settings-->options-->shared folders 按照向導操作
3.[root@localhost windshare]# cd /mnt
[root@localhost mnt]# cd hgfs //利用tab 自動補齊

掛載U盤步驟:
1.虛擬機檢測到U盤(vm--->removable devices --->usb接口 --->connect)
2.[root@localhost windshare]# fdisk -l 查看磁盤信息,u盤映射文件
/dev/sdb1
System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 2349 18667530 8e Linux LVM
3.[root@localhost mnt]# mount -t vfat /dev/sdc1 /mnt 掛在命令
[root@localhost /]# cd /mnt
[root@localhost mnt]# ls
4.[root@localhost /]# umount /mnt 卸載

proc:系統正在運行映射目錄(進程 資源信息)
cupinfo
meminfo
boot:系統啟動目錄
tmp:臨時文件目錄

linux常用的命令:
文件目錄命令
磁盤管理命令
用戶管理命令
用戶及其文件授權命令
進程命令
網絡命令
正則表達式相關命令(awk grep egrep)

命令格式
命令名 [選項] [參數]
選項:-|-- 出現
cd
ls

man 幫助命令
[root@localhost 1]# man ls
[root@localhost 1]# man printf //默認作為命令查找幫助
[root@localhost 1]# man n printf (n=1 2 3 4 5)
[root@localhost 1]# man 3 printf //函數幫助內容
按下"q"退出幫助

顯示目錄內容
ls
[root@localhost home]# ls 顯示當前目錄信息(默認值)
[root@localhost home]# ls /root 顯示指定目錄信息
[root@localhost home]# ls linuxshare
[root@localhost etc]# ls -l 列表方式顯示信息
drwxr-xr-x 5 root lp 4096 2009-03-28 cups
d:文件類型,linux常見的文件類型:
-:一般文件
d:目錄
l:鏈接文件
c:字符設備文件
b:塊設備文件
s:套接字(網絡通信)
p:管道文件
rwxr-xr-x:對文件訪問模式 r:read w:write x:執行 -:無
5:對文件訪問入口數
root:文件所有者名
lp :文件所有者所在組名
4096:大小
2009-03-28:最後修改時間/最後訪問時間/文件狀態變化最後時間
cups:文件名

[root@localhost etc]# ll //ls -l 別名
[root@localhost lzl]# ls -a 顯示所有文件包括隱藏文件(.開頭)
"." :當前目錄
.. :上一級目錄
[root@localhost lzl]# ls --all //單詞
[root@localhost home]# ls -i inode 文件節點值
[root@localhost home]# ls -il 選項組合
[root@localhost home]# ls -ila
[root@localhost lzl]# ls -l .bashrc 查看指定文件


相對路徑:從當前目錄訪問,後續出現目錄或文件名必定是當前目錄的子目錄或子文件
絕對路徑:從系統根目錄"/"訪問
[root@localhost lzl]# ls /tmp 絕路徑
[root@localhost lzl]# ls tmp 相對路徑
切換目錄
cd
[root@localhost lzl]# cd /home
[root@localhost home]# cd linuxshare
[root@localhost home]# cd /home/linuxshare/

特殊寫法:
[root@localhost linuxshare]# cd .. 返回到上一級目錄
[root@localhost linuxshare]# cd ../..
[root@localhost home]# cd /
[root@localhost home]# cd ~ 切換到當前用戶主目錄

當前目錄絕對路徑值
pwd
[root@localhost linuxshare]# pwd
/home/linuxshare

創建目錄
[root@localhost home]# mkdir a
[root@localhost a]# mkdir /home/b
[root@localhost home]# mkdir a1 a2 a3
[root@localhost home]# mkdir -p a4/a5 創建父子目錄

創建空文件
[root@localhost a]# touch a1
[root@localhost a]# touch a2 a3
[root@localhost home]# touch a2/a21

刪除空目錄
rmdir
[root@localhost home]# rmdir a3 只能刪除空目錄
[root@localhost home]# rmdir a1 a2

刪除非空目錄或文件
rm
刪除文件
[root@localhost a]# rm a1
[root@localhost home]# rm -f aa 無提示

刪除非空目錄
[root@localhost home]# rm -r a r遞歸刪除目錄
[root@localhost home]# rm -rf a

[root@localhost home]# rm -f *.c "*":匹配任意的個數不限字符

[root@localhost home]# rm -f * 刪除所有文件

[root@localhost home]# rm -fr * 刪除所有非空目錄

復制文件
cp
cp 源文件 目標文件
[root@localhost home]# cp /etc/passwd /home
[root@localhost home]# cp /etc/passwd .
[root@localhost home]# cp /etc/passwd ./passwd2
[root@localhost home]# cp * /tmp
[root@localhost home]# cp /tmp/* .


復制目錄
[root@localhost home]# cp -r a /tmp
[root@localhost home]# cp -r * /tmp
[root@localhost home]# cp -r /tmp/*

移動
mv
移動文件
[root@localhost home]# mv passwd2 b
[root@localhost b]# mv passwd2 /home/passwd3

[root@localhost home]# mv passwd3 passwd4 //重命名

移動目錄
[root@localhost home]# mv aa b

[root@localhost home]# cat passwd
[root@localhost home]# head -10 passwd
[root@localhost home]# tail -10 passwd

grep 查找數據行
[root@localhost home]# grep root passwd
[root@localhost home]# cat passwd | grep root

"|"管道 :前一個進程輸出作為後一個進程輸入,實現兩個進程通信
0:標准輸入
1:標准輸出
2:錯誤輸出
[root@localhost home]# cat passwd | grep root

統計字符 單詞 行數
wc
[root@localhost home]# wc abc
[root@localhost home]# wc -w abc
[root@localhost home]# wc -c abc
[root@localhost home]# wc -l abc
[root@localhost home]# cat abc | wc
[root@localhost home]# echo "abcde" | wc

重定向符號
重定向符號一般改變數據 標准輸入和標准輸出
輸出重定向符號:
>
>>
[root@localhost home]# ls -l > abc //輸出到文件(默認是標准輸出)
">":先清空文件,再寫文件
[root@localhost home]# ls >> abc
">>":文件追加(append),在文件原有內容末尾添加新內容

輸入重定向符號:
<
<<
[root@localhost home]# wc < abc //abc是一個文件名
[root@localhost home]# cat << abc //abc是一個終止輸入字符數據

指定錯誤輸出到文件
[root@localhost home]# la 2>abc
[root@localhost home]# ls 1>abc 2>ert
[root@localhost home]# la 1>abc 2>ert

終端類型:
a. pts/0 虛擬終端
b. tty 物理終端

[root@localhost home]# who
[root@localhost home]# whoami //當前虛擬終端賬號

whereis 在環境變量PATH中查找含有指定字符路徑值
[root@localhost home]# whereis abc
[root@localhost home]# whereis ls

find查找文件
find 查找目錄 查找方式 值

[root@localhost home]# find . -name abc
[root@localhost home]# find / -name abc
[root@localhost home]# find . -type d
[root@localhost home]# find . -size 4096c //大小必須有單位(b c w K M G)

vi/vim命令 linux自帶文本編輯工具
vim三種操作模式:
a.浏覽模式(打開文檔默認為此模式)
b.命令模式(對文檔操作命令)
c.末行模式(vim 操作命令)

通過vim打開文件或創建文件
[root@localhost home]# vim
[root@localhost home]# vim a1

操作vim 實際就是三種模式轉換:
浏覽模式 按下字母"i,a" 可輸入數據

由可輸入數據 按下"esc" 命令模式

命令模式 按下 "shift+:" 末行模式

末行模式下常用命令:
:wq 保存退出
:q! 不保存退出
:w 新文件名 另存為
:!ls 執行shell命令
:set nu 顯示行號
:u 撤銷上一次修改
:/查找內容/ /oo/ 高亮度顯示查找數據
:%s/oo/bb/ 替換每行第一次出現"oo"
:%s/oo/bb/g 替換"oo"
:%s/\/bin/aa/g // \/ 表示'/'字符本身含義

命令模式常用命令
yy 復制當前行
nyy 復制多行數據 n=1 2 3 4 ...
pp 粘貼
dd 刪除當前行
ndd 刪除多行數據 n=1 2 3 4 ...
gg 定位文件開頭
GG 定位文件末尾
gg=GG 自動排版
shif+~ 大小寫轉換

異常退出vim 生成一個交換文件,刪除交換文件
.a.c.swp
[root@localhost home]# rm -f .a.c.swp

磁盤管理命令
報告文件系統空間未使用狀況
df
[root@localhost home]# df

統計目錄大小
du
[root@localhost home]# du

輸出磁盤分區信息
fdisk
[root@localhost home]# fdisk -l

復制文件/格式轉換
dd

用戶管理命令
linux系統約定每個用戶都必須屬於一個初始化組
初始組:創建用戶是,系統自動創建一個與用戶名同名的組
所屬組:用戶屬於其它組

/etc/passwd:用戶信息
/etc/shadow:密碼信息
/etc/group:組信息

/etc/passwd:
lzl:x:500:500::/home/lzl:/bin/bash
lzl:username
x:是否需要通過密碼驗證
500:uid
500:gid
/home/lzl:用戶主目錄路徑
/bin/bash:改用戶執行shell命令解釋器

取消root用戶密碼步驟:
1.啟動虛擬機,快速點擊鼠標(虛擬機獲取焦點)
2.按下 字母 "e"
3.按下 字母 "e"
4.移動選擇第二項,按下 字母 "e"
5.空格 輸入"single" 回車
6.按下 字母 "b" 重啟
7.單用戶模式下,輸入 cd /etc
vim passwd //刪除 "X" root::
reboot


adduser/useradd
[root@localhost etc]# adduser user1
[root@localhost etc]# adduser -g user1 user2
//-g指定初始組,必須保證user1先存在 ,不會創建user2組
[root@localhost etc]# adduser -G user1 user3
//-G 指定該用戶也屬於user1組,會創建一個初始組user3
[root@localhost home]# adduser -r user4 //不創建用戶主目錄

passwd
[root@localhost home]# passwd 設置當前用戶密碼
[root@localhost home]# passwd user1 設置指定用戶密碼
[root@localhost home]# cat pa | passwd user2 --stdin //從文件中讀取密碼
[root@localhost home]# echo "123456" | passwd user4 --stdin

切換用戶
[root@localhost home]# su user1 從root切換到一般用戶,不需要密碼
[user1@localhost home]$ su //默認切換root用戶 ,必須輸入密碼
[user1@localhost home]$ su root

[user2@localhost home]$ adduser user5
bash: /usr/sbin/adduser: 權限不夠

[user2@localhost home]$ sudo adduser user5 //作為另一個用戶(root)執行(添加 sudoer file)

刪除用戶
[root@localhost home]# userdel user1 刪除用戶
[root@localhost home]# userdel -r user2 刪除用戶及其主目錄
[root@localhost home]# man usermod /改變用戶模式

鏈接文件
a.符號鏈接(軟鏈接)
b.硬鏈接
[root@localhost home]# ln -s a b
//創建符號鏈接,創建一個新的文件,不能離開源文件(a)操作,類似於window 快捷方式

1631062 -rw-r--r-- 1 root root 9 11-13 18:54 a
1631060 lrwxrwxrwx 1 root root 1 11-13 18:55 b -> a
文件類型是"l",該問價必定是一個符號鏈接文件


[root@localhost home]# ln a b
//創建硬鏈接文件,只是增加源文件訪問入口數,並沒有創建新文件,刪除源文件只是減少一個入口數
1631062 -rw-r--r-- 2 root root 9 11-13 18:58 a
1631062 -rw-r--r-- 2 root root 9 11-13 18:58 b

文件模式設置
umask 設置掩碼值(屏蔽值)
[root@localhost home]# umask
[root@localhost home]# umask 0 //設置臨時新屏蔽值

chmod 改變文件訪問模式
chmod 模式 文件名

[root@localhost home]# ./abc
bash: ./abc: 權限不夠

rw-r--r--
rw-:文件的所有者訪問模式值 (u)
r--:與文件的所有者同組的模式值 (g)
r--:其它組用戶模式值 (o)
改變用戶訪問模式:u+rwx u+r u+wx u-x u-rwx u=rw
[root@localhost home]# chmod u-rx abc
改變同組用戶訪問模式:g+rwx g+x g-rx g=wx
[root@localhost home]# chmod g+x abc
改變其它用戶訪問模式:o+rwx o+x o-rx o=rx
[root@localhost home]# chmod o+rwx abc
改變所有用戶訪問模式: a+rwx a-x
[root@localhost home]# chmod a=rx abc

八進制表示(0-7)
rwx:
r=4 w=2 x=1 -=0每個八進制數值代表一種用戶訪問模式
0567 等價於:
user= 4+1=r-x
group= 6=4+2=rw-
other= 7=4+2+1=rwx
chmod 765 abc

int fd=open("ac",O_CREAT|O_RDWR,0765);
A=0765
umask=0022
filemod=0745
A=765= 111 110 101
umask=022=000 010 010
A&~umask= 111 110 101
111 101 101
filemod=745 =111 100 101
文件訪問模式=預設模式 & ~uamsk

改變文件所有者
chown
[root@localhost home]# chown user12 abc //用戶名user12必須存在

改變文件所屬組
chgrp
[root@localhost home]# chgrp user12 abc //組名user12必須存在

環境變量:系統級變量,操作系統用來存儲相關信息值,能再程序中快速獲取

[root@localhost home]# echo $USER //獲取當前用戶
系統環境變量名一般是大寫,主要是與自定義變量區分
輸出變量 echo $變量名 ,否則輸出是變量名
[root@localhost home]# echo $USER
[root@localhost home]# echo USER

[root@localhost home]# env //獲取系統的環境變量及其值
常見的變量:
PATH:存儲路徑值
USER:當前用戶
SHELL:當前用戶的解釋器
LD_LIBRARY_PATH:動態庫文件路徑

改變環境變量值 export
export 變量名=$變量名:/home

[root@localhost home]# gcc hello.c -o hello
[root@localhost home]# hello
bash: hello: command not found
如何解決:
1.[root@localhost home]# pwd
/home
[root@localhost home]# export PATH=$PATH:/home
[root@localhost home]# hello
2.[root@localhost home]# cp hello /usr/bin

[root@localhost home]# export PATH=$PATH:/home 所有通過此命令設置環境變量值都是臨時,關閉此終端,設置無效

把設置命令存放在配置文件中 稱為 永久設置
用戶級:
[root@localhost home]# cd ~
[root@localhost ~]# vim .bashrc /vim bash_profile
將export PATH=$PATH:/home 加入到文件 重啟一致有效

系統級:
[root@localhost ~]# cd /etc
[root@localhost etc]# vim bashrc
將export PATH=$PATH:/home 加入到文件 重啟一致有效


自定環境變量:
[root@localhost etc]# export MYNAME=1234
[root@localhost etc]# env | grep MYNAME
刪除環境變量
[root@localhost etc]# unset MYNAME

進程管理名
進程:正在執行的程序,是系統資源分配最小單位
32操作系統進程所占虛擬空間:4G(2^32-1) 1G:內核空間 3G:用戶空間
進程分為前台和後台進程:
[root@localhost etc]# ps -aux 顯示所有進程

進程狀態:
1.運行狀態(R):runing 正在運行或准備運行
2.可中斷狀態:堵塞暫停,可以依據條件或信號喚醒
3.不可中斷狀態(S):堵塞暫停,不能被喚醒
4.停止狀態:運行結束
5.僵死狀態:(D)進程運行結束,資源未釋放

[root@localhost etc]# bc
ctrl+z:將前台進程變成後台進程
ctrl+c:結束當前進程
在後台運行進程
[root@localhost etc]# bc&
喚醒成為前台進程
[root@localhost etc]# fg +13375

殺死進程
[root@localhost etc]# kill -9 13375
殺死指定名稱所有進程
[root@localhost etc]# killall -9 bc

動態顯示運行狀態
[root@localhost etc]# top

root@localhost etc]# pstree
清屏
[root@localhost etc]# echo -e '\033c'

寫一個c程序實現清屏:
#include
int main()
{
//system("echo -e '\033c'");
system("echo $USER");
return 0;
}
system 函數執行shell 命令

網絡設置

設置ip地址
a.臨時ip地址
b.永久性ip地址
查看網卡名稱:
[root@localhost etc]# ifconfig
[root@localhost etc]# ifconfig -a

ethn(n=1 2 3 4 5):虛擬機中實際網卡名
lo:本地回旋網絡,系統自動創建實現系統內部通信(進程通信),127.0.0.1(localhost)表示本機

實現虛擬機與window 通信:
1. VMware Network Adapter VMnet1 虛擬網卡
VMware Network Adapter VMnet8
記住 VMware Network Adapter VMnet1 ip地址 如:192.168.80.1
2.選擇虛擬機與window主機通信網卡
vm--->settings-->networking adapters --> custom virtual network (選擇VMnet1)
3.在虛擬機終端設置臨時IP地址:[root@localhost etc]# ifconfig eth4 192.168.80.3
4.驗證是否ok:[root@localhost etc]# ping 192.168.80.1

window:運行(window+R) ping 192.168.80.3
5.關閉防火牆
linux: [root@localhost etc]# setup
window:控制面板

永久性設置
1.[root@localhost ~]# setup 依據提示一步一步設置
2.[root@localhost ~]# service network restart 必須重啟服務

重啟電腦後設置:
臨時設置:
[root@localhost etc]# ifconfig eth4 192.168.80.3
永久性設置:
[root@localhost ~]# service network restart

橋接模式
橋接網絡是指本地物理網卡和虛擬網卡通過VMnet0虛擬交換機進行橋接,物理網卡和虛擬網卡在拓撲圖上處於同等地位.可以上外網

NAT模式
在NAT網絡中,會用到VMware Network Adepter VMnet8虛擬網卡,主機上的VMware Network Adepter VMnet8虛擬網卡被直接連接到VMnet8虛擬交換機上與虛擬網卡進行通信

僅主機模式
在Host-Only模式下,虛擬網絡是一個全封閉的網絡,它唯一能夠訪問的就是主機

samb 共享服務 ,linux文件共享與windows
1.必須設置虛擬機與window主機網絡連通
2.在虛擬機中創建一個共享目錄
[root@localhost home]# mkdir share

3.修改配置文件
[root@localhost etc]# cd etc/
[root@localhost etc]# cd samba/
[root@localhost samba]# cp smb.conf smb.conf3 //備份配置文件
[root@localhost samba]# vim smb.conf
security = share
[share]
comment=share
path=/home/share
writeable=yes
public=yes
guest ok=yes

4.[root@localhost samba]# service smb start
5.window 運行 輸入 \\192.168.80.4
6.授權
[root@localhost /]# chmod 777 home
[root@localhost home]# chmod 777 share
7.創建虛擬網絡磁盤
我的電腦右鍵 --->新建網絡驅動器 粘貼


linux文件壓縮/解壓
.tar.gz 壓縮文件

創建一個壓縮文件:
tar
[root@localhost home]# tar -cvzf abc.tar.gz a b c
-c:創建壓縮文件
-v:輸出壓縮信息
-z:壓縮算法(zip)
-f:接著應該是文件名

[root@localhost home]# tar -xvzf abc.tar.gz //解壓到當前目錄下
-x:解壓選項

[root@localhost home]# tar -xvzf abc.tar.gz -C /tmp //解壓到指定目錄 -C改變目錄

正則表達式
對文本驗證一種匹配模式(格式是否符合要求,對輸入內容不限制),由字母 數字 其它據喲特殊含義字符(^ $ . *)組成

對行數數據模式匹配
grep
[root@localhost home]# cat /etc/passwd | grep root
通過正則表達式數據篩選:
grep '正則表達式' 文件名
cat 文件名 | grep '正則表達式'
顯示是一整行數據

常用正則表示符號含義:
^:以^後面單字符開頭 如:^abcd ^a1234 ^art
$:以$前面單字符結尾 如:abcd$ ab1d 123d
.:匹配任意單個字符 如:ab.cd ab1cd abrcd \.:"."字符
*:匹配任意個任意字符 如:abc*123 abcabcd123 abc123123 \*:"*"字符
[a-z]:小寫字母,匹配的是任意一個小字母
[A-Z]:匹配的是任意一個大字母
[0-9]:匹配的是任意數字字符
[abcd]:匹配的是列舉中任意單個字符
\{n\} n=1 2 3 4 ...: 前面的單字符連續出現n次 如:abc\{3\} 匹配 abccc
\{n,\} n=1 2 3 4 ...:前面的單字符至少連續出現n次 如:abc\{3,\} 匹配 abccc abcccc
\{n,m\} n=1 2 3 4 ...:前面的單字符連續出現n次,但不能超過m次
如:abc\{3,5\} 匹配 abccc abcccc abccccc
[ab|123] :選擇其一
[^a]:不能含有列舉單字符 如:[^a-zA-Z] 1234

[root@localhost home]# cp /etc/passwd .

搜索含有"root"的所有行
[root@localhost home]# grep root passwd
[root@localhost home]# grep 'root' passwd

搜索含有"test或者taste"的所有行
[root@localhost home]# grep 't[a|e]st' passwd

搜索含有"oo"的行
[root@localhost home]# grep 'o\{2\}' passwd
[root@localhost home]# grep '[^o]o\{2,2\}[^o]' passwd

搜索含有"oo"但"oo"前不能是g的行
[root@localhost home]# grep '[^g]o\{2\}[^o]' passwd

搜索含有"oo"但"oo"前不能是a-z的行
[root@localhost home]# grep '[^a-z]o\{2\}[^o]' passwd

查找以"t"開頭的行
[root@localhost home]# grep '^t' passwd

查找不以a-z,A-Z開頭的行
[root@localhost home]# grep '^[^a-zA-Z]' passwd

查找以"."結尾的行
[root@localhost home]# grep '\.$' passwd

查找空行
[root@localhost home]# grep '^$' passwd

查找'g??g'形式的行,??表示可以是任意字符,但2個g之間只能有2個字符
[root@localhost home]# grep 'g..g' passwd

查找包含"oo"的行
[root@localhost home]# grep 'oo' passwd

查找包含"oo","ooo","oooo"的行
[root@localhost home]# grep '[^o]o\{2,4\}[^o]' passwd

擴展查找正則符號:
?:前面的單字符出現0次或1次
+:前面的單字符出現1次或多次
|:二選擇一
(|):二選擇一
egrep 實現擴展查找
[root@localhost home]# egrep 'o+' passwd

寫出一個正則表達式:
字母'm'開頭後面是4個連續的任意字母後面是':'後面是3個連續的字母'a'最後是's'結尾
^m[a-zA-Z]\{4\}:a\{3\}s$


awk
awk處理行數據,依據指定字符將行數據分解成多個域,可以獲取每個域
域:行數數據分解的最小單位

awk 語法:
awk 文件名 //將文件中的數據行按照空格字符分解成多個域
awk -F 分割字符 文件名//指定分割字符

域表示值:
$1:第一個域
$2:第二個域
$0:數據行

awk 執行處理域語句:
a.BEGIN :在處理文檔之前執行的語句,只會執行一次
b.處理文檔中每行數據執行,每一行數據執行一次
c.END:處理完文檔之後執行的語句 ,只會執行一次
awk 完整語法:
awk -F 分割字符 'BEGIN{}{}END{}' 文件名
| awk -F 分割字符 'BEGIN{}{}END{}' 管道提供數據

[root@localhost home]# awk '{print $0}' awkdata.txt
[root@localhost home]# awk '{print $1}' awkdata.txt
[root@localhost home]# awk -F , '{print $1}' awkdata.txt
[root@localhost home]# awk -F : '{print $1}' passwd
[root@localhost home]# cat awkdata.txt | awk -F , '{print $1}'
[root@localhost home]# awk -F : 'BEGIN{print "username"}{print $1}END{print "end"}' passwd
[root@localhost home]# grep 'oo' passwd | awk -F : '{print $1}'
[root@localhost home]# grep '[g|G]reen' awkdata.txt | awk -F , '{print $1}'
[root@localhost home]# awk -F , '{if($4~/[g|G]reen/) print $1}' awkdata.txt
[root@localhost home]# awk -F , '{if($3==48) print $1}' awkdata.txt
[root@localhost home]# awk -F , '{if($3==48) print $1; else print "no"}' awkdata.txt
[root@localhost home]# awk -F , 'BEGIN{S=0}{S=S+$6}END{print S}' awkdata.txt
[root@localhost home]# awk -F , '{if($3>48200 && $6<40) print $1}' awkdata.txt
[root@localhost home]# awk -F , '{if($3>48200 || $6<40) print $1}' awkdata.txt

統計etc目錄中所有文件大小之和?
[root@localhost etc]# ls -l | awk 'BEGIN{t=0}{if($1~/^[^d]/) t=t+$5}END{print t}'
[root@localhost etc]# ls -l | grep '^[^d]' | awk 'BEGIN{t=0}{t=t+$5}END{print t}'

awk內置變量
NF:域數
NR:awk處理的行數

shell腳本
shell腳本=shell命令+邏輯

shell 腳本是一個解釋性語句,沒有嚴格語法要求
shell解釋器:
/bash:解釋執行shell語句
[root@localhost etc]# echo $SHELL //當前用戶的shell解釋器
[root@localhost etc]# cat shells //支持解釋器

shell腳本文件格式:
#!/bin/bash //指定解釋器,一般放在第一句
#echo "123456" //"#"注釋符號,解釋器不會執行注釋語句

執行shell腳本文件
[root@localhost shell1001]# chmod 744 shell1.sh //授予執行權限
[root@localhost shell1001]# ./shell1.sh

[root@localhost shell1001]# bash shell1.sh
[root@localhost shell1001]# sh shell1.sh

shell腳本基本語法:
定義shell腳本變量時不需指定數據類型
name="abcde"
age=30

獲取變量值:
$name
$age

name="abcd"
echo "$name"
echo $name
echo '$name' //輸出$name 並非變量值
echo "'$name'"
echo '"$name"' //輸出 "$name" 並非變量值

echo " my ${name}name is ${name}"//{}區分變量名


獲取shell命令行參數值:
[root@localhost shell1001]# ./shell2.sh abc 123 rty //abc 123 rty 稱為命令行參數值,以空格區分

按照命令行參數位置個數區分:
$0:執行的文件名
$1:第一個參數值
$n:第n個參數值
$@:所有命令行參數值
$*:所有命令行參數值
$$:執行shell腳本的進程id值(pid)

$?:記錄最近執行shell語句狀態: 0:成功 非0:失敗

獲取輸入參數值
read
read name age//讀取輸入值,按照空格內區分,最後剩下的所有值全部賦給最後一個變量

echo 回顯輸出命令
每一次輸出都是換行:
echo $name
echo $age

echo常用的選項和特殊字符:
\t:tab
\c:不換行
\n:換行
-e:處理特殊字符

``反單引號
控制命令執行輸出,一般是將命令執行結果賦值給變量
[root@localhost shell1001]# A=`echo "abcd"`
[root@localhost shell1001]# c=`cal`

shell支持簡單運算操作
1.[root@localhost shell1001]# echo $[1+2]
2.[root@localhost shell1001]# ret=`expr 1 + 2` //空格不能省
[root@localhost shell1001]# echo $ret

邏輯
語句結構
1.順序
2.選擇
3.循環

選擇
a.if [ 條件 ];then
else
fi
b.if [ 條件 ]
then
else
fi
c.if [ 條件 ]
then
elsif [ 條件 ];then
else
fi

條件判斷:
1.linux文件判斷
-d 測試文件是否是目錄文件
-s 測試文件是否非空
-f 測試文件是否存在
-w 測試文件是否可寫
-L 測試文件是否是符號連接
-x 測試文件是否可執行
-r 測試文件是否可讀

2.數字比較
-eq 相等
-ne 不等
-lt 小於
-le 小於等於
-gt 大於
-ge 大於等於
3.字符比較
= 相等
!= 不等
-z 空字符
-n 非空字符

獲取條件判斷結果:
1.test
[root@localhost shell1001]# test -d shell1.sh
[root@localhost shell1001]# echo $?
[root@localhost shell1001]# test -f shell1.sh
[root@localhost shell1001]# echo $?

Copyright © Linux教程網 All Rights Reserved