2021-10-20

Linux笔记

查看历史命令:history
历史命令向上滚动: ctrl + p
向下滚动:ctrl + n
删除光标后边的字符(光标覆盖的字符):ctrl + d
前面的字符 :ctrl + h
将光标移动到行首: ctrl + a home
移动到行尾:ctrl + e end
根目录: /
自动补全: tab
打印当前目录:pwd
显示目录下的信息: ls -a(显示隐藏文件) -a(以列表形式显示详细信息)
切换目录:cd .(当前路径) …(上级目录) ~(当前用户的家目录) -(切换到当前最近使用的目录)
创建目录:mkdir -p(创建多级不存在的目录)
删除空目录:rmdir aa
删除目录:rm -r(递归删除) -f(忽略警告) -i(显示警告)
创建文件:touch a.txt
拷贝文件/目录:cp a.txt b.txt 将 a.txt 拷贝到 b.txt,如果b存在则覆盖,不存在则创建
cp -r dir1 dir2 递归拷贝文件夹
查看文件内容:
cat a,txt
more 空格翻页,回车键下一行,ctrl + b 向上翻页,ctrl + f 向下翻页
less 同上 ctrl + p 上一行,ctrl + n 下一行
head -5 a.txt (查看文件前5行)
tail -5 a.txt (查看最后5行)

文件/目录改名:mv a.txt b.txt 将a.txt改名为b.txt
文件/目录移动:mv a.txt dir 将a.txt 移动到dir目录下

创建软连接:ln -s hello.c hello.soft 给文件hello.c创建一个名为hello.soft的软连接
使用相对目录只能在该相对目录下使用
ln -s /home/qiong/test.txt test.soft 使用绝对路径创建软连接,可以在任意目录下使用

创建硬链接:ln hello.c hello.hard 给文件hello.c黄健一个名为hello.hard,不占磁盘空间,只能给文件创建硬链接

wc 命令:获取文本文件的 行数 单词数(以空格分隔) 字节数 文件名
od 命令:查看二进制文件 -t 指定数据的显示格式 c ASCII字符 d 有符号十进制 f 浮点数
o 八进制 u 无符号十进制 x 十六进制数
du 命令:查看目录的大小 -h(以人易理解的方式展示目录大小)
df 命令:查看磁盘使用情况
which 命令:查看可执行文件的位置
查看当前登录的用户命令:whoami

修改文件权限:
文字设定法:chmod [who] [+|-|=] [mode]
who: (默认为a)
文件所有者:u
文件所属组:g
其他人 :o
所有人 : a
+:增加权限
- :减少权限
=:覆盖原来的权限
mode:
r:读
w:写
x:执行(程序、脚本)目录文件 是否可进入
例:chmod a+x temp 给文件 temp 所有人增加执行权限
数字设定法:
-:没有权限
r:4
w:2
x:1
例:chmod 777 temp 把文件temp把权限设置为7(r+w+x)7(r+w+x)7(r+w+x)
chmod -013 temp 给对应的减去权限
chmod +444 temp 给对应的增加权限

改变文件所有者:chown sudo chown 新所有者:新所属组 文件名 只有管理员权限才能进行修改
改变文件所属组:chgrp sudo chgrp 新所属组 文件名

文件查找:
按文件属性查找:
1.文件名:find + 查找目录 + -name + 文件的名字 (文件名可使用通配符 * ?)
2.文件大小:find + 查找目录 + -size + +10k (+大于 -小于,文件大小) k M
范围查找:find 查找目录 + -size +10M -size -100M 查找文件大小在10M-100M之间的文件
3.文件类型:find + 查找目录 + -type + f/d/l/b/c/s/p f(普通文件) d(目录) l(链接) b(块设备)
c(字符设备) s(socket设备) p(管道)
按文件内容查找:
grep -r “要查找的内容” + 查找路径

=======================================================
压缩包管理:
文件压缩:gzip *.txt 压缩所有的.txt后缀的文件 不能压缩目录
解压文件:gunzip *.gz 解压所有.gz后缀的文件
文件压缩:bzip2 *.txt 压缩所有的.txt后缀的文件 不能压缩目录
解压文件:bunzip2 *.bz2 解压所有.bz2后缀的文件

  1. tar – 不使用z/j参数,该命令只能对文件或目录进行打包
    参数:c --创建 --压缩
    x --释放 --解压缩
    v --显示提示信息 --压缩解压缩 --可以省略
    f --指定压缩文件的名字

           z --使用gzip的方式压缩文件 --.gz 
           j --使用bzip2的方式压缩文件 --.bz2
    

    压缩:
    tar zcvf 生成的压缩包的名字(xxx.tar.gz) 要压缩的文件或目录
    tar jcvf 生成的压缩包的名字(xxx.tar.bz2) 要压缩的文件或目录
    解压:
    tar zxvf 压缩包的名字(解压到当前目录)
    tar jxvf 压缩包的名字 -C 压缩的目录

  2. rar – 必须手动安装
    参数: 压缩:a
    解压:x
    压缩:
    rar a 生成的压缩文件改的名字(temp) 压缩的文件或目录

  3. zip –
    参数:
    压缩目录需要加参数 -r
    压缩:
    zip 压缩包的名字 压缩的文件或目录
    解压:
    unzip 压缩包的名字
    unzip 压缩包的名字 -d 解压目录
    总结:相同之处:
    tar/rar/zip 参数 生成的压缩文件的名字 压缩的文件或目录 —压缩的时候的语法
    tar/rar/unzip 参数 压缩包的名字 参数(rar没有参数) 解压目录 —解压语法

管道:| a | b 将命令a的输出作为命令b的输入

ps aux | grep bash
kill -l (查看信号)
kill -9 pid (杀死进程)

Linux下的环境变量: key-value:value:value (值可以有多个,值之间用冒号":"分割)
top 命令:

查看ip地址:ifconfig
查看网络是否通畅:ping ip地址/域名
查看网站ip地址:nslookup www.baidu.com

添加用户:
sudo adduser 新用户名
sudo useradd -r 参数。。。
删除用户:
sudo deluser 用户名 (不会删除/home目录下的用户目录,需手动删除)
sudo userdel -r 用户名 (会自动删除/home目录下的用户目录,更方便实用)
修改用户密码:
sudo passwd 用户名
修改当前用户密码:
passwd

ftp服务器搭建: – vsftpd
作用:文件的上传和下载
1> 服务器端:
1) 修改配置文件 – 如何有修改配置文件 --/etc/vsftpd.conf
2) 重启服务 – sudo service vsftpd restart
2> 客户端:
1) 实名用户登录
ftp + IP(server)
输入用户名
输入密码

	文件的上传和下载
	上传:	get 文件名
	下载:	put 文件名
	不允许操作目录,如果想操作目录	--打包 tar/rar/zip
	2) 匿名用户登录服务器

	ftp + IP(server)
	用户名:anonymous
	密码:直接回车
	
	不允许匿名用户在任意目录直接切换
	只能在一个指定的目录范围内工作
	需要在ftp服务器上创建一个匿名用户的目录	--匿名用户的根目录

	3) lftp客户端访问ftp服务器

nfs 服务器搭建:
1> 服务器端:
1) 创建共享目录
mkdir dir
2) 修改配置文件
/etc/exports
/home/qiong/share *(rw, sync)
3) 重启服务
sudo service nfs-kernel-server restart
2> 客户端:
1) 挂在服务器功响目录
mount serverIP:sharedir /mnt

ssh 服务器
1> 服务器端:
1) 安装ssh
sudo apt-get install openssh-server
2> 客户端:
1) 远程登录: ssh userName@serverIP
2) 退出登录:logout

从远程服务器上拷贝文件目录到本地
scp命令: scp -r userName@serverIP:/home/qiong/dir /home/hui/dir

==============================================

vi – vim vim时从vi发展过来的一款文本编辑器
工作模式:
1) 命令模式 – 打开文件之后,默认进入命令模式
2) 编辑模式 – 需要输入一些命令,切换到编辑模式
3) 末行模式 – 在末行模式下可以输入一些命令

  1. vim使用:
    命令模式下的操作:
    1> 光标移动:
    H J K L 前 下 上 后
    行首:0 home
    行尾:$ end
    文件开始位置:gg
    文件末尾: G
    行跳转:300G nG (n为数字)
    2> 删除操作:
    删除光标后面的字符:x
    删除光标前面的字符:X
    删除单词:dw (光标移动到单词开始位置,否则只能删除单词后的一部分)
    删除光标到行首的字符串:d0
    删除光标的行尾的字符串:d$ D
    删除当前行:dd
    删除多行:ndd (n – 自然数)(删除从当前行开始的以下n行)

    3> 撤销操作:
    撤销:u
    反撤销: ctrl + r

    4> 复制粘贴:
    复制一行:yy
    复制多行:nyy

     粘贴:p (小写,光标所在行的下一行)
     粘贴:P (大写,光标所在行的上一行)
    

    5> 可视模式:
    切换到可是模式: v
    选择内容:hjkl
    操作: 复制:y 删除:d

    6> 查找操作:
    1) /hello
    2) ?hello
    3) #
    遍历时候的快捷键:n (N)
    7> 替换当前字符:r (只能替换单个字符)

    8> 查看man文档:
    光标移动到需要查看的单词上:shift + k

    缩进:
    >>(向右缩进)
    <<(向左缩进)

文本模式下的操作:
切换到文本模式:
a – 在光标所在位置的后边插入
A – 在当前行的尾部插入

	i -- 在光标所在位置的前边插入
	I -- 在光标所在行的行首插入

	o -- 在光标所在行的下边开辟一个新的行
	O -- 在光标所在行的上边开辟一个新的行

	s -- 删除光标后边的字符
	S -- 删除光标所在的行

末行模式:
替换:s/tom/jack/g /g 该行所有tom都被替换为jack
:%s/tomjack/g %s 替换所有行
: 20,25s/tom/jack/g 替换20到25行的所有tom
保存退出:
q:退出
q!:退出不保存
w:保存
wq:保存退出
x: 等于wq
输入命令:
! + 命令 如:!ls

在命令模式下保存退出:ZZ
分屏操作:
	sp -- 将屏幕分为两部分,水平
	vsp -- 将屏幕分为两部分,垂直
	sp(vsp) + 文件名 水平或垂直拆分窗口显示两个不同的文件
			
	ctrl + ww 切换两个屏幕
	退出:wqall -- 保存并推出所有屏幕
	          wq   -- 保存并退出光标所在的屏幕

g++ 的使用:
-E 预处理,生成后缀文件 *.i
-S 汇编,生成后缀文件 *.s
-c 编译,生成后缀文件 *.o
-o 指定输出文件的名字
-I(大写i) 指定头文件的搜索路径
-L 指定库的目录
-l(小写L) 指定库的名字 (libmytest.a 的库名字为mytest)
-D 定义宏定义
-O 编译优化,级别1`3,级别月打效果越好,编译时间越长
-g 在编译时产生调试信息
-w 关闭编译时的警告,不显示任何warming信息
-Wall 编译时显示所有警告
-Werror 视警告为错误,出现任何警告就放弃编译

多文件一起编译:
g++ c1.cpp c2.cpp c3.cpp -o app	(将c1.cpp c2.cpp c3.cpp 一起编译生成可执行文件app)

静态库:
1> 命名规则
1) lib + 库的名字 + .a
2) libmytest.a
2> 制作步骤:
1) 生成对应的.o文件 g++ -c *.cpp
2) 将生成的.o文件打包 ar rcs + 静态库的名字(libmytest.a) + 生成的所有的.o
3> 发布和使用静态库:
1) 发布静态库
2) 头文件
4> 优缺点
1) 优点:
1 发布程序的时候,不需要提供对应的库
2 加载库的速度快
2) 缺点:
1 库被打包到应用程序中,导致应用程序体积很大
2 库发生了改变,需要重新编译程序

5> 使用:
	g++ main.cpp -I lib/libmytest.a -I include -o main
	g++ main.cpp -I inlcude -L lib -l mytest -o main

动态库(共享库):
1> 命名规则:
1) lib + 名字 + .so
2> 制作步骤:
1) 生成与位置无关的代码(生成与位置无关的.o) g++ -fPIC -c *.cpp -I …/include
2) 将.o打包成动态库(共享库) g++ -shared *.o -o libmytest.so
3> 发布和使用动态库:
4> 解决程序执行时无法被加载的问题:
1)将该动态库拷贝到系统目录/lib下 (不允许使用使用)
2)export LD_LIBRARY_PATH=./lib (临时制作时使用)
3)修改用户目录下的.bashrc配置文件,将2)使用绝对路径写在.bashrc中,重启终端生效
(可以永久使用,不推荐使用)
4)
1 需要找到动态链接器的配置文件 – /etc/ld.so.conf
2 动态库的路径写到配置文件中 – 绝对路径
3 更新 – sudo ldconfig -v

5> 优缺点
6> 使用:
	g++ main.cpp -L ./lib -l mytest -I ./include -o app

gdb调试:
1) 启动gdb:
start – 只执行一步
n – next
s – step(单步), – 可以进入到函数体内部
c – continue – 直接停在断点的位置

2) 查看代码
	l -- list
	l 10(函数名)
	l filename:行号(函数名)

3) 设置断点
	设置当前文件断点:
	b -- break
	b 10(函数名)
	b filename:行号(函数名)

	设置条件断点:
	b 10 if value == 10
	删除断点:
	delete -- del  -d
	d 断点的编号

4) 查看设置的断点:
	获取编号:
		info -- i
		info b

5) 开始执行gdb调试:
	进入函数体内部:s
	从函数体内部跳出:finish
	不进入函数体内部:n
	退出当前循环:u

6) 查看变量的值:p var -- print  -- p i

7) 查看变量的类型:ptype 变量名

8) 设置变量的值:set var 变量名 = 值

9) 设置追踪变量:
	display
	取消追踪变量:undisplay 编号
	获取编号:info display  -- i display

10) 退出gdb调试:
	quit

多进程 fork 注意事项:
默认跟踪父进程
set follow-fork-mode child  	命令设置gdb在fork之后跟踪子进程
set follow-fork-mode parent 	命令设置gdb在fork之后跟踪父进程
注意,一定要在fork函数调用之前设置才有效!

makefile的编写:
1) makefile的命名:makefile Makefile
2) makefile的规则:
规则中的三要素:目标,依赖,命令
目标:依赖条件
命令
子目标和中即目标的关系:
更新目标的原则:
3) makefile的两个函数:
src = $(wildcard ./*.cpp) 搜索目录内的所有.cpp文件并返回
objects = $(patsubst ./%.cpp, ./%.o, ( s r c ) ) 将 变 量 (src)) 将变量 (src))(src)中的所有.cpp文件替换成.o并返回
4) makefile的三个自动变量
$< 规则中的第一个依赖条件
$@ 规则中的目标
$^ 规则中的所有依赖条件
5) 定义伪目标:
.PHONY

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值