Linux常用命令
- ls 显示文件;ls -a 显示所有文件,包括隐藏文件;ls -l 显示文件的详细信息;ls -al 显示所有文件并显示详细信息。
- cd 切换目录(table可以补全输入,如果命令唯一);cd / 返回根目录;…/ 返回上一级目录。
- pwd 显示当前路径。
- uname 系统信息查看命令 ;-a 查看全部信息。
- clear 清屏。
- cat 查看文件内容。
- sudo 切换用户身份命令(临时);sudo su 切换用户身份。
- touch 创建文件命令(后加文件名)。
- cp 拷贝文件(后加原始文件名再新的文件名)。
- rm 删除命令;-f 为只读也直接删除;-rf 删除文件夹;rmdir 删除文件夹。
- mkdir 创建文件夹。
- mv 移动文件命令(后加新的名字可重命名文件)。
- ifconfig 显示网络配置信息;down 关闭网卡;up 打开网卡。
- reboot 重启命令。
- poweroff 关机命令。
- sync 数据同步写入磁盘命令。
- find 查找文件命令;-name 根据名字查找文件。
- grep 查找内容命令;-nr 显示行号 ;-ir 忽略大小写。Ctrl+C 停止命令。
- du 文件夹大小查看命令;-sh 以可读的方式查看。
- df 磁盘空间检查命令。
- gedit 使用gedit打开某个文件。
- ps 当前系统进程查看命令。
- top 进程实时运行状态查看命令。
- file 文件类型查看命令。
- chmod 修改文件权限;777 打开全部权限。
vim编辑器的使用
vi打开文件/etc/vim/vimrc 最后添加:
set ts=4 //设置Tab为4个空格 默认为8个空格
set nu //设置行号
编译C程序
使用gcc编译器编译c程序。
gcc [选项] [文件名]
-c 只编译不链接为可执行文件,把.c文件编译为.o的目标文件。
-o 编译指定输出文件名,默认为a.out。./ 启动可执行文件
make工具和makefile文件
利用make工具可以自动完成编译工作,这些工作包括:
- 如果修改了某几个源文件,则只重新编译这几个源文件
- 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件
利用这种自动编译可以大大简化开发工作,避免不必要的重新编译。make工具通过一个称为Makefile的文件来完成并自动维护编译工作,Makefile文件描述了整个工程的编译、连接规则。
#编写例程:创建文件Makefile
main: main.o input.o calcu.o
gcc -o main main.o input.o calcu.o
main.o:main.c
gcc -c main.c
input.o:input.c
gcc -c input.c
calcu.o:calcu.c
gcc -c calcu.c
clean:
rm *.o
rm main
Makefile基本语法
规则格式
目标文件:依赖文件集合
(Tab) 命令
- make 编译文件
- make clean 清理编译的文件
变量
#Makefile变量的使用
objects = main.o input.o calcu.o
main:$(objects)
gcc -o main $(objects)
赋值符
“=“ 变量的值取决于它所引用的变量的最后一次有效值。
”:=“ 变量使用当前定义,不会使用后面的定义。
”?=“ 如果前面没有赋值就使用当前赋值,如果有就使用前面的值。
”+=“ 后面追加内容。
模式规则
%.o:%.c
命令
自动化变量
自动化变量 | 描述 |
---|---|
$@ | 表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。 |
$% | 仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a(bar.o)",那么," %"就是"bar.o"," @“就是"foo.a”。如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),那么,其值为空。 |
$< | 依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。 |
$? | 所有比目标新的依赖目标的集合。以空格分隔。 |
$^ | 所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。 |
$+ | 这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。 |
$* | 这个变量表示目标模式中"%“及其之前的部分。如果目标是"dir/a.foo.b”,并且目标的模式是"a.%.b",那么,"$*“的值就是"dir/a.foo”。 |
优化后Makefile文件代码
objects = main.o input.o calcu.o
main: $(objects)
gcc -o main $(objects)
%.o:%.c
gcc -c $<
clean:
rm *.o
rm main
伪目标
#当目录下有相同名字(clean)文件时,make clean 并不能执行
clean:
rm *.o
rm main
#声明伪目标防止出现上述情况
.PHONY:clean
clean:
rm *.o
rm main
条件判断
<条件关键词>
<条件为真时执行的语句>
endif
-----------------------
<条件关键词>
<条件为真时执行的语句>
else
<条件为假时执行的语句>
endif
条件关键字: ifeq(判断是否相等)、ifneq、ifdef、ifndef
函数使用
shell脚本
//创建文件xxx.sh
#!/bin/bash //第一行必须要写成这样
echo "hello world!" //可以编写多个命令 echo打印输出
-
read 读取变量;-p 可以读取多个变量
-
$((表达式)) 数值计算,仅支持整形
-
test 用于查看文件是否存在、权限等信息,可以进行数值,字符,文件三方面的测试。-e 查看文件是否存在。
-
&&和||命令
- cmd1 && cmd2 当cmd1执行完并且正确,那么cmd2开始执行;如果cmd1执行完毕错误,那么cmd2不执行。
- cmd1 || cmd2 当cmd1执行完并且正确,那么cmd2不执行;反之cmd2执行。
-
[ ]判断符 里面用==或!= 里面字符和变量需要加”“
-
默认变量
- $0~$9:表示shell脚本的参数,包括shell脚本命令本身,shell脚本命令本身为$0
- $#:#表示最后一个参数的标号
- $@:表示$1、$2、$3… 全部参数
-
条件判断
-
if 条件判断;then //成立时执行的语句 fi
-
if 条件判断;then //成立时执行的语句 else //不成立时执行的语句 fi
-
if 条件判断;then //成立时执行的语句 elif 条件判断;then //成立时执行的语句 else //不成立时执行的语句 fi
-
//编写示例 if <条件判断>;then //条件成立时执行的语句 exit 0 //退出 fi
-
//case语句 case $变量 in "第一个变量内容") 程序段 :: //表示该程序块结束 "第二个变量内容") 程序段 :: esac
-
-
脚本函数 function fname(){ //函数代码段 } //调用不需要加() 传参不是加在() 参数直接写在后面
-
循环
- while [条件] do //循环开始代码段 done //条件不成立时结束
- for var in con1 con2 con3… do //循环代码段 done
- for((初始值;限制值;执行步长)) do //循环代码段 done