/*******************小tips:*******************************/
1.查看ASCII码值:man ASCII
2.设置TAB为4个字节:
用vi打开文件/ec/vim/vimrc
在最后一行输入:set ts=4
3.Vim编辑器显示行号:
用vi打开文件/ec/vim/vimrc
在最后一行输入:set nu
/*********************************************************/
1.Linux的常用命令
查看某一个命令的详细帮助信息
命令 --help
查看软件版本
[软件名] --version
比如:
tree --version
git --version
export 设置或显示环境变量
语法:export [-fnp][变量名称]=[变量设置值]
//注释:可以不添加参数
-p 列出所有的shell赋予程序的环境变量。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中
-f 代表[变量名称]中为函数名称
//注释:通常是 sudo vim /etc/profile 打开文件,在里面设置环境变量
source
刷新环境变量:source /etc/profile
env
显示所有的环境变量
ldd 用于打印程序或者库文件所依赖的共享库列表
一个可执行程序依赖很多动态链接库,此命令就是查看该可执行程序顺利执行起来,缺少哪些依赖的 动态库;
用法:
-d, --data-relocs 进程数据重寻址
-r, --function-relocs 进程数据和函数重寻址
-u, --unused 印出未使用的直接依赖关系
-v, --verbose 印出所有信息
ldconfig 动态链接库管理命令,让动态链接库为系统所共享;
动态链接库放在不同的目录下,在让系统共享的时候,因为存放目录不同,所以让系统共享的操作也会不同;
共享一般存放的目录有如下几个位置:
1. /lib 或 /usr/lib
2.(推荐) "非/lib或/usr/lib" 这时候需要在 /etc/ld.so.conf 里面添加共享动态库的路径,路径以 lib结尾;
3.export 一个全局变量 LD_LIBRARY_PATH
//具体参考:https://blog.csdn.net/zong596568821xp/article/details/90297360
https://blog.csdn.net/qq_32146369/article/details/114613254
tar压缩和解压缩
解压缩:
tar -vxzf [压缩包名] //注释:解压缩.gz 压缩包
tar -zxvf filename.tar.gz -C 想要解压到的目录
tar -vxjf [压缩包名] //注释:解压缩.bz2 压缩包
压缩:
tar -vczf [压缩包名] 注释:压缩为 .gz 格式
tar -vcjf [压缩包名] //注释:压缩为 .bz2 格式
dpkg 安装linux系统下的 .deb 应用程序;
用法:sudo dpkg -i filename.deb
.deb 程序卸载:
.pl文件安装:
sudo ./----.pl 即可安装;
更新本地数据库:sudo apt-get update
//注释:查看本地哪些软件可以更新;
检查依赖关系:sudo apt-get check
安装软件 sudp apt-get install [软件名]
查看软件的方法: [软件名] -s
更新软件: sudo apt-get upgrade [软件名]
卸载软件: sudo apt-get ermove [软件名]
zip压缩文件
zip -r 压缩包名 [被压缩的文件名]
unzip 解压zip文件
用法:unzip filename.zip
man 系统帮助命令
用法:man [具体的shell命令]
比如在写代码的时候,不知道一个函数什么意思,比如不知道printf什么意思,那么就可以
:man printf
ls 显示文件信息
-a: all,显示所有文件,包括点号开头的文件;
-l: 显示文件详细信息
用法:ls -al /bin
chmod 修改文件权限
用法:chmod [参数] [文件名/目录名]
chown 修改文件归属者
用法:chown [参数] [用户名.<组名>] [文件名/目录]
//注释:其中[用户名.<组名>]表示要将文件或者目录改为哪一个用户或者用户组,用户名和组名用“.”隔开,其中用户名和组名中的任何一个都可以省略;
-c 效果同-v 类似,但仅回报更改的部分。
-f 不显示错误信息。
-h 只对符号连接的文件做修改,不改动其它任何相关的文件。
-R 递归处理,将指定的目录下的所有文件和子目录一起处理。
-v 显示处理过程。
df(查看磁盘)
用来检查linux服务器的文件系统的磁盘空间占用情况(插入U盘可以查看U盘挂载到哪个位置了)
du 文件夹大小查看命令(查看文件)
du [文件名] -sh
-h 以人类可读的方式显示。
-s 显示个别目录的大小时,并不含其子目录的大小。
find 在目录结构中查找文件(在目录中搜索文件)
用法: find [路径] [参数] [关键字]
可以看到 find -name [filename] 是在当前目录下的所有文件夹去查找和 文件名 相同的文件;
find /home/sumer/下载 test //在下载中寻找 test 文件
-name<filename> 按照文件名称查找,查找与 filename 匹配的文件,可使用通配符。
-depth 从指定目录下的最深层的子目录开始查找。
-gid<群组识别码>查找符合指定的群组识别码的文件或目录。
-group<群组名称> 查找符合指定的群组名称的文件或目录。
-size<文件大小> 查找符合指定文件大小的文件。
-type<文件类型> 查找符合指定文件类型的文件。
-user<拥有者名称> 查找符合指定的拥有者名称的文件或目录。
grep 在文件中搜索关键字(一次只能查一个关键字)
用法: grep [参数] 关键字 [文件名 / 想要查找的目录]
查找结果分析:
在 某文件夹 下的 某文件 的 某行 找到了 关键字(字符串)
最常用的就是 -nir -n代表
-b 在显示符合关键字的那一列前,标记处该列第 1 个字符的位编号。
-c 计算符合关键字的列数。
-d<进行动作> 当指定要查找的是目录而非文件时,必须使用此参数!否则 grep 指令将回报信息并停止搜索
-i 忽略字符大小写。
-v 反转查找,只显示不匹配的行。
-r 在指定目录中递归查找。
tree 文件以树状图列出当前目录结构 (需要提前安装tree sudo apt-get install tree)
- -a 显示所有文件和目录;
- -C 在文件和目录清单加上色彩,便于区分各种类型;
- -D 列出文件或目录的更改时间;
gedit 使用gedit打开某个文件命令
和windows下的记事本一样;
fdisk 磁盘分区命令(千万不要对自己的Ubuntu系统进行分区!!!)
用法:
-l 列出指定设备(磁盘)的分区表(不指定输出所有磁盘分区表;)
ifconfig 用来显示、配置网络属性。
配置参数有如下主要几个:
ifconfig -a //查看所有网卡信息;
interface:网络接口名称,如eth0等
up 开启网络设备
down 关闭网络设备
add IP地址,设置网络IP地址
netmask add 子网掩码;
用法:
1.设置网卡ip地址:
ifconfig eth0 [ip地址] //设置ip地址之前先测试一下新的ip地址是否被占用,ping一下是否可以ping通,(要求在同一网段内的ip地址);
重启网络:
service network restart
ps 用于显示当前进程的状态,类似于 windows 的任务管理器。
- -A 列出所有的进程
- -aux 显示所有包含其他使用者的进程
top 进程实时运行状态查看命令
实时显示
file 文件类型查看命令
用法:file [文件名]
uname 查看系统信息;
-r 列出当前系统的具体内核版本号;
-s 列出系统内核名称;
-o 列出系统信息;
clear 清屏命令;
scp 基于 ssh 登陆进行安全的远程文件拷贝命令(可以把远程仓库文件/目录复制到本地,也可以把本地文件/目录复制到远程仓库)
- -1: 强制scp命令使用协议ssh1
- -2: 强制scp命令使用协议ssh2
- -4: 强制scp命令只使用IPv4寻址
- -6: 强制scp命令只使用IPv6寻址
- -r: 递归复制整个目录。
-
wget 在终端从网上下载安装包/文件
用法:wget 安装包/文件网址
adduser 创建新用户(只有root用户才有此权限,比如这里要创建用户user1)
用法: sudo adduser test(//注释:在普通用户下需要加sudo)
//注释:在root用户下,可以不用加sudo。
-system 添加一个新用户
-home DIR DIR表示用户的主目录路径;
-uid ID ID表示用户的uid
-ingroup GRP 表示用户所属的组名;
deluser 删除用户 (同样需要root权限)
-system 当用户是一个系统用户的时候才能删除;
-remove-home 删除用户的主目录;
-remove-all-files 删除与用户有关的所有文件;
-backup 备份用户信息;
finger 用户查询
finger 用户名
pwsswd 修改用户密码
pwsswd 用户名
之后会出现输入旧密码和新密码
deluser 删除用户
deluser 用户名
addgroup 添加用户组
addgroup 用户组名
groups 显示组内用户名
groups 用户组名
delgroup 删除用户组
delgroup 用户组名
查看有哪些用户组?
sudo gedit /etc/group
mkfs 磁盘分区格式化
mount 挂载磁盘;(挂载的时候要确定挂载点--即磁盘要挂载到哪个目录下);
umount 卸载命令
touch 创建文件;
mkdir 创建文件夹;
-p 级联创建,确保目录名称存在,不存在的就建一个
用法:mkdir /home/username/Desktop/file/file1 //注释:file和file1两个文件是一次操作命令创建的;
pwd 查看当前路径;
cat 查看文件内容;
-s 多个空行合并;
-b 显示行号;
用法: cat -s test.c
cat -b test.c
head 查看文件前面的内容(配合-n使用)(默认为显示前10行)
用法: head -20 test.c //注释:显示test.c的前20行;
tail 查看文件后面的内容(配合-n使用)(默认为显示后10行)
用法: tail -20 test.c //注释:显示test.c的后20行;
cp 复制文件;
-r 递归复制(用于赋值文件夹)
-f 强行复制
用法: cp filename filename1 //注释:将filename复制到当前文件夹,命名为filename1;
cp filename /home/username/桌面/filename1 //注释:将文件filename复制到别的文件夹下面,命名为filename1
cp filename1 filename2 ../ //注释:一次移动多个文件;
mv 移动文件;
用法: mv test1 test2 //注释:此操作其实是修改文件名字(重命名);
mv test1 ../ //注释:其实就是剪切;
切换用户:
普通用户切换到root用户:
sudo su -
普通用户切换到其他普通用户:
su - otheruser
root 用户切换到普通用户:
sudo su - user
//注释:带 - 表示切换时,使用指定用户的环境变量;
//注释:切换用户的时候带 - ,有时候会切换失败,提示错误"未指定 askpass 程序" 、等错误,错误原因是参数过多,解决方案没找到!!!
1.1Linux文件权限:
一共九位:drwxrwxrwx 第一位代表文件类型:
- 普通文件(纯文本信息、服务配置信息、日志信息以及Shell脚本等都是普通文件)
d 目录文件、l 链接文件、p 管道文件、s套接字文件
b 块设备文件、c 字符设备文件;(一般是指硬件设备,比如鼠标、键盘、光驱、硬盘等)
权限:(用户创建者 同组者 其他用户)
rwx权值分别为:421
1.2vim编辑器的使用:
命令行模式:①按a进入插入模式,②按“ : ”进入第行模式(注意不能使用中文的冒号:);
dd 删除(剪切)光标所在整行;
5dd 删除(剪切)光标处开始的5行(向下)
yy 复制光标所在整行;
5yy 复制光标处开始的5行(向下)
n 显示下一个字符;
N 显示上一个字符;
u 撤销上一步操作;
p 粘贴dd和yy的内容;
gg 命令将光标移动到文档开头
G 命令将光标移动到文档末尾
?字符串 文本中从下到上搜索该字符串;
/字符串 文本中从上到下搜索该字符串;
插入模式:按Esc进入命令行模式;
底行模式:按Esc进入命令行模式;
:set nu 显示行号
:set nonu 不显示行号
:命令 执行该命令
:整数 跳转到该行
:s/one/two 把光标所在行的第一个one替换成two
:s/one/two/g 把光标所在行的所有one替换成two(g:global)
:.,$s/one/two/g 当前行到最后一行的所有one替换成two
:%s/one/two/g 把全文中的one替换成two;
:w Filename 另存为文件名Filename,不退出
:r Filename (read)读入名字为Filename的文件内容插入到当前光标的下一行(复制Filename的所有内容);
2.Makefile makefile文件名称----固定;
作用:描述了整个工程的编译、链接过程,让整个软件自动化编译;
//注释:Makefile中的注释需要用#,不能用C语言中的“//”或者“/**/”
make 命令行输入make会在当前文件夹目录下自动查找Makefile文件并执行;
echo 和C语言的printf一样;
@echo Make 在执行的过程中会自动输出命令执行过程,在命令前面加上“@”的话就不会输出命令执行过程;
格式:
filename:filename.c ///////////注释:filename是输出文件,filename.c是依赖的源文件;
gcc -o filename filename.c //////////注释:执行的操作;使用这个操作生成filename文件;
clean:
rm filename //////////注释:finename为要删除的文件;在命令行输入make clean就直接只执行clean部分的操作;
1.Makefile变量:
用法:
objects = main.o input.o calcu.o
main: $(objects)
gcc -o main $(objects)
2.赋值符“=” 变量的真实值取决于它所引用的变量的最后一次有效值
3.赋值符“:=” 不会使用后面定义的变量,只能使用前面已经定义好的,
4.赋值符“?=” 如果变量 curname 前面没有被赋值,那么此变量就用后面的赋值,如果前面已经赋过值了,那么就使用前面赋的值。
5.变量追加“+=”
例子: objects = main.o inpiut.o
objects += calcu.o
//注释:一开始变量 objects 的值为“main.o input.o”,追加后变量 objects 变成了“main.o input.o calcu.o”
6.% 用法:%.c 代表所有以.c结尾的文件,a.%.o代表所有以a.开头,.c结尾的文件;
7.Makefile自动化变量:(自动化变量就是这种变量会把模式中所定义的一系列的文件自动的挨个取出,直至所有的符合模式的文件都取完,自动化变量只应该出现在规则的命令中)
$@ 规则中的目标集合,在模式规则中,如果有多个目标的话,“$@”表示匹配模式中定义的目标集合。
$% 当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件,那么其值为空。
$< 依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%” )定义的,那么“$<”就是符合模式的一系列的文件集合。
$? 所有比目标新的依赖目标集合,以空格分开。
$^ 所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,“$^”会去除重复的依赖文件,值保留一份。$+ 和“$^”类似,但是当依赖文件存在重复的话不会去除重复的依赖文件。
$* 这个变量表示目标模式中"%"及其之前的部分,如果目标是 test/a.test.c,目标模式为 a.%.c,那么“$*”就是 test/a.test。
8.Makefile伪目标
3.gcc编译:
用法:gcc [选项] [文件名]
①.c文件生成目标文件,②目标文件链接成可执行文件;
-o <输出文件名>用来指定编译结束以后的输出文件名, 默认编译出来的可执行文件名字为 a.out。
-c 只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件
-g: 添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息
-O: 对程序进行优化编译 ;
-O2: 比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。
-o -c 只编译不链接;//注释:编译生成.o文件,-o后面跟的是目标文件、可执行文件
gcc -o test.o -c test.c
-o ①编译+链接;
gcc test.c -o test
②只链接;//注释:将.o文件链接成可执行文件;
gcc -o test.o test.c
///////////注释:一般都是:
test:test.o
gcc -o test test.o
test.o:test.c
gcc -o test.o -c test.c
clean:
rm test
///////////注释:因为这样是先编译生成可执行文件,然后再链接,因为如果有很多个.c文件,这样修改几个.c文件,就只需要编译这几个.c文件,对于那些没有修改的文件就不需要编译;
4.vmware-tools的安装:
最后执行VMware-install.pl文件的时候,一定要使用sudo;否则安装的不能使用;
sudo ./VMware-install.pl
如果以上方法不行,就用下面这个方法,非常好用(三个命令依次输入):
5.输入法的设置:
在设置(setting)-> 区域和语言(region language)-> 输入源 -> 管理语言;
弄好之后,桌面的右上角会出现一个键盘,把其他的输入法删除,只保留一个拼音输入发就行了;
6.Filezilla和ubuntu的文件传输----连接操作:
1.使用整点原子的操作,使用不安全的明文FTP传输;------需要ubuntu安装FTP,并打开;
如何安装FTP:
2.使用ssh传输,首先需要打开Ubuntu下的ssh,Ubuntu下安装ssh:sudo apt-get install openssh-server
开启ssh:sudo systemctl start ssh
其次,在Filezilla选择传输协议为SFTP-SSH File Transfer Protocol,最后输入Ubuntu的ip地址、用户名、用户名密码就可以连接了,这样可以成功;
7.修改Ubuntu的shell环境为bash:
查看shell环境:ls -l /bin/sh //注释:shell环境有dash 和 bash,
将shell环境修改为bash:sudo dpkg-reconfigure dash
->之后选择 否(No)
再次:ls -l /bin/sh 可以看到shell变成了bash
8. #if 0
#endif
//注释:注释内容;
第一章:
Makefile基本概念,程序编译链接基础;
第二章:
Makefile的基本规则、语法、函数使用;
第三章:
编写模拟MP3项目的Makefile;
*支持生成可执行文件、目标文件、静态库、动态库;
*支持头文件自动依赖;
*一个模块可以选择编译为:目标文件、静态库、动态库;
*支持系统头文件路径指定;
*支持第三方库(静态库、动态库)使用;
*支持库依赖自动编译;
*软件的安装与卸载;