Linux编程常用(未完待续)

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
硬链接知识

  1. 具有相同inode节点号的多个文件是互为硬链接文件
  2. 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除
  3. 只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除
  4. 当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收
  5. 硬链接文件就是文件的另一个入口
  6. 可以通过给文件设置硬链接文件,来防止重要文件被误删
  7. 通过执行 ln 源文件 硬链接文件 即可创建硬链接文件
  8. 硬链接文件是普通文件,所以可以用rm命令删除
  9. 对应静态文件(没有进程正在调用的文件)来讲,当对应硬链接数为0(i_link),文件就被删除了。i_link的查看方法:ls -l 第三列的数字就是

硬链接的限制:

我们在使用硬链接的同时也需要对硬链接的限制有所了解;

  1. 不能跨文件系统
  2. 不能链接到目录

(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目录文件
bblock device 即块设备文件,如硬盘;支持以block为单位进行随机访问
ccharacter device 即字符设备文件,如键盘支持以character为单位进行线性访问
lsymbolic link 即符号链接文件,又称软链接文件
ppipe 即命名管道文件
ssocket 即套接字文件,用于实现两个进程进行通信

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只是调用相关程序,本身并无压缩、解压功能,请注意!
文件后缀名

后缀名对应语言
.cC语言源程序
.C/.cc/.cxxC++源程序
.mObjective-C源程序
.i已经预处理的C源程序
.ii已经预处理的C++源程序
.s/.S汇编程序
.h头文件
.o目标文件
.a/.so编译后的库文件,静态库(Archive Libraries)/动态库(Shared Object)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值