313 lines
9.9 KiB
Plaintext
313 lines
9.9 KiB
Plaintext
ctrl+p 上一个命令,ctrl+n 下一个命令
|
|
ctrl+b 光标回移, ctrl+f 向后移动, ctrl+a 行首, ctrl+e 行尾
|
|
ctrl+h 删除前, ctrl+d 删除后。Linux中光标盖住的是后一个字符。
|
|
ctrl+u 删除光标前面所有。ctrl+l 清屏。
|
|
|
|
vim 基础操作:
|
|
j :下移一行
|
|
k :上移一行
|
|
h :左移一个字符
|
|
l :右移一个字符
|
|
gg :跳到第一行
|
|
G :跳到最后一行
|
|
0 :左移到行首
|
|
$ :右移到行尾
|
|
ctrl + f :向下翻页
|
|
ctrl + b :向上翻页
|
|
ctrl + d :向下翻半页( d 代表 down )
|
|
ctrl + u :向上翻半页( u 代表 up )
|
|
H :移动到屏幕最上面(页面本身不动)( H 代表 high )
|
|
L :移动到屏幕最下面(页面本身不动)( L 代表 low )
|
|
M :移动到屏幕中间行(页面本身不动)( M 代表 middle )
|
|
zt :把当前行移动到屏幕最上面( t 代表 top )
|
|
zb :把当前行移动到屏幕最下面( b 代表 bottom )
|
|
z. :把当前行移动到屏幕中间
|
|
:<n> :跳到第 <n> 行(需要回车)
|
|
|
|
ls 可传一个目录参数。
|
|
Liunx的目录结构:
|
|
/bin: 常用命令
|
|
/boot: 启动系统的核心文件
|
|
/dev: Linux的外部设备,访问设备与访问文件的方式是一样的。
|
|
/etc: 系统管理所需要的配置文件和子目录。
|
|
/home: 用户目录。
|
|
/lib: 库文件。
|
|
/lost+found: 一般是空的,非法关机之后存放一些文件。
|
|
/media: Linux会自动识别一些设备,如U盘,自动挂载到Media下面。
|
|
/mnt: 让用户临时挂载别的文件系统时用。
|
|
/opt: 给主机额外安装软件所摆放的目录, 默认为空。
|
|
/proc: 虚拟的目录,内存的映射,可以直接访问这个目录来获取系统信息。
|
|
这个目录的内容不在硬盘而是在内存中, 可以直接修改。
|
|
/root: 超级用户目录。
|
|
/sbin: 系统管理员的程序。
|
|
/selinux: 是Redhat/Centos特有的一个安全机制,类似防火墙。
|
|
/srv: 服务启动之后需要提取的数据。
|
|
/sys: Liunx2.6内核的大变化
|
|
/tmp: 存放临时文件。
|
|
/usr: 很多用户程序和文件放在这里。
|
|
/usr/bin: 系统用户程序。
|
|
/usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
|
|
/usr/src: 内核代码默认放置目录。
|
|
/var: 存放不断扩充的东西,比如各种日志文件。
|
|
|
|
|
|
cd -: 切换到临近目录。
|
|
yun@debian:
|
|
yun是当前登录的用户名,debian是安装系统时设置的主机名。
|
|
$: 普通用户
|
|
#: 超级用户
|
|
直接cd,回家目录。
|
|
|
|
创建软链接:
|
|
ln -s /home/yun/hello.c /home/yun/hello.soft
|
|
ln -s /home/yun/download xxx.soft
|
|
创建硬链接(并没有拷贝):
|
|
ln /home/yun/hello.c hello.hard
|
|
|
|
wc: 获取文本文件的行数,单词数,字符数。
|
|
od: 查看二进制文件,od -t 指定显示格式。
|
|
du: 查看当前目录的大小。du -h
|
|
|
|
-rw-rw-r--,-文件,rw-文件所有者权限,rw-所属组权限。r--其他人权限。
|
|
chmod:
|
|
1.文字设定,[who]文件所有者u, 文件所属组g, 其他人o, 所有人a
|
|
+-= (增减覆盖) [mode]读r,w写,x执行。
|
|
2.数字设定,r->4, w->2, x->1, chmod -001 xxx
|
|
|
|
修改文件所属组所有者:
|
|
chown Lisi main.cpp 所有者变了,但是所有组没有变化。
|
|
chown Zhangsan:group2 都变了。
|
|
chgrp 仅修改所有组。chgrp group3 xxx.cpp
|
|
|
|
mkfifo 创建管道
|
|
所有的目录能查看和进入,必须有x,可执行权限。
|
|
find [path] -name "xxx.cpp"
|
|
?: 通配一个字符
|
|
*: 通配所有字符。
|
|
find [path] -size +10k[-10 k,M,]
|
|
查找范围,多个-size即可。
|
|
find [path] -type d
|
|
文件类型-所有者权限-同组用户权限-其他人权限-硬链接数-所有者-所属组-占用-时间
|
|
Linux 文件类型:
|
|
-: 普通文件(f)
|
|
d: 目录
|
|
l: 链接符
|
|
b: 块设备
|
|
c: 字符设备
|
|
s: socket设备
|
|
p: 管道
|
|
|
|
卸载硬盘:umount /media/user/xxx-usb
|
|
sudo fdisk -l 查看设备信息。比如U盘是/dev/sdb
|
|
挂载硬盘:mount devicename /mnt
|
|
sd->SCSI Device
|
|
hd->Hard Disk
|
|
fd->Floppy Disk
|
|
主分区最多有4个。sda4
|
|
|
|
压缩相关:
|
|
gzip 打包:g(un)zip *.txt ->xxx.gz 文件
|
|
b(un)zip2 *.txt 都不会保留原文件,没有打包压缩。->bz2文件
|
|
|
|
tar: c-创建,x-解压缩, v-显示信息, f-指定名字,
|
|
z-使用gzip的方式压缩,j-使用bzip2的方式压缩,不添加zj只能打包。
|
|
|
|
压缩:tar zcvf xxx -> xxx.tar.gz tar jcvf xxx -> xxx.tar.bz2
|
|
完整示例:tar zcvf result.tar.gz *.txt
|
|
解压到指定目录:
|
|
tar zxvf xxx.tar.gz -C /home/yun/test/
|
|
|
|
终端[文字终端][图形界面终端]
|
|
tty1->tty6 tty7
|
|
who
|
|
pts: 设备终端
|
|
|
|
PID 进程的ID
|
|
ps [a 查看当前所有用户][u 显示用户的信息][x 查看没有终端的应用程序]
|
|
使用管道重定向(|){输出作为另外一个命令的输入}
|
|
ps aux | grep bash
|
|
kill -l 查看信号
|
|
kill -SIGKILL 2351 或者 kill -9 8311 也可以
|
|
|
|
env 环境变量
|
|
|
|
网络相关命令:
|
|
ip addr, ping [-c 4 -i xx s], ifconfig,
|
|
nslookup www.baidu.com 查看IP地址。
|
|
|
|
用户的添加:
|
|
adduser (脚本) + Zhangsan
|
|
useradd (命令)
|
|
su Zhangsan 切换用户
|
|
useradd [-s 什么解析器(/bin/bash)][-g 所属组(Robin)][-d 目录(/home/xxx)]
|
|
usermod -s /bin/bash xxx 中的 -s 意思与上述一致。
|
|
[-m 如果没有xxx目录就创建Robin]
|
|
更改所属组: chown xxx:xxx somedir_or_file
|
|
groupadd xxxGroup 增加组
|
|
passwd Zhangsan 修改密码
|
|
删除用户:deluser, userdel -r
|
|
/etc/passwd下可以查看用户
|
|
|
|
vsftpd: FTP服务器的一个软件。
|
|
service xxx restart
|
|
lftp: 可以上传和下载目录。
|
|
|
|
alias: 查看命令是否被封装
|
|
ldd: 查看so文件依赖。
|
|
Linux会优先搜索LD_LIBRARY_PATH,之后再去默认位置查找。
|
|
也可以设置:/etc/ld.so.conf, ldconfig更新生效。
|
|
|
|
gdb xxx
|
|
l 查看源码,包含main函数的文件。
|
|
否则 l qimen.c:20 查看这块代码
|
|
l qimen.c:run 也可以。
|
|
继续查看后面的继续输入l或者直接回车。
|
|
break xxx行(b 行) 普通断点。
|
|
特殊断点:b 20 if i==15
|
|
i b: 查看断点信息。(info break)
|
|
start开始运行,执行一步。
|
|
r 直接跑。[run]
|
|
单步调试:n, 直接到断点:c (continue)
|
|
进入函数:s (step)
|
|
p 打印值。
|
|
ptype 查看变量类型。
|
|
display i 追踪变量i的值。
|
|
undisplay 变量编号取消追踪。
|
|
u 跳出单次循环
|
|
finish 跳出进入的函数体。取消里面的断点才可以退出。
|
|
d 编号删除断点。[del]
|
|
set var i=10 设置变量的值。
|
|
quit 退出。
|
|
|
|
Makefile的编写:
|
|
三要素:目标,依赖,命令。 --> 一条规则
|
|
result: sub.h sub.cpp
|
|
g++ main.cpp sub.h sub.cpp -o result
|
|
分开编译,防止每次全部编译。
|
|
math.o: sub.cpp
|
|
g++ -c sub.cpp
|
|
main.o: main.cpp
|
|
g++ -c main.cpp
|
|
result: main.o math.o
|
|
g++ -o result main.o math.o
|
|
|
|
Makefile中的变量。
|
|
obj=main.o math.o
|
|
result: $(obj)
|
|
g++ -o result $(obj)
|
|
|
|
vim 替换:3,4s/prestr/afterstr
|
|
makefile语法一样的情况:
|
|
{模式规则}
|
|
%.o:%.c
|
|
g++ -c $< -o $@
|
|
原理:
|
|
1.例如依赖sub.o,那么%.o中的%就对应成了sub,
|
|
即sub.o: sub.c
|
|
2.$<: 自动变量, 规则中的第一个依赖。
|
|
$@: 规则中的目标。
|
|
$^: 规则中的所有依赖。
|
|
以上只能在命令模式中使用。
|
|
一般:CPPFLAGS:预处理器需要的参数,例如: -I
|
|
CFLAGS:编译参数,例如: -Wall
|
|
LDFLAGS:链接库参数,例如: -L
|
|
makefile中的函数,所有的函数都有返回值。
|
|
src=$(wildcard ./*.c)
|
|
obj=$(patsubst ./%.c, ./%.o, $(src))
|
|
|
|
.PHONY:clean 声明伪目标,不检查文件。
|
|
-rm [-]如果当前命令失败,继续执行。
|
|
|
|
全局变量不初始化=0,局部的未知。
|
|
FILE* 结构体:文件描述符,读写指针,I/O缓冲区(addr)de:8KB
|
|
Linux 启动一个进程后内存模型:{虚拟地址}
|
|
虚拟地址作用:1.空间隔离 2.访问不连续物理空间 3.物理内存分配。
|
|
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
Linux kernel[内存管理,进程管理,设备驱动管理,文件系统]
|
|
| 内核区32位是,3G~4G
|
|
环境变量
|
|
命令行参数
|
|
栈(向下增长)
|
|
共享库
|
|
堆(向上增长)
|
|
>>>>>>>>>
|
|
.bss未初始化变量
|
|
.data已初始化变量
|
|
xxx 其他
|
|
.text代码段
|
|
>>>>>>>>> ELF段
|
|
受保护的地址(0~4K)。
|
|
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
PCB进程控制块。文件描述符表[一个数组]。
|
|
默认打开了三个,标准输入输出错误。
|
|
打开一个文件占用一个描述符,最小占用原则。
|
|
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
|
file xxx可以查看xxx信息。
|
|
|
|
C库函数与系统函数之间的关系:
|
|
例如[printf]
|
|
->系统API(应用层write)
|
|
->系统调用(sys_write) {用户空间到内核空间转换}
|
|
->内核层(驱动)
|
|
->硬件显示。
|
|
|
|
Linux系统IO函数:open, read, write, lseek 可使用man文档。
|
|
man 章节号 open
|
|
errno 全局变量
|
|
perror(const char* s)[stdio.h]
|
|
open系统函数中指定的权限与umask掩码取反做一个按位与的操作。
|
|
|
|
在vim中,可以直接使用K查看函数文档。
|
|
|
|
守护进程
|
|
1.后台服务
|
|
2.不受登录注册影响
|
|
3.一般以d结尾。
|
|
4.周期性执行任务
|
|
5.独立于终端
|
|
|
|
简述秘钥使用方法:
|
|
非对称加密算法:加密使用的密钥和解密使用的密钥是不同的。 公钥密码体制就是一种非对称加密算法
|
|
私钥,公钥。服务器持有公钥,本地私钥可以登录。
|
|
加密解密过程如下:
|
|
加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。
|
|
解密:通过解密算法和私钥对密文进行解密,得到明文。
|
|
注意:由公钥加密的内容,只能由私钥进行解密。
|
|
|
|
服务:[debian]
|
|
|
|
/etc/systemd/system/
|
|
xxx.service
|
|
[Unit]
|
|
Description=EyeblueTank
|
|
Documentation=https://tank-doc.eyeblue.cn
|
|
Wants=network.target
|
|
After=network.target mariadb.service
|
|
|
|
[Service]
|
|
Type=simple
|
|
ExecStart=/home/yun/program/tank/tank
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
|
|
# 装载tank服务
|
|
systemctl daemon-reload
|
|
# 设置tank开机启动
|
|
systemctl enable tank.service
|
|
# 查看tank状态
|
|
systemctl status tank.service
|
|
# 启动tank
|
|
systemctl start tank.service
|
|
# 重启tank
|
|
systemctl restart tank.service
|
|
# 停止tank
|
|
systemctl stop tank.service
|
|
|
|
1.安装mariadb 记录安装版本为10.5
|
|
sudo apt-get install mariadb-server
|
|
sudo mysql_secure_installation设置密码即可。
|
|
CREATE DATABASE boys CHARACTER SET = utf8 COLLATE = utf8_general_ci;
|
|
|
|
neofetch
|