当前位置:   article > 正文

Linux命令和工具章节笔记_linux替换字符串,先按esc

linux替换字符串,先按esc

linux操作系统是类UNIX的操作系统,与Mac OS为同源操作系统,均来自UNIX

1.常见指令以及权限理解

1.1常见指令

.

代表当前目录

..

代表上级目录

/

代表Linux操作系统的根目录

ls[选项][目录或文件]

列出目录下的所有子目录和文件,对于文件,列出其文件名以及其他信息

-l:罗列详细信息,通过首字母查看类型,其中"-"代表普通文件,"d"代表文件夹,“l”代表软链接文件

-a:隐藏文件(以“.”开头的文件)

-al:隐藏文件与详细信息都罗列

-lrt:对文件按时间排序,最新的放在最下面

pwd命令

显示用户当前所在的目录

cd[dir]命令

切换到输入的dir路径

绝对路径:一定以根目录开始

相对路径:相对某个文件目录开始,从某个文件夹开始计算路径

用户的家目录:用户登录到linux后,所在的路径.用下列语句可快速切换到家目录

  1. cd ~
  2. cd

~代表当前用户的家目录

若直接cd也可直接回到当前用户的家目录

linux是多用户的操作系统,管理员用户是root,普通用户名可以自己起,管理员用户权限相对更大

touch命令

touch + 文件名:新建一个不存在的文件

由下图可知,该文件以“-”开头,因此该文件是一个普通文件

在linux操作系统中并非以文件后缀区分文件类型

 touch也可以创建源代码文件:touch 1.c或touch 2.cpp都可以

mkdir命令

mkdir + 文件夹名:创建文件夹

 由上图可知,该文件类型为d,代表文件夹文件

可以一次性创建多个文件夹

 可以嵌套创建文件夹,增加参数-p即可,如下

rm命令

删除文件或文件夹,不可逆,使用时需谨慎

删除文件:rm filename

 批量删除时只需要在后面继续添加filename即可:rm filename1 filename2....

删除文件夹:rm -r [foldername]

-r:递归删除

如之前创建的多级目录linux,可用rm -r命令对其进行删除

-f:强制删除(包括只读文件(写保护)),若不希望删除时逐一确认,可增加-f选项,即直接删除,不会询问

-i:令其删除时进行逐一询问

rm *:相当于rm ./*, 删除当前目录下的所有,必须要分清在哪个文件夹下,不能再根目录下执行

rm -rf /*:代表从根目录开始删除所有,万万不能用

man命令

用于访问Linux手册页

可查询以下7个手册:

(1)普通命令

(2)系统调用

(3)库函数

(4)文件格式

(5)游戏定义

(6)附件以及一些遍历

(7)系统管理命令,只能由root用户使用

常用前两个,用于查找函数如何使用

可通过man + 手册号 + 函数名查询函数使用方法

cp命令

(1)拷贝文件

cp [源文件] [目标文件]:拷贝文件或文件夹

如下,将scott_data.sql拷贝到上级目录

(2)拷贝文件夹

cp -r 【源文件夹】 【目标文件夹】

cp命令还可以对文件进行重命名

eg:cp linux ../new_linux

 会将linux拷贝到上级目录,且名称更改了,拷贝文件夹同理

mv命令

mv【源文件】【目标路径】:移动文件或文件夹,将源文件移动到目标文件路径下,可以用于重命名

echo+重定向

可将字符串重定向到文件中,若文件不存在则会创建一个

cat命令

cat+filename:查看文件内容,如上图中用cat查看hello文件的内容

cat -n 【filename】:在输出文件内容时显示文件行号

more命令

more【filename】用于查看文件内容,针对大文件有优势

按f向后翻页,b向前翻页,q推出,当翻页到最后自动推出程序

head命令

也用于查看文件内容,从文件头部开始,默认查看10行

-数字:显示n行

tail命令

查看文件内容,从尾部开始查看,默认10行

 -f:循环读取文件内容,当文件内容改变时,会立即捕捉到

ctrl+c:可以结束一个命令或一个程序,也可终端当前命令的输入,可用此结束循环读取

注:ctrl+z在linux中不能结束程序

less命令

与more类似,分页显示

f:向后读取

b:向前读取

q:退出

不同的是当其到最后时不会自动退出

tar命令

tar压缩:tar -zcvf【压缩产生的压缩文件】.tar.gz【待压缩的文件或文件夹】

z:gzip压缩方式

c:创建压缩文件

v:展示压缩过程

f:指定产生的文件,一定要紧跟压缩产生的文件

tar解压缩:tar -zxvf【压缩产生的压缩文件】.tar.gz

x:解压缩

zip命令

zip压缩:zip【压缩产生的压缩文件】.zip 【待要压缩的文件或文件夹】

如果压缩的时文件夹,增加-r参数

zip解压缩:unzip【压缩产生的文件】.zip,默认解压到当前路径

unzip【压缩产生的压缩文件】.zip 【-d】【path】指定解压到path路径下

bz2命令

bz2压缩:tar -jcvf【压缩产生的压缩文件】.tar.bz【待压缩的文件或文件夹】

bz2解压缩:tar -jxvf 【压缩产生的压缩文件】.tar.bz

find命令

find 【path】 -name 【filename】查看path路径下的filename文件所在路径

grep命令

grep 【字符串】【目标源文件】在文件中查找字符串命令

-n:显示行号

-v:反向选择,即没有目标的行

history命令

查看历史执行过的命令

! + 历史命令编号可执行历命令

table:补全命令

可以在切换路径时,写长路径一次性切换

2.Shell命令以及运行原理

操作系统=操作系统内核+许多应用

操作系统内核:管理计算机的软硬件资源,本质是个软件

Shell的简单定义:命令行解释器,其中功能包括:

(1)将使用者的命令翻译给核心处理

(2)将核心的处理结果翻译给使用者

目前使用的命令行解释器:bash

当操作windows时,并非直接操作其内核,而是通过图形接口完成操作

shell对于linux有相同作用,主要对使用者指令进行解析,并将其传递给内核,再将内核的反馈结果通过shell解析给用户,shell作为使用者与内核之间沟通的桥梁存在

3.Linux权限

3.1Linux下用户的分类

linux下主要分为超级用户与普通用户

用户之间的切换:

su - [用户名]:可以切换用户,且切换后路径变为切换用户的家目录下

su [用户名]:可以切换用户,路径不变

有些用户需要输入密码,输入密码时,并不会进行显示

通过命令行提示符可以区分是哪个用户

普通用户是$结尾

超级用户是#结尾

eg:

在使用普通用户时,可以直接用exit退出,回到root

eg:

3.2文件访问者的分类

 ls-l的具体信息如图所示:

第1列为文件夹权限

第2列为硬链接数量

第3列为文件或文件夹的所有者

第4列为所属用户组

第5列为文件或文件夹大小

第6、7、8组合起来是文件最新的修改时间

第9列为文件或文件夹名称

以下对访问者权限进行解释:

权限实例:rwxrwxr-x

前3列rwx为文件所有者权限

中间3列rwx为所属组内用户针对该文件或文件夹的权限

最后3列r-x为针对其他用户的权限

所有者、组内用户、其他用户的关系类似于:宿舍中的一个人买了篮球,则这个人为所有者,同寝室的人为组内用户,其他寝室的人则是其他用户

3.3权限的分类

权限分为:可读、可写、可执行

可读(r):是否能够查看文件内容

可写(w):是否可以向文件写入内容

可执行(x):是否拥有执行文件内容的权限

针对所有者、组内用户与其他用户的权限都是:是否可读、可写、可执行的权限

3.4权限的表示形式

3.4.1字符表现形式

r--:只读

--x:仅可执行

-wx:可写可执行

rwx:可读可写可执行

-w-:仅可写

rw-:可读可写

r-x:可读可写

r-x:可读可执行

---:无权限

其中,r,w,x的位置都是固定的,分别在1、2、3号位置

3.4.2八进制数值表现形式

r:八进制:4, 二进制100

w:八进制:2, 二进制010

x:八进制:1, 二进制001

rw:八进制6, 二进制110

rx:八进制5, 二进制101

wx:八进制3, 二进制011

rwx:八进制7, 二进制111

---:八进制0, 二进制000

3.5文件/文件夹 权限针对用户的分类

分为针对所有者(u,user)、组内用户(g, group)、其他用户(o, other)的权限

如图所示,前三个rwx针对所有者,中间三个r-x针对组内用户,最后三个r-x针对其他用户

3.6修改权限(chmod)

chmod:修改权限

3.6.1字符修改方式

chmod【u/g/o】【+/-】【r/w/x】【文件名称】, 分别给出了针对哪种用户、增加或减少权限、什么权限、文件名称

 如果修改命令中不体现【u/g/o】,则针对3类用户都进行修改

chmod +[r/g/x] 文件名

3.6.2八进制数字修改方式

chmod 【八进制数字】 【文件名】

3.7不同权限针对文件或文件夹的作用

如图,创建了一个文件,其权限如下图所示:

 权限为:rw-r--r--

3.7.1文件

r:对于文件而言,具有读取文件内容的权限

如:当去除掉1.txt的所有者的r权限后, 对其的访问被拒绝,加回r权限后,可以被访问到

w:对于文件而言,具有是否能够修改文件内容的权限

如:当去除1.txt的所有者的w权限后,对其的写入被拒绝

x:是否具备执行文件的权限,是否能执行成功取决于文件的内容

对于可执行文件,通过./文件名来执行文件

如下所示,在没有x权限时执行会被拒绝,加上x权限后变为可执行,但其中内容无意义所以报错

 可写入一个命令来查看是否能够执行:

3.7.2文件夹

创建一个文件夹,并在其下创建一个文件,向其中写入一些内容

 由图可见,初始时test文件夹针对三类用户的权限为:rwxrwxr-x

r:决定用户能否查看文件夹下内容的作用

 如下,当去除r权限,无法显示test下的文件

w:决定用户能否移动/删除文件夹下文件的权限

如下,当没有w权限后,无法将test下的1.txt移动到当前目录中  ,也无法对其删除

x:决定用户能否进入到文件夹

如下,当没有x权限后,无法用cd命令进入到test中

3.8粘滞位

若其他用户也拥有w权限,可以删除所有者用户文件夹中的文件,这样不合理,因此需要给文件夹设置粘滞位。

设置了粘滞位后,该文件夹只能被以下用户删除文件:

(1)超级管理用户(root)

(2)该文件夹的所有者

(3)该文件的所有者

设置粘滞位的方式如下:

chmod +t [文件夹]

 如下图,设置粘滞位后可以看到最后的可执行权限变为了t

 

3.9其他

3.9.1如何创建普通用户

前提:root用户才能创建普通用户

命令:useradd 【用户名】

修改用户密码:passwd 【用户名】

3.9.2如何设置sudo

sudo:权限临时提升的一种方法

用用户配置到sudo file文件当中,用vim命令更改以下文件内容

/etc/sudoers

添加用户信息如下:

 添加完毕后用source命令令其生效

 添加完毕后,就可以使用sudo命令进行权限提升了

对于普通用户testuser,其查看root目录被拒绝,但可以通过sudo进行权限提升

3.9.3更改文件或文件夹的所属用户

chown【用户】【文件名】

chown -R 【用户】【文件夹名】递归更改

3.9.4更改文件或文件夹的所属用户组

chgrp 【用户】【文件名】

chgrp -R 【用户】【文件夹名】递归更改

3.9.5ctrl+c

用于终止当前输入的命令

4.工具

4.1包安装器--yum

安装与移除软件

常用功能如下:

查询软件信息:yum list

由于yum list的结果很多,不方便查找,因此通常用管道进行过滤

yum list | grep "xxx"

三列分别代表:软件包名称、版本、开发者

安装软件:yum install 【-y】【包名称】,-y默认yes

移除软件:yum remove 【-y】【包名称】,-y默认yes

4.2编辑器vim

编辑代码

4.2.1vim的3种常见模式

正常模式:vim 【filename】,该模式下不能输入

插入模式:按小写a进入插入模式,此时可以开始进行输入

底行模式(命令行模式):按“:”进入底行模式

退出vim需要在底行模式下输入wq进行保存退出,w为保存,q为退出,q!为强制退出,wq!为强制保存退出。

4.2.2正常模式下的快捷操作

前提:在正常模式下

移删复替撤更跳

移(移动):移动光标

(1)上下左右键

(2)hjkl,h左移,j下移,k上移,l右移

(3)gg:光标回到文本开始

(4)G:光标回到文本末尾

(5)^:回到行首

(6)$:回到行尾

删(删除):删除内容

(1)x:删除光标所在字符

(2)[num] x:删除num个字符(包含光标)

(3)X:删除光标所在位置的前一个字符

(4)dd:删除一行的内容

(5)[num] dd:删除num行的内容

复(复制):复制并粘贴内容

(1)yy:复制当前光标所在行

(2)p:粘贴到光标所在行的下一行

(3)P:粘贴到光标所在行的上一行

(4)【num】yy:复制num行

替(替换):替换光标所在字符

(1)r:替换光标所在字符(一次替换一个)

(2)R:替换光标所到之处的字符(一次能够替换多个)

撤(撤销):撤销上一次的命令

(1)u:撤销上一次误操作的命令

(2)ctrl + r:反撤销

更(更改)

(1)cw:更改光标所在处的字到字尾处

(2)c【num】w:更改num个字

跳(跳跃):跳转到指定行

【num】G:跳转到第num行行首

4.2.3安装vimforcpp

为了令写代码时更加方便,需要安装该插件

能够在写代码时有代码提示、括号匹配、自动缩进、行号显示等。

下载方法,在希望使用vimforcpp的linux用户的家目录下执行:

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

 需要输入用户密码

安装成功后,当前目录下会有隐藏文件:.vimrc,打开它,将51、52、53的2改为4即可

4.2.4其他

多行注释

(1)ctrl+v

(2)选择用注释的行,用hjkl选择

(3)shift+i进入插入模式

(4)输入注释符号

(5)按esc

多行去注释

(1)ctrl+v

(2)选择要删除的注释符号(用hjkl选择)

(3)按x删除

替换字符串(在底行模式/命令模式下进行替换)

(1)替换光标所在行首个目标字符串

命令:s/要替换谁/替换成什么/

(2)替换光标所在行所有的目标字符串

命令:s/要替换谁/替换成什么/g

(3)全文替换目标字符串

命令:%s/要替换谁/替换成什么/g

g:替换当前行所有

%:提示替换当前所有行

swp文件

在文件编译时,会产生swp文件,对于修改的内容会先写入swp文件中,若不及时删除,会在打开文件时报错,可直接将其删除。

4.3编译器gcc/g++

将源代码编译成为可执行程序

4.3.1gcc与g++

gcc用于编译C,g++可编译C也可编译C++

4.3.2编译的4个过程

预处理

编写以下程序

 通过将其预处理得到.i文件,在文件最后的结果如下:

 可见其中已经对其进行了宏替换、去注释,.i文件的其余内容为头文件展开

(1)宏替换,当进行宏定义时,最好加上括号

(2)头文件展开

(3)去注释

命令:

gcc/c++ -E test.c -o test.i

-E:告诉gcc/g++在编译程序时,只进行程序预处理,产生文件后缀为.i

编译

若代码中少写了“;”,在预处理阶段并不会报错,因为不进行语法语义检测

(1)语法和语义的检测

(2)源代码编译成为汇编指令

命令:

gcc/g++ -S test.c/test.i -o test.s

产生的.s文件中存放了汇编指令

汇编

将汇编指令转化为二进制代码(机器可识别代码)

命令:

gcc/g++ -c test.c/test.i/test.s -o test.o

产生.o文件,也被称为目标文件

链接

将若干二进制代码(.o)或库文件链接起来生成可执行程序

命令:

gcc/g++ test.o -o test

 也可以直接一步到位,直接生成可执行文件:

gcc/g++ test.c -o test

4.3.3静态编译与动态编译

区别:在于编译程序时,是否增加了-static,如果没有,则为动态编译,否则为静态编译

ldd命令可查看可执行程序依赖的文件:ldd 【filename】

eg:

动态库的后缀为.so

该程序还依赖了c运行时库:libc.so.6,包含了调用的若干函数的实现,如printf、strlen等

静态编译时,通过ldd命令无法查看其依赖的文件,因为在静态编译时,已经将依赖的函数实现都编译到可执行程序中。

二者的区别:

动态编译产生的可执行程序小,耗时小

静态编译产生的可执行程序大,耗时大(要将所有依赖的函数实现都编译到可执行程序中)

4.4调试器gdb

调试程序bug的工具

4.4.1程序发布的方式

debug模式与release模式

linux下debug版本的程序在编译时需要增加-g命令行参数

通过gcc/g++编译出的默认是release模式

二者的区别:debug比release多了调试信息

gdb调试时一定是调试debug版本

对比二者调试时的不同:

release 版本,由图可知,没有调试信息

 debug版本调试:

因此在调试可执行程序时必须用debug版本

4.4.2调试的基础方法

gdb 【可执行程序】

l:查看源代码(从main函数开始)

 也可以用 l + 函数名查看

r:运行程序

b [行号]:在某一行打断点

 n(next):单步执行

 s(step):逐语句,能够跳转到函数内部

c(continue):继续执行

info break:查看断点信息

其中的第一列--Num就是断点的序号

delete breakpoints:删除所有断点

delete breakpoint 【num】:删除断点序号为num的断点

disable breakpoints:禁用所有断点

disable breakpoint 【num】:禁用序号为n的断点

enable breakpoints:启用断点

p+变量名:打印变量的值,除了内置类型变量,还可以查看自定义类型(类、结构体)

info locals:查看当前栈局部变量的值

bt:展示调用堆栈,可通过调用堆栈来查询代码执行的函数调用关系,自底向上看

display 变量名:跟踪打印变量

undisplay:取消跟踪

4.4.3三种使用场景

(1)程序没有执行起来,调试可执行程序

(2)调试正在运行的程序

gdb attach 【pid】, pid是程序运行起来的进程号

(3)崩溃程序产生的coredump文件(核心转储文件)

coredump文件是程序崩溃瞬间内存的映像

程序崩溃主要原因:内存访问越界、解引用空指针、double free

执行命令:ulimit -a, 可以看到其中core file size,代表coredump允许的大小

 因此,若想产生核心转储文件,需要更改core file size大小

利用 ulimit -c 大小或unlimited(无限)

 利用解引用来造成程序崩溃

 对其进行编译并运行,会发生段错误,结果如下,在当前目录产生了核心转储文件coredump

 gdb 【可执行程序】【coredump文件】:进行调试

可对debug版本采用该方法对其coredump文件进行调试,所给信息比较详细,能够知道具体错误出现在何处

4.5自动化构建项目make

make与makefile可快速编译,产生可执行程序

4.5.1make

make是个命令,是自动化构建项目的工具,make根据makefile的内容进行解析,编译程序

makefile是个文件,文件内容中包含了编译程序时的规则,

4.5.2makefile的文件格式

格式如下:

  1. 目标对象:依赖对象
  2. 编译命令

目标对象:要生成的可执行程序

依赖对象:生成可执行程序时依赖的源代码

编译命令:如何通过依赖对象生成目标对象

注:编译命令前的空格是一个tab

使用时利用“make”命令,会对makefile进行解析,从产生可执行文件

 

makefile中注释用#

4.5.3make的工作方式

(1)只为生成第一个目标对象而服务

如下,makefile中内容如下时,使用make命令只生成mytest

(2)如果为了生成第一个目标对象,需要先生成依赖对象,则在makefile文件中找生成依赖对象的方法

如下图,在获取test.s文件时,需要先获取test.i才行

则makefile中可写如下内容,生成test.s需要依赖test.i,因此会到下面寻找test.i的生成方式,通过第二个得到了test.i的生成方法,则先生成test.i再生成test.s

 由此通过Make可以产生test.i进而产生test.s

(3)若依赖对象的最后一次修改时间小于目标对象的最后一次修改时间,则不生成

认为依赖对象是源代码,目标对象肯定是依赖于源代码生成的,而由于源代码没有更改,所以不生成新的目标对象

4.5.4makefile文件中的自定义变量和内置变量

(1)内置变量

$^:所有依赖的对象

$@:目标对象

$<:代表第一个依赖对象

eg:

如图,利用依赖对象生成目标对象

 若有多个依赖对象时,$^会囊括所有的依赖对象,仍会从中生成正确的可执行文件

(2)自定义变量

可以自己给变量起名字,用$来对其进行解析

如图,在执行make后,会产生release版本

4.5.5makefile补充

makefile定义伪目标

用.PHONY修饰目标

伪目标总是被执行(之前如果是最新的版本则make不会产生新的文件,现在则总是执行)

 

makefile定义清理规则

 图中,clean是自定义的名称

此时可通过make与make clean构建、删除可执行文件

 若想一个makefile对多个文件进行同时编译,可按以下写法

all依赖test与test2,因此会去生成test和test2的生成方式,从而实现对两个都进行编译

4.6版本管理工具git

代码的版本管理工具

4.6.1克隆仓库

将远端仓库克隆到本地

git clone xxx

 此时将Project克隆到了本地中

4.6.2提交至本地仓库

git add 文件名:将没有被管理的文件进行管理

git commit -m 文件名:将文件令本地仓库管理

4.6.3推送到远端仓库

git push【分支名】

4.6.4将远端仓库内容更新到自己本地仓库

git pull

4.6.5git status

可查看仓库状态,若本地仓库与远端仓库信息不一致,会提示提交更改

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/812011
推荐阅读
相关标签
  

闽ICP备14008679号