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

linux 基礎與shell編程[筆記]

日期:2017/3/3 12:43:50   编辑: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 <stdio.h>

/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 <stdio.h>

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