linux基本知識2

vi/vim工具使用


vi三種模式:
1.瀏覽模式(命令模式)
2.輸入模式
3.末行模式


三種模式切換:
瀏覽模式(命令模式)    按"i" "a"      輸入模式
輸入模式   按"esc"        瀏覽模式(命令模式) 
瀏覽模式(命令模式)    按shif+:      末行模式


瀏覽模式常用的命令:
刪除一行  dd
刪除多行  ndd (n=1,2,3)
複製一行  yy
複製多行  nyy (n=1,2,3)
粘貼      pp
大寫寫切換  shift+~
光標文件開頭 :gg
光標文件結尾 :GG
排版 :gg=GG


末行模式使用命令:
wq :保存退出
q!:不保存退出
w  文件名 :另存爲
!shell命令   :執行shell命令
set nu :顯示行號
set nonu:取消顯示行號
u:撤銷上一次修改
%s/源字符/新字符/ :替換每一行第一次出現源字符
%s/源字符/新字符/g :替換所有源字符
%s/ad/88888/g
%s/\/home\/etc/1231232/g //轉移字符"\"


linux用戶管理
/etc/passwd:用戶信息(密碼憑證)
/etc/group:用戶組信息
/etc/shadow:用戶密碼及其密碼有效期


root:   x         :0    :0   :root:    /root:   /bin/bash
用戶名  密碼憑證   uid  gid   初始組名 用主目錄  shell腳本解                                                  釋器
root::0:0:root:/root:/bin/bash//取消"x",可以不需要密碼


uid>=0  && uid<=999  系統預留UID
uid>=1000 系統一般用戶
  
增加用戶命令
useradd/adduser  用戶名
useradd test//修改/etc/passwd  /etc/shadow /etc/group   /home/test
-d:指定用戶主目錄名稱
-u:指定uid
-M:不會創建用戶主目錄


初始組:
a.adduser創建用戶時,系統自動創建一個與用戶名同名組
b.-g:選項指定新用戶所屬初始組(組必須先存在,可能與用戶名一樣)


有效組:
a.-G:指定用戶除了屬於初始組之外的組
一個用戶可以有多個有效組,只能有一個初始組
-g:指定用戶初始組
adduser -g test test4 //初始組:test


-G:指定用戶有效組
adduser -G test  test5//初始組:test5  有效組:test


設置/修改密碼
passwd 用戶名
[root@localhost etc]# passwd  test
[root@localhost etc]# passwd  //修改當前root密碼




切換用戶
su
root -->一般用戶: su test//無需輸密碼
一般用戶-->root : su  /su root//需要輸入root用戶密碼
[root@localhost etc]# su test
[test@localhost etc]$ su 


改變用戶信息
a.用戶名
b.用戶提示信息
c.凍結/解凍用戶
usermod
usermod  -l   usernewname   useroldname
usermod -c "sdfdsfdsfsd"  test
usermod -L  test //凍結用戶
usermod -U  test //解凍用戶


增加組
groupadd  
groupadd  group1


刪除用戶
userdel
userdel  test2//刪除用戶名,用戶主目錄不會刪除 rm -rf test2 
userdel  -r test4//刪除用戶名,用戶主目錄也刪除


刪除組
groupdel 
groupdel group1


網絡常使用命令
/etc/sysconfig/network-scripts/ifcfg-p3p1 //網卡配置文件
網卡一般爲:eth0  eth1 ethn


查看網絡信息:
ifconfig


設置IP地址:
1.設置永久性
   setup
   servie network restart|start|stop //必須要重啓服務,否則設置將無效
2.臨時 ifconfig  p3p1  192.168.226.3 netmask 255.255.255.0


linux 與window 網絡通信:
1.查看網絡適配器(VMware Network Adapter VMnet1),ip:192.168.80.1//每臺機器不一樣
2.vm-->setting-->network adapter  右下角 選擇第四項(customer adapter -->vm1(host only))
3.[root@localhost network-scripts]# ifconfig p3p1  192.168.80.3 netmask 255.255.255.0
4.[root@localhost network-scripts]# ping 192.168.80.1//linux ping window
5.ping  192.168.80.3 //window  ping linux


關閉防火牆:
linux:setup --->firewall config


samb共享服務
linux共享文件 window訪問
samb服務配置步驟:
1.[root@localhost network-scripts]# service  start
2.[root@localhost home]# mkdir share  //創建共享目錄
3.[root@localhost etc]# cd /etc
  [root@localhost etc]# cd samba/
4.[root@localhost samba]# cp smb.conf  smb.conf4  //備份配置文件
5.修改smb.conf配置文件
   vim   smb.conf
   118   security = share


   322 [share]
323         comment= wshare
324         path= /home/share
325         public= yes
326         guest ok =yes
327         writable= yes


6.[root@localhost samba]# service smb restart//重啓服務
7.window   運行:\\192.168.80.3
8.修改權限
    [root@localhost /]# chmod  777 home
    [root@localhost home]# chmod 777 share
    [root@localhost home]# setenforce 0


重啓機器後需要設置:
1.[root@localhost network-scripts]# ifconfig p3p1  192.168.80.3 netmask 255.255.255.0
2.[root@localhost samba]# service smb restart//重啓服務
3.window   運行:\\192.168.80.3
4.[root@localhost home]# setenforce 0
   


linux 進程管理命令


進程與程序區別
進程:動態 正在運行的程序
程序:靜態 實現代碼


查看顯示進程
ps
ps -aux 
a:顯示所有進程(前臺進程與後臺進程)
x:顯示內核進程(內核服務)
u:顯示當前用戶的進程
ef:顯示父親進程(PPID)


進程狀態:
S:睡眠狀態
R:正在運行狀態
D:睡眠狀態不可中斷
T:暫停
Z:僵死


"&":執行命令時,直接成爲後臺進程
ctrl+C:結束當前進程
ctrl+D:把當前進程改爲後臺進程
fg +pid //把後臺進程改變成前臺進程
fg +pid
[root@localhost share]# fg + 4641
top:動態查看當前進程狀況
pstree :樹結構顯示進程 
kill pid //進程ID殺死
kill -9 pid//強制殺死進程
killall bc//進程名
killall -9 bc//強制殺死進程
清屏
clear
echo -e '\033c'


作業:
1,創建組account,mis,sales
groupadd account
groupadd  mis
groupadd sales
2,創建用戶a
adduser a
3,創建用戶b,不創建家目錄
adduser -M b
4,創建用戶c,家目錄爲/home/cc
並設置初始化組爲sales,有效組爲mis
adduser -d /home/cc   -g  sales -G mis   c
5,修改a用戶的密碼爲a123456
echo a12345 |  passwd a --stdin
6,把c用戶凍結
usermod  -L c
usermod -U c
8,刪除sales組
groupdel sales




環境變量
爲了保存系統一些信息,定義的變量
環境變量名一般是大寫


常見的環境變量
PATH:保存系統shell命令可執行文件路徑
HOSTNAME:主機名
LD_LIBRARY_PATH:動態庫加載路徑
USER:當前登錄用戶名


查看環境變量命令
env
env | grep  HOSTNAME
echo  $HOSTNAME//輸出HOSTNAME變量值
echo  HOSTNAME//輸出變量名HOSTNAME
echo $PATH


export 導入
讓修改環境變量新值有效


修改PATH環境變量值:
1.臨時修改
  [root@localhost etc]# export PATH=$PATH:/sbin:/bin
  
2.永久修改
   一般用戶:
   /home  .bash_logout  .bash_history
     .bash_profile(用戶環境變量或啓動程序設置)  
     .bashrc  
   root用戶:
     .bash_logout  .bash_history
     .bash_profile(用戶環境變量或啓動程序設置)  
     .bashrc  


   etc: bashrc  profile


   PATH永久設置:
      用戶:  .bash_profile 
              export PATH=$PATH:/sbin:/bin
      /etc:   profile
              export PATH=$PATH:/sbin:/bin


自定義換將變量
root@localhost etc]# export AA=12345
[root@localhost etc]# unset AA  //刪除環境變量


[root@localhost etc]# export AA=12345
[root@localhost etc]# readonly AA




linux 解壓/壓縮
.tar.gz
.tar.gz2
.rpm


解壓/壓縮命令
tar
-x:解壓
-c:壓縮
-v:輸出壓縮\解壓的信息
-z:壓縮文件gzip/zip
-f:文件名(一般放在選項最後面)
-C:改變指定解壓文件的目錄(默認解壓到當前目錄)


壓縮文件:
tar -cvzf
tar -cvf


[root@localhost yj]#tar -cvzf  abc.tar.gz  a b c
[root@localhost yj]# tar -cvf  abc.tar.gz2  a b c
解壓文件:
[root@localhost yj]# tar -xvzf abc.tar.gz 
[root@localhost yj]# tar -xvf abc.tar.gz2 
[root@localhost yj]#tar -xvzf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz  -C/usr/local


linux文件安裝
a.帶源碼安裝
b.解壓安裝


帶源碼安裝步驟:
以安裝:sqlite-3.3.7.tar爲例:
1.tar -xvzf sqlite-3.3.7.tar.gz  -C /usr/local
2.cd sqlite-3.37
3.[root@localhost sqlite]# ./configure  --prefix=/usr/local/sqlite //生成一個makefile文件
4.make //編譯
5.make install //安裝


RPM包(reahat package manager)
rpm 常用選項:
-q:查詢
-a:所有包
-i:安裝
-e:刪除
-v:驗證
-h:顯示安裝進度


vim-filesystem-7.3.315-1.fc16.i686.rpm
vim-filesystem:包名(功能)
7.3.315-1:版本
fc16:os版本
i686:處理器類型


rpm  -qa  包名//根據包名搜索安裝包
rpm  -ivh vim-filesystem-7.3.315-1.fc16.i686.rpm
rpm  -evh 包名


linux掛在cdrom步驟:
1.vm-->setting-->cd dvd   勾選connected   指定虛擬鏡像文件
2.[root@localhost /]# mount /dev/cdrom   /media
3.cd media


正則表達式
一種用來來描述文本模式的特殊語法


由普通字符(例如a到z 0-9)以及特殊字符(稱爲元字符,如.*[]^{}\+?|() $等)組成
^a
b$
@.qq.com
abcd123qwer
*


正則表達式特殊符號:
^:以字符開頭 如:^a  ^abc  ^aabc
$:以字符結尾 如:cdf$  cf$ f$
.:匹配任意單個字符: 如:a.d 匹配:a1d aad add 
*:前面一個字符重複出現0次/1次/多次
  如:da*cd  匹配:dcd   dacd daacd daaaacd 
\:轉義字符  如:a\.c
\{n\}:前面單個字符連續出現n次(n=0,1,2...)
\{n,\}:前面單個字符至少連續出現n次(>=n)
\{n,m\}:前面單個字符連續出現次數爲:n<=次數<=m
[list]:從list集合中選擇任意一個字符 a[123]c  a1c a2c a3c
[list1-list2]:從list1-list2區間集合中選擇任意一個字符 
       a[0-9]z  a0c a1c ... a9c
       a[A-Z]z  aQc aAc ... aZc
[^list]:除開list集合中任意字符  a[^0-9]b   aab  a\+b
+:前面單個字符只能出現1次  多次  a+b   ab aab aaab
?:前面單個字符只能出現0次  1次   a?b   b   ab
|:二選1  1a|b4  1a4  1b4
(|):多選1      1(ab|cd|ef|23)9 1ab9  1cd 9 1ef9 1239w
/d:數字[0-9]
/D:非數組[^0-9]
/w:字母[a-zA-Z]
/W:非字母[^a-zA-Z]
^a[0-9]\{2\}[A-Z]\{3,4\}s$
a23ASDs
a23ASDFs


abcd123qwer
[a-zA-Z]\{4\}[0-9]\{3\}[a-zA-Z]\{4\}


grep  搜索查找字符命令
-n:輸出目標字符所在行號
-c:統計目標字符查找出現的次數
-i:忽略大小寫
-a:在二進制文件查找


[root@localhost yj]# grep  'root'  passwd
[root@localhost yj]# grep -n 'root'  passwd
[root@localhost yj]# grep -ni 'root'  passwd
[root@localhost yj]# grep -n  't[ae]st'  passwd
[root@localhost yj]# grep  -n  'ro\{2,4\}t'  passwd
[root@localhost yj]# grep -n 'r[^g]o'  passwd
[root@localhost yj]# grep -n 'r[^a-z]o' passwd
[root@localhost yj]# grep -n 'r[^a-z0-9A-Z]o' passwd
[root@localhost yj]# grep -n  '^$'  passwd
[root@localhost yj]# grep -n '^r'  passwd
[root@localhost yj]# grep -n  '^[0-9]' passwd
[root@localhost yj]# grep -n  '^[a-zA-Z]' passwd
[root@localhost yj]# grep -n '\.$' passwd


egrep  查找,主要是適合(+ ? * | (|))
[root@localhost yj]# egrep  -n 'ro+t'  passwd
[root@localhost yj]# egrep  -n 'ro?t'  passwd
[root@localhost yj]# egrep  -n 'ro*t'  passwd


練習:
寫出一個正則表達式:
 字母'm'開頭後面是4個連續的任意字母后面是':'後面是3個連續的字母'a'最後是's'結尾
 [root@localhost yj]# grep -n  '^m[a-zA-Z]\{4\}:a\{3\}s$'  passwd


awk  使用
根據指定符號對一行數據分解成多個數據域
數據域:數據行根據指定符號分解之後產生的子數據


-F  符號
awk -F ,
awk 默認分解符號是空格


awk 命令語法:


awk  -F  分解符號  '命令'  數據源(文檔 管道輸入數據)


特殊符號
$0:所有數據域
$1:第一個數據域
$2:第二個數據域
$3:第三個數據域


[root@localhost yj]# awk  -F ,  '{print $4}'  awkfile 
[root@localhost yj]# awk  -F ,  '{print $0}'  awkfile
[root@localhost yj]# awk  -F ,  '{print $1"\t"$3"\t"$5}'  awkfile 
[root@localhost yj]# awk  -F ,  '{print $1" "$3" "$5}'  awkfile 
[root@localhost yj]# awk  -F ,  '{print $1,$3,$5}'  awkfile 
[root@localhost yj]# awk '{print $1}'  awkfile 


awk   執行命令組成部分:
1.BEGIN
2.數據行
3.END


[root@localhost yj]# awk -F , 'BEGIN{ print "adfdsfdsf"}' awkfile 
[root@localhost yj]# awk -F , 'BEGIN{ print "name\tscore"} {print $1"\t"$6}' awkfile 
[root@localhost yj]# awk -F , 'BEGIN{ print "name\tscore"} {print $1"\t"$6} END{print "total="}' awkfile 
[root@localhost yj]# awk -F , 'BEGIN{total=0} {print $1"\t"$6;total=total+$6} END{print "total="total}' awkfile 
[root@localhost yj]# awk -F ,  '{if($4=="Yellow") print $0;else print "error"}'  awkfile 
[root@localhost yj]# awk -F , '{if($4=="green" || $4=="Green") print $0}' awkfile 
[root@localhost yj]# awk -F , '{if($4 ~/[gG]reen/) print $0}' awkfile 
[root@localhost yj]# awk -F , '$4~/[gG]reen/' awkfile 
[root@localhost yj]# awk -F , '{if($4 !~/[gG]reen/) print $0}' awkfile 
[root@localhost yj]# awk -F , '{if($6<=$7) print $0}'  awkfile 
[root@localhost yj]# awk -F , '{if($5<=$6 && $6<=$7) print $0}'  awkfile 
[root@localhost yj]# awk -F , '$1~/^...a/' awkfile 
[root@localhost yj]#awk -F , '$4 ~ /Yellow|Brown/' awkfile
[root@localhost yj]#awk -F , '$0 ~ /^J/' awkfile
[root@localhost yj]# cat awkfile  |  awk -F , '{print $2}'
[root@localhost yj]# echo "a,b,c,d" | awk -F , '{print $2}'
[root@localhost yj]# echo "a,b,c:1,2,3:e,r,t" | awk -F : 'print $1"\n"$2"\n"$3}' | awk -F , '{print $2}'
[root@localhost yj]# data=`echo "a,b,c:1,2,3:e,r,t" | awk -F :         '{print $1"\n"$2"\n"$3}' `
//反 `` 把``中的命令執行的數據賦值給變量
[root@localhost yj]# data=`echo "a,b,c:1,2,3:e,r,t" | awk -F : '{if($0!~/^$/) print $1"\n"$2"\n"$3}' | awk -F , '{print $2}'`


awk內部特殊變量
FILENAME:文件名
NR:行數
NF:列數


ARGC           命令行參數個數
ARGV           命令行參數排列
ENVIRON        支持隊列中系統環境變量的使用
FILENAME       awk讀取的文件名
FNR            當前文件已處理的記錄行數
FS             設置域分隔符,相當於-F
NF             域的列數  $NF標識最後處理域
NR             已處理的記錄總行數
OFS            設置輸出字段域分隔符
RS/ORS         換行符


[root@localhost yj]# awk -F , '{print NR "\t" NF "\t" FILENAME}'  awkfile
[root@localhost yj]# awk -F , '{if(NR==3) print $0}'  awkfile 


練習:
1.數據/etc目錄下所有一般文件大小總和
[root@localhost etc]# ls -l | grep  '^-' | awk  'BEGIN{total=0} {total=total+$5} END{print total/1024}'




sed
sed是在緩衝區中對文檔中的內容 修改 增加  刪除 替換,修改的結果都不會影響到原文件,利用管道把修改的內容提交到原文件中
sed語法
sed  -nfi 'commad'   文件名
-n:只輸出sed修改的內容
-f:直接修改文件中內容(非緩衝區)
-i:直接對文件編輯


sed常用的命令
d:刪除
a:增加一行和多行
p:打印輸出
c:替換數據行
i:插入新行
s:替換數據行的局部數據
g:所有字符


刪除行
[root@localhost yj]# sed  '1d' awkfile //刪除第一行
[root@localhost yj]# sed  '1,2d' awkfile //刪除第一行到第二行
[root@localhost yj]# sed  '$d' awkfile //刪除最後一行
[root@localhost yj]# sed '2,$d' awkfile 


輸出行
[root@localhost yj]# sed  -n '1p' awkfile //輸出第一行
[root@localhost yj]# sed  -n '1,2p' awkfile 
[root@localhost yj]# sed -n '$p' awkfile 


模式查找
root@localhost yj]# sed -n '/green/p' awkfile 
[root@localhost yj]# sed -n '/\//p' awkfile 


增加數據行
oot@localhost yj]# sed  '1a qweqwewq213123213'  awkfile 
[root@localhost yj]# sed  '1,2a qweqwewq213123213'  awkfile //在第一行和第二行後面分別增加一行新數據
[root@localhost yj]# sed  '1a qweqwewq213123\n21376567567'  awkfile //增加多行數據


替代一行或多行
[root@localhost yj]# sed '1c 3123123' awkfile 
[root@localhost yj]# sed '1,2c 3123123\nqqwqw' awkfile 


直接編輯文件
[root@localhost yj]# sed -i  '$a 123123' awkfile


對一行局部數據替換
[root@localhost yj]# sed -n  '/green/p' awkfile  | sed -i  's/green/aaaa/g' awkfile 
[root@localhost yj]# sed -n  '/aaaa/p' awkfile  | sed -i  's/aaaa//g' awkfile 


獲取字符長度
[root@localhost yj]# name=yj
[root@localhost yj]# echo  ${#name}


截取字符
${name:startpos:charlen}//startpos從0開始  charlen所取字符個數
[root@localhost yj]# echo  ${name:1:4}


shell腳本語句


shell腳本文件


/bin/bash:shell腳本文件解釋器
shell腳本文件特點:
1. .sh結尾
2.shell腳本文件可以直接執行


#!/bin/bash//shell腳本文件解釋器


#ls -l //"#"註釋符號


shell腳本執行:
1.sh  shell腳本文件
2. [root@localhost shell2]# chmod 755 sh1.sh //授予執行權限
   [root@localhost shell2]# ./sh1.sh


shell 腳本變量定義
變量名=值//變量名一般是小寫,與環境變量區分


輸出變量值
echo $變量名


name=aaa
age=20
score=34.56
echo '$name' //輸出$name  
echo "$age"
echo '$s"co"re'
echo "$n'am'e";




age=20;變量名一般用'{}'括起
echo "my age is ${age}ee"


read 從輸入設備讀取數據給變量
read 變量名1  變量名2//輸入值是,空格區分值分配,如果變量已經分配完成,最後所有的值賦給最後一個變量


shell腳本參數值
./sh1.sh abcf 121 466
位置參數獲取值:
$0:執行文件名
$1:獲取第一個參數值
$2:獲取第二個參數值
$@:獲取所有的參數值
$*:獲取所有的參數值


幾個特殊符號:
$$:獲取當前進程ID(pid)
$?:上一次命令執行成功與否(0:成功 非0:失敗)


echo 輸出控制
\n:換行
\t:tab
\c:下一個echo不換行輸出
-e  :針對 \n  \t  \c 特殊輸出


``
[root@localhost shell2]# da=`date`


語句結構:
a.順序
b.選擇
  if  條件
    then  
        //滿足條件執行語句
  else
        //不滿足條件執行語句
  fi


   if  條件;then  
        //滿足條件執行語句
   else
        //不滿足條件執行語句
   fi


   if  條件;then  
        //滿足條件執行語句
   elif 條件
     then        
//滿足條件執行語句
   else
      //不滿足條件執行語句
   fi




條件
條件格式:
1.test 比較
2.[ 比較 ]
比較的結果:$?


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


[root@localhost shell2]# test -d aaaa
[root@localhost shell2]# echo $?


[root@localhost shell2]# [ -d aaaa ]
[root@localhost shell2]# echo $?


數字比較
-eq:相等
-ne:不等
-le:小於等於
-ge:大於等於
-lt:小於
-gt:大於


字符比較
= :相等
!=:不等
-z:空字符
-n:非空字符


-a:多個條件並且
-o:多個條件或者




case語句
case語法:
case  var  in
 value1) 執行語句;;
 value2) 執行語句;;
esac




[root@localhost shell2]# echo `expr $a + $b `
[root@localhost shell2]# echo $[$a+$b]
[root@localhost shell2]# echo $[a+b]
[root@localhost shell2]# let 'a=1+2'
[root@localhost shell2]# echo $a


練習:
case實現+-*/四則運算


c.循環
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章