1、常用工具
(1)shell
负责解析用户命令,并调用相应的程序,给出结果和出错提示。现在主流Linux发行版使用bash作为默认shell。
(2)vi
vi 新文件名,可以创建文件
输入小写i进入编辑模式,按esc回到浏览模式,输入“:”进入命令模式,(命令:w保存,q退出,wq保存退出,q!强制退出),按esc回到浏览模式,输入小写v进入可视模式,不可更改文件,(hjkl对应光标左上右下),esc退回浏览模式,小写r进入覆盖模式,输入会覆盖原来内容。
(3)find和grep
find用来寻找文件.
sudo find / -name 'apache2.conf' 查找apache的配置文件位置
find / -name 'apache2.conf' 2>/dev/null 将标准错误输出重定向,/dev/null类似黑洞,输入进去的数据都会被吃掉,不输出到任何地方
sudo find / -size 10000c 查找文件大小为10000字节的文件
sudo find / -size +1000c 查找大于1K的文件
sudo find / -amin -15 查找最近15分钟访问的文件
sudo find / -atime -2 查找最近48小时访问的文件
sudo find / -empty 查找空文件或文件夹
sudo find / -mmin -10 查找最近十分钟修改过的文件
sudo find / -mtime -1 查找最近24小时修改过的文件
sudo find / -group root 查找属于root用户组的文件
sudo find / -nouser 查找无效用户的文件
sudo find / -user test1 查找属于用户test1用户的文件
grep用来查找文件内容。grep搜索成功返回0,失败返回1,搜索的文件不存在返回2,grep可用于shell脚本。可与正则表达式一起用。
grep [选型]。。。PATTERN [file]。。。
pattern是正则表达式语句,file是文件名或目录
常用正则表达式
^ | 仅匹配行首 |
---|---|
$ | 仅匹配行尾 |
^ [STR] | 匹配以STR作为行的开头 |
[Ss]igna[lL] | 匹配单词signal、Signal、signaL、SignaL |
^USER$ | 匹配只包含USER的行 |
^d…x…x…x | 匹配对用户、用户组、和其他用户组成员都有执行权限的目录 |
[.*0] | 匹配0之前或之后加任意字符 |
[^$] | 匹配空行 |
[^.*$] | 匹配行中任意字符串 |
[a-z][a-z]* | 至少有一个小写字母 |
[^0-0A-Za-z] | 匹配非数字或字母 |
[i I] [n N] | 匹配大写或小写的i/n |
. | 匹配带句点的行 |
[0 0 0*] | 匹配0 0 0 或更多的0 |
^.* | 匹配只有一个字符的行 |
[] | 字符串和字符集合的匹配 |
* | 匹配任意多字符 |
\{\} | 指定匹配的次数,pattern\{n\} 表示匹配模式出现n次,pattern\{n,\} 表示匹配模式出现至少n次,pattern\{n,m} 表示匹配模式出现n~m次, |
(5)FTP
标准互联网文件传输协议,允许传输二进制和文本文件。
ftp 主机名 [端口号],默认端口号是21.输入此命令即可连接ftp服务器。
常用命令:
命令 | 意义 |
---|---|
dir | 列出服务器列表 |
cd | 改变服务器上的目录 |
lcd | 改变本地目录 |
ascii | 使用文本方式传输文件 |
binary | 使用二进制方式传输文件 |
bye | 退出ftp工具 |
hash | 显示文件传输进度 |
get | 从服务器下载文件 |
put | 上传文件到服务器 |
! | 切换到shell对话框,在shell中使用exit命令可以退回ftp对话框 |
注意!ftp工具不能像shell一次进入多级目录,只能一层一层进
(4)minicom
sudo minicom -s进行配置,可修改连接的串口,还有波特率等
2、Makefile
make是一个解释Makefile文件中指令的命令工具,make命令自动查找当前目录下的Makefile文件,初始化文件中变量,分析Makefile中规则,为所有目标文件创建依赖关系,根据依赖关系决定哪些目标文件要重新生成,执行生成命令。
在make过之后,再次make,只对修改过的文件执行命令。
Makefile语法:
#注释
目标文件:依赖文件列表
。。。。。。
<Tab> 命令列表
。。。。。。
命令列表:make程序执行的动作,也是创建目标文件的命令。一个规则可以有多条命令,每行只能写一个命令
make可以根据.o文件的文件名自动推导出同名的.c文件并加入依赖关系,不需要我们手动注明。并且gcc -c也会被自动推导出来,于是我们的makefile就变成了
CC = gcc
object = lexer.o count_words.o
count_words: $(object) -lfl
$(CC) $(object) -lfl -o count_words
count_words.o:
lexer.o:
lexer.c: lexer.l
flex -t lexer.l > lexer.c
clean:
rm lexer.c $(object) count_words
这种方法也叫“隐式规则”。
一个好习惯是每个makefile都要写clean规则,这样不仅可以方便重编译,也有利于保持文件路径的清洁。
.PHONY: clean
clean:
-rm lexer.c $(object) count_words
.PHONY表示clean是一个“伪目标”,而rm命令前面的减号则表示,不管出现什么问题都要继续做后面的事情。
注意:clean规则不要放在makefile的开头,不然就会变成make的默认目标了。
自动变量
自动变量是make自动根据规则生成的,不需要用户显式的指出相应的文件或目标名称。以下就是七个最核心的自动变量:
变 量 | 意义 |
---|---|
$@ | 目标文件的文件名; |
$% | 仅当目标文件为归档成员文件(.lib 或者 .a)时,显示文件名,否则为空; |
$< | 依赖(prerequisite)列表里面的第一个文件名; |
$? | 所有在prerequisite列表里面比当前目标新的文件名,用空格隔开; |
$^ | 所有在prerequisite列表中的文件,用空格隔开; 如果有重复的文件名(包含扩展名),会自动去除重复; |
$+ | 与$^相似,也是prerequisite列表中的文件名用空格隔开,不同的是这里包含了所有重复的文件名; |
$* | 显示目标文件的主干文件名,不包含后缀部分。 |
https://blog.csdn.net/u013216061/article/details/70592461
3、硬链接和符号链接
(1)硬链接
硬链接指通过索引节点来进行连接,在Linux为文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号;
硬链接指的就是在Linux中,多个文件名指向同一索引节点;
常见用途:通过建立硬链接到重要文件,防止误删,删除其实对应的是删除其中的一个硬链接,当文件对应的硬链接都被删除了,该文件才真正被删除;
注意: 默认情况下,ln命令产生硬链接;
创建硬链接命令:cp -l 1.txt 2.txt
等同于ln 1.txt 2.txt
# 为1.txt建立硬链接2.txt
硬链接知识
- 具有相同inode节点号的多个文件是互为硬链接文件
- 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除
- 只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除
- 当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收
- 硬链接文件就是文件的另一个入口
- 可以通过给文件设置硬链接文件,来防止重要文件被误删
- 通过执行 ln 源文件 硬链接文件 即可创建硬链接文件
- 硬链接文件是普通文件,所以可以用rm命令删除
- 对应静态文件(没有进程正在调用的文件)来讲,当对应硬链接数为0(i_link),文件就被删除了。i_link的查看方法:ls -l 第三列的数字就是
硬链接的限制:
我们在使用硬链接的同时也需要对硬链接的限制有所了解;
- 不能跨文件系统
- 不能链接到目录
(2)符号链接
即软链接,也称为符号链接(Symbolic Link),类似于Windows的快捷方式,其中包含的是另一个文件的位置信息;
创建符号链接命令:cp -s 2.txt sLink
等同于ln –s 2.txt sLink
# 为2.txt文件建立符号链接sLink
注意:
只能在同种存储媒体上的文件之间创建硬链接(Hard Link),不能在不同挂载点下的文件间创建硬链接,对于后一种情况,可以使用软链接;(区分不同挂载点与同一挂载点不同目录)
测试:
[oracle@Linux]$ touch f1 #创建一个测试文件f1
[oracle@Linux]$ ln f1 f2 #创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3 #创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f3 -> f1
从上面的结果中可以看出,硬连接文件f2与原文件f1的inode节点相同,均为9797648,然而符号连接文件的inode节点不同。
[oracle@Linux]$ echo "I am f1 file" >>f1
[oracle@Linux]$ cat f1
I am f1 file
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
I am f1 file
[oracle@Linux]$ rm -f f1
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
cat: f3: No such file or directory
通过上面的测试可以看出:当删除原始文件f1后,硬连接f2不受影响,但是符号连接f1文件无效
附加:文件类型
文件属性 | 文件类型 |
---|---|
- | 常规文件,即file |
d | 目录文件 |
b | block device 即块设备文件,如硬盘;支持以block为单位进行随机访问 |
c | character device 即字符设备文件,如键盘支持以character为单位进行线性访问 |
l | symbolic link 即符号链接文件,又称软链接文件 |
p | pipe 即命名管道文件 |
s | socket 即套接字文件,用于实现两个进程进行通信 |
Linux文件压缩命令
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
———————————————
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName
.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
———————————————
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知
.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
———————————————
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z
解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
———————————————
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
———————————————
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
———————————————
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName
———————————————
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
———————————————
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf -
———————————————
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解压:sEx x FileName.*
压缩:sEx a FileName.* FileName
sEx只是调用相关程序,本身并无压缩、解压功能,请注意!
文件后缀名
后缀名 | 对应语言 |
---|---|
.c | C语言源程序 |
.C/.cc/.cxx | C++源程序 |
.m | Objective-C源程序 |
.i | 已经预处理的C源程序 |
.ii | 已经预处理的C++源程序 |
.s/.S | 汇编程序 |
.h | 头文件 |
.o | 目标文件 |
.a/.so | 编译后的库文件,静态库(Archive Libraries)/动态库(Shared Object) |