文件、目录管理
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