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
下一篇 2016-08-18

相關推薦

  • example:Disk and LVM

    1、創建一個2G的文件系統,塊大小為2048byte,預留1%可用空間,文件系統ext4,卷標為TEST,要求此分區開機后自動掛載至/test目錄,且默認有acl掛載選項。     1)創建磁盤分區 [root@localhost ~]# fdisk /dev/sdb    Device conta…

    Linux干貨 2016-08-29
  • GPG——另一種加密信息的方式

    GPG ·使用gpg實現對稱加密 ·對稱加密file文件          gpg -c file          ls file.gpg ·在另一臺主機上解密file   &n…

    Linux干貨 2016-09-22
  • bash腳本進階(續)

     1、打印99乘法表 [root@ _212_ ~/bin/for_script]# cat 99_changfa.sh  #!/bin/bash line=1 for i in `seq 1 9`;     …

    Linux干貨 2016-08-21
  • 網絡管理2

    一、知識整理 1、網卡配置文件格式:vim /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet接口類型,常見的類型有Ethernet,Bridge BOOTPROTO=static設置靜態還是DHCP獲取IP,static和none都為靜態,不寫此行必須指定。查看配置DHCP之后的信息: cat /…

    Linux干貨 2016-09-07
  • linux學習記錄

    vm使用記錄 1、安裝vm程序; 2、下載Cenos—6.4*86_64_bin-DVD1.iso 安裝: 1、新建一個虛擬機; 2、選擇自定義安裝(高級); 3、兼容性選擇默認方式; 4、安裝客戶機操作系統(選擇稍后安裝操作系統方式); 5、選擇客戶機操作系統(選擇Linux系統,版本號(選擇自己下載的Linux系統版本,例如centos等)); 6、命名…

    Linux干貨 2015-12-10
  • Linux終端類型

    Linux終端類型 Linux的終端類型包括控制臺終端、虛擬終端、偽終端、串行終端、控制終端、圖形終端。   終端 要理解偽終端(Pseudo Terminal),先來看看什么是“終端”(Terminal)。 終端是一種字符型設備,它有多種類型,通常使用tty來簡稱各種類型的終端設備。 1、串行端口終端(/dev/ttySx) 串行端口終端(Ser…

    Linux干貨 2016-10-14

評論列表(1條)

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

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

欧美性久久久久