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. :把当前行移动到屏幕中间 : :跳到第 行(需要回车) 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)] [-m 如果没有xxx目录就创建Robin] 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