1.Linux Shell
1.1 简介
shell是linux中的一个程序,负责接收用户的输入,根据用户的输入找到其他程序并允许
1.2 命令提示符
book:当前登录用户名
www.100ask.org:主机名
~:当前所在目录 ~代表家目录
$:用户提示符 $:普通目录 #:root管理员
1.3 Linux命令格式
command [options] [parameter]
command:命令
options:选项
parameter:参数
[]:代表非必须 <>:代表必须
1.4 程序运行
echo $PATH:查看shell会到哪些目录寻找命令或程序
1.5 设置PATH
1.5.1 临时设置
终端执行export PATH=$PATH:/home/book,只对当前终端有效
1.5.2永久设置
1.修改~/.bashrc,在行尾添加export PATH=$PATH:/home/book,该方法只对当前用户有效
2.修改/etc/environment,在PATH的末尾添加:/home/book,该方法对所有用户有效
2.Linux基本操作
2.1 目录/文件操作命令
pwd:显示当前工作目录
cd 路径:改变路径、切换目录
cd ..:退到上一级目录
cd -:退到上一个目录
mkdir 文件名:创建目录
rmdir 文件名:删除目录
rm -rf 文件名:-r递归删除 -f强制删除
ls:列出目录内容 -a显示隐藏文件 -l显示目录详细信息
cp 要复制的文件 复制后文件:复制文件
mv 要移动的文件 移动后文件:移动文件
touch 文件名:修改文件的访问和时间,也可创建文件
2.2 文件权限和属性
-rw-r-x-wx:
-:表示普通文件 d:表示目录
r:可读 w:可写 x:可执行
chgrp:改变文件所属用户组
chown:改变文件所有者
chmod:改变文件的权限
对-r-x-wxrw-文件添加拥有者添加可写权限,同组其他用户添加可读权限,其他用户添加可执行权限命令执行:
chmod u+w,g+r,o+x 文件名
2.3 查找/搜索命令
find:查找文件
格式:find 目录名 选项 查找条件
find /home/book/dira/ -name "test.txt"**
-name:以名字查找文件
"test.txt":指明要查找的文件
*:通配符
grep:查找文件中符合条件的字符串
格式:grep [选项] [查找模式] [文件名]
grep -nwr "abc" *
-nwr:显示行号 匹配整个单词 递归查找
“abc”:要查找的字符串
*:要搜索的文件
2.4 压缩/解压缩命令
2.4.1 gzip常用选项
-l:列出压缩文件的内容
-k:在压缩或解压时,保留输入文件
-d:将文件进行解压缩
注意:
1.gzip不加任何选项,会将文件压缩成.gz文件后并删除原文件
2.相同文件内容,不同文件名,压缩后大小不同
3.gzip只能压缩单个文件,不能压缩目录
2.4.2 bzip2常用选项
-k:在压缩或解压时,保留输入文件
-d:将文件进行解压缩
注意:
1.bzip2不加任何选项,会将文件压缩成.bz2文件后并删除原文件
2.bzip2只能压缩单个文件,不能压缩目录
一般情况下,小文件用gzip压缩,大文件用bzip2压缩
2.4.3 tar常用选项
-c:表示创建用来生成文件包
-x:从文件包中提取文件
-t:可查看压缩文件
-z:用gzip方式处理,与"c"结合表示压缩,与"x"结合表示解压缩
-j:用bzip2方式处理,与"c"结合表示压缩,与"x"结合表示解压缩
-v:详细报告tar处理信息
-f:表示文件,后面接文件名 -C<指定目录> 解压到指定目录
注意:tar可以对目录进行操作
3.vi编辑器基本操作
3.1 模式切换
3.2 移动
ctrl+f:向前翻页
ctrl+b:向后翻页
跳到某一行::行号
显示行号::set number
隐藏行号::set nonumber
G:跳到文件结尾
0:跳到行首
S:跳到行尾
3.3 编辑
插入:输入i进入编辑模式
删除:
x:删除一个字母
dd:删除整行
ndd:删除当前行及其后的n-1行
o:在当前行下面新增一行
u:撤销上一步操作
3.4 复制/粘贴
yy:复制当前行
nyy:复制当前行及其后的n-1行
p:粘贴
3.5 查找/替换
/要查找的单词:n向下查找 N向上查找
:%s/p1/p2/g:将文件中所有的p1均用p2替换
:%s/p1/p2/gc:替换时需要确认
4.Linux应用开发基础
4.1 GCC编译过程
一个C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇 编(assembly)和链接(linking)等4步才能变成可执行文件。
4.2 常用编译选项
-E 预处理,开发过程中想快速确定某个宏可以使用“-E -dM”
-c 把预处理、编译、汇编都做了,但是不链接
-o 指定输出文件
-I 指定头文件目录
-L 指定链接时库文件目录
-l 指定链接哪一个库文
4.3 Makefile
4.3.1 Makefile的使用
make命令所执行的动作依赖于Makefile文件,其根据文件更新的时间戳来决定哪些文件需要重新编译,极大提高了开发效率
4.3.2 Makefile格式
目标文件 :依赖文件
TAB键 命令
4.3.3 Makefile语法
%:通配符
$@:目标文件
$< 或 $^:依赖文件
make [目标名]:若无目标名默认第一个目标
make clean:清除所有的目标文件
假想目标:.PHONY
即时变量(简单变量):A := xxx A的值即时确定
延时变量:
B = xxx B的值使用时才确定
B ?= xxx 如果是第一次定义才起效,若前面该变量已定义则忽略
附加:它是延时变量还是即时变量取决去前面的定义
引用变量:$(变量名)
4.3.4 Makefile函数
函数名 | 描述 |
---|---|
$(foreach var,list,text) | 对list的每个var变量进行text操作 |
$(filter pattern...,text) | 在text中取出符合patten格式的值 |
$(filter-out pattern...,text) | 在text中取出不符合patten格式的值 |
$(wildcard pattern) | pattern定义了文件名的格式,wildcard取出其中存在的文件 |
$(patsubst pattern,replacement,$(var)) | 将$(var)里符合pattern替换成replacement |
4.3.5 Makefile生成依赖
命令 | 描述 |
---|---|
gcc -M c.c | 打印出c.c所依赖的文件 |
gcc -M -MF c.d c.c | 把依赖写入文件c.d |
gcc -c -o c.o c.c -MD -MF c.d | 编译c.o,把依赖写入文件c.d |