一、零碎知识点
可执行文件一般软链接到/usr/bin/<dirname>下面,下载的软件一般安装在 /usr/local,VM设置的共享文件夹在路径/mnt/hgfs/<share name>上(mnt就是mount挂载)。
在shell里export的环境变量将在shell执行结束后失效。要持续生效就需要source xxx.sh
。
二、基础命令
man <program name> #查看对应程序的手册,比如看gdb手册就 man gdb
ps -elf | grep <string> # 查找占用端口h
netstat -anpt #显示所有tcp连接
pwd #查看当前所在目录
rm -rf <filename> #删除文件
mv <path1> <path2> #将path1移动到path2,自动覆盖
cp <path1> <path2> #将path1复制到path2
mkdir <dirname> #创建文件夹
#创建文件
touch <filename> #如果不存在则自动创建
vi <filename> #如果不存在就自动创建
#----
ln -s <source> <target> #生产软链接,相当于windows的快捷方式
tar -xzvf <filename.tar.gz> -C <target path> #tar解压
arch #查看cpu架构
uname -a #linux信息
screenfetch -p #查看linux信息(美观),需要install screenfetch
su <username> #切换用户
passwd <username> #修改用户密码
find <查找范围> <查找的文件名> # 查找文件位置
whereis <文件名> # 查找文件的位置
ncdu #查看磁盘占用情况
<command> 2>&1 | tee out.txt #将命令输出的stdout和stderr导出到out.txt
top #类似windows任务管理器
#输出格式,放在管道符后面
awk -F ' ' '{print $4}' #以空格分隔,第4列
head -n 2 #取得前2行
三、bash光标移动快捷键
alt+b 光标移动到前一个单词
alt+f 光标移动到后一个单词
ctrl+l 刷新终端界面
ctrl+u 删除光标前的所有字符
ctrl+k 删除光标后的所有字符
ctrl+w 删除光标前一个单词
ctrl+a 光标移动到首个字符位置
ctrl+e 光标移动到尾字符位置
四、配置环境变量
永久性的
vi /etc/profile #在底部增加即可
重启后就消失的
export <var>=<value>
五、Linux特殊符号
- & 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &
- && 表示前一条命令执行成功时,才执行后一条命令 ,如 echo ‘1’ && echo ‘2’
- | 表示管道,上一条命令的输出,作为下一条命令参数,如 echo ‘yes’ | wc -l
- || 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo “fail”
- >> 向尾部追加。
- > 覆盖掉原来的内容(重定向)
- 2>&1 将标准错误输出重定向到标准输出
5.1 文件描述符fd (File Descriptor)
名称 | 代码 | 操作符 | Java中表示 | Linux 下文件描述符(Debian 为例) |
---|---|---|---|---|
标准输入(stdin) | 0 | < 或 << | System.in | /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0 |
标准输出(stdout) | 1 | >, >>, 1> 或 1>> | System.out | /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0 |
标准错误输出(stderr) | 2 | 2> 或 2>> | System.err | /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0 |
六、tmux操作
进入tmux模式
tmux
进入tmux模式后快捷键大多都是以ctrl+B为前缀
划分窗口:左右排布ctrl+B松开后再按 " ,上下排布则是 %
命令式划分窗口
tmux split-window #上下
tmux split-window -h #左右
- ctrl+b松开后再按 上、下、左、右键 ,将光标移动到对应的子窗口。
- ctrl+b不松+方向键调整窗口大小
- ctrl+d 关闭当前窗口(exit命令也行)
开启普通导航模式
- ctrl+b松开后按 [
- 滚动:方向键即可
七、GDB操作
若要调试程序,编译时还需要加上-g选项让编译生成的可执行文件中包含足够的调试信息,包含代码、栈、局部变量等,若还需查看更多信息如宏定义则需添加-g3选项,这样就可以通过print命令打印宏定义信息;如:
gcc -g test.c -o test、 gcc -g3 test.c -o test
layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法:
layout src:显示源代码窗口
layout asm:显示汇编窗口
layout regs:显示源代码/汇编和寄存器窗口
layout split:显示源代码和汇编窗口
layout next:显示下一个layout
layout prev:显示上一个layout
Ctrl + L:刷新窗口
Ctrl + x,再按1:单窗口模式,显示一个窗口
Ctrl + x,再按2:双窗口模式,显示两个窗口
Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。
也可以直接:gdbtui hanoi-w 打开gdb的tui源代码窗口
Command:
starti 从程序的第一条指令开始执行
n 下一步(next step)
s 单步执行(single step)可以进入函数内
b 设置断点(break point)
ni/si 都是汇编级别的断点定位。si会进入汇编和C函数内部,ni不会。
x 查看地址中的数据
八、Vim操作
Linux vi/vim | 菜鸟教程 (runoob.com)
8.1 上下不能换行?
表面看起来显示多行(一行太长就显示成多行了),实际上换行是根据换行符来定位,需要换行符才能换行。
8.2 命令模式
初始模式,其他模式切换到该模式按ESC即可
gg 光标移动到首字符
G 光标移动到尾字符
按v(字符选取)或V(行选取)进入可视模式
: 进入底线命令模式
i 进入insert模式
ctrl+q 块选取模式
w 光标移动到下一单词
b 光标移动到上一单词
/ 加上字符串快速定位到字符串位置,再按n移动到下一个,N移动到上一个
8.3 可视模式
按v(多字符选取)或V(多行选取)进入可视模式
复制:y(yank)复制选取的文本入缓存区
粘贴:p(paste)粘贴缓存的文本
删除:d 剪切选取的文本
撤销:u(undo)
全选:ggvG gg是到首行,G到尾行
8.4 insert模式
i 或 I 进入模式
ctrl+d tab缩进
8.5 底线命令模式
按 : 进入,后面输入命令即可
!gcc % -o a.out 在vim里面进行gcc编译,并输出a.out
8.6 other
批量注释:ctrl+q 块选择(列模式)选出所有要注释的行,然后大写I在行首输入注释符(#或//),接着按ESC,vim就会自动把所有选中的行添加注释符。
批量取消注释:ctrl+q 块选择(列模式),选住所有注释符按d删掉即可
tab键改为4个空格
vi ~/.vimrc
#插入以下内容
syntax on
set number
set tabstop=4 #tab空格长度
set softtabstop=4 #退格空格长度
set shiftwidth=4 #每一级长度
set expandtab #缩进用空格表示,noexpandtab 则是用制表符
set autoindent #自动缩进
九、WSL配置代理
前提是clash要开启7890端口并打开system proxy。
## 获取主机 IP
## 主机 IP 保存在 /etc/resolv.conf 中
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
export https_proxy="http://${hostip}:7890";
export http_proxy="http://${hostip}:7890";
#验证
curl google.com
#有以下返回说明成功
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
关闭代理,直接放空就行
export https_proxy=;
export http_proxy=;
十、修改文件权限
文件调用权限分三级:u表示当前用户、g表示当前用户组、o表示不同用户组。
File Type:-表示普通文件,d为目录。
r可读(4)、w可写(2)、x可执行(1)。
#example 1,为当前用户增加对a.sh的执行权限,-x则为去掉执行权限,r和w同理
chmod u+x a.sh
#example 2,当前用户有所有权限(4+2+1),用户组有可读+可执行(4+1),其他用户有可读(4)
chmod 754 a.sh
执行命令 l l ll ll 后,出现以下信息
-rw-r--r--. 1 root root 25 Jul 9 00:06 a.out
drwxr-xr-x. 2 root root 6 May 9 19:41 Desktop
信息解析图
- 表示普通文件,d 表示文件夹