文件操作命令汇总
linux 中的通配符
通配符 |
解释 |
文件名 |
模糊匹配 |
* |
匹配任意0-n个字符 |
luffy* |
luffyalex |
? |
匹配任意1 个字符 |
abc? |
abcd |
符号集合 |
匹配一堆字符或者文本 |
符号集合 |
|
[abcd] |
匹配[abcd]任意一个字符 |
|
|
[!abcd] 或者 [!a-d] |
不匹配括号里面的任意一个字符 |
|
|
[^a-d] |
同上 ^和 ! 等价 |
|
|
[[:upper:]] |
所有大写字母 |
|
|
[[:lower:]] |
小写字母 |
|
|
[[:alpha:]] |
所有字母 |
|
|
[[:space:]] |
所有空白字符 |
|
|
linux 中的引号
名称 |
解释 |
单引号 |
原样输出 |
双引号 "" |
弱引用,能识别各种特殊符号、变量、转义字符等,解析后再输出 |
没有引号 |
一般连续字符、数字、路径可以省略引号,遇见特殊字符,例如空格变量,需要引号 |
反引号 `` |
常用于引用命令结果,同与 $(命令) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
a=`ls` && echo $a && b=$(ls) && echo $b
# 从上面我们知道 `` 和 $() 是等价的
echo `date`
# 打印日期
a=`date +%T`&& echo $a
# 打印 时分秒
echo `date +%F`
# 打印日期
echo "hello world `date +%F`"
|
ls 通配符使用
1
2
|
ls [a-z]*
# 以字母开头 的文件
|
find命令
文件查找
例如
- l开头,中间出现任意字符的文本文件
1
|
find / -name "l?[a-z]" -type f -maxdepth 3
|
- /tmp下面任意以为数字开头,且非数字结尾的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
find ./ -name "dir0"
find ./ -name "*.txt" | xargs rm (删除当前目录下所有以txt结尾的文件)
find /home -size +512k 查大于512k的文件
find /home -size -512k 查小于512k的文件
find /home -links +2 查硬连接数大于2的文件或目录
find /home -perm 0700 查权限为700的文件或目录
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
|
学习教程
NFS 服务器理解
通过 IP 的方式去传输 linux文件
常用的文件
- .a 文件 静态库
- .lib 静态
- .so 动态
- .dll动态
静态库的制作和使用
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。
所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:
ldd 命令查看链接库的 引用
1
2
3
4
5
6
7
|
[root@VM-0-7-centos judgeServer_QD]# ldd a.out
linux-vdso.so.1 => (0x00007fff757f8000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f5f415ef000)
libm.so.6 => /lib64/libm.so.6 (0x00007f5f412ed000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f5f410d7000)
libc.so.6 => /lib64/libc.so.6 (0x00007f5f40d09000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5f418f7000)
|
tr命令
将文件testfile中的小写字母全部转换成大写字母,此时,可使用如下命令:
1
2
|
cat testfile |tr a-z A-Z
cat testfile |tr [:lower:] [:upper:]
|
文件描述符
程序数据流
- 输入流 ,标准输入 stdin,键盘
- 输出流, 标准输出 stdout ,显示器,终端
- 错误输出流, 错误输出 stderr
文件描述符
linux 中一切皆文件
- stdin 文件描述符是0
- stdout 文件描述符是1
- stderr 文件描述符是 2
系统操作
符号 |
特殊符号 |
解释 |
stdin |
代码为0,配合 < 和 « |
数据流从右向左 |
stdout |
代码1 ,配合 > 和 » |
数据从左到右 |
stderr |
代码 2,配合 > 和 » |
数据从左到右 |
重定向符号 |
|
箭头方向 |
标准输入重定向 |
0 < 或者 < |
数据一般从文件流向命令 |
追加输入重定向 |
0 « 或者 « |
数据从文件流向命令 |
标准输出重定向 |
1 > 或者 > |
正常输入重定向给文件,默认覆盖 |
标准输出追加重定向 |
1 » |
追加方式 |
标准错误输出 |
2 > |
标准错误文件重定向到另一个文件描述符 |
使用技巧
重定向示例
1
2
3
4
5
|
ls aaa 2>>err.txt ; cat err.txt
#错误的内容输出到 err.txt内
ls /notfound > /dev/null 2>&1
# 为什么这么奇怪 要加个 & 呢? 这个& 是用来转义的,用来识别 1是文件描述符
|
特殊符号
符号 |
解释 |
; |
命令分隔符或者结束符号 |
# |
1. 用来注释,2. root身份提示符 |
$ |
1.变量,取出变量的值,2. 普通用户身份提示符 |
\ |
转义符号,特殊字符还原成普通字符 |
{} |
1.生成序列,2.引用变量作为变量与字符的分割 |
1
2
3
|
echo {1..20}
# bash 解释器
echo {hello,"fff\n",world}
|
利用花括号快速备份文件
1
2
3
4
5
6
7
8
9
|
# 将 cfg 备份为 cfg.bak
echo "hello config" > cfg
# 这样 就直接拆分为 cp cfg cfg.bak 这个命令了
cp cfg{,.bak} && cat cfg.bak
lyr@DESKTOP-FSVN6C0:~/tmp$ echo lyr66{a..z}
lyr66a lyr66b lyr66c lyr66d lyr66e lyr66f lyr66g lyr66h lyr66i lyr66j lyr66k lyr66l lyr66m lyr66n lyr66o lyr66p lyr66q lyr66r lyr66s lyr66t lyr66u lyr66v lyr66w lyr66x lyr66y lyr66z
lyr@DESKTOP-FSVN6C0:~/tmp$ echo lyr66{a..z..2}
lyr66a lyr66c lyr66e lyr66g lyr66i lyr66k lyr66m lyr66o lyr66q lyr66s lyr66u lyr66w lyr66y
|
参考学习教程
符号 |
解释 |
&& |
连接命令,上一条命令成功,这条才知晓 |
|| |
上一条命令不成功,这个执行 |
! |
vim 中 q!表示强制退出, !+数字表示history 命令中的第几条, !! 表示执行上一条命令 |
1
2
3
|
clear
echo "!!"
# 你会发现 就是执行 上一条
|
cat命令
注意: 在linux平台中,所有文件的结尾都有一个 $符