wk_02 作業

Linux 文件管理命令

cp命令

功能

Linux 系統中cp命令是用來復制目錄/文件的。

概要

單源復制

cp [OPTION]... [-T] SOURCE DEST
  • DEST不存在
    則事先創建此文件,并復制源文件的數據流至DEST中;

  • DEST存在

    • DEST是非目錄文件:則覆蓋目標文件;

    • DEST是目錄文件:則先在DEST目錄下創建一個與源文件同名的文件,并復制其數據流;

多源復制

cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
  • DEST不存在
    錯誤

  • DEST存在

    • DEST是非目錄文件:錯誤;

    • DEST是目錄文件:分別復制每個文件至目標目錄中,并保持原名;

選項

  • -a,–archive 保留鏈接和文件屬性,遞歸拷貝目錄,相當于下面的d、p、r三個選項組合。

  • -d 拷貝時保留鏈接。

  • -f,–force 如果目標文件無法打開則將其移除并重試(當 -n 選項 存在時則不需再選此項)。

  • -i,–interactive 覆蓋目標文件前將給出確認提示,屬交互式拷貝。

  • -p,–preserve 復制源文件內容后,還將把其修改時間和訪問權限也復制到新文件中。

  • -P,–no-dereference 不跟隨源文件中的符號鏈接

  • -r 若源文件是一目錄文件,此時cp將遞歸復制該目錄下所有的子目錄和文件。當然,目標文件必須為一個目錄名。

  • -l,–link 不作拷貝,只是鏈接文件。

  • -s 只創建符號鏈接而不復制文件。

  • -u 只在源文件文件比目標文件新,或目標文件不存在時才進行復制 。

舉例

  • 單源復制

# cp /etc/fstab abc
# cp /etc/fstab .
# ll
總用量 8
-rw-r--r-- 1 root root 465 12月 11 16:27 abc
-rw-r--r-- 1 root root 465 12月 11 16:27 fstab
  • 多源復制

# cp /etc/fstab /etc/init.d/functions dasheng/
# ll dasheng/
總用量 20
-rw-r--r-- 1 root root   465 12月 11 16:29 fstab
-rw-r--r-- 1 root root 13948 12月 11 16:29 functions

mv 命令

功能

移動目錄/文件和更改目錄/文件名。

概要

mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE..

選項

  • -f, –force 覆蓋前不詢問

  • -i, –interactive 覆蓋前詢問

舉例

# mv abc dasheng/
# mv fstab dasheng/fstab.dasheng
# ll dasheng/
總用量 28
-rw-r--r-- 1 root root   465 12月 11 16:27 abc
-rw-r--r-- 1 root root   465 12月 11 16:29 fstab
-rw-r--r-- 1 root root   465 12月 11 16:27 fstab.dasheng
-rw-r--r-- 1 root root 13948 12月 11 16:29 functions

rm 命令

功能

刪除目錄或者文件。

概要

rm [OPTION]... FILE...

選項

  • -f, –force 忽略不存在的文件,從不給出提示。

  • -i, –interactive 進行交互式刪除

  • -r, -R, –recursive 指示rm將參數中列出的全部目錄和子目錄均遞歸地刪除。

舉例

# rm  dasheng/abc 
rm:是否刪除普通文件 "dasheng/abc"?y
# rm -r dasheng/
rm:是否進入目錄"dasheng/"? y
rm:是否刪除普通文件 "dasheng/fstab"?y
rm:是否刪除普通文件 "dasheng/functions"?y
rm:是否刪除普通文件 "dasheng/fstab.dasheng"?y
rm:是否刪除目錄 "dasheng/"?y

在上面的使用中如果選項不帶-f 則需要我們輸入y來確認是否刪除文件。出現這種情況是由于安裝系統后CentOS 會自動將root用戶的alias 添加alias mv='mv -i'alias rm='rm -i'這兩個。而普通用戶并不會定于這兩個alias,所以我們在日常使用中如果使用了刪除的命令一定要慎重,在Linux中是沒有回收站這個東西的,如果誤刪除重要數據請立即停止該系統的數據寫入操作,找相關的人員進行恢復。在日常維護中我們可以把rm 命令改成mv 命令來自定義文件的回收站。

自定義回收站

# tail -2 ~/.bashrc 
myrm(){ D=/tmp/$(date +%Y%m%d); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
alias rm='myrm'
# ls
fstab  grub2.cfg
# rm -f ./*
moved to /tmp/20161211 ok
# ll /tmp/20161211/
總用量 12
-rw-r--r--. 1 root root  465 5月   1 2016 fstab
-rw-r--r--  1 root root 4265 12月 11 17:24 grub2.cfg

將配置寫入到本地用戶的.bashrc中,然后重新進入shell 進行刪除操作就可以實現自定義回收站的操作了。如果不想使用此功能則在刪除時候使用/bin/rm 進行刪除。

命令的執行狀態結果

在shell中 執行命令的狀態返回結果分為成功和失敗,根據執行的成功與否從而使返回的狀態碼分為下面兩類:

  • 成功:0

  • 失?。?-255

在命令執行完成之后,其狀態返回值保存于bash的特殊變量$?中;我們可以在命令執行完成以后立即使用echo $?來查看上條命令執行的成功與否。

# date
2016年 12月 11日 星期日 18:05:46 CST
# echo $?
# cat /etc/abcde
cat: /etc/abcde: 沒有那個文件或目錄
# echo $?
1

命令行展開

特性

  • ~:自動展開為用戶的家目錄,或指定的用戶的家目錄;

  • {}:可承載一個以逗號分隔的路徑列表,并能夠將其展開為多個路徑;

舉例

# cp /etc/init.d/functions{,.bak}
# ll /etc/init.d/functions*
-rw-r--r--. 1 root root 13948 9月  16 2015 /etc/init.d/functions
-rw-r--r--  1 root root 13948 12月 11 18:10 /etc/init.d/functions.bak

練習

  • 創建/tmp/test/目錄下的:a_c, a_d, b_c, b_d

# mkdir /tmp/test/{a,b}_{c,d}
# ls /tmp/test/
a_c  a_d  b_c  b_d
  • 創建/tmp/mylinux目錄下的

mylinux/
    ├── bin
    ├── boot
    │   └── grub
    ├── dev
    ├── etc
    │   ├── rc.d
    │   │   └── init.d
    │   └── sysconfig
    │       └── network-scripts
    ├── lib
    │   └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │   └── local
    │       ├── bin
    │       └── sbin
    └── var
        ├── lock
        ├── log
        └── run

使用tree 命令之前請yum 安裝tree 命令。

# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}
# tree /tmp/mylinux/
/tmp/mylinux/
├── bin
├── boot
│   └── grub
├── dev
├── etc
│   ├── rc.d
│   │   └── init.d
│   └── sysconfig
│       └── network-scripts
├── lib
│   └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
│   └── local
│       ├── bin
│       └── sbin
└── var
    ├── lock
    ├── log
    └── run

24 directories, 0 files

Linux 文件的元數據

任何文件系統中的數據分為數據和元數據。數據是指普通文件中的實際數據,而元數據指用來描述一個文件的特征的系統數據,諸如訪問權限、文件擁有者以及文件數據塊的分布信息(inode…)等等。

通過ls 命令查文件的元數據

# ll abc 
-rw-r--r-- 1 root root 14 12月  7 23:07 abc

上面通過ls 命令顯示的元數據可以分為:文件的使用權限、屬主、屬組、文件大小、時間戳、文件名。如果想詳細的查看文件的元數據可以使用stat命令。

# stat abc
  文件:"abc"
  大?。?4         塊:8          IO 塊:4096   普通文件
設備:fd00h/64768d Inode:34907362    硬鏈接:1
權限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近訪問:2016-12-07 23:07:19.996507082 +0800
最近更改:2016-12-07 23:07:17.934411393 +0800
最近改動:2016-12-07 23:07:17.936411487 +0800
創建時間:-

修改文件時間戳touch

選項

  • -a 只更改訪問時間

  • -c, –no-create 不創建任何文件

  • -d, –date=字符串 使用指定字符串表示時間而非當前時間

  • -m 只更改修改時間

  • -r, –reference=文件 使用指定文件的時間屬性而非當前時間

  • -t STAMP 使用[[CC]YY]MMDDhhmm[.ss] 格式的時間而非當前時間

舉例

# stat abc 
  File: ‘abc’
  Size: 14          Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 34907362    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-11 18:53:13.591961660 +0800
Modify: 2016-12-11 18:53:57.793059882 +0800
Change: 2016-12-11 18:53:57.793059882 +0800
 Birth: -
 # touch -a abc
# stat abc
  File: ‘abc’
  Size: 14          Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 34907362    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-11 18:59:58.232381499 +0800
Modify: 2016-12-11 18:53:57.793059882 +0800
Change: 2016-12-11 18:59:58.232381499 +0800
 Birth: -
 # touch -m abc
# stat abc
  File: ‘abc’
  Size: 14          Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 34907362    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-11 18:59:58.232381499 +0800
Modify: 2016-12-11 19:00:41.378414225 +0800
Change: 2016-12-11 19:00:41.378414225 +0800
 Birth: -

通過上面的例子我們可以通過 -a來修改Access time或者-m修改Modify time,其文件的Change time都會改變。

命令別名和執行結果

命令別名

  • 獲取所有可用別名的定義:# alias

  • 定義別名:alias NAME='COMMAND'

  • 撤銷別名:unalias NAME

上面的別名只是在當前shell有效,如果想全局有效,請把別名寫在/etc/bashrc中,如果只想讓當前用戶有效則寫在~/.bashrc 文件中。

舉例

# alias cdnet='cd /etc/sysconfig/network-scripts/'
# alias 
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@hpf-centos7 ~]# cdnet
[root@hpf-centos7 network-scripts]#

命令引用

在shell中使用命令的執行結果可以使用下面的方法:

  • $(COMMAND)

  • `COMMAND`

舉例

# rpm -qf `which tree`
tree-1.6.0-10.el7.x86_64

練習題

1.顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。

# ls -d /var/l*[[:lower:]]

2.顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。

# ls -d /etc/[[:digit:]][^[:digit:]]

3.顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄。

# ls -d /etc/[^[:alpha:]][[:alpha:]]*

4.在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。

# touch /tmp/tfile-$(date "+%F-%H-%M-%S")
# touch /tmp/tfile-$(date "+%Y-%m-%d-%H-%M-%S" )

5.復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。

# mkdir /tmp/mytest1
# cp -r /etc/p[^[:digit:]] /tmp/mytest1/

6.復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。

# mkdir /tmp/mytest2
# cp -r /etc/*.d /tmp/mytest2/

7.復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。

# mkdir /tmp/mytest3
# cp  /etc/[lmn]*.conf /tmp/mytest3/

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

(0)
profibusprofibus
上一篇 2016-12-11
下一篇 2016-12-11

相關推薦

  • 第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限 答:     復制目錄:cp -R /etc/skel /home/tuser1     修改權限:chmod -R go=- /home/tuser1 2、編輯/etc/group文件…

    Linux干貨 2016-12-07
  • N26-第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@localhost ~]# cp -rfp /etc/skel/ /home/tuser1[root@localhost ~]# chmod 700 /home/tuser1 2、編輯/etc/group文件,添…

    Linux干貨 2017-02-25
  • N28-第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 命令:cp、mv、rm 1.1 cp命令 用法: cp [OPTIONS]…[-T] SOURCE DEST cp SRC DEST而言,SRC是文件時 如果目標不存在: 新建DEST,并將SRC中內容填充至DEST中 如果目標存在: 如果DEST是文件:將SRC中的內容覆蓋至DE…

    Linux干貨 2017-12-15
  • 程序包的編譯安裝

    程序包的編譯安裝 之所以需要安裝編譯程序包,是為了能及時更新程序包,制作好的rpm包,版本一般都有點老了,所以編譯安裝是必報的,而且我們可以自己定義安裝路徑,想卸載直接刪除就KO了; 在centos7.3環境下安裝apache http服務: 1.首先獲取最新的apache源碼包下載到/root目錄下; 2.檢查安裝環境,沒有就安裝環境:   記住…

    Linux干貨 2017-03-09
  • bash變量詳解

       shell作為用戶和Unix/Linux溝通的橋梁,既可以是一個可執行的二進制程序,同時也是一個具備了編程能力的程序設計語言,定義了各種各樣的變量和參數,下面介紹一下shell之上的各種變量。 1、本地變量    特性:只對當前shell生效 [root@centos7 ~/bin]#cat …

    Linux干貨 2016-08-15
  • Linux系統結構 詳解

    Linux系統一般有4個主要部分: 內核、shell、文件系統和應用程序。內核、shell和文件系統一起形成了基本的操作系統結構,它們使得用戶可以運行程序、管理文件并使用系統。部分層次結構如圖1-1所示。  1. linux內核         內核是操作系統的核心,具有很多最基本功能,它負責管理系…

    Linux干貨 2015-04-13

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-12-16 15:45

    贊,自定義回收站的功能不錯~~繼續加油~

欧美性久久久久