Linux文件、目录管理

文件、目录管理

Linux系统目录结构

简述:不同于windows、linux的系统目录是从根(/)开始的、且每个目录都有其作用。 使用tree命令查看根目录下各目录

/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var

1、/ - 根目录 所有文件或者目录的起始点、该目录只有root有权限进行修改

2、bin - 二进制文件 实际上/bin是通过软连接连接上/usr/bin的这个目录里存放着普通用户的二进制文件(常用的命令)

[root@test1 /]# ls /bin
awk                          gpgv                        nl                        sleep
addr2line                    gpgv2                       nl-addr-add               slogin
alias                        gpg-zip                     nl-addr-delete            snice
apropos                      gpic                        nl-addr-list              soelim

3、boot - 引导文件 系统的引导目录、里面存放着系统的引导文件

[root@test1 /]# ls /boot/
config-3.10.0-514.el7.x86_64                             initrd-plymouth.img
grub                                                     symvers-3.10.0-514.el7.x86_64.gz
grub2                                                    System.map-3.10.0-514.el7.x86_64
initramfs-0-rescue-17db0f2c61ff48d9b2f8952b5a25db9c.img  vmlinuz-0-rescue-17db0f2c61ff48d9b2f8952b5a25db9c
initramfs-3.10.0-514.el7.x86_64.img                      vmlinuz-3.10.0-514.el7.x86_64
initramfs-3.10.0-514.el7.x86_64kdump.img

4、dev - 设备文件 设备文件目录、例如TTY、分区等信息都在里面

[root@test1 /]# ls /dev/
agpgart          fb0           mqueue              sda1      tty11  tty26  tty40  tty55  ttyS3    vcsa2
autofs           fd            net                 sda2      tty12  tty27  tty41  tty56  uhid     vcsa3
block            full          network_latency     sda3      tty13  tty28  tty42  tty57  uinput   vcsa4
bsg              fuse          network_throughput  sg0       tty14  tty29  tty43  tty58  urandom  vcsa5
btrfs-control    hidraw0       null                sg1       tty15  tty3   tty44  tty59  usbmon0  vcsa6
bus              hpet          nvram               shm       tty16  tty30  tty45  tty6   usbmon1  vfio

5、etc - 配置文件 系统配置文件所在目录、例如/etc/selinux/conf /etc/sysconfig/network-scripts/ifcfg-ens33

[root@test1 /]# ls /etc/
adjtime                  environment         krb5.conf.d               pm              shadow-
aliases                  ethertypes          ld.so.cache               polkit-1        shells
aliases.db               exports             ld.so.conf                popt.d          skel
alternatives             favicon.png         ld.so.conf.d              postfix         ssh

6、home - 家目录 普通用户的家目录

[root@test1 /]# useradd xxh 
[root@test1 /]# ls /home/
xxh

7、lib、lib64 - 库文件 库文件、类似于windows的.dll文件 lib存放32位的库文件 lib64存放64位的库文件

[root@test1 /]# ls /lib64
alsa-lib                                    libguestlib.so.0.0.0              libprocps.so.4.0.0
audit                                       libhandle.so.1                    libproxy
cracklib_dict.hwm                           libhandle.so.1.0.3                libproxy.so.1

8、media - 媒介文件 可移动媒介文件存放目录 例如挂载的光盘为/media/cdrom 默认为空

9、mnt - 挂载目录 挂载目录、一般临时添加的盘或者目录可以挂载在这里 默认为空

10、opt - 附加软件安装目录 可选的附加软件安装目录、例如lampp就会默认安装在这个目录 默认为空

11、proc - 进程相关目录 包含系统进程的相关文件 例如/proc/[pid] 包含着与对应pid相关的文件的信息

[root@test1 /]# ls /proc
1     19    2213  26   281  39   43   7          cgroups      filesystems  kpagecount  net        
10    2     222   260  282  40   467  8          cmdline      fs           kpageflags  
1089  20    228   262  283  400  487  813        consoles     interrupts   loadavg     partitions 

12、root - 家目录 root用户的家目录

13、run - 进程临时文件 进程所产生的临时文件都在该目录、当机器关机所有该目录下的文件都会被清空

14、sbin - 二进制文件 存放着系统二进制文件、该目录里的命令只有root用户才能执行

[root@test1 /]# ls /sbin/
accessdb              e2fsck                     ip                 nl-pktloc-lookup            sendmail.postfix
addgnupghome          e2image                    ip6tables          nl-qdisc-add                service
addpart               e2label                    ip6tables-restore  nl-qdisc-delete             sestatus

15、srv - 服务数据 存放着与服务器相关的数据 默认为空

16、sys - 内核文件 存放系统内核相关的文件、一般不常用

17、tmp - 临时目录 该目录的权限比较大、所有用户都能在里面写数据

18、usr - 用户程序 包含二进制文件、库文件、文档和二级程序的源代码、大多数自己安装的文件都存放在/usr/local下

[root@test1 /]# ls /usr/
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp

19、var - 变量文件 var代表变量文件、许多系统的日志都可以在该目录下/var/log找到 这个目录下可以找到内容可能增长的文件。 这包括 - 系统日志文件(/var/log);包和数据库文件(/var/lib);电子邮件(/var/mail);打印队列(/var/spool);锁文件(/var/lock);多次重新启动需要的临时文件(/var/tmp)

*[几个比较重要的linux目录文件]

├── bin -> usr/bin          /*一般用户的二进制文件
├── boot
├── dev                     /*设备文件
├── etc                     /*配置文件
├── home                    /*一般用户的家目录
├── lib -> usr/lib
├── lib64 -> usr/lib64      /*64位库文件
├── media
├── mnt
├── opt
├── proc                    /*进程相关目录(重要的有/proc/[pid])
├── root                    /*root用户的家目录
├── run
├── sbin -> usr/sbin        /*超级用户的二进制文件
├── srv
├── sys
├── tmp                     /*临时目录(该目录有stick_bit特殊权限)
├── usr                     /*用户程序目录(重要的有usr/local)
└── var                     /*变量文件(重要的有/var/log /var/mail)

文件类型

文件类型: Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。 Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等 linux常见文件类型与对应符号:

-:普通文件、二进制文件
c:字符串设备(TTY、键盘鼠标等)
s:套接口文件
b:块设备文件(硬盘)
d:目录
l:软连接文件

ls命令

ls命令: 显示文件或目录的信息

用法: ls [选项]... [文件]...

常用参数:

-a:显示所有文件文件夹(包括隐藏的文件)
-l:显示文件的详细信息
-t:显示的文件以文件的修改时间排序
-h:以易读的方式显示文件的大小单位
-i:显示文件的inode号
-r:以倒序的方式显示文件详细信息

例子:

1、显示文件的详细信息

[root@test1 ~]# ls -l
总用量 4
-rw-------. 1 root root 1424 10月 14 07:14 anaconda-ks.cfg

2、显示文件的详细信息、并以易读的方式显示文件大小

总用量 4.0K
-rw-------. 1 root root 1.4K 10月 14 07:14 anaconda-ks.cfg

3、显示文件的inode号

[root@test1 ~]# ls -i
33574979 anaconda-ks.cfg  50696917 dir  33957379 test

4、显示文件的详细信息并以mtime排序

[root@test1 ~]# ls -lht
总用量 4.0K
-rw-r--r--. 1 root root    0 10月 18 07:34 test
drwxr-xr-x. 2 root root    6 10月 18 07:34 dir
-rw-------. 1 root root 1.4K 10月 14 07:14 anaconda-ks.cfg

ls -l 每一列所代表的含义:

alias命令

alias命令: 用于设置别名

用法: alias [别名]=[指令]

例子:

1、查看目前已经设置的别名:

[root@test1 ~]# alias           /*直接输入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=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'

2、设置一个新的别名:

[root@test1 ~]# alias xxh='echo "test"'             /*使用alias命令增加一个别名
[root@test1 ~]# xxh                                 /*使用别名直接得到了echo test
test
[root@test1 ~]# 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=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'
alias xxh='echo "test"'                             /*这个就是新增的别名

3、取消一个别名:

[root@test1 ~]# unalias xxh                         /*使用unalias命令取消别名xxh
[root@test1 ~]# xxh
-bash: xxh: 未找到命令                              /*成功取消别名
[root@test1 ~]# 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=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/.ssh/authorized_keys

相对路径: 相对当前目录的一个路径 例如:

[root@test1 ~]# pwd                             /*当前所在路径为/root
/root
[root@test1 ~]# ls .ssh/authorized_keys         /*相对于所在目录/root ls当前路径下.ssh文件夹下的文件不需要填完整路径
.ssh/authorized_keys
[root@test1 ~]# ls /root/.ssh/authorized_keys 
/root/.ssh/authorized_keys

cd命令

cd命令: 用作切换目录

用法: cd [目标目录]

cd命令特殊字符作用:

-:回到上一次目录 ~:进入当前用户的家目录 ..:返回上一级目录、最多回到/下 .:当前目录

例子:

1、使用cd命令进入到/etc目录

[root@test1 ~]# cd /etc
[root@test1 etc]# pwd           /*pwd命令可以查看当前所在路径
/etc

2、使用cd命令返回上一级目录

[root@test1 etc]# cd ../
[root@test1 /]# pwd
/

3、使用cd命令返回root用户家目录

[root@test1 /]# cd ~
[root@test1 ~]# pwd
/root

mkdir、rmdir命令

mkdir命令: 创建一个或多个目录

用法: mkdir [选项]... 目录...

常用参数:

-r:递归创建目录
-p:创建一个目录、并创建其中的子目录

例子:

1、使用mkdir创建一个目录

[root@test1 ~]# ll
总用量 4
-rw-------. 1 root root 1424 10月 14 07:14 anaconda-ks.cfg
[root@test1 ~]# mkdir test
[root@test1 ~]# ll
总用量 4
-rw-------. 1 root root 1424 10月 14 07:14 anaconda-ks.cfg
drwxr-xr-x  2 root root    6 10月 19 08:21 test

2、使用mkdir创建一个目录test、并在其中建立test1、test2、test3三个目录

[root@test1 ~]# mkdir -p test/{test1,test2,test3}           /*使用-p参数时要使用{}要将创建的次级目录括起来并且用,分割
[root@test1 ~]# ll
总用量 4
-rw-------. 1 root root 1424 10月 14 07:14 anaconda-ks.cfg
drwxr-xr-x  5 root root   45 10月 19 08:22 test
[root@test1 ~]# ll test
总用量 0
drwxr-xr-x 2 root root 6 10月 19 08:22 test1
drwxr-xr-x 2 root root 6 10月 19 08:22 test2
drwxr-xr-x 2 root root 6 10月 19 08:22 test3

rmdir命令: 删除指定的空目录

用法: rmdir [选项]... 目录...

常用参数:

-p:删除指定目录及其上级文件夹

例子:

1、使用rmdir命令删除一个空目录

[root@test1 ~]# mkdir 111
[root@test1 ~]# ll
总用量 4
drwxr-xr-x  2 root root    6 10月 20 07:17 111
-rw-------. 1 root root 1424 10月 14 07:14 anaconda-ks.cfg
drwxr-xr-x  5 root root   45 10月 19 08:22 test
[root@test1 ~]# rmdir 111/
[root@test1 ~]# ll
总用量 4
-rw-------. 1 root root 1424 10月 14 07:14 anaconda-ks.cfg
drwxr-xr-x  5 root root   45 10月 19 08:22 test

2、rmdir不能删除非空目录

[root@test1 ~]# mkdir 111
[root@test1 ~]# touch 111/123
[root@test1 ~]# rmdir 111/
rmdir: 删除 "111/" 失败: 目录非空

3、使用rmdir删除指定空目录及上级文件

[root@test1 ~]# mkdir -p test/test2/test3
[root@test1 ~]# tree /root
/root
├── 111
│   └── 123
├── anaconda-ks.cfg
└── test
    └── test2
        └── test3

4 directories, 2 files
[root@test1 ~]# rmdir -p test/test2/test3/
[root@test1 ~]# tree
.
├── 111
│   └── 123
└── anaconda-ks.cfg

rm命令

rm命令: 删除目录或者文件

用法: rm [选项]... 文件...

常用参数:

-f:强制删除目录或文件、就算没有该文件或目录也不会提示错误
-r:删除目录时加上该参数
-v:显示删除文件的详细信息

例子:

rm命令删除目录:

[root@test1 ~]# ll
总用量 4
drwxr-xr-x  2 root root   17 10月 20 07:18 111
-rw-------. 1 root root 1424 10月 14 07:14 anaconda-ks.cfg
[root@test1 ~]# rm 111/                         /*由于没加r参数rm命令无法删除目录
rm: 无法删除"111/": 是一个目录
[root@test1 ~]# rm -r 111/                      /*加了-r参数之后可以删除目录
rm:是否进入目录"111/"? y                       
rm:是否删除普通空文件 "111/123"?y             /*rm命令在删除目录时先删除目录里的文件再删除目录
rm:是否删除目录 "111/"?y

rm命令强制删除文件并显示详细信息:

[root@test1 ~]# mkdir test                  /*创建一个test目录
[root@test1 ~]# touch test/1.txt            /*在test目录下创建1.txt与2.txt两个普通文件
[root@test1 ~]# touch test/2.txt
[root@test1 ~]# tree /root
/root
├── anaconda-ks.cfg
└── test
    ├── 1.txt
    └── 2.txt

1 directory, 3 files
[root@test1 ~]# rm -rfv test/               /*使用r参数删除test目录、f参数强制删除、v参数显示详细信息
已删除"test/1.txt"                          /*先删除文件、再删除目录
已删除"test/2.txt"
已删除目录:"test/"

环境变量PATH

PATH: 在Linux中,PATH是一个环境变量、当我们输入任何指令时其实就是在PATH中查找该文件并执行、如果需要一个自定义的命令能直接执行、就需要将该命令的路径增加在PATH中。

查看PATH信息:

[root@test1 ~]# echo $PATH              /*PATH的路径以:为分割符、每一段代表一个路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

自定义新的命令、并增加在PATH中:

[root@test1 ~]# which ls                /*使用which命令同样是在PATH中寻找命令
alias ls='ls --color=auto'
	/usr/bin/ls
[root@test1 ~]# cp /usr/bin/ls /root/ls2    /*使用cp命令将ls命令复制在/root下并改名为ls2
[root@test1 ~]# ls /root                    
anaconda-ks.cfg  ls2
[root@test1 ~]# ls2                         /*由于为增加环境变量直接输入ls2时提示未找到命令
-bash: ls2: 未找到命令
[root@test1 ~]# PATH=$PATH:/root            /*设置PATH信息增加环境变量
[root@test1 ~]# ls2
anaconda-ks.cfg  ls2
[root@test1 ~]# ls2 -l                      /*增加环境变量后能直接使用ls2命令了
总用量 120
-rw-------. 1 root root   1424 10月 14 07:14 anaconda-ks.cfg
-rwxr-xr-x  1 root root 117656 10月 21 06:28 ls2

编辑/etc/profile文件使得所有用户修改的PATH信息完全生效:

[root@test1 ~]# vi /etc/profile             /*使用vi命令编辑profile文件
PATH=$PATH:/root                            /*在文件末尾增加PATH=$PATH:/root

cp命令

cp命令: 拷贝一个目录或文件

用法: cp [选项]... 源文件 目标文件

常用参数:

-r:拷贝目录时必须加上这个参数、否则会略过目录
-i:拷贝文件时如果目标文件已存在、系统会提示是否覆盖

例子:

1、拷贝目录

[root@test1 tmp]# mkdir test/                   /*新建一个目录test
[root@test1 tmp]# ll        
总用量 0
drwxr-xr-x 2 root root 6 10月 24 06:11 test
[root@test1 tmp]# cp test/ test2/               /*由于没有加-r参数无法拷贝目录
cp: 略过目录"test/"
[root@test1 tmp]# cp -r  test/ test2/           /*加了-r参数后目录被成功复制
[root@test1 tmp]# ll
总用量 0
drwxr-xr-x 2 root root 6 10月 24 06:11 test
drwxr-xr-x 2 root root 6 10月 24 06:11 test2

2、复制文件时不提示是否覆盖、直接覆盖源文件

[root@test1 tmp]# tree 
.
├── test
│   ├── 1
│   ├── 2
│   └── 3
└── test2
    └── test
        ├── 1
        ├── 2
        └── 3

3 directories, 6 files
[root@test1 tmp]# cp -r test/ test2/            /*直接使用cp命令 由于目标文件已存在所以每一个文件都会提示是否覆盖
cp:是否覆盖"test2/test/1"? y
cp:是否覆盖"test2/test/2"? y
cp:是否覆盖"test2/test/3"? y
[root@test1 tmp]# which cp                      /*使用which命令查看cp命令默认有加-i参数
alias cp='cp -i'                
	/usr/bin/cp
[root@test1 tmp]# /usr/bin/cp -r  test/ test2/      /*使用cp命令绝对路径执行命令不使用别名
[root@test1 tmp]# tree                              /*由于没有使用-i命令、文件默认被覆盖了
.
├── test
│   ├── 1
│   ├── 2
│   └── 3
└── test2
    └── test
        ├── 1
        ├── 2
        └── 3

mv命令

mv命令: 将源文件重命名为目标文件,或将源文件移动至指定目录。

用法: mv [选项]... 源文件... 目录

常用参数:

-i:拷贝文件时如果目标文件已存在、系统会提示是否覆盖

例子:

1、使用mv命令给文件改名

[root@test1 tmp]# mkdir 1                   /*创建一个目录1
[root@test1 tmp]# ll
总用量 0
drwxr-xr-x 2 root root 6 10月 24 06:30 1
[root@test1 tmp]# mv 1 2                    /*将1目录改名为2
[root@test1 tmp]# ll
总用量 0
drwxr-xr-x 2 root root 6 10月 24 06:30 2

2、使用mv命令移动文件

[root@test1 tmp]# tree
.
├── 2
└── 2.txt

1 directory, 1 file
[root@test1 tmp]# mv 2.txt 2/               /*mv命令如果目标目录存在则是复制、不存在就是改名
[root@test1 tmp]# tree
.
└── 2
    └── 2.txt

文档查看

cat命令

cat命令: 将文件得内容输出到屏幕上

用法: cat [选项] [文件]...

常用参数:

-n:输出文件内容时显示行号
-E:输出文件时显示行尾符

例子:

1、使用cat命令显示文档的所有内容

[root@test1 ~]# cat 1.txt                   /*cat命令不加任何参数默认显示文档的所有内容 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# System language
lang zh_CN.UTF-8

2、使用cat命令显示文档的所有内容并显示行号

[root@test1 ~]# cat -n 1.txt 
     1	#version=DEVEL
     2	# System authorization information
     3	auth --enableshadow --passalgo=sha512
     4	# Use CDROM installation media
     5	cdrom
     6	# Use graphical install
     7	graphical
     8	# System language
     9	lang zh_CN.UTF-8

3、使用cat命令显示文档的所有内容并显示行尾符

[root@test1 ~]# cat -E 1.txt 
#version=DEVEL$                             /*liunx系统的行尾符号为$
# System authorization information$
auth --enableshadow --passalgo=sha512$
# Use CDROM installation media$
cdrom$
# Use graphical install$
graphical$
# System language$
lang zh_CN.UTF-8$

more命令

more命令: 一屏一屏的显示文件的内容

用法: more ...[文件] {space 向下翻页 ctrl+b 向上翻页}

例子:

1、使用more命令查看一个文件

# System timezone                   /*此时文件的内容只显示了一部分如果要继续查看剩余内容可按space翻页
timezone Asia/Shanghai --isUtc --nontp  /*space是向下翻页 ctrl+b是向上翻页
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
--More--(60%)

less命令

less命令: 类似于more命令按屏显示文档内容

用法: less ...[文件] {↑ 向上翻页 ↓ 向下翻页 / 高亮显示匹配内容 ?高亮显示匹配内容并逆向显示 G移动到行尾 g移动到行首}

例子: 1、使用less显示文本内容

# Root password
rootpw --iscrypted $6$s/JdMqBHIPZP5D53$s3sTokJeonMq7qnq9rN7rqffyWoE7lrHQJ46hvebyaYo3tjQlKXG5HUu2.c.X5oyMlc36z3tRpT52VgxfR9Qd.
# System services                   /*在这个界面按方向键↑ ↓可以向上 向下翻页
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information

2、使用less显示文本内容并使用/高亮显示关键字

%anaconda
pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --notempty     /*这里的root在终端里是高亮的
pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --notempty
/root

head命令

head命令: 显示一个文档的头10行内容

用法: head ...[选项]...[文件]

常用参数:

-n:显示文档的头N行内容

例子:

1、显示文档的头10行内容

[root@test1 ~]# head anaconda-ks.cfg        /*head命令不加任何参数默认显示头10行内容
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda

2、显示文档的头3行内容

[root@test1 ~]# head -3 anaconda-ks.cfg         /*head命令后可以直接输入-跟数字显示头n行内容
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
[root@test1 ~]# head -n3 anaconda-ks.cfg        /*也可以-n加数字显示
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512

tail命令

tail命令: 显示一个文档的后10行

用法: tail...[选项]...[文件]

常用参数:

-n:显示文档中的后N行
-f:动态显示文档(多用于显示)

例子:

1、使用tail命令显示文档的后10行内容

[root@test1 ~]# tail /etc/passwd            /*跟head一样、不加任何参数默认显示10行
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
xxh:x:1000:1000::/home/xxh:/bin/bash

2、使用tail显示文档的后3行内容

[root@test1 ~]# tail -n 3 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
xxh:x:1000:1000::/home/xxh:/bin/bash
[root@test1 ~]# tail -3 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
xxh:x:1000:1000::/home/xxh:/bin/bash

3、使用tail动态显示文档内容

[root@test1 ~]# tail -f /var/mail/root
X-Cron-Env: 
Message-Id: <[email protected]>
Date: Wed, 25 Oct 2017 09:49:01 +0800 (CST)
Teamlink client "gnLan_64" is already started. Its status:

Linux权限

Linux文件的一般权限

用户组: linux中所有的用户都必须属于一个所属组、不能独立于组外、而用户组又分为所属主、所属组、其他组。

  • 所属主:就是文件的所有者、一般文件的所有者就是这个文件的创建者也可以使用chown命令修改文件所有者。
  • 所属组:就是文件的所有组、一般文件的所有组就是这个文件的创建着所在的组、也可以使用chgrp修改文件所属组。
  • 其他组:除开文件的所有者、所属组外、其他的就是文件的其他组。

文件的权限: 使用ls -l可以查看一个文件或目录的权限

[root@test1 ~]# ls -l
总用量 4
drwxr-xr-x. 2 root root   69 10月 21 07:16 teamlink_linux_3.3.1
---------------------------------------------------------------------
- 前10个字符代表着不同的含义。
- 第一个字符代表文件的类型 目录(d)、一般文件(-)、软链接文件(l)。
- 后面9个字符3列为一组分别代表文件所属主、所属组、其他组的权限 权限分别由r(可读)、w(可写)、x(可执行)表示。
- rwx代表可读可写可执行、r-x代表可读可执行、不同的权限可以用不同的数字代表r(4)、w(2)、x(1)。
- 同要的rwx可以用数字来表示r(4)+w(2)+x(1)=7、r-x可以用r(4)+x(1)=5
- 第10个字符如果有.代表该文件受制于selinux。
- 数字2代表与该文件拥有相同inode的文件数
- 第一个root代表文件的所属主、第二个root代表该文件的所属主
---------------------------------------------------------------------

使用chmod命令修改文件的权限

chmod命令: 修改文件或目录的权限

用法: chmod [选项]... [权限] 文件...

操作对像

   u 文件属主权限
   g 同组用户权限
   o 其它用户权限
   a 所有用户(包括以上三种)

权限设定

   + 增加权限
   - 取消权限
   =  唯一设定权限

权限类别

   r 读权限
   w 写权限
   x 执行权限
   X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
   s 文件属主和组id
   l 给文件加锁,使其它用户无法访问

   r-->4
   w-->2
   x-->1

常用参数:

-R:递归修改目录及目录下的文件的权限

例子:

1、使用字母的方式修改、增加、减去文件的权限

[root@test1 tmp]# ll
总用量 0
-rw-r--r-- 1 root root 0 10月 26 08:00 test     /*test文件的默认权限
[root@test1 tmp]# chmod u=rwx,g=rx,o=- test   /*注意使用全字母表示每个用户组的权限时如果包含-不需要写
[root@test1 tmp]# ll
总用量 0
-rwxr-x--- 1 root root 0 10月 26 08:00 test
[root@test1 tmp]# chmod u-x,g-x,o+r test        /*也可以使用算数的形式+-任何用户组的权限
[root@test1 tmp]# ll
总用量 0
-rw-r--r-- 1 root root 0 10月 26 08:02 test
[root@test1 tmp]# chmod a-r test                /*a表示所有用户都减去r权限
[root@test1 tmp]# ll
总用量 0
--w------- 1 root root 0 10月 26 08:02 test

2、使用数字的形式修改文件的权限

[root@test1 tmp]# ll
总用量 0
--w------- 1 root root 0 10月 26 08:02 test
[root@test1 tmp]# chmod 777 test     /*使用数字修改权限时只要记住每个数字代表的含义即可
[root@test1 tmp]# ll         /*第一个数字代表所属主、第二个数字代表所属组、第三个数字代表其他用户
总用量 0
-rwxrwxrwx 1 root root 0 10月 26 08:02 test
[root@test1 tmp]# chmod 712 test    /* rwx(7)=r(4)+w(2)+x(1) x=1  w=2
[root@test1 tmp]# ll
总用量 0
-rwx--x-w- 1 root root 0 10月 26 08:02 test

3、使用chmod命令批量修改目录及其文件权限

[root@test1 tmp]# ls -Rl        /*ls -R参数可以递归显示目录及其文件内容的信息
.:
总用量 0
drwxr-xr-x 2 root root 45 10月 26 08:10 dir /*dir目录跟3个普通文件的权限并不同

./dir:
总用量 0
-rw-r--r-- 1 root root 0 10月 26 08:10 1.txt
-rw-r--r-- 1 root root 0 10月 26 08:10 2.txt
-rw-r--r-- 1 root root 0 10月 26 08:10 3.txt
[root@test1 tmp]# chmod -R 777 dir/     /*使用chmod -R参数递归修改权限
[root@test1 tmp]# ls -Rl            /*dir目录及其3个文件的权限全部被修改为了777
.:
总用量 0
drwxrwxrwx 2 root root 45 10月 26 08:10 dir

./dir:
总用量 0
-rwxrwxrwx 1 root root 0 10月 26 08:10 1.txt
-rwxrwxrwx 1 root root 0 10月 26 08:10 2.txt
-rwxrwxrwx 1 root root 0 10月 26 08:10 3.txt

使用chown修改文件的所属主、所属组

chown命令: 修改文件的所有者、所属主

用法: chown [选项]... [所有者][:[组]] 文件...

常用参数:

-R:递归修改目录及其文件的所属主、所属组。

例子: 1、使用chown命令修改文件的所属主

[root@test1 tmp]# useradd user1         /*使用useradd命令增加一个用户user1
[root@test1 tmp]# ll
总用量 0
-rw-r--r-- 1 root root 0 10月 26 08:22 test     /*test文件的所属主开始为root
[root@test1 tmp]# chown user1 test                  /*chown命令不带冒号(:)时、默认是修改所属主
[root@test1 tmp]# ll
总用量 0
-rw-r--r-- 1 user1 root 0 10月 26 08:22 test        /*test文件的所属主被修改为user1

2、使用chown命令修改文件的所属组

[root@test1 tmp]# ll
总用量 0
-rw-r--r-- 1 user1 root 0 10月 26 08:22 test
[root@test1 tmp]# chown :user1 test                 /*使用chown命令时如果直接使用冒号(:)则是修改文件的所属组
[root@test1 tmp]# ll
总用量 0
-rw-r--r-- 1 user1 user1 0 10月 26 08:22 test
[root@test1 tmp]# chgrp root test               /*同样的 chgrp命令也可以修改文件的所属组
[root@test1 tmp]# ll
总用量 0
-rw-r--r-- 1 user1 root 0 10月 26 08:22 test

3、使用chown命令同时修改文件的所属主与所属组

[root@test1 tmp]# ll
总用量 0
-rw-r--r-- 1 root root 0 10月 26 08:26 test
[root@test1 tmp]# chown user1:user1 test 
[root@test1 tmp]# ll
总用量 0
-rw-r--r-- 1 user1 user1 0 10月 26 08:26 test

4、使用chown命令递归修改目录及其文件所属主

[root@test1 tmp]# ls -Rl 
.:
总用量 0
drwxr-xr-x 2 root root 32 10月 26 08:27 dir

./dir:
总用量 0
-rw-r--r-- 1 root root 0 10月 26 08:27 1.txt
-rw-r--r-- 1 root root 0 10月 26 08:27 2.txt
[root@test1 tmp]# chown -R user1 dir/
[root@test1 tmp]# ls -Rl 
.:
总用量 0
drwxr-xr-x 2 user1 root 32 10月 26 08:27 dir

./dir:
总用量 0
-rw-r--r-- 1 user1 root 0 10月 26 08:27 1.txt
-rw-r--r-- 1 user1 root 0 10月 26 08:27 2.txt

新建文件权限掩码umask

umask: 当新文件被创建时,其最初的权限由文件创建掩码决定、当创建目录或者时文件时它们的默认权限都是不同的。

umask命令: 用来修改系统默认的umask值。

用法: umask [umask值]

例子: 1、查看系统当前的umask值

[root@test1 tmp]# umask             /* umask命令不加任何参数默认是查看系统的umask值
0022

2、修改系统的umask值

[root@test1 tmp]# umask 0021
[root@test1 tmp]# umask 
0021

3、umask值与新建目录与文件的关系

[root@test1 tmp]# umask 
0021
[root@test1 tmp]# mkdir dir
[root@test1 tmp]# touch test
[root@test1 tmp]# ll
总用量 0
drwxr-xrw- 2 root root 6 10月 26 08:44 dir
-rw-r--rw- 1 root root 0 10月 26 08:44 test
-------------------------------------------------
目录:777(rwxrwxrwx)-021(----w---x)=756(rwxr-xrw-)
文件:666(rw-rw-rw-)-021(----w---x)=646(rw-r--rw-)
注释:创建新的文件时、目录默认为777-umask值 文件默认为666-umask值
    但是这里的减不能用单纯的数学的方法来减、而是要一位一位的对应来减得到的字母组合才是真正的权限
-------------------------------------------------

隐藏权限的查看(lsattr)与修改(chattr)

隐藏权限: Linux操作系统可以给文件或者目录设置隐藏权限、使文件实现不会被删除、不会被修改等功能。

lsattr命令: 查看文件的隐藏权限。

用法: lsattr...[文件]

常用参数:

 -d:可查看目录的特殊权限
 -R:可查看子目录的所有文件的特殊权限
 -a:连同隐藏文件的权限全部显示出来

例子: 1、查看一般文件的隐藏权限

[root@test1 tmp]# ls -l         /*ls -l命令只能查看文件的一般权限、特殊权限无法查看隐藏权限
总用量 0
-rw-r--rw- 1 root root 0 10月 26 09:19 1.txt
[root@test1 tmp]# lsattr 1.txt      /*使用lsattr命令查看1.txt文件的隐藏权限
---------------- 1.txt

2、查看目录的隐藏权限

[root@test1 tmp]# mkdir dir
[root@test1 tmp]# lsattr dir/
[root@test1 tmp]# lsattr -d dir/        /*由于dir文件是一个目录  不加-d参数是无法显示隐藏权限信息的
---------------- dir/

3、递归查看目录及其所有文件的隐藏权限

[root@test1 tmp]# lsattr -R /root/      /*类似于ls -R lsattr命令也可以递归查看目录下所有文件的隐藏权限
---------------- /root/anaconda-ks.cfg
---------------- /root/teamlink_linux_3.3.1

/root/teamlink_linux_3.3.1:
---------------- /root/teamlink_linux_3.3.1/GNLanCtl
---------------- /root/teamlink_linux_3.3.1/Readme.txt
---------------- /root/teamlink_linux_3.3.1/gnLan_64
---------------- /root/teamlink_linux_3.3.1/gnLan

chattr命令: 修改文件的特殊权限

用法: chattr...[选项]...[文件]

常用参数:

-R:以递归的形式增加或者删除目录下所有文件的隐藏权限。

各隐藏权限作用:

A:增加该属性后,文件或目录的atime将不能修改
S:增加该属性后,会将数据同步写入磁盘中
a:增加该属性后,只能追加不能删除,只有root用户能设置该权限
c:自动压缩该文件,读取时会自动解压
i:增加该属性后,文件不能被删除,重命名,增加写入数据,设定软连接

例子: 1、为文件增加特殊权限(i)使得不被删除、修改、重命名

[root@test1 tmp]# touch 1.txt
[root@test1 tmp]# echo "123" >1.txt         /*一个大于符号(>)表示重定向把1.txt的内容全部清空、然后写入内容123
[root@test1 tmp]# cat 1.txt 
123
[root@test1 tmp]# chattr +i 1.txt 
[root@test1 tmp]# cat 1.txt 
123
[root@test1 tmp]# echo "456" >> 1.txt 
-bash: 1.txt: 权限不够
[root@test1 tmp]# lsattr 1.txt          /*由于1.txt文件增加了i隐藏权限、所以不能追加内容
----i----------- 1.txt

2、为文件增加特殊权限(a)使得文件内容只能追加不能删除

[root@test1 tmp]# chattr +a 1.txt 
[root@test1 tmp]# echo "456" >>1.txt    /* 两个>>表示重定向 不删除原来内容的情况下继续往里面追加内容
[root@test1 tmp]# echo "456" >>1.txt 
[root@test1 tmp]# cat 1.txt 
123
456
456
[root@test1 tmp]# echo "456" >1.txt     
-bash: 1.txt: 不允许的操作
[root@test1 tmp]# cat 1.txt 
123
456
456
[root@test1 tmp]# lsattr 1.txt      /* 由于1.txt文件增加了a特殊权限、文件内容只能增加不能删除
-----a---------- 1.txt

特殊权限

一般权限与特殊权限详解:

SUID

set_uid权限: 当普通用户执行拥有set_uid权限的二进制文件时、可使普通用户临时拥有root权限来执行这个命令。

SUID作用例子:

[root@test1 ~]# ls -l /etc/passwd /etc/shadow /usr/bin/passwd 
-rw-r--r--  1 root root  1038 10月 26 08:22 /etc/passwd         /*passwd用于存放用户的信息
----------  1 root root   669 10月 26 08:22 /etc/shadow         /*shadow用于存放用户的密码
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd      /*passwd命令拥有特殊权限位s
-------------------------------------------------------------
1、shadow文件用来存放用户的密码、所以权限很低、但是root用户在linux中拥有最高权限、所以可以对其编辑
2、可以看到passwd文件与shadow文件在other位都不拥有执行权限
3、一般用户能通过passwd命令修改自己的密码、就是因为passwd命令(二进制文件)拥有SUID特殊权限
-------------------------------------------------------------
现在我们用ls命令演示一下SUID的作用:
[root@test1 ~]# ls /root/                   /*当前用户为root 可以正常ls /root目录
anaconda-ks.cfg  teamlink_linux_3.3.1
[root@test1 ~]# su - user1                  /*使用su命令切换到一般用户user1
[user1@test1 ~]$ ls /root/                  /*由于/root目录的权限比较严谨、一般用户无法ls里面的内容
ls: 无法打开目录/root/: 权限不够
[user1@test1 ~]$ su - root                  /*使用su命令切换到root用户
[root@test1 ~]# chmod u+s /usr/bin/ls       /*使用chmod命令为user位增加s权限(SUID)、同样可以使用chmod 4755来为ls命令增加SUID权限
[root@test1 ~]# ls -l /usr/bin/ls           /*为ls命令增加了SUID后root用户还是能正常ls /root目录
-rwsr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls
[root@test1 ~]# su - user1                  /*切换至普通用户user1
上一次登录:五 10月 27 06:30:41 CST 2017pts/0 上
[user1@test1 ~]$ ls /root/                  /*由于ls命令被增加了SUID权限、一般用于在执行该命令时以root用户的权限执行该命令
anaconda-ks.cfg  teamlink_linux_3.3.1       /* /root目录下的文件能使用一般用户ls了

SGID

set_gid特殊权限: set_gid特殊权限可作用在文件与目录上、当作用在文件上时、普通用户执行该文件时会以该文件的所属主的身份执行该命令(作用与SUID类似)、当作用在目录上时、新创建的文件的所属组跟设置了SGID的目录相同。

SGID作用例子:

1、sgid作用于文件:

root@test1 sgid]# ls  /root/
anaconda-ks.cfg  teamlink_linux_3.3.1
[root@test1 sgid]# su - user1
上一次登录:五 10月 27 06:32:24 CST 2017pts/0 上
[user1@test1 ~]$ ls /root
ls: 无法打开目录/root: 权限不够
[user1@test1 ~]$ su -
密码:
上一次登录:五 10月 27 06:38:08 CST 2017pts/0 上
[root@test1 ~]# chmod g+s /usr/bin/ls
[root@test1 ~]# ls /root/
anaconda-ks.cfg  teamlink_linux_3.3.1
[root@test1 ~]# su user1
[user1@test1 root]$ ls /root
anaconda-ks.cfg  teamlink_linux_3.3.1
[user1@test1 root]$ ls -l /usr/bin/ls
-rwxr-sr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls
------------------------------------------------------
1、上面这个例子就跟SUID类似、不同的是一般用户执行ls命令时是以该文件的所属组的身份执行的该命令
------------------------------------------------------

2、sgid作用于目录:

[root@test1 /]# mkdir /sgid
[root@test1 /]# ls -ld !$
ls -ld /sgid
drwxr-xr-x 2 root root 6 10月 27 06:57 /sgid        /*sgid目录默认所属主root 所属组root
[root@test1 /]# touch /sgid/1
[root@test1 /]# ls -ld /sgid/ && ls -l /sgid/       
drwxr-xr-x 2 root root 15 10月 27 06:57 /sgid/
总用量 0
-rw-r--r-- 1 root root 0 10月 27 06:57 1            /*用root用户新建一个文件时所属主、组还是root
[root@test1 /]# chown :user1 /sgid/                 /*修改sgid目录的所属组为user1
[root@test1 /]# ls -d /sgid/
/sgid/
[root@test1 /]# ls -ld /sgid/
drwxr-xr-x 2 root user1 15 10月 27 06:57 /sgid/
[root@test1 /]# touch /sgid/2                       
[root@test1 /]# ls -ld /sgid && ls -l /sgid/
drwxr-xr-x 2 root user1 24 10月 27 06:59 /sgid
总用量 0
-rw-r--r-- 1 root root 0 10月 27 06:57 1
-rw-r--r-- 1 root root 0 10月 27 06:59 2            /*root用户创建一个新文件的所属主、组还是root
[root@test1 /]# chmod g+s /sgid/                    /*为sgid目录增加特殊权限SGID
[root@test1 /]# touch /sgid/3
[root@test1 /]# ls -ld /sgid && ls -l /sgid/
drwxr-sr-x 2 root user1 33 10月 27 06:59 /sgid
总用量 0
-rw-r--r-- 1 root root  0 10月 27 06:57 1
-rw-r--r-- 1 root root  0 10月 27 06:59 2
-rw-r--r-- 1 root user1 0 10月 27 06:59 3           /*由于该目录增加了SGID特殊权限、root用户创建的新文件所属组不再是root、变成了跟sgid目录一样的user1

Stick_bit

Stick_bit: 又叫做防删除位、在拥有该权限的目录下、用户自己创建的文件只有该用户本身可以删除、别的用户只能修改、不能删除

例子:

[root@test1 /]# mkdir stick                         /*创建一个目录stick
[root@test1 /]# chmod 1777 stick/                   /*将目录stick的权限修改为1777
[root@test1 /]# ls -ld !$
ls -ld stick/
drwxrwxrwt 2 root root 6 10月 27 07:17 stick/       /*目录stick拥有stick_bit特殊权限
[root@test1 /]# su - user1                          /*切换至用户user1并在stick目录下新建一个文件
[user1@test1 ~]$ cd /stick/                           1.txt、并将权限设置为777 */
[user1@test1 stick]$ touch 1.txt
[user1@test1 stick]$ chmod 777 1.txt 
[user1@test1 stick]$ su - user2                     /*切换至用户user2
密码:
上一次登录:五 10月 27 07:16:47 CST 2017pts/0 上
[user2@test1 ~]$ cd /stick/
[user2@test1 stick]$ ll
总用量 0
-rwxrwxrwx 1 user1 user1 0 10月 27 07:18 1.txt      /*按常理777权限user2可以对1.txt文件进行删除
[user2@test1 stick]$ rm 1.txt                         但是由于该文件的上级目录stick拥有特殊权限
rm: 无法删除"1.txt": 不允许的操作                     stick_bit、所以无法删除1.txt*/
[user2@test1 stick]$ su - user1
密码:
[user1@test1 ~]$ rm /stick/1.txt                    /*切换至1.txt文件创建者user1成功删除文件
[user1@test1 ~]$ ll
总用量 0

软链接与硬连接

软链接: 软链接又叫符号链接,类似于windows的快捷方式,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件、软连接可以跨分区、可以作用于文件、目录。

硬连接: 硬链接就是让多个不在或者同在一个目录下的文件名,同时能够修改同一个文件,其中一个修改后,所有与其有硬链接的文件都一起修改了、硬连接的文件的inode号相同、硬连接只能作用于文件、不能作用于目录、且不能跨分区。

ln命令

ln命令: 用来创建一个连接(可以是软连接、也可以是硬连接)

用法: ln...[选项]...[源文件]...[链接文件]

常用参数:

-s:创建一个软链接

例子: 1、创建一个文件的软链接

[root@test1 stick]# ln -s /root/anaconda-ks.cfg  soft_link
[root@test1 stick]# ll
总用量 0
lrwxrwxrwx 1 root root 21 10月 27 08:05 soft_link -> /root/anaconda-ks.cfg
[root@test1 stick]# head -3 soft_link 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512

2、创建一个文件的硬链接

[root@test1 stick]# echo "123" > 1.txt
[root@test1 stick]# cat 1.txt 
123
[root@test1 stick]# ln 1.txt hard_link
[root@test1 stick]# cat hard_link 
123
[root@test1 stick]# echo "456" >> 1.txt 
[root@test1 stick]# cat 1.txt               /*由于1.txt与hard_link互为硬连接、所以修改了任意一个文件的内容、另外一个文件的内容也跟着一起被修改了。
123
456

Linux 常用快捷键

  • ctrl+l 清屏
  • ctrl+d 退出一个终端(相当于exit)、往后删一个字符
  • ctrl+c 取消当前已经输入的命令
  • ctrl+u 把当前光标位置之前的内容全部删掉
  • ctrl+e 把光标移动到当前行最后一项
  • ctrl+a 把光标移动到当前行第一项

文件查找

which命令

which命令: 用于在环境变量PATH中搜索一个命令所在的路径,如果该命令有别名、还会显示其别名。

用法: which...[命令]...

例子:

1、搜索passwd命令所在路径

[root@test1 ~]# which ls
alias ls='ls --color=auto'          /*这一行显示的是命令的别名
	/usr/bin/ls                     /*这一行显示的是命令所在路径

whereis命令

whereis命令: 用来搜索包含关键词的文件或命令。

用法: whereis...[关键词]

例子:

1、搜索包含ls的命令或文件

root:[root@test1 ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

locate命令

locate命令: 在mlocate数据库中所搜索文件

用法: locate...[关键词]

例子:

[root@test1 ~]# yum install -y mlocate              /*使用yum命令安装locate命令
[root@test1 ~]# locate team                         /*由于没有更新数据库、所以搜索不出来
locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录  
locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录
[root@test1 ~]# updatedb                            /*使用updatedb命令更新数据库 
[root@test1 ~]# locate team                         /*更新后就可以搜索关键词
/etc/dbus-1/system.d/teamd.conf                     /*locate算是一个模糊搜索、只要包含关键词的都会搜索出来
/root/teamlink_linux_3.3.1
/root/teamlink_linux_3.3.1/GNLanCtl
/root/teamlink_linux_3.3.1/Readme.txt
/root/teamlink_linux_3.3.1/gnLan
/root/teamlink_linux_3.3.1/gnLan_64

关于文件的3个time

  • atime:最近访问文件的时间 {访问文件时atime就会变化}
  • mtime:最近更改文件的内容的时间{更改了文件的内容mtime、ctime就会变化}
  • ctime:最近改动文件的权限的时间{当修改文件的权限时该时间就会变化}

find命令

find命令: 按照要求查找目录和文件。

用法: find...路径...[命令参数]...[输出形式]

常用参数:

-name:根据文件的名字搜索文件
-type:根据文件类型搜索文件
        b - 块设备文件。
        d - 目录。
        c - 字符设备文件。
        p - 管道文件。
        l - 符号链接文件。
        f - 普通文件。
        s - socket文件
-size:根据文件的大小搜索文件
-o:或者 该命令后可以接别的命令、只要满足其中一个就会被显示出来
-mtime(天):根据文件的修改时间列出文件
-atime(天):根据文件的访问时间列出文件
-ctime(天):根据文件的权限修改时间列出文件
-mmin(分钟):根据文件的修改时间列出文件
-amin(分钟):根据文件的访问时间列出文件
-cmin(分钟):根据文件的权限修改时间列出文件
-inum:以inode为条件进行搜索、一般用于查找一个文件的硬链接
-exec:find命令对匹配的文件执行该参数所给出的其他linux命令 相应命令的形式为' 命令 - and'{} \;,注意{ }和\;之间的空格。
      {} 是-exec的参数,每当find找到一个符合条件的文件名,就将它传递给-exec指定的命令来处理,由于可以使用任何命令,而每个命令的参数形式可能不同,所以就用{}充当占位符,在实际执行过程中,任何出现{}的地方,都会被替换为find找到的实际文件名,然后再执行-exec指定的命令

例子: 1、查找/etc/下以.conf结尾的普通文件

[root@test1 ~]# find / -type f -name "*.conf"
/run/NetworkManager/resolv.conf
/run/tmpfiles.d/kmod.conf
/run/systemd/system/session-473.scope.d/50-SendSIGHUP.conf
/run/systemd/system/session-473.scope.d/50-After-systemd-user-sessions\x2eservice.conf

2、查找/root/下的所有目录

[root@test1 ~]# find /root -type d 
/root
/root/.ssh
/root/teamlink_linux_3.3.1

3、查找/root/下10天前访问过的文件

[root@test1 ~]# find /root/ -atime +10
/root/.cshrc
/root/.tcshrc
/root/.ssh/known_hosts
/root/.ssh/id_rsa
/root/.ssh/id_rsa.pub

4、查找系统中所有inuode号为33574979的文件

[root@test1 ~]# ll -i                       /*先使用ls -i命令获取文件的inode号
total 4
33574979 -rwxrwxrwx. 3 root root 1428 Oct 28 08:24 anaconda-ks.cfg
[root@test1 ~]# find  / -inum 33574979
/root/anaconda-ks.cfg
/1.txt
/2.txt

5、查找/tmp/下所有.txt结尾的文件、并改名为*.txt.bak

[root@test1 tmp]# find /tmp -name "*.txt"           /*先使用find -name找出*.txt文件
/tmp/1.txt
/tmp/2.txt
/tmp/3.txt
[root@test1 tmp]# find /tmp -name "*.txt" -exec mv {} {}.bak \;     /*使用-exec参数可以使find找到的结果直接用后面的命令执行
[root@test1 tmp]# ll
total 0
-rw-r--r-- 1 root root 0 Oct 28 08:52 1.txt.bak
-rw-r--r-- 1 root root 0 Oct 28 08:52 2.txt.bak
-rw-r--r-- 1 root root 0 Oct 28 08:52 3.txt.bak

Linux与windows之间互传文件

在使用xshell时我们可以使用lrzsz工具实现linux与windows之间文件互传。 具体步骤:

1、使用yum工具安装lrzsz工具:
[root@test1 ~]# yum install -y lrzsz 
2、将linux文件下载至本地
[root@test1 ~]# rz  
3、将本地文件上传至linux
[root@test1 ~]# sz  

转载于:https://my.oschina.net/u/3626689/blog/1552188

你可能感兴趣的:(Linux文件、目录管理)