馬哥教育網絡班21期+第2周課程練習
[TOC]
1. 文件管理類命令介紹
Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。
常用的文件管理類命令:cp,mv,rm
a. cp – copy files and directories
NAME cp - copy files and directories SYNOPSIS cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE...
cp [OPTION]... [-T] SOURCE DEST SOURCE是文件: 如果目標不存在: 新建DEST并將SRC中的內容填充至DEST中; 如果目標存在: 如果DEST是文件:將SRC的內容覆蓋到DEST中,此時建議為cp命令使用-i選項; 如果DEST是目錄:在DEST下新建與源文件同名的文件,并將SRC的內容填充至新文件中; SOURCE是目錄: 此時使用選項:-r 遞歸復制 如果DEST不存在: 則創建指定目錄,并復制SRC中的所有文件至DEST 如果DEST存在: 如果DEST是文件:報錯 如果DEST是目錄:將SRC復制到DEST
常用選項: -i: --interactive 覆蓋文件之前先詢問用戶 -r,-R:遞歸復制目錄及內部所有內容; -a: 歸檔,相當于-dR --preser=all -d:--no-dereference --preserv=links --preserv[=ATTR_LIST] : mode:權限 ownership: 屬主屬組 timestamp: 時間戳 links:鏈接 xattr:擴展屬性 context:安全上下文 all -p: --preserv=mode,ownership,timestamp 保留權限,屬主屬組時間戳 -v:--verbose 顯示詳細信息 -f: --force 強行復制文件或目錄, 不論目的文件或目錄是否已經存在
linux 一般默認 cp='cp -i'
-
source是文件且目標不存在時,新建DEST并將SRC中的內容填充至DEST中;
[root@zj-5-2 ~]# ll /tmp/hosts ls: /tmp/hosts: 沒有那個文件或目錄 [root@zj-5-2 ~]# cp /etc/hosts /tmp/hosts [root@zj-5-2 ~]# cat /tmp/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.101.202 zj-5-2
-
source是文件,目標存在且為文件,將SRC的內容覆蓋到DEST中;
[root@zj-5-2 ~]# cat /tmp/hosts 123 [root@zj-5-2 ~]# cp /etc/hosts /tmp/hosts cp:是否覆蓋“/tmp/hosts”? y [root@zj-5-2 ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.101.202 zj-5-2
-
source是文件,目標存在且為目錄,在DEST下新建與源文件同名的文件,并將SRC的內容填充至新文件中;
[root@zj-5-2 ~]# ll /tmp/hosts ls: /tmp/hosts: 沒有那個文件或目錄 [root@zj-5-2 ~]# cp /etc/hosts /tmp/ [root@zj-5-2 ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.101.202 zj-5-2
-
SOURCE是目錄(此時使用選項:-r 遞歸復制),如果DEST不存在,則創建指定目錄,并復制SRC中的所有文件至DEST
[root@zj-5-2 test]# ll /tmp/root ls: /tmp/root: 沒有那個文件或目錄 [root@zj-5-2 test]# cp -r /root/ /tmp/root [root@zj-5-2 test]# ll /tmp/root 總計 64 -rw------- 1 root root 1326 07-16 19:32 anaconda-ks.cfg drwxr-xr-x 2 root root 4096 07-16 19:32 Desktop -rw-r--r-- 1 root root 51097 07-16 19:32 install.log -rw-r--r-- 1 root root 0 07-16 19:32 install.log.syslog
-
SOURCE是目錄(此時使用選項:-r 遞歸復制),如果DEST存在且為文件,系統報錯
[root@zj-5-2 test]# cp -r /root/ /etc/hosts cp: 無法以目錄 “/root/” 來覆蓋非目錄 “/etc/hosts”
-
SOURCE是目錄(此時使用選項:-r 遞歸復制),如果DEST存在且為目錄,則將SRC復制到DEST
[root@zj-5-2 tmp]# mkdir -p /tmp/test [root@zj-5-2 tmp]# cp -r /root/ /tmp/test/ [root@zj-5-2 tmp]# [root@zj-5-2 tmp]# ll /tmp/test/ 總計 4 drwxr-x--- 20 root root 4096 07-16 19:38 root
cp [OPTION]... SOURCE... DIRECTORY SOURCE...:多個文件 DIRECTORY:必須存在且為目錄,其他情況均會報錯
示例:
[root@zj-5-2 tmp]# ll /tmp/tset1 ls: /tmp/tset1: 沒有那個文件或目錄 [root@zj-5-2 tmp]# cp /etc/hosts /etc/fstab /tmp/test1 cp: 目標 “/tmp/test1” 不是目錄 [root@zj-5-2 tmp]# mkdir -p /tmp/test1 [root@zj-5-2 tmp]# cp /etc/hosts /etc/fstab /tmp/test1 [root@zj-5-2 tmp]# ll /tmp/test1 總計 8 -rw-r--r-- 1 root root 532 07-16 19:44 fstab -rw-r--r-- 1 root root 211 07-16 19:44 hosts
b. mv – move (rename) files
NAME mv - move (rename) files SYNOPSIS mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE...
常用選項有:
-i, --interactive prompt before overwrite -f, --force do not prompt before overwriting
linux一般默認 mv='mv -i'
示例:
[root@zj-5-2 tmp]# cat /tmp/hosts 12345 [root@zj-5-2 tmp]# mv /etc/hosts /tmp/hosts mv:是否覆蓋“/tmp/hosts”? n [root@zj-5-2 tmp]# mv -f /etc/hosts /tmp/hosts [root@zj-5-2 tmp]# cat /tmp/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.101.202 zj-5-2
c. rm – remove files or directories
NAME rm - remove files or directories SYNOPSIS rm [OPTION]... FILE... OPTIONS Remove (unlink) the FILE(s). -f, --force 強制 ignore nonexistent files, never prompt -i, --interactive 交互式 prompt before any removal -r, -R, --recursive 遞歸刪除 remove directories and their contents recursively
linux 一般默認 rm=‘rm -i’
示例:
[root@zj-5-2 test]# rm hosts rm:是否刪除 一般文件 “hosts”? y [root@zj-5-2 test]# rm -rf /tmp/test/root/
2. bash基礎特性
bash的基礎特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。
a. 命令執行狀態返回值
命令的執行結果狀態 成功: 失敗 bash使用特殊變量$?保存最近一條命令的執行結果狀態: 0:成功 1-255:失敗
示例:
[root@zj-5-2 ceshi]# ls 1.sh [root@zj-5-2 ceshi]# echo $? 0 [root@zj-5-2 ceshi]# lsss -bash: lsss: command not found [root@zj-5-2 ceshi]# echo $? 127
b. 命令行展開
~:展開為用戶的主目錄 ~USERNAME: 展開為指定用戶的主目錄 {}:可承載一個以逗號分隔的列表,并將其展開為多個路徑 單個{}內的內容做加法計算,多個{}相互做乘法計算 /tmp/{a,b}=/tmp/a,/tmp/b, /tmp/{tom,jerry}hi=/tmp/tom/hi,/tmp/jerry/hi /tmp/{a,b}_{c,d}=/tmp/a_c,/tmp/a_d,/tmp/b_c,/tmp/b_d
示例:
~:展開為用戶的主目錄 [root@zj-5-2 ceshi]# cd ~ [root@zj-5-2 ~]# pwd /root
~USERNAME: 展開為指定用戶的主目錄 [root@zj-5-2 ~]# cd ~oracle [root@zj-5-2 oracle]# pwd /home/oracle
3. 命令行展開功能練習
-
創建/tmp目錄下的:a_c, a_d, b_c, b_d
[root@zj-5-2 tmp]# mkdir -p /tmp/{a,b}_{c,d} [root@zj-5-2 tmp]# ls -lrt /tmp/ drwxr-xr-x 2 root root 4096 07-11 12:28 a_c drwxr-xr-x 2 root root 4096 07-11 12:28 b_d drwxr-xr-x 2 root root 4096 07-11 12:28 b_c drwxr-xr-x 2 root root 4096 07-11 12:28 a_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
創建命令為:
[root@zj-5-2 tmp]# mkdir -p /tmp/mylinux/{bin,boot/grup,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}} [root@zj-5-2 tmp]# tree mylinux/ mylinux/ |-- bin |-- boot | `-- grup |-- 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
4. 文件元數據信息
文件的元數據信息有哪些,分別表示什么含義,如何查看?如何修改文件的時間戳信息。
文件:元數據(metadata)和數據(data)組成。
元數據(Metadata),又稱中介數據、中繼數據,為描述數據的數據(data about data),主要是描述數據屬性(property)的信息,用來支持如指示存儲位置、歷史數據、資源查找、文件記錄等功能。
文件的元數據包含文件名、文件類型、文件屬主、屬組、文件權限等;
stat命令可以查看文件狀態,獲取文件的元數據。
NAME stat - display file or file system status SYNOPSIS stat [OPTION] FILE...
示例:
[root@zj-5-2 etc]# stat /etc/fstab File: `/etc/fstab' Size: 532 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 1012009 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-07-16 19:44:02.000000000 +0800 Modify: 2015-09-01 08:50:27.000000000 +0800 Change: 2015-09-01 08:50:27.000000000 +0800 三個時間戳: access time: 訪問時間,簡寫atime,讀取文件內容 modify time:修改時間,mtime,改變文件內容 change time:改變時間,ctime,元數據發生改變 文件的時間戳管理工具: touch [OPTION]... [FILE]... -a:只改變atime -m:只改變mtime -t STAMP: [CC]YYMMDDhhmm[.ss]
[root@zj-5-2 etc]# ls -l /etc/fstab -rw-r--r-- 1 root root 532 Sep 1 2015 /etc/fstab ls -l的命令輸出自左向右共分為7部分: 1. -rw-r--r-- 文件類型及權限 按照自左向右的順序: -:文件類型,普通文件 rw-:屬主權限 r--: 屬組權限 r--:其他用戶權限 2. 1 :文件被硬鏈接的次數 3. root:屬主 4. root:屬組 5. 532:文件大小 6. Sep 1 2015:文件最后一次被修改的時間 7. /etc/fstab:文件路徑及文件名
文件類型分類: -(f):普通文件 d:目錄文件 directory l:符號鏈接 link b:塊設備文件 block,一般位于/dev目錄下,如硬盤、光盤 c:字符設備文件 character,一般位于/dev目錄下,如鍵盤 p:管道文件 pipe s:套接字文件 socket 文件權限: r:可讀,數字表示為4 w:可寫,數字表示為2 x:可執行,數字表示為1
5. 命令別名的使用 – alias
如何定義一個命令的別名,如何在命令中引用另一個命令的執行結果?
通過alias命令實現, alias [-p] [name[=value] ... ] 1.alias: 顯示當前shell進程中所有可用的命令別名 2.alias NAME='VALUE' 定義別名NAME,其相當于執行命令VALUE; 注意:在命令行中定義的別名,僅對當前shell生效;若想永久生效,要定義在配置文件中; 僅對當前用戶有效:~/.bashrc 對所有用戶有效:/etc/bashrc Note: 編輯配置文件給出的新配置不會立即生效 bash進程重新讀取配置文件: source 配置文件名(/path/to/config_file) . 配置文件名 撤銷別名:unalias unalias [-a] name [name ...] -a: 撤銷所有命令別名 unalias NAME:撤銷別名NAME Note:如果別名同原命令的名稱,則如果要執行原命令,可使用"\COMMAND";
示例:
[root@zj-5-2 ~]# alias alias cp='cp -i' alias grep='grep --color=auto' alias l.='ls -d .* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias mv='mv -i' alias rm='rm -i' alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@zj-5-2 ~]# [root@zj-5-2 ~]# alias name='hostname' [root@zj-5-2 ~]# name zj-5-2 [root@zj-5-2 ~]# unalias name [root@zj-5-2 ~]# name -bash: name: command not found
6. 通配符使用練習
a. 通配符介紹
1. * 任意長度的任意字符 2. ? 任意單個字符 3. [] 匹配指定范圍內的任意單個字符 [0-9]: 只能有一個數字 [a-z]:只能有一個字符,不區分字符大小寫 [A-Z]: 只匹配一個大寫字符 [0-9a-z]: 匹配一個數字和字符 aab aAb == a[a-z]b aAb == a[A-Z]b 4. [^] 匹配指定范圍外的任意單個字符 [^0-9] 5. 專用字符集合(均表示單個字符) [:digit:]:任意數字,相當于[0-9] [:lower:]:任意小寫字母 [:upper:]:任意大寫字母 [:alpha:]:任意大小寫字母,相當于[a-z] [:alnum:]:任意數字或字母 [:space:]:任意空白字符 [:punct:]:標點符號 [:cntrl:]:控制符
b. 相關練習
-
顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄.
ls -d /var/l*[0-9]*[[:lower:]] ls -d /var/l*[[:digit:]]*[[:lower:]]
-
顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄.
ls -d /etc/[0-9]*[^0-9] ls -d /etc/[[:digit:]]*[^[:digit:]]
-
顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄.
ls -d /etc/[^[:alpha:]][[:alpha:]]*
-
在/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`
-
復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中.
[root@zj-5-2 ~]# mkdir /tmp/mytest1 [root@zj-5-2 ~]# cp -a /etc/p*[^[:digit:]] /tmp/mytest1 [root@zj-5-2 ~]# ls /tmp/mytest1/ pam.d pinforc profile pam_smb.conf pki profile-2016-04-11.bak pango pm profile-2016-04-13.bak passwd ppp profile.bak passwd- prelink.cache profile.d passwd-2016-04-11.bak prelink.conf protocols passwd-2016-04-13.bak prelink.conf.d pcmcia printcap
-
復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中.
[root@zj-5-2 ~]# mkdir /tmp/mytest2 [root@zj-5-2 ~]# cp -a /etc/*.d /tmp/mytest2/ [root@zj-5-2 ~]# ls /tmp/mytest2/ bash_completion.d ld.so.conf.d pam.d rc3.d reader.conf.d cron.d logrotate.d prelink.conf.d rc4.d rwtab.d depmod.d lsb-release.d profile.d rc5.d sane.d dev.d makedev.d rc0.d rc6.d setuptool.d dnsmasq.d modprobe.d rc1.d rc.d xinetd.d init.d netplug.d rc2.d readahead.d yum.repos.d
-
復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中.
[root@zj-5-2 ~]# mkdir /tmp/mytest3 [root@zj-5-2 ~]# cp -a /etc/[lmn]*.conf /tmp/mytest3 [root@zj-5-2 ~]# ls /tmp/mytest3 ldap.conf libaudit.conf ltrace.conf modprobe.conf nscd.conf ld.so.conf libuser.conf mcelog.conf mtools.conf nsswitch.conf lftp.conf logrotate.conf mke2fs.conf multipath.conf ntp.conf
原創文章,作者:N21_未來人,如若轉載,請注明出處:http://www.www58058.com/24386
寫的很好,排版也很漂亮,加油。給你提一個問題,怎么在文件存在的情況下,在不提示警告的情況下,直接覆蓋文件?
@馬哥教育:因為我的linux系統中alias cp=’cp -i’,所以可以unalias cp,然后使用cp -f進行復制即可;
方法二:直接使用原cp命令進行復制,\cp -r
@N21_未來人:\cp -f