作業——拷貝命令及其鏈接庫

1),提示用戶輸入一個可執行命令的名稱

2),獲取此命令所依賴額所有庫文件列表

3),復制命令至某目標目錄(/mnt/sysroot,即把此目錄當做根)下的對的路徑中

bash,/bin/bash ===> /mnt/sysroot/bin/bash

useradd, /usr/sbin/useradd ===> /mnt/sysroot/usr/sbin/useradd

4),復制此命令所有依賴的所有庫文件至目標目錄對應的路徑下:

/lib64/ld-linux-x86_64.so.2 ==>

/mnt/sysroot/lib64/ld-linux-x86_64.so.2

5,每次復制完成一個命令后,不要退出,而是繼續提示用戶輸入命令,直到輸入"quit"菜退出文

blob.png

# 傳遞給函數可執行命令,復制命令程序和依賴庫文件到指定目錄 ,并且取掉絕對路徑

f_copy_com_lib() {

     command_path=$(which "$1" | grep -v "alias") #獲取絕對路徑

     temp_dir=${command_path#*/} # 取掉絕對路徑

     temp_dir=${temp_dir%/*} # 取掉后面的文件文件名

     mkdir -p $dir_path$temp_dir # 創建/mnt/sysroot下對應的的目錄

     cp -rf $command_path  $dir_path$temp_dir

    

    #獲取命令路徑要注意兩個問題:第一個要避開which查出結果有alias別名問題, which COM | grep -v "alias" 除去別名

     #第一步,查出命令路徑,第二步,去掉alias,第三步,查出命令所以來的庫,第四步,獲取庫的準確路徑

     for lib_file in $( ldd $(which "$1" | grep -v "alias" ) | grep -o "/lib[^[:space:]]*") ; do

     #a_library[$i]=$lib_file # 完整的庫文件路徑

    

     temp_dir=${lib_file#*/} #取掉絕對路徑 ${string#*word} 

     temp_dir=${temp_dir%/*} #去掉基名

     mkdir -p $dir_path$temp_dir #創建一個庫文件的路徑 

     cp -rf $lib_file   $dir_path$temp_dir  #復制庫文件到指定的目錄中

     #echo "${a_library[$i]}" #let i++

     echo "$lib_file"

     echo 

done

}

while true ; do

cat << EOF

+++++++++++++++++++++++++++++++++++++++++++++++++

command)Please enter the system existing  command

quit) quit script

+++++++++++++++++++++++++++++++++++++++++++++++++

EOF

read -p "Please enter existing command:" v_command

if [ $v_command == "quit" ] ; then

break

fi

#如果輸入的不存在的命令,處理

if ! ( which $v_command &>/dev/null ) ; then

echo "ERROR:command not found!"

continue # 進行下一次循環

fi

f_copy_com_lib  $v_command

don

blob.png

原創文章,作者:不忘初衷,如若轉載,請注明出處:http://www.www58058.com/67529

(0)
不忘初衷不忘初衷
上一篇 2017-02-04 11:43
下一篇 2017-02-05 14:54

相關推薦

  • bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容

    bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容 bash的基礎特性:命令的執行狀態結果 bash通過狀態返回值來輸出此結果: 成功:0 失?。?-255 命令執行完成之后,其狀態返回值保存于bash的特殊變量$?中。 [root@localhost ~]# ls anaconda-ks.cfg [root@localhost ~]# echo…

    Linux干貨 2018-03-11
  • 初學Linux之用戶、組和權限

    1、用戶和組管理命令 ?
    2、理解文件權限和默認權限 ?
    3、設置文件權限
    4、特殊權限 ?
    5、ACL

    2017-12-08
  • 文件管理基礎知識及命令詳解

    文件系統     文件和目錄被組織成一個單根倒置樹結構     文件系統從根目錄下開始,用“ /”表示     根文件系統(rootfs): root filesystem    …

    Linux干貨 2016-08-05
  • 第四周(1):課堂練習與作業

    課堂練習: 1、刪除/etc/grub.conf文件中所有以空白開頭的行行首的空白字符 [root@centos6 ~]# sed 's@^[[:space:]]\+@@' /etc/grub.conf 2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符 …

    Linux干貨 2016-08-10
  • 硬鏈接與軟鏈接

    引言: 鏈接,一種在共享文件和訪問它的用戶的若干目錄項之間建立聯系的一種方法。 Linux中包括兩種鏈接:硬鏈接(Hard Link)和軟鏈接(Soft Link),軟鏈接又稱為符號鏈接(Symbolic link)。 Inode譯成中文就是索引節點,它用來存放檔案及目錄的基本信息,包含時間、檔名、使用者及群組等。 Block:存放檔案內容數據的地方。 &n…

    Linux干貨 2016-10-20
  • N25-第9周博客作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # 統計登錄用戶和非登陸用戶的個數 # author: han declare -i loginnum=0 declare -i nologinnum=0 whil…

    Linux干貨 2017-03-10

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-04-10 15:52

    腳本的思路清晰,使用了函數功能,加油?。。?/p>

欧美性久久久久