1. 程式人生 > >文件查找和壓縮打包

文件查找和壓縮打包

linux

作業1

編寫一個腳本/root/bin/createuser.sh,腳本的執行語法必須是:createuser.sh -u username -m password,選項與參數間可支持多空格,但不能順序顛倒。

當未指定正確的選項或參數時,以錯誤輸出方式提示“createuser.sh -u username -m password ”後退出腳本。

用戶名必須以字母開頭,可包括數字和_。否則不合法。以錯誤輸出提示用戶"用戶名僅包含字母數據和下劃線"

當用戶名檢測合法後,判斷用戶名是否已存在,若存在,再判斷用戶是否已設置過密碼,若設置過密碼,直接退出,未設置,則將密碼設置為所指定的密碼後以正確輸出方式顯示“username 密碼已更新後退出”

當用戶名不存在,則創建用戶,並為該用戶設置所指定的密碼後以正確輸出方式顯示“用戶username已創建並更新密碼”

要求腳本執行過程中不能有非要求的其他輸出結果出現。腳本在非正確方式退出時應反回給?參數非0值。

[ 4 -eq $# ] ||(echo 輸入不合法,請輸入createuser.sh -u username -m password ; exit 1)||exit 1

username=$2

[ -u == $1 ]&&[[ "$2" =~ ^[[:alpha:]][0-9a-z_]* ]]&&[ -m == $3 ]||(echo "輸入不合法,用戶名僅包括字母數字下劃線";exit 1)||exit 1

mima=$4

id $2 &>/dev/null || (useradd $2 &&echo $4|passwd --stdin $2>/dev/null;echo "用戶$2 已創建,密碼為$4 ";set --;unset username mima;exit 1)||exit 0

id $2 &>/dev/null && (getent shadow $4 |egrep ‘\$‘[[:digit:]]‘\$‘ &>/dev/null && echo "用戶名已存在且密碼已創建 ";exit 2)

echo "$4" |passwd --stdin "$2">/dev/null

echo $2密碼已更新

set --

unset username mima

exit 0

技術分享

作業2

[ 4 -eq $# ] ||(echo 輸入不合法,請輸入createuser.sh -u username -m password ; exit 1)||exit 1

username=$2

[ -u == $1 ]&&[[ "$2" =~ ^[[:alpha:]][0-9a-z_]* ]]&&[ -m == $3 ]||(echo "輸入不合法,用戶名僅包括字母數字下劃線";exit 1)||exit 1

mima=$4

id $2 &>/dev/null || (useradd $2 &&echo $4|passwd --stdin $2>/dev/null;echo "用戶$2 已創建,密碼為$4 ";set --;unset username mima;exit 1)||exit 0

id $2 &>/dev/null && (getent shadow $4 |egrep ‘\$‘[[:digit:]]‘\$‘ &>/dev/null && echo "用戶名已存在且密碼已創建 ";exit 2)

echo "$4" |passwd --stdin "$2">/dev/null

echo $2密碼已更新

set --

unset username mima

exit 0

技術分享


交互式登錄(登錄shell)

使用終端通過用戶名密碼登錄、su - username

執行順序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互登錄 (非登錄shell)

su username 、圖形界面下打開終端、執行腳本、其他bash實例

執行順序: ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh


常用文件查找命令

find

-maxdepth level 最大搜索深度

-minxdepth level 最小搜索深度

-name 基於名稱的精確查找

-iname 基於名稱忽略大小寫的精確查找查找

-inum 基於inode查找

-samefile 基於相同inode號的查找(查找硬鏈接)

-links n 硬鏈接為n的文件

-regex 支持正則 默認為(emacs標準)

-regextype egrep -regex 支持egrep同標準的正則

-user 用戶名 基於文件owner的查找

-group 組名 基於文件group的查找

-uid userid 基於文件uid的查找

-gid groupid 基於文件gid的查找

-nouser 查找沒有owner的文件

-nogroup 查找沒有group的文件

-type 基於文件類型的查找

f: 普通文件

d: 目錄文件

l: 符號鏈接文件

s:套接字文件

b: 塊設備文件

c: 字符設備文件

p: 管道文件

-perm

mode:精確權限匹配

+mode[/mode] 任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+ 從centos7開始淘汰換為/

-mode 每一類對象都必須同時擁有指定權限,與關系0 表示不關註


-print 默認

-delete 直接刪除所查找到的文件,不詢問。

-ls 長列出所查找到的文件

-fls file 將查找到的文件長列出導入到指定文件。

> file

-ok command \; 對查找到的文件當做下一命令的參數去執行(交互式)

-exec command \; 對查找到的文件當做下一命令的參數去執行(非交互式)執行cp命令不需要詢問

文件壓縮命令

compress(unncompress)、gzip(gunzip)、bzip2(bunzip)、zip(unzip)、xz

-d 解壓縮

-k 保留原文件

-c 將結果打印到屏幕上,配合重定向,不會覆蓋原文件,但權限會變。

-f 默認不對硬鏈接數為2及以上的文件壓縮,加上f,強制壓縮指定文件,而其他同inode的文件硬鏈接數減1.

-v 顯示詳細過程。

文件打包命令

tar

-cf 創建包名字 原文件(可以指定多個)

-tf 包名字 顯示包中的文件名

-tvf 詳細顯示包中的文件名

-rf 包名字 新文件名(可以指定多個)

--delete -f 包名字 被刪除的文件名(可以指定多個)

-xf 包名字 解出所有的文件到當前目錄

-xf 包名字 文件名 解所指定的文件到當前目錄

-C 解包到指定目錄

-v 顯示過程

-Jcf 創建包的名字(.tar.xz) 原文件(可以指定多個) 打包並用xz壓縮

-jcf 創建包的名字(.tar.bz2) 原文件(可以指定多個) 打包並用bzip壓縮

-zcf 創建包的名字(.tar.gz) 原文件(可以指定多個) 打包並用gzip壓縮

-T 指定個列表,包含需要被打包的文件,以換行符為間隔

-X 指定個排除列表,以換行符為間隔

作業3

刪除libc.so.6文件,並恢復。禁止用快照,重裝。

重啟虛擬機、快速按下ESC、選擇CD光盤驅動、然後選擇rescure installed systerm 救援模式(安裝或升級所在的系統、安裝系統用基本視頻驅動、恢復安裝的系統、從當地驅動器驅動、內存測試)選擇語言、coutinue、然後有句話“chroot /mnt/sysimage”這句話的意思是你的系統將會被掛載到/mnt/sysimage目錄下,選擇OK就好了,接下來進入shall這時你進入的是光盤下的Linux,光盤中有一個完整的Linux系統,然後運行一條命令吧libc.so.6 復制到root下的lib64,註意此時的root是/mnt/sysimage

技術分享


文件查找和壓縮打包