linux中bash的基礎特性和基本文件管理命令

linux的文件管理類命令

linux系統下的涉及到目錄管理命令,主要有 mkdir,rmdir

linux系統下也會用到許多文件查看類命令,包括cat,tac,head,tail,more,less

linux系統下涉及的文件管理類命令主要有cp,mv,rm

本節我們主要說明文件管理類命令的使用方法。

cp命令的使用方法

首先,cp這個命令的作用是可以復制文件或目錄,且支持多個文件同時復制。

cp命令的語法格式:

SYNOPSIS
       cp [OPTION]... [-T] SOURCE DEST
       cp [OPTION]... SOURCE... DIRECTORY
       cp [OPTION]... -t DIRECTORY SOURCE...

單源復制:cp [OPTION]…SOURCE DEST

  • 如果dest文件不存在則創建文件,并復制源文件數據流到DEST文件中(這里源,目的都是文件)

  • 如果dest文件存在,則復制源文件數據覆蓋目標文件(這里源,目標都是文件)

  • 如果dest是一個目錄,則在dest目錄中創建相同的文件和內容(這里源是文件,目的是目錄)

  • 如果源是目錄,需要加選項-t,這這時候dest必須是目錄,將其源目錄下所有文件復制到目標目錄下!

多源復制:cp [OPTION]… SOURCE… DIRECTORY

  • 多源復制的目標必須是目錄

  • 可以復制多個文件,到同一個目錄下。

常用選項option:

  • -i:覆蓋之前提醒用戶確認 。cp的別名就是cp -i

  • -f:強制覆蓋目標文件

  • -r:遞歸復制目錄,復制目錄和目錄中的內容到目標位置

  • -d:復制一個符號鏈接本身,不會其指向的真正的源文件。

  • -a: 表示連源文件源文件屬性都復制過去

  • –preserv=

    • mode 權限

    • ownership 屬主屬組

    • timestamps:時間戳

    • context:安全標簽

    • xattr:擴展屬性

    • links:符號鏈接

    • all:所有文件

示例:

[root@localhost ~]# cat cpdoc.txt
Are you kidding me ?

I 'm angry!
[root@localhost ~]# cat cpdoc1.txt
no, i am not 
 I'am sorry~
[root@localhost ~]# cp cpdoc1.txt cpdoc2.txt
[root@localhost ~]# cat cpdoc2.txt
no, i am not 
 I'am sorry~
[root@localhost ~]# cp cpdoc.txt cpdoc1.txt
cp: overwrite `cpdoc1.txt'? Y
[root@localhost ~]# cat cpdoc1.txt
Are you kidding me ?

I 'm angry!
[root@localhost ~]# cp cpdoc.txt cpdoc1.txt hahaha
[root@localhost ~]# ls hahaha
cpdoc1.txt  cpdoc.txt  text.txt
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# cp hahaha -r test
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# tree test
test
|-- 1p2a
|-- 28pa
|-- Pa99
|-- hahaha
|   |-- cpdoc.txt
|   |-- cpdoc1.txt
|   `-- text.txt
|-- p,a
|-- pa
|-- pa12
`-- papi

1 directory, 10 files

[root@localhost ~]# cp --preserv=mode cpdoc.txt test
[root@localhost ~]# ls -l test/cpdoc.txt
-rw-r--r-- 1 root root 34 Sep 25 01:05 test/cpdoc.txt
[root@localhost ~]# ls -l cpdoc.txt
-rw-r--r-- 1 root root 34 Sep 25 00:46 cpdoc.txt
[root@localhost ~]#

mv的使用方法

mv和cp使用方式基本一樣,只是mv命令完成cp操作之后,會把原來的source文件刪除。
注意:mv一個目錄時不需要加-r選項即可實現遞歸移動

命令格式:

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

常用選項:

  • -i:交互式;

  • -f:force

示例:

[root@localhost ~]# tree test
test
|-- 1p2a
|-- 28pa
|-- Pa99
|-- cpdoc.txt
|-- hahaha
|   |-- cpdoc.txt
|   |-- cpdoc1.txt
|   `-- text.txt
|-- p,a
|-- pa
|-- pa12
`-- papi

1 directory, 11 files

[root@localhost ~]# mv test/1p2a test/hahaha
[root@localhost ~]# tree test
test
|-- 28pa
|-- Pa99
|-- cpdoc.txt
|-- hahaha
|   |-- 1p2a
|   |-- cpdoc.txt
|   |-- cpdoc1.txt
|   `-- text.txt
|-- p,a
|-- pa
|-- pa12
`-- papi

1 directory, 11 files

[root@localhost ~]# mv test/hahaha test/mvtest
[root@localhost ~]# tree test
test
|-- 28pa
|-- Pa99
|-- cpdoc.txt
|-- mvtest
|   |-- 1p2a
|   |-- cpdoc.txt
|   |-- cpdoc1.txt
|   `-- text.txt
|-- p,a
|-- pa
|-- pa12
`-- papi

1 directory, 11 files
[root@localhost ~]#

rm的用法

rm主要是做命令刪除用的,刪除操作非常危險,linux系統無回收站??梢圆挥眠@個命令,只是將其mv到某個位置。

語法:

SYNOPSIS
       rm [OPTION]... FILE...

常用選項:

  • -i:交互式

  • -r:遞歸操作

  • -f:強制操作

[root@localhost ~]# rm /tmp/
.esd/                   .gdm_socket             issue                   keyring-pDpnGb/         mysysroot/              virtual-root.0ghOid/    .X0-lock
.font-unix/             .gdmZYIZNY              issue.tee               keyring-TNKNhD/         test.1363               virtual-root.pLN0g0/    .X11-unix/
functions               grub.conf               keyring-0QvdsM/         keyring-VIDgg7/         test.1365               VMwareDnD/              
gconfd-root/            hahaha/                 keyring-LcHTXN/         mapping-chenjianhang    test.1413               vmware-root/            
.gdm5PIVNY              .ICE-unix/              keyring-nhUcNx/         mapping-root            test.etc                vmware-root-2084385593/ 

[root@localhost ~]# rm -r /tmp/hahaha
rm: descend into directory `/tmp/hahaha'? y
rm: remove regular empty file `/tmp/hahaha/text.txt'? 
[root@localhost ~]# ls /tmp
functions    hahaha     keyring-0QvdsM  keyring-pDpnGb  mapping-chenjianhang  test.1363  test.etc             VMwareDnD
gconfd-root  issue      keyring-LcHTXN  keyring-TNKNhD  mapping-root          test.1365  virtual-root.0ghOid  vmware-root
grub.conf    issue.tee  keyring-nhUcNx  keyring-VIDgg7  mysysroot             test.1413  virtual-root.pLN0g0  vmware-root-2084385593
[root@localhost ~]#

bash的工作特性之命令執行狀態返回值

bash通過狀態返回值來輸入命令的執行結果

成功:0

失?。?-255

命令執行完成后,狀態返回值保存在bash的特殊變量?中.

演示內容:

[root@localhost ~]# ls
06:13:04  2016             a.out  asasx.txt   cpdoc2.txt  Desktop  grep.txt  install.log         like.txt  qq       qq.save.1  test     Thu
15        anaconda-ks.cfg  asas   cpdoc1.txt  cpdoc.txt   grep     hahaha    install.log.syslog  PDT       qq.save  Sep        testdir  vimtext
[root@localhost ~]# echo $?
0
[root@localhost ~]# lss
-bash: lss: command not found
[root@localhost ~]# echo $?
127
[root@localhost ~]# cd /xasmxaiosjxo
-bash: cd: /xasmxaiosjxo: No such file or directory
[root@localhost ~]# echo $?
1
[root@localhost ~]#

需要注意,bash只能獲取最近一次狀態結果。

bash的工作特性之命令行展開

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

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

示例:

[root@localhost ~]# cd /tmp
[root@localhost tmp]# cd ~
[root@localhost ~]# pwd
/root
[root@localhost ~]#

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

[root@localhost ~]# ls -a /tmp
.           functions    .gdmZYIZNY  issue           keyring-nhUcNx  mapping-chenjianhang  test.1365            virtual-root.pLN0g0     .X0-lock
..          gconfd-root  grub.conf   issue.tee       keyring-pDpnGb  mapping-root          test.1413            VMwareDnD               .X11-unix
.esd        .gdm5PIVNY   hahaha      keyring-0QvdsM  keyring-TNKNhD  mysysroot             test.etc             vmware-root
.font-unix  .gdm_socket  .ICE-unix   keyring-LcHTXN  keyring-VIDgg7  test.1363             virtual-root.0ghOid  vmware-root-2084385593
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# touch /tmp/{a,b}_{c,d}
[root@localhost ~]# ls -a /tmp
.    b_c         functions    .gdmZYIZNY  issue           keyring-nhUcNx  mapping-chenjianhang  test.1365            virtual-root.pLN0g0     .X0-lock
..   b_d         gconfd-root  grub.conf   issue.tee       keyring-pDpnGb  mapping-root          test.1413            VMwareDnD               .X11-unix
a_c  .esd        .gdm5PIVNY   hahaha      keyring-0QvdsM  keyring-TNKNhD  mysysroot             test.etc             vmware-root
a_d  .font-unix  .gdm_socket  .ICE-unix   keyring-LcHTXN  keyring-VIDgg7  test.1363             virtual-root.0ghOid  vmware-root-2084385593
[root@localhost ~]#

創建/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@localhost ~]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,user/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/user'
  mkdir: created directory `/tmp/mylinux/user/local'
  mkdir: created directory `/tmp/mylinux/user/local/bin'
  mkdir: created directory `/tmp/mylinux/user/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@localhost ~]# tree /tmp/mylinux
  /tmp/mylinux
  |-- bin
  |-- boot
  |   `-- grub
  |-- dev
  |-- etc
  |   |-- rc.d
  |   |   `-- init.d
  |   `-- sysconfig
  |       `-- network-scripts
  |-- lib
  |   `-- modules
  |-- lib64
  |-- proc
  |-- sbin
  |-- sys
  |-- tmp
  |-- user
  |   `-- local
  |       |-- bin
  |       `-- sbin
  `-- var
      |-- lock
      |-- log
      `-- run

  24 directories, 0 files
  [root@localhost ~]#

文件的元數據信息

文件的數據有2類:數據本身和元數據,元數據相當于對文件的一個摘要,通過stat命令可以查看文件的元數據。

例子:

[root@localhost ~]# stat /tmp/mylinux
  File: `/tmp/mylinux'
  Size: 4096            Blocks: 16         IO Block: 4096   directory
Device: 802h/2050d      Inode: 784934      Links: 14
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-09-25 02:19:22.000000000 -0700
Modify: 2016-09-25 02:19:05.000000000 -0700
Change: 2016-09-25 04:02:05.000000000 -0700
[root@localhost ~]#

主要顯示了以下內容:

  • 文件名

  • 文件大小

  • 文件塊

  • 文件類型

  • 文件鏈接數

  • 文件權限

  • UID

  • GID

  • 文件最后一次被查看的時間

  • 文件數據最后一次被修改的時間

  • 文件數據和元數據最后一次被改動的時間

通過touch命令可以改變文件的時間戳,touch命令的用法如下:

  • -c:指定文件不存在時不予以創建

  • -a:只改訪問時間access time

  • -m:只改更改時間modify time

  • -t:指定改成什么時間,年月日時分.秒

      [root@localhost ~]# stat  /tmp/mylinux
        File: `/tmp/mylinux'
        Size: 4096            Blocks: 16         IO Block: 4096   directory
      Device: 802h/2050d      Inode: 784934      Links: 14
      Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-09-25 02:19:22.000000000 -0700
      Modify: 2016-09-25 02:19:05.000000000 -0700
      Change: 2016-09-25 04:02:05.000000000 -0700
      [root@localhost ~]# touch -a /tmp/mylinux
      [root@localhost ~]# stat  /tmp/mylinux
        File: `/tmp/mylinux'
        Size: 4096            Blocks: 16         IO Block: 4096   directory
      Device: 802h/2050d      Inode: 784934      Links: 14
      Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-09-25 08:12:44.000000000 -0700
      Modify: 2016-09-25 02:19:05.000000000 -0700
      Change: 2016-09-25 08:12:44.000000000 -0700
      [root@localhost ~]# touch -m /tmp/mylinux
      [root@localhost ~]# stat  /tmp/mylinux
        File: `/tmp/mylinux'
        Size: 4096            Blocks: 16         IO Block: 4096   directory
      Device: 802h/2050d      Inode: 784934      Links: 14
      Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-09-25 08:12:44.000000000 -0700
      Modify: 2016-09-25 08:13:26.000000000 -0700
      Change: 2016-09-25 08:13:26.000000000 -0700
      [root@localhost ~]# touch  -mt 201011111111.11 /tmp/mylinux
      [root@localhost ~]# stat  /tmp/mylinux
        File: `/tmp/mylinux'
        Size: 4096            Blocks: 16         IO Block: 4096   directory
      Device: 802h/2050d      Inode: 784934      Links: 14
      Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2016-09-25 08:12:44.000000000 -0700
      Modify: 2010-11-11 11:11:11.000000000 -0800
      Change: 2016-09-25 08:15:31.000000000 -0700
      [root@localhost ~]#

    注意:文件中任何信息改動了,change time肯定會變動,包括數據本身和元數據。

如何定義一個命令別名

通過alias命令可以定義和查看命令的別名,別名也可以與原名相同,也可以通過/COMMAND運行原名。

如果不想繼續用別名,可以通過unalias取消別名。

這里下面定義的別名只在本次bash進程中有效,如果想永久的定義別名,需要在配置文件/etc/bashrc或者用戶家目錄下的bashrc.d中設置。

[root@localhost ~]# clr
-bash: clr: command not found
[root@localhost ~]# 
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
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 which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~]# alias clr='clear'
[root@localhost ~]# alias
alias clr='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=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~]# clr
[root@localhost ~]#

如何在命令中引用一個命令的執行結果

可以通過$(COMMAND)或者$'COMMAND'方式引用命令的執行結果

[root@localhost ~]# echo $(date +%Y)
2016
[root@localhost ~]# mkdir $(date +%Y)
[root@localhost ~]# ls
??。??????  anaconda-ks.cfg  asasx.txt   cpdoc.txt  grep.txt     install.log.syslog  qq         Sep      Thu
06:13:04    a.out            cpdoc1.txt  Desktop    hahaha       like.txt            qq.save    test     vimtext
2016        asas             cpdoc2.txt  grep       install.log  PDT                 qq.save.1  testdir
[root@localhost ~]#

globbing文件通配

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

[root@localhost ~]# ls /var/1*[[:digit:]]*[[:lower:]]
/var/1text2x
[root@localhost ~]# ls /var/1*[0-9]*[a-z]
/var/1text2x
[root@localhost ~]#

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

[root@localhost ~]# ls /etc/[[:digit:]]*[^[:digit:]]
/etc/2xaskm
[root@localhost ~]#

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

[root@localhost ~]# ls /etc/[^[:alpha:]]*
/etc/2xaskm
[root@localhost ~]#

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

[root@localhost ~]# touch /tmp/tfile-$(date "+%G-%m-%d-%k-%M-%S")
[root@localhost ~]# ls /tmp
a_c        gconfd-root  keyring-0QvdsM  keyring-VIDgg7        test.1363                  virtual-root.0ghOid
a_d        grub.conf    keyring-LcHTXN  mapping-chenjianhang  test.1365                  virtual-root.pLN0g0
b_c        hahaha       keyring-nhUcNx  mapping-root          test.1413                  VMwareDnD
b_d        issue        keyring-pDpnGb  mylinux               test.etc                   vmware-root
functions  issue.tee    keyring-TNKNhD  mysysroot             tfile-2016-09-25-19-09-26  vmware-root-2084385593
[root@localhost ~]#

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

[root@localhost ~]# cp -R /etc/p*[^[:digit:]]  /tmp/mytest1

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

[root@localhost ~]# cp -R /etc/*.d  /tmp/mytest2

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

[root@localhost ~]# cp -R /etc/[1mn]*.conf  /tmp/mytest3
[root@localhost ~]#

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

(0)
TheoTheo
上一篇 2016-09-26 09:36
下一篇 2016-09-26 14:10

相關推薦

  • 在centos6.9上實現軟RAID

    在centos6.9上實現軟RAID 什么是RAID?     RAID,全稱Redundant Arrays of Inexpensive(Independent)Disks。簡單翻譯叫磁盤陣列。    通俗一點講就是多個磁盤合成一個“陣列”來提供更好的性能、冗余,或者兩者都提…

    Linux干貨 2017-08-12
  • 文件管理類命令常用使用方法及其相關示例演示

    文件管理類命令常用使用方法及其相關示例演示 cat chattr chmod chown cp ln locate lsattr mv rm tee touch umask whereis which 文件管理類命令常用使用方法及其相關示例演示 cat 使用語法:cat [-AbeEnstTuv][–help][–version] FILENAME&nb…

    Linux干貨 2016-11-05
  • Linux 第八天: Linux文本編輯器vim

    Linux 第八天: (08月09日) Linux文本編輯器vim       sed 行編輯器 stream EDitor sed -n 不輸出模式空間內容的自動打印sed -e 多點編輯sed -f /PATH/TO/SCRIPTFILEsed -i 原處編輯   script單地址 # 指定的行/pattern/…

    Linux干貨 2016-08-11
  • M20 – 1- 第三周博客(3):Linux中文本處理工具

    1、文件查看查看工具 Linuxzhong存在著很多配置文件以及腳本,那Linux中也自帶了查看文本的工具: cat 命令 簡介: cat – concatenate files and print on the standard output 格式: cat&nbsp…

    Linux干貨 2016-08-07
  • Linux磁盤和文件系統管理進階(swap、磁盤配額、RAID、LVM、btrfs)

    概述:     上篇已經介紹了一些磁盤和文件系統管理的基礎概念,對磁盤的硬件構造,文件系統的基礎概念部分有了一個大致的了解。本篇就分享一些關于磁盤和文件系統管理的一些高級應用,具體包含:     1、swap交換分區的管理     2、掛載…

    Linux干貨 2016-08-30
  • MongoDB

    Edit MongoDB 手冊 MongoDB 手冊 第一章 Introduction MongoDB入門學習目錄(建議) Databases Collections Documents 第二章 部署安裝 1. Import the MongoDB public key 2. Configure the package management system (…

    Linux干貨 2017-04-08

評論列表(1條)

  • luoweiro
    luoweiro 2016-10-10 22:48

    總結的非常的詳細

欧美性久久久久