Linux基礎 tar命令選項實用小技巧

2021-10-02 11:15:09 字數 3305 閱讀 4813

這篇文章介紹一下tar命令的兩個引數在使用中的小技巧。

以docker目前最新的乙個穩定版本的壓縮tgz檔案為例,壓縮檔案展開會有乙個docker目錄,如果希望這個tgz檔案直接展開到乙個已經存在的名為docker的目錄下(比如/tmp/docker),一般的做法是tar xf展開後再使用mv操作,執行的時候就會發現乙個很有趣的事情,就是docker目錄下有乙個docker的檔案,然後在docker的目錄下試圖將這個docker的檔案移動至此檔案的父目錄中,會發生什麼情況,可自行試一下就會知道。

上述的說明表明了一件事情,就是非常簡單的事情也很難說明白,接下來直接使用**進行說明:

[root@liumiaocn tmp]

# ls docker-19.03.5.tgz

docker-19.03.5.tgz

[root@liumiaocn tmp]

# tar tvf docker-19.03.5.tgz

drwxrwxr-x ubuntu/ubuntu 0 2019-11-13 02:30 docker/

-rwxr-xr-x ubuntu/ubuntu 764144 2019-11-13 02:30 docker/docker-init

-rwxr-xr-x ubuntu/ubuntu 65641786 2019-11-13 02:30 docker/docker

-rwxr-xr-x ubuntu/ubuntu 72090824 2019-11-13 02:30 docker/dockerd

-rwxr-xr-x ubuntu/ubuntu 8649792 2019-11-13 02:30 docker/runc

-rwxr-xr-x ubuntu/ubuntu 18850136 2019-11-13 02:30 docker/ctr

-rwxr-xr-x ubuntu/ubuntu 2877369 2019-11-13 02:30 docker/docker-proxy

-rwxr-xr-x ubuntu/ubuntu 34625816 2019-11-13 02:30 docker/containerd

-rwxr-xr-x ubuntu/ubuntu 6116160 2019-11-13 02:30 docker/containerd-shim

[root@liumiaocn tmp]

# [root@liumiaocn tmp]

# mkdir docker

[root@liumiaocn tmp]

# ls docker

[root@liumiaocn tmp]

#

問題就是/tmp/docker這個目錄已經存在,展開到到這個目錄下,預設方式下會有docker的目錄,如果不希望有這層多餘的目錄,可執行檔案直接在/tmp/docker下,如果不使用tar命令的特定選項-c和strip-components的話就只能這樣。

[root@liumiaocn tmp]# cd docker

[root@liumiaocn docker]# tar xf ../docker-19.03.5.tgz

[root@liumiaocn docker]# ls

docker

[root@liumiaocn docker]# ls docker/

containerd containerd-shim ctr docker dockerd docker-init docker-proxy runc

[root@liumiaocn docker]#

[root@liumiaocn docker]# mv docker/* .

mv: overwrite 『./docker』? y

mv: cannot overwrite directory 『./docker』 with non-directory

[root@liumiaocn docker]# ls

containerd containerd-shim ctr docker dockerd docker-init docker-proxy runc

[root@liumiaocn docker]# ls docker

docker

[root@liumiaocn docker]#

然後發現目錄和檔案同名,刪除一層就很麻煩了,可以這樣做

[root@liumiaocn docker]# mv docker/docker docker/dockertmp

[root@liumiaocn docker]# mv docker/dockertmp .

[root@liumiaocn docker]# rm -r docker

rm: remove directory 『docker』? y

[root@liumiaocn docker]# mv dockertmp docker

[root@liumiaocn docker]# ls

containerd containerd-shim ctr docker dockerd docker-init docker-proxy runc

[root@liumiaocn docker]#

替代命令:tar xzvf docker-19.03.5.tgz -c /tmp/docker --strip-components=1

[root@liumiaocn tmp]# ls docker-19.03.5.tgz 

docker-19.03.5.tgz

[root@liumiaocn tmp]# ls docker

[root@liumiaocn tmp]# tar xzvf docker-19.03.5.tgz -c /tmp/docker --strip-components=1

docker/docker-init

docker/docker

docker/dockerd

docker/runc

docker/ctr

docker/docker-proxy

docker/containerd

docker/containerd-shim

[root@liumiaocn tmp]# ls docker

containerd containerd-shim ctr docker dockerd docker-init docker-proxy runc

[root@liumiaocn tmp]#

linux基礎命令 tar

1 命令格式 tar 必要引數 選擇引數 檔案 2 命令功能 用來壓縮和解壓檔案。tar本身不具有壓縮功能。他是呼叫壓縮功能實現的 3 命令引數 必要引數有如下 a 新增壓縮檔案到已存在的壓縮 b 設定區塊大小 c 建立新的壓縮檔案 d 記錄檔案的差別 r 新增檔案到已經壓縮的檔案 u 新增改變了和...

tar常用命令選項

tar命令 1.作用 tar命令是unix linux系統中備份檔案的可靠方法,幾乎可以工作於任何環境中,它的使用許可權是所有使用者。2.格式 tar 主選項 輔選項 檔案或目錄 3.主要引數 使用該命令時,主選項是必須要有的,它告訴tar要做什麼事情,輔選項是輔助使用的,可以選用。3.1 主選項 ...

Linux基礎命令實操

來個操作嚇嚇你 提問 這是個啥,這個鍵盤是幹啥的 是vi vim的快捷鍵 vi是用來操作和編輯檔案的,又因為linux是萬事萬物皆檔案,所以可見這個操作重要性 vim是vi的加強版,也同樣重要 想要操作乙個檔案首先要開啟它,在linux系統中開啟終端,輸入如下 vim 檔名.副檔名這句話的意思就是如...