shell編程及rpm包

1. shell編程

   case 實現條件判斷, 無論是case后面還是值后面都是沒有任何標點符號的。

   case支持通配符, 如果想要表示其他的話, 可以使用*放到最后。 用*表示其他。

 

2. 用tar打包的文件或則目錄,這些文件或則目錄的的ACL(訪問控制列表)權限會丟失。

 

3. tar命令:

-c     打包文件

-t  查看包文件內容

-x     解包

 

4. cpio可用來打包和解包文件:

    cpio -ov  > xxx.cpio

    cpio -tv < xxx.cpio

    要解包文件

cpio -iv < xxx.cpio

cpio -idv < etc.cpio

 

cpio命令可以用來減壓rpm包,實際上rpm包其實也是壓縮文件。

 

5. basename 這個命令本身就可以求基名

basename  絕對路徑   //   命令執行的結果為最后一個字段的值。

[root@centos6 tmp]# basename /etc/fstab/a/

a

 

6. 在使用$@或則是$*的話, 一定要加雙引號"", 否則的話, 兩則的效果是一樣的。

 

7. echo -e "xxxxx"

-e 這個參數, 下面還自帶了許多的轉譯字符。

-e參數作用的字符串。  

\t  表示tab鍵。     \n   表示換行。   \c  表示不換行

-e參數還可以使字體背景帶有顏色。

 

8. /etc/issue 這個配置文件是在系統沒有輸入用戶名和密碼之前, 字符界面系統下系統的提示符。

  /etc/bashrc 這些用戶啟動配置, echo 一些語句, 當你在系統登陸后, 或則是ssh進入系統后, 這些話就會被打印到系統之上。

 

9. for i in `ls /testdir/`;

//這樣的話i的值, 為/testdir目錄下的文件名,而非整個絕對路徑。

  for i in `ls /testdir/*`;

// 這樣的話i的值,為/testdir目錄下的文件名, 且為絕對路徑。

這一點對文件操作的腳本有有一定的幫助, 有時候對文件草錯的話, 要的就是絕對路徑, 而非只是一個基名。

   

10. 修改密碼的另外一種方式:

echo 用戶名:密碼  | chpasswd

    添加用戶的另外一種方式

newuser users_file

 

11. $變量引用變量的時候, 變量直接在后面緊跟著一些字符的話, 但是這些字符并不是變量的組成部分時,一定要用{}大括號將變量括起來。尤其在數組中, 一定要用大括號括起來。 這其實也是${}的作用。

 

12.因為shell是一種弱解釋類型的語言。 使用變量的話, 是不需要提前定義的。 直接用就行。 變量的默認為字符串的0, 但是這個0只可以做運算, 是不可以做比較的。

[ $defalut == 0 ]  [ $defalut -eq 0 ]  這些都是不對的

 

13.有時候,在做測試的時候, 當我們不需要防火墻的話,我們可以關閉防火墻這個服務, 也可以將防火前的規則策略清空 iptables -F, 這樣的話防火墻就不會影響到我們了。

 

14. $[]   let 運算   for(())  變量前面可以加$, 也可以不加$.

 

15. 軟件運行的壞境:

程序源代碼—>預處理—->編譯—->匯編——>鏈接

靜態編譯

共享編譯: .so

編譯后得到的是匯編。

 

16. ldd 二進制文件  // 可用來查看該二進制調用的庫

當這些庫中有部分庫中找不到時, 這個二進制文件就不能使用了。

 

17. 庫級別的虛擬化:

Linux: WINE  Linux系統模擬Windows系統

Windows:Cywin  Windows系統模擬Linux系統

就像在Windows下下載一個天天模擬器, 就可以使用安卓系統了。其實這個就用到了庫級別的虛擬化。 安裝一定的軟件就可以模擬出庫文件。

 

18. Linux系統下的頭文件放在/usr/include文件中。

 

19. 一個二進制文件包括: 庫  配置文件  幫助文檔

 

20. rpm 包命名方式:

name-VERSION-release.arch.rpm

VERSION: 版本

release: release.OS

arch(硬件平臺架構) : X86_86  i686(32為操作系統)  noarch(指該軟件和系統硬件架構無關)

 

21. dnf也可以安裝yum包, 并且在將來有可能會替代yum.dnf 現在一下fedora系統下測試。

 

22. ldd 二進制文件

    ldconfig -p 二進制文件

 

23. rpm -q name  可用來查看該name名字的rpm是否安裝。


24. 二進制引用程序的組成部分:

二進制文件、庫文件、配置文件、幫助文件

25.  程序包的管理器:

debian: deb文件、dpkg包管理器

redhat: rpm文件,rpm包管理器

rpm: Rredhat Package Manager

RPM Package Manager


26. 包命名:

源代碼: 源代碼一般都以壓縮包的形式存在

name-VERSION.tar.gz|bz2|xz

VERSION: major.minor.release

 

27. rpm包命名方式:

name-VERSION-release.arch.rpm

例如: bash-4.2.46-19.el7.x86_64.rpm

VERSION: major. minor. release

release : release.OS

 

28. 常見的arch:

X86(32位):i386,i486,i586,i686

X86_64:X64,X86_64,amd64

powerpc: ppc

跟平臺無關: noarch

 

29. 包分類:

Application-VERSION-ARCH.rpm : 主包

Application-devel-VERSION-ARCH.rpm   開發子包

Application-utils-VERSION-ARHC.rpm    其他子包

Application-libs-VERSION-ARHC.rpm 其他子包

包之間存在依賴關系, 甚至是循環依賴。

 

30. ldd  二進制文件  // 查看依賴的庫文件

ldconfig 管理及查看本機裝載的庫文件

/sbin/ldconfig -p : 顯示本機已經緩存的所有可用庫文件

名及文件路徑映射關系

配置文件: /etc/ld.so.conf  /etc/ld.so.conf.d/*.conf

緩存文件: /etc/ld.so.cache

 

31. rpm -ivh

-i  –install

-v  — 過程可見

-h  — 以#顯示程序包管理執行進度

 

安裝選項:

–test:  測試安裝,但不真正執行安裝;dry run 模式

–nodeps :忽略依賴關系

–replacepkgs | replacefiles

–replacepkgs  當系統中已有這個包的時候, 也要裝

–replacefiles   當系統中的文件和別的包文件一致的話任要安裝的話, 也要裝

–replacepkgs  :  

–nosignature:  不檢查來源合法性

–nodigest :不檢查包完整性

–noscipts :不執行程序包腳本片斷

%pre: ; 安裝前腳本; –nopre

%post: ; 安裝后腳本; –nopost

%preun: ; 卸載前腳本; –nopreun

%postun:  卸載后腳本; –nopostun

 

32. rpm 包升級:

升級:

v rpm {-U|–upgrade} [install-options]  PACKAGE_FILE …

v rpm {-F|–freshen} [install-options]  PACKAGE_FILE …

upgrade :安裝有舊版程序包,則升級

如果不存在舊版程序包,則安裝

freshen :安裝有舊版程序包,則升級

如果不存在舊版程序包,則不執行升級操作

rpm -Uvh PACKAGE_FILE …

rpm -Fvh PACKAGE_FILE …

–oldpackage :降級

–force:  強行升級

 

33. 升級注意事項

v  注意:

(1)  不要對內核做升級操作;Linux 支持多內核版本并存,因此

,對直接安裝新版本內核

(2)  如果原程序包的配置文件安裝后曾被修改,升級時,新版本

的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而

把新版本的文件重命名(FILENAME.rpmnew)

 

34. 在Windows系統下, 在cmd運行窗口中輸入winver 可以查看系統的版本。


 練習題:

1>. 每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶hacker登錄,則將登錄時間和1主機記錄于日志/var/log/login.log中,并提示該用戶退出系統。

until false;
do
        if w | grep -q "^hacker\b" ; then
                echo "hacker is online!"
                echo "GET OUT!!!" | write hacker
                w | grep "^hackerb" | tr -s  " " | cut -d" "  -f4 >> /var/log/login.log
                w | grep "^hackerb" | tr -s  " " | cut -d" "  -f3 >> /var/log/login.log
        fi
 
        sleep 3
done

~       

 

2>.隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出

echo -n "游戲發起者產生一個10以內的數字"
random=`echo "$[$RANDOM%10]"`
echo "隨機數:$random"
until false;
do
        read -p "參與游戲著猜一個數:" num
        if [ $num -lt $random ];then
                echo "小了"
        elif [ $num -gt $random ];then
                echo "大了"
        else
                echo "猜對了"
                break
fi
done

3>.隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出

echo -n "游戲發起者產生一個10以內的數字"
max=`echo $RANDOM`
min=$max
tennum="$max"
times=1
until [ $times -gt 9 ];
do
random=`echo $RANDOM`
tennum="${tennum} ${random}"
if [ $random -gt $max ];then
max=$random
elif [ $random -lt $min ];then
min=$random
fi
let times++
done
echo "Ten numbers:"
echo ${tennum}
echo "max=$max"
echo "min=$min"

 

4>. 編寫腳本,求100以內所有正整數之和

i=1
sum=0
until [ $i -gt 100 ];
do
        let sum=$sum+$i
        let i++
done
echo "1+2+3+..+100=$sum"
 
5>. 編寫腳本,打印九九乘法表

i=1
j=1
until [ $i -gt 9 ];
do
        until [ $j -gt $i ];
        do
                echo -ne "$j*$i=`expr $j \* $i`\t"              
                let j++
        done
j=1
let i++
echo ""
done

 

6>. 隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出

echo -n "游戲發起者產生一個10以內的數字"
random=`echo "$[$RANDOM%10]"`
echo "隨機數:$random"
until false;
do
        read -p "參與游戲著猜一個數:" num
        if [ $num -lt $random ];then
                echo "小了"
        elif [ $num -gt $random ];then
                echo "大了"
        else
                echo "猜對了"
                break
fi
done

7>. 編寫腳本,實現打印國際象棋棋盤

i=0
j=0
until [ $i -gt 7 ];
do
until [ $j -gt 7 ];
do
bool=$[(i+j)%2]
if [ $bool -eq 0 ];then
echo -en "\033[41m  \033[m"
else
echo -en "\033[47m  \033[m"
fi
let j++
done
echo ""
let i++
j=0
done

8>.打印等腰三角形

#!/bin/bash
read -p "Input the line you want print: " line
nline=1
i=0;j=0
until [ $nline -eq $[line+1] ];do
until [ $[line-nline-i ] -eq 0 ];do
echo -n " "
((i++))
done
i=0
until [ $[ 2*nline-1-$j ] -eq 0 ];do
echo -ne "\e[35;5m*\e[0m"
((j++))
done
j=0
((nline++))
echo ""
done

 

原創文章,作者:458813466,如若轉載,請注明出處:http://www.www58058.com/37183

(0)
458813466458813466
上一篇 2016-08-18 10:09
下一篇 2016-08-18 10:09

相關推薦

  • awk用法二

      3、awk的printf命令     格式:printf format, item1 item2…     要點:      (1) 要指定format;      (2) 輸出時不會自動換行,如需換行則…

    Linux干貨 2015-12-24
  • LVM2

    LVM2:         LVM: Logical Volume Manger, Version:2        dm: device mapper, 將一個或多個底層塊設備組織 成一個邏輯設備的模塊;           &…

    Linux干貨 2016-12-30
  • Linux文件管理類命令相關

    Linux文件管理類命令相關 1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 1)、查看文件命令: (1)ls命令: list,列出目錄下的內容 語法: ls [OPTION]… [FILE]… 常用選項: -a: 顯示所有文件,包括隱藏文件; -A:顯示除.和..之外的所有文件; -l: –…

    Linux干貨 2016-09-24
  • shell三劍客之grep

    正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。 給定一個正則表達式和另一個字符串,我們可以達到如下的目的: 1. 給定的字符串是否符合正則表達式的過濾邏輯(稱作“匹配”); 2. 可以通過正則表達式,從字符串中獲取我們想要的特定部分。 正…

    Linux干貨 2016-08-08
  • linux 文件權限以及用戶策略 講解

     linux 文件權限以及用戶策略 講解    由于linux系統是一個多用戶使用的系統,對于各個用戶指定的文件或目錄必須存在一套管理系統,以防止多用戶對相同文件的混淆使用。于是催生出了linux系統文件的用戶權限設置。其存在的意義就是每一個文件或目錄對于不同的用戶區分讀取,寫入,執行三種權限,即:r,w,x。下面將詳…

    Linux干貨 2016-08-05
  • 硬鏈接和軟鏈接的區別

    硬鏈接和軟鏈接的區別 1、概念 在linux中,鏈接可分為兩種:一種為硬鏈接,另一種為軟鏈接。硬鏈接:ln 源文件 目標文件軟鏈接:ln -s(soft)源文件 目標文件 硬鏈接 硬鏈接是指通過索引節點inode來進行鏈接。linux系統中每個文件對應一個inode,并且允許多個文件名指向用一個inode。這種情況的文件就成為硬鏈接。它的作用之一就是允許一個…

    Linux干貨 2017-07-23

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-21 23:25

    文章寫的很零散,博客不是筆記,不是羅列,需要自己有一個清晰的思路哦??梢远嗫纯磧炐愕牟┛?,看你看他們是怎么寫的,嘗試寫出優秀的博文。

欧美性久久久久