文章目录
基础指令
-
ls、pwd、touch、mkdir、netstat、cp、mv、cd、tar、zip、unzip、grep、pstack、ps、rm、cat、more、less、head、tail、find、ulimit -a、clear、whoami、man
-
touch:创建文件,也包括源代码文件;要注意,"-":普通文件,"d":文件夹文件。在Linux系统中,一切皆文件,且文件在Linux操作系统当中并不是以后缀来区分文件类型的。
-
rm:删除文件或文件夹,不可逆操作,慎用,删除文件夹加上-r参数:表示递归删除,此外,-i参数表示每一步都询问是否操作;-f:强制执行,不再进行询问
-
cat:查看文件内容;-n参数:在输出文件内容的同时也输出文件行号
-
head:查看文件内容,从文件头部开始默认查看10行
-
tail:查看文件内容,从文件尾部开始默认查看10行
-
find:查看文件所在路径 find [path] -name [filename]
-
grep:在文件中查找字符串的命令
shell命令以及运行原理
- Linux严格意义上说是一个操作系统,称为"核心 "(kernel),但是我们一般用户 ,不能直接使用kernel,而是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通
- 操作系统 = 操作系统内核 + 一堆应用;操作系统内核:管理计算机中的软硬件资源,本质上是一个软件
- 从技术角度:shell是命令行解释器,主要是将用户输入的命令递交给操作系统内核;同时将内核执行的结果反馈给用户,起到了一个承上启下的功能
- 简单总结一下:shell是一个命令行解释器;bash:一个具体的命令行解释器
Linux权限
-
字符表现形式:r:可读;w:可写;x:可执行;rwx相对位置固定,如果没有某个权限在该权限的位用"-"表示
-
八进制数值表现形式,有三个十进制数字,最左位标识r权限,中间位标识w权限,最右位标识x权限,每个数字由三位二进制数字转化为为十进制得到。在二进制中:rwx对应三个二进制数字,同样的,最左位标识r权限,中间位标识w权限,最右位标识x权限,每个二进制位若为1,则表示有该权限,为0则表示没有,比如100,则表示有r权限,没有w权限和x权限,转换为十进制是4,则十进制4表示r--权限
-
第一个字符标识该文件是普通文件还是文件夹,若是字符表现形式,则后面三个一组表示某类用户的权限,第一组表示文件所有者的权限(user--u),第二组表示所属组内用户针对该文件或文件夹的权限(group--g),第三组表示对于其他用户的权限(other--o),若是八进制数值表现形式,则每一个转换后的十进制数字单独为一组
-
修改权限
使用chmod命令:
- 字符修改方式:chmod [u/g/o] [+/-] [r/w/x] [filename],eg:chmod u-w a.out;如果不体现[u/g/o],则针对三类用户都做出修改
- 八进制数字修改方式:chmod [数字] [filename] eg:chmod 777 a.out
-
不同权限针对文件/文件夹的作用
- r:对文件而言,表示是否具有读取文件的权限;对文件夹而言,决定用户是否能够查看文件夹下的内容
- w:对于文件而言,表示是否具有能够修改文件内容的权限;对于文件夹而言,决定用户是否能够移动/删除文件夹下文件
- x:对于文件而言,表示是否具有执行文件内容的权限;对于文件夹而言,决定用户是否能够进入到文件夹
粘滞位
- 使用场景:给文件夹设置粘滞位
- 作用:设置了粘滞位的文件夹只能被以下用户删除文件:root用户(超级管理用户)、该文件夹的所有者、该文件的所有者
- 用chmod + t [文件夹] 设置粘滞位
工具
-
1、yum
yum的常规操作:查询软件信息、安装软件、移除软件,合称yum的三板斧
-
2、vim:代码编辑器
常见的三种模式:正常模式、插入模式、底行模式
正常模式下的快捷操作:
移动:移动光标:
-
上下左右键
-
h:左移;j:下移;k:上移;l:右移
-
gg:光标回到文本开始
-
G:光标回到文本末尾
-
^:光标回到所在行行首
-
$:光标回到所在行行尾
删除:删除内容
- x:删除光标所在字符
- [num]x:删除num个字符,包含光标所在字符
- X:删除光标所在位置前一个字符
- [num]X:删除num个字符,向前删除
- dd:删除本行内容
- [num]dd:删除num行内容,向下删除
复制:
-
[num]yy/yy:复制当前光标所在/num行
-
p:粘贴到光标所在行的下一行
-
P:粘贴到光标所在行的上一行
替换:
-
r:替换光标所在字符,一次替换一个
-
R:替换光标所到之处的字符,一次可以替换多个
撤销:
-
u:撤销上一次误操作的操作
-
ctrl+r:反撤销
更改:
- cw:更改光标所在处的字到字尾处,用了该命令后直接进入插入模式
- [c#w]:#代表的是几个字,表示说能修改几个字
跳跃:
- [#G]:#代表的是数字,eg:3G表示跳转到3行行首
删除:删除内容
- x:删除光标所在字符
- [num]x:删除num个字符,包含光标所在字符
- X:删除光标所在位置前一个字符
- [num]X:删除num个字符,向前删除
- dd:删除本行内容
- [num]dd:删除num行内容,向下删除
复制:
-
[num]yy/yy:复制当前光标所在/num行
-
p:粘贴到光标所在行的下一行
-
P:粘贴到光标所在行的上一行
替换:
-
r:替换光标所在字符,一次替换一个
-
R:替换光标所到之处的字符,一次可以替换多个
撤销:
-
u:撤销上一次误操作的操作
-
ctrl+r:反撤销
更改:
- cw:更改光标所在处的字到字尾处,用了该命令后直接进入插入模式
- [c#w]:#代表的是几个字,表示说能修改几个字
跳跃:[#G]:#代表的是数字,eg:3G表示跳转到3行行首
-
3、编译器:gcc/g++
gcc:编译C语言程序,后缀为.c
g++:编译C++/C程序,后缀可以为:.c/.cpp/.cc/.cxx/.hpp
生成可执行程序的4个过程:预处理(-E)、编译(-S)、汇编(-c)、链接
-
4、gdb:调试器
程序的发布方式有两种,一种是debug模式,一种是release模式,Linux下要得到debug版本的程序在编译时需要增加一个-g命令行参数,因为默认是不加-g的,则为release版本。debug比release多了调试信息,用gdb调试的时候一定是调试debug版本
调试的基础方法:
- l:查看源码,从main函数开始
- l[func_name]:查看某个函数的源码
- r:程序执行起来
- n:逐过程
- s:逐语句
- b [行号]:在改行设置断点
- i b:查看断点
- c:继续执行
- delete breakpoints:删除所有断点
- delete breakpoints n:删除序号为n的断点
- disable breakpoints:禁用断点
- enable breakpoints:启用断点
- info locals:查看当前栈帧局部变量的值
- p [变量名]:查看变量的值,不仅可以查看内置类型变量,也可以查看自定义类型变量(struct、class、this)
- bt:展示调用堆栈,可以通过调用堆栈来看代码执行的函数调用关系
- q:退出
三种使用场景:
- 事前:可执行程序执行之前
- 事中:可执行程序正在执行时
- 事后:运行完毕,发生崩溃,调试崩溃程序产生的coredump文件,coredump文件:核心转储文件,是在程序在崩溃(内存访问越界、解引用空指针、double free)的一瞬间内存的映像(相当于案发现场)
-
5、自动化构建项目:make
make是一个命令,是自动化构建项目的工具;makefile/Makefile是一个文件,文件内容包含了编译程序时的规则。make根据makefile的文件内容,进行解析,编译程序(构建项目)
make的工作方式:
- 只为生成第一个目标对象而服务,如果生成了目标对象,则后续文件当中的内容不再进行解析,如果为了生成第一个目标对象,需要先生成依赖对象,则在makefile文件中查找生成依赖对象的方法,如果发现依赖对象不存在,就报错返回
- 若依赖对象的最后一次修改时间先于目标对象的最后一次修改时间,则不再重新生成,意思就是依赖文件没有更新,目标对象就不必更新,不必再重新生成
makefile文件当中的自定义变量和内置变量:
内置变量:
- $^:所有依赖的对象
- $@:目标对象
- $<:代表第一个依赖对象
自定义变量:自己给变量起名字,后续使用$符号进行解析
-
6、git:版本管理工具
- 克隆仓库
- 提交到本地仓库
- 推送到远端仓库
- 将远端仓库内容更新到自己本地仓库
- git status