linux运维

linux文件目录管理命令概述

2018-03-01  本文已影响112人  dabule

Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。

目录管理类命令:cd,pwd,ls,mkdir,rmdir,tree

cd:change directory切换目录

cd [/PATH/TO/SOMEDIR]   

    cd: 切换回家目录

    cd ~:切换回自己的家目录(bash中,~表示家目录)

    cd ~USERNAME:切换至指定用户的家目录

    cd -:在上一次所在目录与当前目录之间来回切换
[root@localhost ~]# cd /etc/
[root@localhost etc]# cd 
[root@localhost ~]# 

pwd: 显示当前工作目录

[root@localhost ~]# pwd
/root

ls: list, 列出指定目录下的内容

ls [OPTION]... [FILE]...

    -a: 显示所有文件,包括隐藏文件

    -A:显示除.和..之外的所有文件

    -l:  长格式列表,即显示文件的详细属性信息

    -h, :对文件大小单位换算;换算后结果可能会非精确值

    -d:查看目录自身而非其内部的文件列表

    -r: reverse, 逆序显示

    -R: recursive,递归显示
[root@localhost ~]# ls -l /tmp/
total 0
drwxr-xr-x. 2 root root 23 Jan 31 20:23 magedu
drwxr-xr-x. 4 root root 28 Feb  5 22:30 mytest1
drwx------. 3 root root 16 Feb  6 21:02 systemd-private-mDzNGp
drwx------. 3 root root 16 Feb  6 21:01 systemd-private-soCRw5
drwx------. 3 root root 16 Mar  1 18:24 systemd-private-TmTWUJ
drwx------. 3 root root 16 Mar  1 18:23 systemd-private-zsO2hy
drwxr-xr-x. 3 root root 65 Feb 21 00:36 test
drwx------. 2 root root  6 Feb 23 18:10 vmware-root
------------------------------------------------------------------------------
[root@localhost ~]# ls -a /tmp/
.           magedu                  systemd-private-zsO2hy  .X11-unix
..          mytest1                 test                    .XIM-unix
.esd-0      systemd-private-mDzNGp  .Test-unix
.font-unix  systemd-private-soCRw5  vmware-root
.ICE-unix   systemd-private-TmTWUJ  .X0-lock

mkdir:创建工作目录

mkdir [OPTION]... DIRECTORY...

    -p: 如果父目录不存在,则递归的创建目录

    -v: verbose,显示详细过程
[root@localhost test]# mkdir -pv abc/bcd
mkdir: created directory ‘abc’
mkdir: created directory ‘abc/bcd’

[root@localhost test]# tree /tmp/test/
/tmp/test/
|-- abc
|   `-- bcd
|-- file.sh
|-- hostname.sh
|-- tmp
`-- useradd.sh

注意:以路径为命令的作用对象;路径必须得存在否则用-p选项;不给绝对路径时默认在当前目录下创建.

rmdir:删除空目录

rmdir [OPTION]... DIRECTORY...

    -p:递归删除,删除某目录后,如果其父目录为空,则一并删除之

    -v: 显示过程
[root@localhost test]# rmdir -pv abc/bcd/
rmdir: removing directory, ‘/tmp/test/abc/bcd/’
rmdir: removing directory, ‘/tmp/test/abc’

tree命令:树状结构显示当前目录结构

tree [options] [directory]

    -L level:指定要显示的层级
[root@localhost test]# tree -L 2 /tmp/
/tmp/
|-- magedu
|   `-- machine-id
|-- mytest1
|   |-- pam.d
|   `-- pki
|-- systemd-private-mDzNGp
|   `-- tmp
|-- systemd-private-soCRw5
  `-- tmp

文件查看类命令:cat, tac, head, tail, more, less,

cat: 文件文本查看工具,从前面往后面查看

cat [OPTION]... [FILE]...

    -n:给显示的文本行编号

    -E: 显示行结束符$
[root@localhost test]# cat -nE /etc/issue
     1  \S$
     2  Kernel \r on an \m$
     3  $

tac:文件文本查看工具,从后面往前面查看, tac /etc/fstab;

tac [OPTION]... [FILE]...
[root@localhost test]# tac  /etc/issue

Kernel \r on an \m
\S

head: 查看文件的前n行

        head [options] FILE

            -n #: 查看前面第几行的信息,默认显示前面10行
[root@localhost test]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

tail: 看文件的后n行;

tail [options] FILE

    -n # : 查看倒数的第几行,默认查看最后的10行,n可以不写

    -f:查看文件尾部内容结束后不退出,跟随显示新增的行
[root@localhost test]# tail -5 /etc/passwd
tuser1:x:2004:2004::/home/tuser1:/bin/bash
hadoop:x:2005:2005::/home/hadoop:/bin/bash
testbash:x:2006:2006::/home/testbash:/bin/bash
basher:x:2007:2007::/home/basher:/bin/bash
nologin:x:2008:2008::/home/nologin:/sbin/nologin

more:翻屏至文件尾部后自动退出

h:获取帮助信息
space:向后翻一屏
b:向前翻一屏
 q:退出

less, :和more的功能类似

但是文件到尾部的时候不会自动退出,可以来回翻动查看的文件

    h:获得帮助

    q:退出

    space:向后翻一屏

    b:向前翻一屏

文件管理工具:cp, mv, rm

cp命令:copy

单源复制:cp [OPTION]... [-T] SOURCE DEST
多源复制:cp [OPTION]... SOURCE... DIRECTORY
         cp [OPTION]... -t DIRECTORY SOURCE...

      常用选项:

          -i:交互式复制,即覆盖之前提醒用户确认;
          -f:强制覆盖目标文件;
          -r, -R:递归复制目录;
          -t:  设置目标目录
          -d:复制符号链接文件本身,而非其指向的源文件;
          -a:用于实现归档;

  单源复制:cp [OPTION]... [-T] SOURCE DEST

SOURCE是文件
如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中;
如果DEST是非目录文件:则覆盖目标文件;
如果DEST是目录文件:则先在DEST目录下创建一个与源文件名的文件,并复制其数据流;

[root@localhost test]# pwd
/tmp/test
[root@localhost test]# ls
file.sh  hostname.sh  tmp  useradd.sh
[root@localhost test]# cp /etc/issue /tmp/test/abc
[root@localhost test]# cat /tmp/test/abc 
\S
Kernel \r on an \m

多源复制:cp [OPTION]... SOURCE... DIRECTORY
         cp [OPTION]... -t DIRECTORY SOURCE...

SOURCE是目录,则必须使用-r选项
如果DEST不存在:错误;
如果DEST是非目录文件:错误;
如果DEST是目录文件:分别复制每个文件至目标目录中,并保持原名;

[root@localhost test]# ls /etc/rc0.d/
K03rhnsd  K50netconsole  K79iprdump  K80iprinit  K80iprupdate  K90network
[root@localhost test]# cp -r /etc/rc0.d/ /tmp/test/
[root@localhost test]# ls /tmp/test/rc0.d/
K03rhnsd  K50netconsole  K79iprdump  K80iprinit  K80iprupdate  K90network

mv命令:剪切或重命名

在同一目录中移动文件则实现重命名功能

      mv [OPTION]... [-T] SOURCE DEST

      mv [OPTION]... SOURCE... DIRECTORY

     mv [OPTION]... -t DIRECTORY SOURCE..           
          常用选项:

          -i:交互式;

          -f:force

SOURCE是单文件时,如果DEST不存在:则创建DEST文件并实现剪切功能.如果DEST存在:则SOURCE文件内容将覆盖DEST原文件内容
SOURCE是多文件时,DEST如果存在必须为目录,否则报错.
如果DEST不存在:剪切功能
如果DEST存在,必须是目录,否则报错
SOURCE是目录
如果DEST是不存在, 剪切功能
如果DEST是目录文件, 剪切功能:

[root@localhost test]# ls 
file.sh  hostname.sh  tmp  useradd.sh
[root@localhost test]# mv file.sh new_file.sh
[root@localhost test]# ls
hostname.sh  new_file.sh  tmp  useradd.sh
------------------------------------------------------------------------------
[root@localhost yum.repos.d]# tree /tmp/
/tmp/
|-- a
|   |-- c
|   `-- d
|-- anaconda.log
|-- b
|   |-- c
|   `-- d

[root@localhost tmp]# mv /tmp/b /tmp/test/
[root@localhost tmp]# tree /tmp/test/
/tmp/test/
`-- b
    |-- c
    `-- d


rm命令:remove ,rm [OPTION]... FILE...

    常用选项:

        -i:interactive,交互式

        -f:force,强制

        -r: recursive,递归式
[root@localhost test]# file /tmp/issue 
/tmp/issue: ASCII text
[root@localhost test]# rm -rf /tmp/issue 
[root@localhost test]# file /tmp/issue 
/tmp/issue: cannot open (No such file or directory)

注意:所有不用的文件建议不要直接删除,特别是rm -rf /* 这样的危险操作.而是移动至某个专用目录.

bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。

bash使用特殊的变量$?保存最近一条命令的执行状态结果,echo $?可以查看其返回值,成功:0.失败:1-255. 命令正常执行时,有的还回有命令返回值, 根据命令及其功能不同,结果各不相同

[root@localhost test]# ls 
file.sh  hostname.sh  tmp  useradd.sh
[root@localhost test]# echo $?
0
----------------------------------------------
[root@localhost test]# lsl
bash: lsl: command not found...
[root@localhost test]# echo $?
127

请使用命令行展开功能来完成以下练习:

(1)、创建/tmp目录下的:a_c, a_d, b_c, b_d

[root@localhost test]# ls
file.sh  hostname.sh  tmp  useradd.sh
[root@localhost test]# mkdir -p /tmp/{a,b}/{c,d}
[root@localhost test]# tree /tmp/
/tmp/
|-- a
|   |-- c
|   `-- d
|-- b
|   |-- c
|   `-- d

(2)、创建/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 tmp]# 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}}


[root@localhost tmp]# 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

文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。

文件:两类数据

        元数据:metadata,文件的属性数据

        数据: data,文件的实际数据

可以使用stat命令查看文件的元数据,如: stat /etc/passwd

[root@localhost tmp]# stat /etc/passwd
  File: ‘/etc/passwd’
  Size: 1926        Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 134333990   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2018-03-01 20:33:51.552016909 +0800
Modify: 2018-01-25 18:19:55.855550535 +0800
Change: 2018-01-25 18:19:55.856550537 +0800
 Birth: -


相关参数描述:
File:文件名;

Size:文件大小;

Blocks:文件占了多少数据块;

IO Block:文件所占数据块的大小;

Device:文件所在的硬盘的位置;

Inode:文件的节点;

Links:文件的链接数;

Access:用户或组对该文件的访问权限;

Uid:文件的属主;

Gid:文件的属组;

Context:文件的安全上下文;

Access:文件上一次的访问时间,又称为access time;

Modify:文件最近一次修改的时间,又称为modify time;

Change:文件属性最近一次改动时间,又称为change time;

可以使用touch命令来修改文件的时间戳信息, touch [option] [FILE]

-c:指定的文件路径不存在时不予创建;

-a:仅修改access time;

-m:仅修改modify time;

-t [[CC]YY]MMDDhhmm[.ss]:使用指定的日期时间修改时间戳;
[root@localhost tmp]# stat /etc/passwd
  File: ‘/etc/passwd’
  Size: 1926        Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 134333990   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2018-03-01 20:33:51.552016909 +0800
Modify: 2018-01-25 18:19:55.855550535 +0800
Change: 2018-01-25 18:19:55.856550537 +0800
 Birth: -
[root@localhost tmp]# touch -m /etc/passwd
[root@localhost tmp]# stat /etc/passwd
  File: ‘/etc/passwd’
  Size: 1926        Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 134333990   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2018-03-01 20:33:51.552016909 +0800
Modify: 2018-03-01 21:18:49.289034098 +0800
Change: 2018-03-01 21:18:49.289034098 +0800
 Birth: -

如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?

alias命令 alias NAME=’COMMAND’对当前shell设置别名, 如果想要永久有效。需要定义在配置文件/etc/bashrc中.用反引号来或者使用$()的形式引用另一个命令的结果

root@localhost tmp]# ls /tmp/test/
b
[root@localhost tmp]# mkdir /tmp/test/$(date +%F-%m-%d).backup
[root@localhost tmp]# ls /tmp/test/
2018-03-01-03-01.backup  b
-----------------------------------------------------------------
[root@localhost tmp]# rootid=`id root`
[root@localhost tmp]# echo rootid
rootid

显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。

ls -d /var/l[0-9][[:alpha:]]

[root@localhost tmp]# ls -d /var/l[0-9][[:alpha:]]
ls: cannot access /var/l[0-9][[:alpha:]]: No such file or directory
[root@localhost tmp]# ls /var/
account  cache  db     games  gopher    lib    lock  mail  opt       run    tmp  yp
adm      crash  empty  gdm    kerberos  local  log   nis   preserve  spool  var

显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。

ls -d /etc/[0-9][^0-9]

[root@localhost tmp]# ls -d /etc/[0-9][^0-9]
ls: cannot access /etc/[0-9][^0-9]: No such file or directory

显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。

ls -d /etc/[^[:alpha:]][[:alpha:]]

[root@localhost tmp]#  ls -d /etc/[^[:alpha:]][[:alpha:]]
ls: cannot access /etc/[^[:alpha:]][[:alpha:]]: No such file or directory

在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。

mkdir -v /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)

[root@localhost tmp]# mkdir -v /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
mkdir: created directory ‘/tmp/tfile-2018-03-01-21-12-12’

复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

mkdir  -v /tmp/mytest1 
cp -rv /etc/p[^0-9] /tmp/mytest1

[root@localhost tmp]# mkdir -v /tmp/mytest1 
mkdir: created directory ‘/tmp/mytest1’
[root@localhost tmp]# cp -rv /etc/p[^0-9] /tmp/mytest1
‘/etc/pm’ -> ‘/tmp/mytest1/pm’
‘/etc/pm/config.d’ -> ‘/tmp/mytest1/pm/config.d’
‘/etc/pm/power.d’ -> ‘/tmp/mytest1/pm/power.d’
‘/etc/pm/sleep.d’ -> ‘/tmp/mytest1/pm/sleep.d’

复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。

mkdir  -v /tmp/mytest2    
cp -vr /etc/*.d /tmp/mytest2

[root@localhost tmp]#  mkdir  -v /tmp/mytest2
mkdir: created directory ‘/tmp/mytest2’

[root@localhost tmp]# cp -vr /etc/*.d /tmp/mytest2
‘/etc/bash_completion.d’ -> ‘/tmp/mytest2/bash_completion.d’
‘/etc/bash_completion.d/yum’ -> ‘/tmp/mytest2/bash_completion.d/yum’
‘/etc/bash_completion.d/yummain.py’ -> ‘/tmp/mytest2/bash_completion.d/yummain.py’
.......


复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

mkdir -v /tmp/mytest3    
cp -rv /etc/[lmn]*.conf  /tmp/mytest3


[root@localhost tmp]# mkdir -v /tmp/mytest3
mkdir: created directory ‘/tmp/mytest3’
[root@localhost tmp]# cp -rv /etc/[lmn]*.conf  /tmp/mytest3
‘/etc/ld.so.conf’ -> ‘/tmp/mytest3/ld.so.conf’
‘/etc/libaudit.conf’ -> ‘/tmp/mytest3/libaudit.conf’
‘/etc/libuser.conf’ -> ‘/tmp/mytest3/libuser.conf’
‘/etc/locale.conf’ -> ‘/tmp/mytest3/locale.conf’
‘/etc/logrotate.conf’ -> ‘/tmp/mytest3/logrotate.conf’
‘/etc/man_db.conf’ -> ‘/tmp/mytest3/man_db.conf’
‘/etc/mke2fs.conf’ -> ‘/tmp/mytest3/mke2fs.conf’
‘/etc/mtools.conf’ -> ‘/tmp/mytest3/mtools.conf’
‘/etc/nfsmount.conf’ -> ‘/tmp/mytest3/nfsmount.conf’
‘/etc/nsswitch.conf’ -> ‘/tmp/mytest3/nsswitch.conf’
‘/etc/numad.conf’ -> ‘/tmp/mytest3/numad.conf’
上一篇下一篇

猜你喜欢

热点阅读