首先引出Linux中一句比较经典的话。
Linux下一切皆文件。
文件分为:普通文件,目录文件,链接文件,设备文件。
文件描述符定义:是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符;文件描述符是一个简单的非负整数,用以标明每一个被进程所打开的文件,程序刚启动的时候,第一个打开的文件是0,第二个是1…可以理解为是一个文件的身份ID。
输入输出标准说明:
stdin 标准输入 默认的设备键盘 文件编号为:0
stdout 标准输出 默认的设备是显示器 文件编号为:1 ,也可以重定向到文件
stderr 标准错误 默认的设备是显示器 文件编号为:2 ,也可以重定向到文件
查看一个进程打开了哪些文件?
语法:ll /pro/进程ID/fd
例如:
vim /etc/passwd
ps -aux | grep passwd
ll /proc/21582/fd
注意:对文件描述符的操作就是对文件本身的操作。可以通过操作文件描述来修改文件。
ulimit -n #查看一个进程最多可以同时打开的文件数。
ulimit -n 1024 #修改一个进程最多可以同时打开的文件数为1024
当然这个并不能永久修改的。
输出重定向:
定义:将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器屏幕上。
重定向操作符号使用:">" “>>” 操作符号
表示将标准输出内容输出到文件,如果文件有内容会覆盖源文件的内容。
表示将标准输出内容追加到文件,不会覆盖源文件内容。
uname -a 查看版本信息
输入重定向
将命令中接受输入的途径由默认的键盘改为其他文件,而不是等待从键盘输入。
EOF本意是 End Of File,表明到了文件末尾。”EOF“通常与”<<“结合使用,“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“,再次返回到主调shell,可将其理解为分界符(delimiter)。既然是分界符,那么形式自然不是固定的,这里可以将”EOF“可以进行自定义,但是前后的”EOF“必须成对出现且不能和shell命令冲突。
以<<EFO开始,以EOF结尾。
例子:
[root@izwz952xgnqujs6qna2i25z ~]# cat > df.txt << EOF
swdded
ddds
sddd
sdf
sdde
EOF
错误重定向:
将命令执行过程中出现的错误信息(选项或参数错误)保存到指定的文件,而不是直接显示到显示器
作用:错误信息保存到文件
操作符:错误重定向符号: 2>(使用标准输入和输出的时候省略了0,1)
在实际应用中,错误重定向可以用来收集执行的错误信息,为排错提供依据。
注意:使用2>进行错误重定向的时候会覆盖原文件内容,如果是想追加到文件,那么只能是2>>
null黑洞和zero空文件
在Linux操作系统中,设备节点并不一定要对应物理设备。没有这种对应关系的设备被称之为伪设备,操作系统运用它们实现多种多样的功能,/dev/null和/dev/zero就是这样的设备,类似的还有/dev/urandom,/dev/tty等。
/dev/null 写入null的所有内容都会永远丢失。
/dev/zero介绍
和/dev/null类似,/dev/zero也是一个特殊的字符设备文件,当我们使用或读取它的时候,它会提供无限连续不断的空的数据流(特殊的数据格式流)。
/dev/zero文件的常见应用场景有二:
a./dev/zero文件覆盖其他文件信息。
b.产生指定大小的空文件,例如:交换文件、模拟虚拟文件系统等。
使用dd命令产生一个50M的文件
参数:
if 代表输入文件。如果不指定if,默认就会从stdin中读取输入。
of 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。
bs 代表字节为单位的块大小。
[root@izwz952xgnqujs6qna2i25z ~]# dd if=/dev/zero of=3.txt bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 0.0333127 s, 1.6 GB/s
[root@izwz952xgnqujs6qna2i25z ~]# du -sh 3.txt 查看文件大小的命令
50M 3.txt
&> 和>&符号
&表示等同于的意思
管道 | 的使用
注意:
1.管道命令只处理前一个命令的正确输出,不处理错误输出
2.管道右边的命令,必须能够接受标准输入的数据流命令才行
3.管道符可以把两条命令连起来,它可以连接多个命令使用。
tee命令
功能:读取标准输入的数据,并将其内容输出成文件。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件.
查看文件一般有以下几个命令:
which 查看可执行文件的位置
whereis 查看可执行文件的位置及相关文件
locate 配合数据库缓存,快速查看文件位置
grep 过滤匹配,它是一个文件搜索工具
find 查找相关文件 这个查找使用的是绝对路径
locate命令和find -name 功能差不多,是它的另外一种写法,但是这个要比find搜索快的多,因为find命令查找的是具体目录文件,而locate它搜索的是一个数据库/var/lib/mlocate/mlocate.db,这个数据库中存有本地所有的文件信息;这个数据库是Linux自动创建并每天自动更新维护。相关的配置信息在/etc/updatedb.conf,查看定时任务信息在/etc/cron.daily/mlocate
locate查看文件
updatedb 如果是当天使用locate命令查找文件必须使用update命令更新数据库
locate这个命令默认是没有安装的,所有应该使用yum -y install mlocate 这个命令进行安装
然后使用updatedb命令更新数据库,然后就能查出文件。他会查出所有相关文件,这个命令不需要写出绝对路径。
grep查找使用
作用:过滤,它能够使用正则表达式来搜索文本,并把结果打印出来。
参数:
-v 取反
-i 忽略大小写
^# 以#开头
#$ 以#结尾
^$ 空行
-n 对过滤的内容加上行号
| 或者的意思
例子:
grep “nologin|root” /etc/passwd | wc -l 注意:\表示转义符 查看nologin和root的行数。
egrep “nologin|root” /etc/passwd | wc -l 注意:egrep是grep的加强版
find 命令:
格式: find 文件路径 选项 输出
路径名称:find查找的目录路径,不输入代表当前目录。
find命令选项:
-name 按照文件名查找文件。 “名称”
-perm 按照文件权限来查找文件。666 777 等
-user 按照文件属主来查找文件
-group 按照文件所属的组来查找文件
-mtime -n / +n 按照文件的更改时间来查找文件,
- n 表示文件更改时间距现在n天以内
- n 表示文件更改时间距现在n天以前
-type 查找某一类型的文件
b - 块设备文件
d - 目录
c - 字符设备文件
p - 管道文件
l- 符号链接文件
f - 普通文件
-size n 查找符合指定的文件大小的文件
-exec 对匹配的文件执行该参数所给出的其他linux命令, 相应命令的形式为’ 命令 {} ;,注意{ }和 \;之间的空格,{}代表查到的内容
按照更改时间或访问时间等查找文件。
如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项
mtime:文件最后一次修改的时间
atime:最后一次访问时间
ctime:文件的最后一次时间,也就是修改时间。
-exec 这个选项参数后面可以跟自定义的SHELL命令,格式如下:
find . -name “*.back” -exec ls -l {} ;
查询结果:
-rw-r–r-- 1 root root 0 Nov 24 13:48 ./2.back
-rw-r–r-- 1 root root 0 Nov 24 13:48 ./3.back
-rw-r–r-- 1 root root 0 Nov 24 13:48 ./1.back
例4:把查找到的文件复制到一个指定的目录
find /root -name “.txt" -exec cp {} /opt ;
xargs和find命令结合 复制文件 -i 表示 find 传递给xargs的结果 由{}来代替
find . -name ".txt” | xargs -i cp {} /opt
查找多个类型的文件:
比较符的使用:
-a and 并且
-o or 或者
- 超过
- 低于
find . -name “.sh" -o -name ".pdf” 查找当前目录下文件为.sh或者.pdf的文件
find /etc -size +20k | wc -l etc文件夹下超过20k的文件
wc命令详解;
WC [option] file
命令功能
统计指定文件中的字节数,字数,行数,并将统计结果显示输出。
该命令统计指定文件中的字节数,字数,行数,如果没有给出文件名,则从标准输入读取。
WC同时也给出所指定文件的总统计数。
命令参数
-c:统计字节数
-l:统计行数
-m:统计字符数
-w:统计字数
-L:打印最长行的长度
find /etc -size +20k | wc -l 统计有多少行,
cat /etc/passwd |wc -l 也可以统计出多少行,进而知道有多少个用户。
按权限查找:
-perm
例如:find /root/ -perm 644 查看文件权限为644的文件
find /root/ -perm -777 查找文件权限不低于777的文件
-maxdepth 只查找目录第一层的文件和目录。
命令判断:
三个特殊符号:; && ||
; 分号 不考虑指令的相关性,连续执行,不保证命令全部执行成功的。
&& 逻辑与 只有在前面的命令执行成功后,后面的命令才回去执行。
|| 如果前面的命令执行成功,后面的命令就不去执行了;或者如果前面的执行不成功,才回去执行后面的。
Linux执行命令,是从左往右一个一个执行,从上到下执行。