第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 【Linux】Linux基本指令和工具操作大集合(vim gcc/g++ gdb make/makefile git)

【Linux】Linux基本指令和工具操作大集合(vim gcc/g++ gdb make/makefile git)

时间:2021-06-21 03:25:10

相关推荐

【Linux】Linux基本指令和工具操作大集合(vim gcc/g++ gdb make/makefile git)

【Linux】Linux基本指令和工具操作大集合(vim、gcc/g++、gdb、make/makefile、git)

文章目录

【Linux】Linux基本指令和工具操作大集合(vim、gcc/g++、gdb、make/makefile、git)一、基础指令1.1 与目录相关的指令1.2 与文件相关的指令1.3 与压缩相关的指令1.4 与匹配查找相关的指令1.5 与时间相关的指令1.6 与权限相关的指令1.7 常用的操作二、常用工具2.1 yum2.2 vim编辑器2.3 gcc与g++编译器2.4 gdb调试器2.5 make与makefile自动化架构工具2.6 git版本管理工具

一、基础指令

1.1 与目录相关的指令

ls

功能:(list)查看文件/文件夹信息 ls [选项] [文件/目录] -a 所有; -l 详细信息; -t 以时间排序

使用方法ls [选项] [文件/目录]

补充:-a 所有; -l 详细信息; -t 以时间排序; -r 对目录反向排序

pwd

功能:显示用户当前所在的路径(绝对路径)

使用方法pwd

cd

功能:(change directory) 切换工作目录

使用方法cd [目录]

补充:. 当前路径; … 上一级目录; ~ 家目录; / 根目录

 ​绝对路径:从根目录开始计算到某一个文件夹所经历的路径

​ ​相对路径:是相对某一个目录到另一个目录所经历的路径

mkdir

功能:(make directory) 创建文件/文件夹

使用方法mkdir [文件夹名称]

mkdir -p [目录文件夹]

补充:-p (parents)可以带有路径的名称,一次可以建立多个目录

rmdir / rm

功能:(remove directory) 删除文件/文件夹

使用方法rm -r [待删除的文件夹]

补充:-r (recursion)删除目录以及其下所有文件; -f (force)强制删除; -i 删除前逐一询问确认

rm -r ./* 删除当前路径下的文件及文件夹

rm ./* 删除当前路径下的所有文件

对于rm而言慎用*比如这里的:

rm -rf /或者rm -rf /* 它会将linux操作系统中根目录下的所有文件都删除,慎用!!!

cp

功能:(copy) 复制文件/文件夹

使用方法cp -r [源文件] [拷贝到哪里]

cp -r [源文件] [拷贝到哪里去]/[重命名之后的名称]

补充:-f (force) 强制复制;-i (interactive) 覆盖之前先询问; -r (recursion) 递归处理

mv

功能:(move) 移动、重命名文件/文件夹

使用方法mv [源文件/文件夹] [移动到哪里去]

mv [文件/文件夹] [重命名之后的名称]

1.2 与文件相关的指令

touch

功能:创建文件

使用方法touch [文件名]

补充:-t 使用指定的日期时间

cat

功能:查看目标文件的内容

使用方法cat [文件名]

补充:echo “string” > [filename] 将string字符串重定向到filename当中

head

功能:显示文件的开头至标准输出中

使用方法head [文件名]

head -[n] [文件名]

补充:不加选项时,默认查看头部10行; -n 前n行

tail

功能:显示文件的尾部至标准输出中

使用方法tail [文件名]

tail -[n] [文件名]

tail -f [文件名]

补充:不加选项时,默认查看尾部10行; -n 尾部的n行; -f 监控文件是否有新的内容

more

功能:分页查看目标文件中的内容

使用方法more [文件名]

补充:f (front) 向下翻页;q (quit) 退出 或者 ctrl+c 退出

less

功能:分页查看目标文件中的内容

使用方法less [文件名]

补充:less比more更灵活,more没有办法向前面翻,只能向后翻。

 -i 忽略搜索时的大小写;-N 显示每行的行号。

 f (front) 向下翻页;b (back) 向上翻页;q (quit)退出 ctrl+c 退出;Pgup 和 PgDn 也可翻页。

1.3 与压缩相关的指令

zip / unzip

功能:压缩和解压缩文件/文件夹

使用方法压缩文件: zip [压缩后的文件名称].zip [待压缩的文件]

压缩文件夹:zip [压缩后的文件夹名称].zip [待压缩的文件夹] -r

解压缩:unzip [待解压缩的文件].zip

补充:-r 递归处理,将指定目录下的所有文件和子目录一并处理

gzip

使用方法压缩:tar -zcvf [压缩后的文件名称].tar.gz [待压缩的文件/文件夹]

解压缩:tar -zxvf [压缩后的文件名称].tar.gz

bzip2

使用方法压缩:tar -jcvf [压缩后的文件名称].tar.bz2 [待压缩的文件/文件夹]

解压缩: tar -jxvf [压缩后的文件名称].tar.bz2

补充:-z 采用gzip压缩;-j 采用bzip2压缩; -c (create)建立一个压缩文件;-x 解开一个压缩文件

1.4 与匹配查找相关的指令

find

功能:在目录结构中搜索文件

使用方法find -name [文件名]

补充

-name [filename] //通过文件名查找-size [n/-n/+n] //查找文件大小为n/小于n/大于n的文件-type [b/d/c/p/l/f]//通过文件类型查找,块设备、目录、字符设备、管道、符号链接、普通文件-ctime [-n] [+n] //通过文件创建时间来查找文件,-n指n天以内,+n指n天以前-atime [-n] [+n] //通过文件访问时间来查找文件,-n指n天以内,+n指n天以前-mtime [-n] [+n] //通过文件更改时间来查找文件,-n指n天以内,+n指n天以前-perm [777] //通过执行权限来查找-user [username] //通过文件属主来查找-group [groupname] //通过文件所属组来查找-nouser //查无有效属主的文件,即文件的属主在/etc/passwd中不存-nogroup //查无有效属组的文件,即文件的属组在/etc/groups中不存在-prune //查找时忽略某个目录-mount //查找文件时不跨越文件系统mount点-follow //如果遇到符号链接文件,就跟踪链接所指的文件

grep

功能:在指定文件中搜索字符串并打印出来

使用方法grep [选项] [要搜索的字符串] [文件]

补充:-i 忽略 大小写; -n 顺便输出行号;-v 反向选择; -c 计算找到该字符串的次数;-a 将binary文件以text文件的方式搜寻数据; --color==auto 将找到的字符串加上颜色显示。

1.5 与时间相关的指令

date

功能:时间显示

使用方法date +%F-%X

补充:%Y 年;%m 月;%d 日;%F 相当于%Y-%m-%d;

 %H 时;%M 分;%S 秒;%X 相当于%H:%M:%S。

时间戳

使用方法时间 -> 时间戳: date +%s

时间戳 -> 时间:date -d@[时间戳]

补充:Unix时间戳是从1970年1月1日开始所经历的秒数,不考虑闰年。

1.6 与权限相关的指令

系统操作权限: 管理员root权限 和 普通用户权限,使用su - root切换,exit退出。

对用户的分类:所属者-u 所属组-g 其他-o

对操作的分类:可读-r 可写-w 可执行-x

修改文件的权限:读权限:chmod u ±\pm± r / g ±\pm± r / o ±\pm± r [filename]

写权限:chmod u ±\pm± w / g ±\pm± w / o ±\pm± w [filename]

可执行权限:chmod u ±\pm± x / g ±\pm± x / o ±\pm± x [filename]

粘滞位:对于其他用户来说,在修饰了粘滞位的目录中可以创建文件,只能由超级管理员、该目录的所属者、改文件的所属者删除,不能删除他人的文件chmod +t [filename]

1.7 常用的操作

ifconfig、man、shutdown、ping、whoami、adduser、passwd

二、常用工具

2.1 yum

yum list

yum search

yum install

yum remove

2.2 vim编辑器

vim有三种模式:[普通模式]、[插入模式]、[底行模式]。三种模式的切换如下图。vim的使用我分为7个字来说:。这些使用的命令均是在[普通模式]下,即需要按下Esc键退出到[普通模式]。

移动

gg跳转到当前文本的首部G跳转到当前文本的尾部w以一个单词为基准向后移动 (word)b以一个单词为基准向前移动 (back)ctrl + f以“页”为基准向前翻页 (forward)ctrl + b以“页”为基准向后翻页 (back)

删除

​ 删除单个字符

x删除光标当前所在字符X删除光标之前的一个字符

​ 删除整行或多行

dd删除光标所在行的数据[num] dd从光标所在行开始,删除num行数据

复制

yy复制光标所在行的数据

[num] yy从光标所在行开始,复制num行数据

p向光标的下一行粘贴

P向光标的上一行粘贴

注意:vim中复制粘贴会出现缩进错乱问题

解决方法:在vim的[底行模式]在输入:set paste,在进入[paste模式]后在按i进入[插入 模式],进行复制粘贴就可以了。退出[paste模式]只需输入:set nopaste即可解除。具体原因和[paste]模式在***中有详细说明。

替换

r替换光标所在的单个字符R替换多个字符,进入replace模式,然后替换光标所在字符,Esc退出

撤销

u撤销上一次的操作ctrl + r反撤销

更改

cw更改光标当前所在字/词,并且会进入插入模式

跳转

[num] G跳转 到具体某一行

注释

ctrl + v进入V_BLOCK模式J(↓)、K(↑)、H(←)、L(→)选中所要注释的行shift + i输入注释符两次 ESC退出即可

反注释

ctrl + v进入V_BLOCK模式J(↓)、K(↑)、H(←)、L(→)选中所要反注释的行d / x删除注释符

2.3 gcc与g++编译器

预处理(宏替换、条件编译)<生成 test.i 文件>

预处理主要包括:(1)去注释(2)宏替换(3)头文件展开(4)条件编译

操作:gcc/g++ -E [源码文件] -o [预处理之后的文件名称].i

实例:g++ -E test.cpp -o test.i

● 将所有的#define删除,并展开所有的宏定义;

● 处理所有的预编译指令,例如:#if,#elif,#else,#endif;

● 处理#include预编译指令,将被包含的文件插入到预编译指令的位置;

● 添加行号信息文件名信息,便于调试;

● 删除所有的注释:// 、/**/等;

● 保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作。

编译(高级语言 -> 汇编语言)<生成 test.s 文件>

编译主要包括:(1)扫描(词法分析)(2)语法/语义分析(3)源代码优化(4)生成汇编指令

操作:gcc/g++ -S [源码文件] -o [编译之后的文件名称].s

实例:g++ -S test.i -o test.s

汇编(汇编语言 -> 二进制文件)<生成 test.o 文件>

汇编主要将编译阶段生成的.s 文件转化成机器可以识别的二进制文件

操作:gcc/g++ -c [源码文件] -o [汇编之后的文件名称].o

实例:g++ -c test.s -o test.o

链接(生成可执行文件/库文件)<生成 exe 文件>

链接主要包括:(1)地址和空间的分配(2)符号决议(3)重定位

操作:gcc/g++ [汇编之后的文件名称].o -o [链接之后的文件名称]

实例:g++ test.o -o test

● 地址和空间:系统给函数、变量分配地址和空间;

● 符号决议:也可以说地址绑定,分动态链接和静态链接;

● 重定位:假设此时又两个文件A与B。A需要B中的某个函数mov的地址,未链接前将地址置为0,当A与B链接后修改目标地址,完成重定位。

2.4 gdb调试器

程序的发布有debug模式release模式,Linux中gcc/g++默认的是release模式,因此在使用gdb调试时,必须在源代码生成二进制程序的时候加上 -g 选项

g++ test.cpp -o test -g //编译gdb ./test //加载

操作

( r ) run / start让代码运行起来( n ) next逐过程( s ) step逐语句( c ) continue继续执行,不再调试until直接运行到指定文件的指定行( l ) list查看源码文件

断点

( b ) breakpoint设置断点( ib ) info breakpoint查看断点信息enable [断点序号]使当前断点生效disable [断点序号]使当前断点不生效delete [断点序号]删除当前断点watch变量监控,给具体的变量打断点

内存

( p ) print打印变量的值( bt ) back trace查看函数调用栈情况( q ) quit退出调试

​ 程序在崩溃时,会产生cordump文件。cordump文件叫做核心转储文件,保存的是程序在崩溃之前正在做的事情,以及各个变量的内容。cordump文件的大小取决于core file size的大小,这个可以使用ulimit命令来更改。

常见的错误:

​ segmentation fault (段错误):11号信号 --> 访问内存越界,访问空指针

​ double free: 6号信号 --> 是否重复释放

2.5 make与makefile自动化架构工具

make:makefile的解释程序,逐行解释执行makefile中的项目构建规则

makefile:记录项目构架规则流程的文本文件

makefile的编写规则

格式:

目标对象:依赖对象[Tab] 编译命令

目标对象:想要生成的目标对象依赖对象:生成对象所依赖的对象编辑命令:使用依赖对象生成目标对象的方法

make解释makefile的规则

对比目标对象和依赖对象的最后一次修改时间(目标对象比较新,则不需要重新生成目标对象;反之,依赖对象比较新,需要重新生成目标对象)

永远只为生成第一个目标对象而服务

如果依赖对象不存在,则会在当前的makefile的编写规则中查找生成依赖对象的方法。

预定义变量

$^所有依赖对象

$@目标对象

$<所有依赖对象的第一个依赖对象

$%当目标文件是一个静态库文件时,代表静态库的一个成员名

$?所有比目标文件更新的依赖文件列表,空格分隔。如果目标文件时静态库文件,代表的是库文件(.o 文件)

通配符

实例

//实例1test:*.cgcc -o $@ $^//实例2.PHONY: clean //.PHONY的意思是clean是一个伪目标clean:-rm -rf *.o

clean的规则不要放在文件的开头,不然,这就会变成 make 的默认目标。有个不成文的规矩是——“clean 从来都是放在文件的最后”

2.6 git版本管理工具

克隆远端仓库

git clone [url]

提交代码到远端仓库

git 标记:git add [filename/foldername]提交到本地仓库:git commit -m “日志信息”推送到远端仓库:git push origin master

删除远端仓库内容

git rm [filename/foldername]git commit -m "×××"git push orgin master

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。