Linux是一种多用户、多任务,支持多线程和多CPU的操作系统,具有免费、稳定、高效的优点,一般运行在大型服务器上。
目录 | 说明 |
---|---|
/ | 根目录,有且仅有一个,一般只存放目录 |
/home | 家目录,新增用户时,放在此目录下 |
/root | 系统管理员root的家目录 |
/bin/user/bin | 可执行二进制文件的目录 |
/etc | 系统配置文件存放的目录 |
/media | 光盘默认挂载点 |
/tmp | 一般用户或正在执行的程序临时存放文件的目录 |
/var | 存放不断扩充的东西,经常被修改的目录存放在此,包括日志文件 |
命令名 [选项] [参数]
-字母
、-单词
、字母
,并且可以合并(如-a
、-b
可以合并为-ab
)功能:显示当前用户所在目录
pwd
功能:
ls [选项] [目录或文件]
选项 | 说明 |
---|---|
-a | 查看当前目录下的文件,包括隐藏文件 |
-l | 长格式显示文件 |
-lh | 以方便阅读的长格式显示 |
功能:改变工作目录,将当前工作目录改变到指定目录下
cd [目录名]
命令 | 说明 |
---|---|
cd .. |
返回上一级目录 |
cd ../.. |
返回上两级目录 |
cd ~ |
返回家目录 |
cd / |
切换根目录 |
cd /home/chaopro/data |
绝对路径 |
cd ./data |
相对路径 |
功能:连机查找指令用法
man 指令
功能:用于查找文件里符合条件的字符串
grep [选项] '字符串' 文件名
选项 | 说明 |
---|---|
-a | 将binaray文件以text文件的方式查找数据 |
-c | 计算找到‘查找字符串’ 的次数 |
-i | 忽略大小写 |
-v | 反向选择,即显示出没有‘查找字符串’ 的行 |
功能:在指定目录下查找文件
find [路径] [选项]
选项 | 说明 |
---|---|
-name test | 查询名为text的文件 |
-size +100k | 文件大于100k的文件 |
-ctime n | 过去n天被修改过的文件 |
功能:控制用户对文件的权限
chmod [选项] 文件名
选项 | 说明 |
---|---|
-r | 赋予读权限 |
-w | 赋予写权限 |
-x | 赋予执行权限 |
777 | 赋予读、写、执行权限(读:4,写:2,执行:1) |
说明:(以-rw-r--r-x
的权限为645为例)
-
表示普通文件)rw-
:4+2=6)r--
:4)r-x
:4+1=5)功能:用来列出当前正在运行的进程
ps [选项]
选项 | 说明 |
---|---|
-A | 列出所有进程(!) |
-ef | 查看全格式的所有进程(!) |
-w | 显示加宽可以显示较多资讯 |
-au | 显示较详细的咨询 |
-aux | 显示所有包含其他使用者的进程 |
功能:用于删除执行中的程序或工作
kill [选项]/[信号] 进程号
选项 | 说明 |
---|---|
-l | 列出全部的信息名称 |
-s | 指定要送出的信息 |
信号 | 说明 |
---|---|
-1(HUP) | 重新加载进程 |
-9(KILL) | 杀死进程 |
-15(TERM) | 正常停止一个进程 |
功能:查看测试项目的日志:一般测试项目中有log目录文件会存放xxx.out文件,可以用tail -f动态实时查看日志
tail [选项] 文件名
选项 | 说明 |
---|---|
-f | 实时读取 |
-1000 | 查看最近1000行日志 |
例子
tail -f /opt/usr/log/momenta/mff_main_node.log.(⾃动补全Tab键) | grep -i objectdisp
功能:查看端口
netstat -anp | grep 端口
-a,显示所有
-n,不用别名显示,只用数字显示
-p,显示进程号和进程名
功能: 查看当前系统时间
data
功能:检测是否与主机连通
ping ip地址
man 命令名
命令 -help
info cat 命令名
whatis 命令名
上网查
功能:创建空目录
mkdir [选项] [路径] 文件名
选项 | 说明 |
---|---|
-p | 层级创建 |
-v | 显示创建顺序 |
功能:删除空目录,但不能删除非空目录,也不能删除文件
rmdir [选项] [路径] 目录名
选项 | 说明 |
---|---|
-p | 子目录被删除后,如果父目录也变成空目录的话就连带父目录删除 |
功能:新建空文件
touch [路径] 文件名
功能:删除文件或目录
rm [选项] 文件名
选项 | 说明 |
---|---|
-f | 强制删除 |
-r | 多级删除 |
-rf | 强制删除给定目录下所有文件和目录 |
rm和rmdir的区别:
功能:移动文件
mv [选项] [路径] 旧文件名 [新路径] [新文件名]
选项 | 说明 |
---|---|
-f | 如果目标文件已存在,不会询问直接覆盖 |
-i | 如果目标文件存在,会询问是否覆盖 |
功能:复制文件或目录
cp [选项] [路径] 旧文件名 [新路径] [新文件名]
选项 | 说明 |
---|---|
-f或–force | 强制复制,无论目标文件或目录是否存在 |
-i或–interactive | 覆盖前会询问 |
-r | 递归处理,将指定目录下的文件与子目录一并处理,若源文件或目录的形态不属于目录或符号连接,则一律视为普通文件处理 |
-R或–recursive | 递归处理,将指定目录下的文件与子目录一并处理 |
功能:查看目标文件的内容
cat [选项] 文件名
选项 | 说明 |
---|---|
-b | 对非空输出行编号 |
-n | 对输出的所有行编号 |
-s | 不输出多行空行 |
选项 | 说明 |
---|---|
-c | –create 建立新的备份文件; |
-C | –directory= 切换到指定的目录; |
-f | –file= 指定备份文件(注意:-f 是最后的参数,只能接文件名); |
-r | –append 新增文件到已存在的备份文件的结尾部分; |
-u | –update 仅置换较备份文件内的文件更新的文件; |
-v | –verbose 显示指令执行过程; |
-x | –extract或–get 从备份文件中还原文件; |
-z | –gzip或–ungzip 通过gzip指令处理备份文件; |
tar -xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar -xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
// 1.常规打开:vim ⽂件路径
vim mff_config.json
// 2.打开时定位到指定行:vim +行数 文件路径
vim +3 mff_config.json
// 3.打开时⾼亮关键词:vim +/关键词 文件路径
vim +/is_hnp_switch_ignore mff_config.json
打开文件后默认即为命令模式,从其他模式切换回命令模式按Esc
1、移动光标(光标高亮部分表示位于前⼀个字符的后面)
操作 | 说明 |
---|---|
h或← | 光标左移1个单位 |
l或→ | 光标右移1个单位 |
k或↑ | 光标上移1个单位 |
j或↓ | 光标下移1个单位 |
shift+6 | 光标移动到行首 |
shift+4 | 光标移动到行尾 |
gg | 光标移动到首行头 |
G | 光标移动到尾行头 |
2、搜索替换
操作 | 说明 |
---|---|
/字符串+回车 | 向下搜索指定字符串 |
n | 继续向下搜索 |
?字符串+回车 | 向上搜索指定字符串 |
N | 继续向上搜索 |
:%s/word1/word2/g | 将文件中的word1替换成word2 |
:%s/word1/word2/gc | 将文件中的word1替换成word2,需要用户确认 |
3、删除复制粘贴
操作 | 说明 |
---|---|
x | 删除后⼀个字符 |
X | 删除前⼀个字符 |
dd | 剪切一行 |
yy | 复制一行 |
p | 粘贴到下一行 |
P | 粘贴到上一行 |
u | 撤回 |
操作 | 说明 |
---|---|
i | 输⼊模式,左下角显示‒INSTER‒ |
o | 在光标下插一行并进入输入模式,左下角显示‒INSTER‒ |
R | 取代模式,输入的值会取代光标所在的内容 |
操作 | 说明 |
---|---|
:w | 保存 |
:q | 退出 |
:wq | 保存并退出 |
:q! | 不保存强制退出 |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
:w 文件名 | 将编辑后的内容保存到另⼀个文件中 |
两者都为GNU编译器
误区一:gcc只能编译c,g++只能编译c++
后缀为.c的,gcc视为c程序,而g++视为c++程序
后缀为.cpp的,gcc和g++都视为c++程序
在编译阶段,gcc命令不能自动和c++程序使用的库链接,通常用g++来完成链接,故为了统一就用g++了
误区二:gcc不会定__cpluscplus
宏,而g++会
误区三:编译只能用gcc,链接只能用g++
gcc test.c -E -o test.i // 该操作为预处理,即将源文件的头文件展开,通过-E进行预处理,其中-o是命名操作
gcc test.i -S -o test.s // 该操作为编译,即将预处理后的源代码变成汇编,通过-S进行编译
gcc test.s -C -o test.o // 该操作为汇编,即将汇编代码变为机器码(0、1)
gcc test.c // 直接获得最后的out文件,其实经历了上面三个步骤。默认生成的文件名为a.out
./a.out // 运行该out程序
Makefile的特点
Makefile文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 Makefile 文件就像一个 Shell 脚本一样,也可以执行操作系统的命令
Makefile文件一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
命名
makefile
或Makefile
,使用vim打开上述文件并进行编辑(注意不用新建这个文件,直接vim即可)vim Makefile
书写方法
make
就可以运行Makefile文件)目标:依赖
命令
app:sub.c add.c mult.c div.c main.c
gcc sub.c add.c mult.c div.c main.c -o app
app:sub.o add.o mult.o div.o main.o
gcc sub.o add.o mult.o div.o main.o -o app
sub.o:sub.c
gcc -c sub.c -o sub.o
add.o:add.c
gcc -c add.c -o add.o
mult.o:mult.c
gcc -c mult.c -o mult.o
div.o:div.c
gcc -c div.c -o div.o
main.o:main.c
gcc -c main.c -o main.o
变量的使用
%
是通配符,匹配一个字符串,例如:
自定义变量:变量名=变量值,例如var=hello
预定义变量(已经定义好了)
变量名 | 变量值 |
---|---|
CC | gcc |
CXX | g++ |
#定义变量
src=sub.o add.o mult.o div.o main.o
target=app
$(target):$(src)
$(CC) $(src) -o $(target)
sub.o:sub.c
gcc -c sub.c -o sub.o
add.o:add.c
gcc -c add.c -o add.o
mult.o:mult.c
gcc -c mult.c -o mult.o
div.o:div.c
gcc -c div.c -o div.o
main.o:main.c
gcc -c main.c -o main.o
-g
),其作用是在可执行文件中加入源代码的信息,比如可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以在调试时必须保证 gdb 能找到源文件(即源文件与可执行文件在一个文件夹下)gcc -g program.c -o program
gdb 可执行程序
,退出:quit/q
set args 10 20
, 获取设置参数:show args
list
(按enter默认执行上一条命令)list/l (默认位置即从main函数的第1行显示到第10行)
list/l 行号 (该行号显示在正中间)
list/l 函数名 (该函数显示在中间)
list/l 文件名:行号
list/l 文件名:函数名
show list/listsize
set list/listszie 行数
break/b 行号
break/b 函数名
break/b 文件名:行号
break/b 文件名:函数名
info/i break/b
delete/del/d 断点编号,编号在断点信息的Num字段
disable 断点编号,这条命令可从查看断点信息的Enb字段查看
enable 断点编号
break/b 10 if i==5,即在第10行加条件断点
start 程序会停在第一行,不会继续执行
run 遇到断点才停,如果没有断点则一次性执行完,经常使用run而非start
c/continue
n/next
p/print 变量名(打印变量值)
ptype 变量名(打印变量类型)
s/step(不同于n)
finish(跳出函数体,前提是函数体中无断点)
until (跳出循环,前提是循环中无断点)
display 变量名(自动打印指定变量的值)
i/info display 查看自己设置的自动变量
undisplay 编号,删除自动变量