文件操作命令汇总

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命令

文件查找

例如

  1. l开头,中间出现任意字符的文本文件
1
find / -name "l?[a-z]" -type f -maxdepth 3
  1. /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 > &1

重定向示例

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平台中,所有文件的结尾都有一个 $符

1
2
cat -En temp
#