1.王道_常用命令
用户管理
-
who
有几个用户登录pts
使用的终端
-
用户类型
#
root$
普通用户
-
sudoer
sudo
临时变成root,执行命令
-
su
切换用户 -
passwd
passwd
修改自己的密码passwd 用户
-
查看已存在的用户个数
cat /etc/passwd
- 密码存放在
/etc/shadow
-
useradd
- 直接使用此命令,不会产生/home下的家目录
- 直接使用此命令,shell为
sh
useradd -m -s /bin/bash
-m
创建家目录-s
指定shell版本
-
userdel
- 同时删除家目录为
-r
- 同时删除家目录为
-
man
-
-
1 命令
-
2/3 系统调用和库函数
-
文件和文件系统相关的命令
-
分层
- Linux一般使用
ext4
- windows一般使用
NTFS
- Linux一般使用
-
ls
-a
隐藏文件也显示-l
-
ln
-s
- 软链接
- 硬连接
- 刚创建的文件因为有.和…从而硬链接数显示为2
-
cd
cd ~
cd -
- 回到上一个目录,只能保存一个位置
- 实际上是存储在
OLDPWD
变量中,在环境变量env
中
-
mkdir
-
rmdir 删除空目录
-
cp
-i
如果发生覆盖则提示-f
和-i相反-r
拷贝目录
-
chmod
-
rm
- 删除一个文件,看的是
.
目录的权限
-
- 删除一个文件,看的是
文件查找
-
find
-
-
-name
-name 模糊查找
通配符*
任何字符,包括空字符?
一个字符[]
[0-9] [a-f] 集合内的任何字符
-user
-uid
-group
-gid
-perm
按照权限查找。-size
按照大小查找 默认单位是 512字节+
表示大于-
表示小于不加
表示等于
empty
找到空目录time
- a access 访问时间 atime amin
- c status change 状态改变
- m modify 内容修改
-
查询条件
-a
与-o
或!
补集
-
-
truncate
磁盘相关
-
df
-h
-
du
- 查看指定目录占用的空间
-d
查看的深度-d 0
查看本文件的大小-d 1
查看本目录下的各个文件的大小
文件查看和处理
-
cat
-n
所有行都编号-b
空行不编号-s
空行压缩
-
file
- 查看文件的类型
-
echo
- 直接使用,会带换行
-n
去掉换行
-
创建空文件
touch fil1
echo -n fil1
cat > fil1
在Ctrl+D 输入EOF终止符
-
系统日志文件
/var/log/syslog
-
wc
- word count
- word count
-
iconv
文件内容查找
- grep
- 正则表达式 : 高级版本的通配符
-n
显示行哈-E
使用最新版本的正则表达式\<a
a出现在单词的开头
命令的组合
-
;
-
管道
-
xargs
- 将标准输入的内容转换为命令的参数
xargs ls -al
- 将标准输入的内容转换为命令的参数
-
命令替换
打包和压缩
-
tar
-
tar cfv file.tar f1 f2 f3
打包 打包之后可以追加包 -
tar xfv file.tar
解开包 -
tar cfvz file.tar.gz f1 f2 f3
压缩包 压缩之后不能追加 -
tar xfvz file.tar.gz f1 f2 f3
解包
远程拷贝
- scp
- 基于ssh的cp
身份认证
- 密码
- 密钥
Vim
- vim分为三种模式:普通(命令)模式,编辑状态和视觉模式。
a 从光标后面开始添加文本(表示新增 append)
A 从光标所在行的末尾开始添加文本
i 从光标前面开始插入文本(表示插入 insert)
I 从光标所在行的开始处插入文本
光标移动
^ 光标移动到行首 -------------- -------------- -------------- --------------
$ 光标移动到行尾 -------------- -------------- -------------- --------------
ctrl+d 向下翻半页(down)
ctrl+f 向下翻一页(forward)
ctrl+u 向上翻半页(up)
ctrl+b 向上翻一页(backward)
gg 光标定位到文档头 -------------- -------------- -------------- --------------
G 光标定位到文档尾 -------------- -------------- -------------- --------------
H 光标定位到当前页首(head)
L 光标定位到当前页的最后一行的行首(lastline)
w 光标往后移一个字 (word)
b 光标往前移一个字 (block)
[n]+ 光标向后移动n行,[n]表示一个整数 10+
[n]- 光标向前移动n行,[n]表示一个整数 10-
[n]G 光标定位到第n行行首, [n]表示一个整数 20G -------------- -------------- -------------- --------------
:[n] 第n行
命令模式
删除和修改
d就行剪切,p就是粘贴
x 删除光标处的字符
dd 删除光标所在的整行
3dd 删除光标所在行以及下面的两行(删除3行)
d$ 删除光标到行尾的文本,常用语删除注释语句 (等价于d$)
d^ 删除光标到行首的文本 dt"删除到双引号位置
1,19d删除1到19行
dw 删除一个字
d3w 删除三个字
yy 复制光标所在的整行 yank复制
[n]yy 从光标开始往下复制n行,[n]表示一个整数
p 将复制后的文本粘贴到光标处
u 撤销上次操作
取消撤销:Ctrrl+r
查找与替换
/[str] 查找字符串str,[str]表示要查找的字符串
回车后会加亮显示所有找到的字符串,接着输入n移动到下一个找到的字符串,输入N移动到上一个找到
的字符串
: s/[src]/[dst]/[i忽略大小写][g处理本行中所有的匹配项] 用dst替换字符串src
: s/hello/world/ig 替换一行
:x,y s/[src]/[dst]/ig(x-y行中找)
:3,6 s/hello/world 将3-6行里面,找到第一个hello替换为world
:%s/[src]/[dst]/g 将文档中所有src的字符串替换为dst字符串
:%s/^ //g 将文档每一行的行首的空格去掉
:%s/^\t//g 将文档每一行的行首的制表符去掉
提问:如何使用替换命令注释所有块内代码?
提问:如何使用替换命令转换实现制表符和4个空格之间的转换?
可视模式
选中之后,按=,代码对齐
gg=G
全文代码对齐
- vimdiff
编译工具链
gcc
-
三种主流的编译工具链
- gcc
- MinGW(gcc移植到Windows的)
- clang
- msvc
- windows
- gcc
-
<>
在/usr/include
目录中查找 -
""
在本目录下进行查找 -
生成可执行程序的流程
- 预处理
a.i
gcc -E
#include
文件包含#define
宏定义
- 编译
a.s
汇编语言代码gcc -s
- 变量名/数组名都变成地址
- 类型信息变成指令的长度
- 函数调用 压栈/弹栈
- 调用其他函数 call指令
- 汇编
a.o
机器语言gcc -c
as
命令 汇编语言(.s) -> 机器语言(.o)- 在vim中输入
:!xxd
将.o
翻译为十六进制,:!xxd -r
十六进制恢复到原来的 或者od -h test.o
nm
列出目标文件的所使用的函数
- 链接
ld
链接器ldd
可以看到用到那些库
- 预处理
-D
定义一个宏-Wall
开启所有警告-I
设置头文件搜索路径,默认是当前目录
gdb
-
gcc -c
的时候需要加上-g
选项 ,补充符号信息 -
gcc -o
编译优化 o0, o1,o2,o3。调试的时候不要开启编译优化
-
启动gdb的两种方式
gdb
然后file test
gdb test
-
list
list
列出10行代码 按一下list
列出下一个10行代码,回到第一个10行list 1
list可以简写为l
list print
列出print函数的代码list test.c:10
列出test程序的第10行
-
run/r
执行 -
断点操作
break\b print
打断点info\i break\b
展示断点信息disable 1
取消断点1enable 1
断点1恢复delete 1
删除 断点1
-
监视
print arr[1]
看一次display arr[1]
一直看- 关闭
display
-
next/n
逐过程 -
step/s
逐语句 会进入函数 -
continue
运行到下一个断点 -
看内存
x
-
查看栈的情况
backtrace/bt
-
ulimit -a
是 Unix/Linux 系统中用于 显示当前用户进程的资源限制 的命令。这些限制决定了进程可以使用的系统资源(如内存、文件句柄、CPU 时间等)。 -
使用gdb处理系统报错
-
调试core文件
man core
- 如果没有core文件,可能的原因
-
使用gdb调试
-
-
添加命令行参数
库文件
- 头文件在编译阶段起作用,库文件在链接阶段起作用。
静态库
动态库
产品更新
- 升级库
- 通过软链接
Makefile
-
代码构架工具
-
增量编译
-
文件名
- Makefile
- makefile
-
-
命令什么时候会执行
- 目标没有产生时—伪目标就是利用这种规则
- 依赖的文件的日期发生改变时
-
伪目标
- 什么是伪目标,看是否可以生成目标
- 文件不存在,但是一直生成不了 ,就会
一直执行
- 全量编译
-
变量
- 只能操作字符串
- 自定义变量
- 自动变量
- 预定义变量
- 可以更改预定义变量的值
-
%匹配符
-
makefile提供的函数
SRCS:=$(wildcard *.c)
找出当前目录下的.c
文件OBJS:=$(patsubst %.c %.o $(SRCS))
将变量SRCS中的.c变成.o