馬哥教育網絡班21期+第二周課程練習

馬哥教育網絡班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

(0)
N21_未來人N21_未來人
上一篇 2016-07-16
下一篇 2016-07-16

相關推薦

  • n25 第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。   2、取出最后登錄到當前系統的用戶的相關信息。   3、取出當前系統上被用戶當作其默認shell的最多的那個shell。   4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxus…

    Linux干貨 2016-12-20
  • DNS and BIND 配置指南

    前言     說來接觸Linux也有一年了,BIND是我曾經學習RH系Linux接觸的第一個服務,對我有著莫大的意義,當初差點因為這個服務難以配置而放棄Linux,今天學完馬哥的bind相關系列視頻之后,寫一篇DNS and BIND的基礎到進階。 一、DNS的基礎知識 DNS是什么? DNS(Domain Name …

    Linux干貨 2016-03-21
  • N25-第一周作業

    第一周博客作業 1.描述計算機的組成及其功能 2.按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別 3.描述Linux哲學思想,并按照自己的理解對其進行解釋性描述。 4.說明Linux系統上命令的使用格式:詳細介紹,ifconfg,echo,tty,startx,export pwd,history,shutdown,poweroff,rebo…

    Linux干貨 2016-12-02
  • tab鍵 history 命令的相關巧用

    Tab鍵的妙用       1.command沒有完全輸入時: 點擊tab,如果能唯一匹配到命令,則直接補全,否則需要點擊兩下tab來顯示能夠匹配到的命令。                2./2tab : 顯…

    2017-02-18
  • 推薦-LAMP的編譯安裝

    首先解釋一下LAMP,L:Linux;A:apache;M:MariaDB;P:php。Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一組常用來搭建動態網站或者服務器的開源軟件。 本文就是介紹編譯安裝apache2.4,MariaDB5.5,以及php(基于模塊化和fpm的這兩種方式來配合php提供服務)。 因為php是…

    Linux干貨 2016-04-11
  • ?redis cluster 安裝指南

    公司的很多項目在使用redis主從。由于coder的各種毀滅性操作,迫切需要一個能帶故障恢復的架構。因此新版的cluster,開始了測試。 一、Cluster 理論基礎 Cluster介紹 Redis集群是一個提供在多個Redis間節點間共享數據的程序集。 Redis集群并不支持處理多個keys的命令,因為這需要在不同的節點間移動數據,從而達不到像Redis…

    Linux干貨 2016-02-14

評論列表(3條)

  • 馬哥教育
    馬哥教育 2016-07-17 20:47

    寫的很好,排版也很漂亮,加油。給你提一個問題,怎么在文件存在的情況下,在不提示警告的情況下,直接覆蓋文件?

    • N21_未來人
      N21_未來人 2016-07-18 22:54

      @馬哥教育因為我的linux系統中alias cp=’cp -i’,所以可以unalias cp,然后使用cp -f進行復制即可;
      方法二:直接使用原cp命令進行復制,\cp -r

    • N21_未來人
      N21_未來人 2016-07-18 22:55

      @N21_未來人\cp -f

欧美性久久久久