馬哥教育網絡班22期-第2周博客作業2

2、bash的工作特性之命令狀態返回值和命令展開所涉及的內容及其示例演示

bash的基礎特性:命令的執行狀態結果

  命令執行的狀態結果:

  bash通過狀態返回值來輸出此結果:

    成功:0

    失敗:1-255

    命令執行完成之后,其狀態返回值保存于bash的特殊變量$?中;

    命令正常執行時,有的還會有命令返回值:

    根據命令及其功能不同,結果各不相同;

實例:

[root@zck ~]# echo $SHELL
/bin/bash
[root@zck ~]# echo $?
0
[root@zck ~]# 12name=VBird
bash: 12name=VBird: command not found...   #發生錯誤
[root@zck ~]# echo $?
127    
#錯誤代碼127,錯誤代碼返回值根據軟件而有不同,我們可根據代碼來找出錯誤的原因。
[root@zck ~]# echo $?
0   
#這里返回了正確的值,這是因為“?”只與“上一個執行命令”有關,
#所以,我們上一個命令執行的是“echo $?”,所以返回正確的值0。

3、請使用命令行展開功能來完成以下練習:

   (1)創建/tmp目錄下的:a_c、a_d、b_c、b_d

[root@zck ~]# mkdir -v /tmp/{a,b}_{c,d}
mkdir: created directory ‘/tmp/a_c’
mkdir: created directory ‘/tmp/a_d’
mkdir: created directory ‘/tmp/b_c’
mkdir: created directory ‘/tmp/b_d’

(2)創建/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

[root@zck ~]# 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}}
mkdir: created directory ‘/tmp/mylinux’
mkdir: created directory ‘/tmp/mylinux/bin’
mkdir: created directory ‘/tmp/mylinux/boot’
mkdir: created directory ‘/tmp/mylinux/boot/grub’
mkdir: created directory ‘/tmp/mylinux/dev’
mkdir: created directory ‘/tmp/mylinux/etc’
mkdir: created directory ‘/tmp/mylinux/etc/rc.d’
mkdir: created directory ‘/tmp/mylinux/etc/rc.d/init.d’
mkdir: created directory ‘/tmp/mylinux/etc/sysconfig’
mkdir: created directory ‘/tmp/mylinux/etc/sysconfig/network-scripts’
mkdir: created directory ‘/tmp/mylinux/lib’
mkdir: created directory ‘/tmp/mylinux/lib/modules’
mkdir: created directory ‘/tmp/mylinux/lib64’
mkdir: created directory ‘/tmp/mylinux/proc’
mkdir: created directory ‘/tmp/mylinux/sbin’
mkdir: created directory ‘/tmp/mylinux/sys’
mkdir: created directory ‘/tmp/mylinux/tmp’
mkdir: created directory ‘/tmp/mylinux/usr’
mkdir: created directory ‘/tmp/mylinux/usr/local’
mkdir: created directory ‘/tmp/mylinux/usr/local/bin’
mkdir: created directory ‘/tmp/mylinux/usr/local/sbin’
mkdir: created directory ‘/tmp/mylinux/var’
mkdir: created directory ‘/tmp/mylinux/var/lock’
mkdir: created directory ‘/tmp/mylinux/var/log’
mkdir: created directory ‘/tmp/mylinux/var/run’
[root@zck ~]# 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

4、文件的元數據信息有哪些,分別表示什么含義,如何查看?如何修改文件的時間戳信息。

  匹配模式:元字符        

     *:匹配任意長度的任意字符                

        pa*,*pa*,*pa,*p*a*                        

        pa,paa,passwd        

     ?:匹配任意單個字符                

        pa?,??pa,p?a,p?a?                        

        pa,paa,paawd        

     []:匹配指定范圍內的任意單個字符                

  有幾種特殊格式:                        

     [a-z],[A-Z],[0-9],[a-z0-9]                        

     [[:upper:]]:指定匹配所有大寫字母                        

     [[:lower:]]:指定匹配所有小寫字母                        

     [[:alpha:]]:匹配所有字母                        

     [[:digit:]]:匹配所有數字                        

     [[:alnum:]]:匹配所有的字母和數字                        

     [[:space:]]:匹配所有空白字符                        

     [[:punct:]]:匹配所有標點符號                        

     pa[0-9][0-9],2[0-9][0-9]        

     [^]:匹配指定范圍外的任意單個字符                

     [^[:upper:]]:匹配不是大小的字母                

     [^0-9]:匹配不是數字的字符                

     [^[:alnum:]]:匹配不是字母即不數字的字符

touch 命令

  touch – change file timestamps

  改變文件或目錄時間

【SYNOPSIS】

  touch [OPTION]… FILE…

【OPTIONS】

  -a:僅修改access time(時間)        

  -m:僅修改modify time(更改時間);        

  -c:僅修改文件的時間,若該文件不存在則不創建新文件;        

  -t:STAMP,后面可以接需要修改的時間而不用系統當前的時間,格式為[YYMMDDhhmm]或[[CC]YY]MMDDhhmm[.ss]        

  -d:后面可以接需要修改的日期而不用系統當前的日期,也可以使用–date="日期或時間"

【EXAMPLES】

實例1:新建一個空的文件并查看時間

[root@zck test]# touch test1
[root@zck test]# ls -l test1
-rw-r--r--. 1 root root 0 Aug 17 23:28 test1
[root@zck test]# stat test1   #查看文件時間戳信息
  File: ‘test1’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d	Inode: 72449663    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2016-08-17 23:28:18.678545086 +0800  #訪問時間
Modify: 2016-08-17 23:28:18.678545086 +0800  #更改時間
Change: 2016-08-17 23:28:18.678545086 +0800  #改動時間
 Birth: -
#touch創建文件,如果該文件不存在,則會該文件的三個時間(atime、ctime、mtime)都會更新為系統當前時間。

實例2:將~/.bashrc復制成bashrc,-a復制所有屬性,查看文件時間戳信息

[root@zck test]# cp -a ~/.bashrc bashrc
[root@zck test]# stat bashrc
  File: ‘bashrc’
  Size: 194       	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 72458496    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2016-08-17 08:43:14.717066234 +0800   #訪問時間
Modify: 2016-08-15 14:38:15.169080971 +0800   #更改時間
Change: 2016-08-17 23:36:50.167559330 +0800   #改動時間

實例3:將bashrc文件日期調整為兩天前

[root@zck test]# touch -d "2 days ago" bashrc
[root@zck test]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rw-r--r--. 1 root root 194 Aug 16 09:07 bashrc
-rw-r--r--. 1 root root 194 Aug 16 09:07 bashrc
-rw-r--r--. 1 root root 194 Aug 18 09:07 bashrc
#(atime/mtime)由18日變成了16日,但是ctime并沒有跟著改變

實例4:將上實例3的bashrc日期改為 2007/09/15 2:02

[root@zck test]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rw-r--r--. 1 root root 194 Sep 15  2007 bashrc
-rw-r--r--. 1 root root 194 Sep 15  2007 bashrc
-rw-r--r--. 1 root root 194 Aug 18 09:16 bashrc
#(atime/mtime)都改變了,但是ctime則是當前文件修改的時間#

5、如何定義一個命令的別名,如何在命令中引用另一個命令的執行結果?

5.1 alias 命令

  Define or display aliases

  定義或顯示別名

【SYNOPSIS】

  alias  [name[=value] … ]

【OPTIONS】

  -p:列出當前所有的別名設置;

【EXAMPLES】

[root@zck ~]# alias   #顯示當前所有的命令別名
alias cls='clear'
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@zck ~]# alias md=mkdir   #將mkdir命令設置別名為md;
[root@zck ~]# alias md
alias md='mkdir'
[root@zck ~]# md dir1
[root@zck ~]# ll -d dir1/
drwxr-xr-x. 2 root root 6 Aug 18 10:07 dir1/
[root@zck ~]# alias dir='ls -al'   #將'ls -al'命令設置別名為dir
[root@zck ~]# dir
總結:在命令行中定義的別名,僅對當前shell進程有效,如果想長久有效,需要在配置文件中添加此別名定義:
~/.bashrc:僅對當前用戶有效
/etc/bashrc:對所有用戶有效

5.2 如何在命令中引用另一個命令的執行結果?
        引用命令的執行結果:               

                 $(COMMAND)或`COMMAND`

【EXAMPLES】

[root@zck ~]# echo $(date)
Thu Aug 18 10:27:15 CST 2016
[root@zck ~]# echo `date`
Thu Aug 18 10:27:26 CST 2016

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

[root@zck ~]# ls /var | grep '1.*[[:digit:]]\+.*[[:lower:]]$'

7、顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的文件或目錄;

[root@zck ~]# ls /etc | grep '^[[:digit:]].*[^[:digit:]]$'
3ab23y

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

[root@zck ~]# ls /etc | grep '^[^[:alpha:]][[:alpha:]].*'
3ab23y

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

[root@zck ~]# mkdir /tmp/tfile-`date +%F-%H-%M-%S`
[root@zck ~]# ll -d /tmp/tfile-2016-08-18-11-00-23
drwxr-xr-x. 2 root root 6 Aug 18 11:00 /tmp/tfile-2016-08-18-11-00-23

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

[root@zck ~]# mkdir /tmp/mytest1
[root@zck ~]# cp -r /etc/p*[^0-9] /tmp/mytest1
[root@zck ~]# ls /tmp/mytest1
pam.d    pbm2ppa.conf  plymouth      popt.d   prelink.conf.d  profile.d  purple
passwd   pinforc       pm            postfix  printcap        protocols  python
passwd-  pki           pnm2ppa.conf  ppp      profile         pulse

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

[root@zck ~]# mkdir /tmp/mytest2
[root@zck ~]# cp -r /etc/*.d /tmp/mytest2
[root@zck ~]# ls /tmp/mytest2
auto.master.d      dracut.conf.d  logrotate.d     profile.d  rc.d           sysctl.d
bash_completion.d  exports.d      modprobe.d      rc0.d      request-key.d  tmpfiles.d
binfmt.d           gdbinit.d      modules-load.d  rc1.d      rsyslog.d      usb_modeswitch.d
cgconfig.d         grub.d         my.cnf.d        rc2.d      rwtab.d        xinetd.d
chkconfig.d        init.d         oddjobd.conf.d  rc3.d      sane.d         yum.repos.d
cron.d             ipsec.d        pam.d           rc4.d      setuptool.d
depmod.d           ld.so.conf.d   popt.d          rc5.d      statetab.d
dnsmasq.d          libibverbs.d   prelink.conf.d  rc6.d      sudoers.d

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

[root@zck ~]# mkdir /tmp/mytest3
[root@zck ~]# cp /etc/{l,m,n}*.conf /tmp/mytest3
[root@zck ~]# ls /tmp/mytest3
ld.so.conf     libuser.conf  logrotate.conf  mke2fs.conf  nfsmount.conf  ntp.conf
libaudit.conf  locale.conf   man_db.conf     mtools.conf  nsswitch.conf  numad.conf

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

(0)
zhuckeezhuckee
上一篇 2016-08-22
下一篇 2016-08-22

相關推薦

  • shell腳本編寫-2

    1、條件判斷if語句       1)、 單分支 if  判斷條件;then     條件為真的分支代碼     fi 2)、雙分支     if  判斷條件; then    &…

    Linux干貨 2016-08-15
  • Hadoop簡介

    Hadoop的概要介紹 Hadoop,是一個分布式系統基礎架構,由Apache基金會開發。用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力高速運算和存儲。 簡單地說來,Hadoop是一個可以更容易開發和運行處理大規模數據的軟件平臺。該平臺使用的是面向對象編程語言Java實現的,具有良好的可移植性。 Hadoop的發展歷史 &nbsp…

    Linux干貨 2015-04-13
  • N25期–第七周作業

    1、創建一個10G分區,并格式為ext4文件系統; fdisk /dev/sda n p 2 enter +10G w partx -a /dev/sda (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; mke2fs -t ext4 -…

    Linux干貨 2017-02-20
  • linux中的vim

    什么是vim:     Linux 在命令行下的文本編輯器,很多個別軟件的編輯接口都會主動調用vim,所以在 Linux 的系統中使用文字編輯器來編輯你的Linux參數配置文件,在 Linux 的世界中,絕大部分的配置文件都是以 ASCII 的純文本形態存在,因此利用簡單的文字編輯軟件就能夠修改設置.所有的Unix L…

    Linux干貨 2016-08-11
  • vim編輯器

                在Linux的學習中,無論是編寫腳本還是修改文件內容,我們最經常用的就是vim編輯器.vim編輯器功能十分強大,如今不僅僅只應用在Linux中.今天就來介紹一下vim編輯器的功能 進入和退出vim     進入:   在終端輸入vim 文件名 ,…

    Linux干貨 2017-08-05
  • LVM邏輯卷管理

    一、簡述 什么是邏輯卷?LVM(Logical Volume Manager)利用Linux內核device-mapper實現存儲系統的虛擬化。通過LVM,把底層存儲硬件抽象化成存儲邏輯塊,再將這些邏輯塊集合構成存儲池,從存儲池空間劃分分區,可以簡單地擴大或縮小分區,而不用擔心硬盤沒有足夠的連續空間。 使用邏輯卷分區有什么用?使用邏輯卷分區重點在于可以彈性地…

    Linux干貨 2016-09-06

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-14 08:02

    贊~

欧美性久久久久