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

失败:1-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.178linux.com/49109

(0)
TheoTheo
上一篇 2016-09-26
下一篇 2016-09-26

相关推荐

  • 数据库的历史及常见基本功能

    数据库的基本知识,MariaDB的基本知识,SQL语句

    2018-01-29
  • Linux发展与应用

                                                      &nbsp…

    2017-04-05
  • Http请求流程

    1、http请求流程 1.连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把www.mycompany.com变成ip,如果url里不包含端口号,则会使用该协议的默认端口号。 DNS的过程是这样的:首先我们知道我们本地的机器上在配置网络时都会填写DNS,这样本机就会把这个…

    Linux干货 2017-02-13
  • 认识DNS

    DNS全称是Domain Name System的简称,即域名系统。因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP/TCP协议之上,使用端口号53。 认识DNS 安装 创建一台DN…

    Linux干货 2016-12-07
  • N26 第八周作业

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥(network bridge) 网桥工作于物理层与数据链路层,在终端设备较多的局域网中可以用网桥设备将局域网分离为不同的冲突域(collision domain),减少网络冲突,提升网络传输效率 集线器(network hub) 集线器具有多个I/O端口,一个端口的输入信号…

    2017-02-25

评论列表(1条)

  • luoweiro
    luoweiro 2016-10-10 22:48

    总结的非常的详细