以下是我从毕业工作以来对linux学习记录,方便自己遇到问题时查看。这里只是我的学习记录,最终解释权归我所有。如果你也是从事嵌入式或linux相关工作人员有幸看到这篇文章,那么恭喜你,这篇文章对你没什么用,你可能都看不懂我在巴拉巴拉写的什么玩意。如果你想学习linux相关知识,可以去b站或者b站上面去系统的学习。这里推荐几个我认为不错的linux b站教学:爱编程的大丙、黑马程序员、鸟哥的私房菜linux and so on。linux命令中文查询手册地址:呀呼~ 。努力学习的同时,请你不要忘记生活。古人云:“个小不拉架,人穷不说理。无钱休入众,言轻莫劝人。力微不负重,遇难莫寻亲。待到成功时,把酒言初心”。共勉之,加油。
一、Linux下常用命令
* 表示所有 ? 表示任意
- passwd + 用户名 修改密码
- 打包并压缩 tar + -cvf + 生成的压缩文件名称.tar 待压缩的文件/文件夹路径
解包tar + -xvf + 待解压的压缩包 -C 解压后存放路径
.zip文件:zip 生成的压缩文件名称.zip 待压缩的文件/文件夹路径
待压缩的文件中带文件夹:zip -r 生成的压缩文件名称.zip 待压缩的文件/文件夹路径
解压:unzip 待解压的压缩包 -d 解压后存放路径
压缩/解压 .tar.gz -zcvf/-zxvf .gz
压缩.rar:tar -cf xxx.tar 要压缩的路径 解压.rar:
注:f必须在最后一位 gzip模式中z必须为第一位 .tar只打包不压缩 .tar.gz压缩并打包
Linux用.tar/.tar.gz windows用.zip
- ls cd mkdir rm cp mv touch创建文件 top查看系统信息 ps -aux / ps -ef 查看系统进程信息
- chmod更改文件所属权限 echo回显 dpkg -l 显示系统已安装软件包信息
- pwd 查看当前工作目录的绝对路径 clear 清屏
- 查找 find -name 文件名 / locate 文件名 查看命令所在环境变量地址 which 命令
- Ctrl + D 或exit退出root模式
- mkdir -p创建多级尚不存在的目录文件夹 mkdir -m 创建目录并设置文件夹权限 也可用 chmod
- cp -i a.txt /home/b.txt复制到home路径下并改名
- rm -rfi 删除 r:递归删除 f:忽略不存在的文件 从不 给出提示 i:交互式删除
- cat 查看文件内容 more 分页显示文件内容
- locate 文件查找
- whereis / which 查找命令所在地址
- env 查看虚拟机系统环境变量
- set:查看所有的环境变量包括系统环境变量,自定义变量,函数
- mkdir -p 创建多级不存在的目录
- cp -r 源路径 目的路径 递归复制(文件夹复制)
- 输出重定向:>:覆盖 >>:追加 例:ls -la > 1.text
- df -h 查看磁盘空间
- free 查看内存使用情况 free -m以mb为单位查看
- wc -lwc 1.text 查看文件信息(行数 单词数 字节数)
- 管道
- cal日历操作
- whoami显示当前登录的用户名 = id -un who
- id 用户名 显示用户信息
- hostname 获取服务器主机名
- ps -ef 显示服务器进程信息 keil -9 进程id 强制结束进程
- top:查看服务器进程占用的资源 top -i 不显示闲置(idle进程)和无用进程(zombie) 进程 c键:查看详细信息 f键:控制显示的列->空格选中或取消选中 h键:帮助文档 q:退出 M键:按mem排序 P键:按cpu进行排序 T键:按时间排序 i键:控制非活 跃的进程是否显示
- du -sh 查看目录/文件的真实大小
- df查看磁盘使用情况 df -h以兆的单位显示
- iostat:iostat -x显示cpu和磁盘信息
- find查找文件 例:find /etc -name *.c 按名字查找 find /opt -type d 按类型查找(d表示文件夹)
- kill 进程id 杀死进程
- Reboot 重启
- halt关机
- Shutdown -h now / shutdown -r now 关机/重启
- Shutdown 关机 shutdown -h now 立刻关机 shutdown -h 20:30 定时关机 shutdown -c 取消关机 halt 关机
- uptime计算机持续运行时间
- uname -a获取计算机操作系统相关信息
- Netstat -tnlp查看网络连接状态
- stat显示文件的详细信息 stat 文件名
- export设置或显示环境变量
- pstree树形显示进程
- 查看二进制文件命令 hexdump /hexdump -C /xxd
- PS1=要修改的字符 更改Linux命令提示符
- Ldd :查看动态/静态库
- Ctrl+shift+c复制 ctrl+shift+v粘贴
- 硬链接:ln 要链接的文件 链接到的文件 两文件使用同一片内存空间 id一样
- 软连接(符号链接):ln -s 要链接的源文件 链接到的目的文件 两文件使用不同的地址 源文件删除后 链接文件也没用了 ls -i 查看文件内存id
- 通配符 *:代替任意字符 ?:代替单个字符
- vmstat 查看虚拟内存
- find 搜索目录 -name 文件名 按文件名搜索 使用通配符收缩时加””或’’(双引号或单 号)
- find 搜索目录 -type 类型 按文件类型搜索 linux有7种文件类型
- find 搜索目录 -size xxx 按文件大小搜索(xxx=4k//(3k,4] xxx=-4k //(0,4] xxx=+4k//[4k,正无穷]),find 搜索目录 -size +1k -size -4 [1k,3k]
- find 搜索目录 -maxdepth x 其他 按其他目录层级搜索maxdepth :最多 mindepth:x 层级后搜索
- find xxxxxxxx | xargs shell命令
- grep “xxx” 路径或文件名 参数 在文件中搜索关键字xxx 参数:-i:不区分大小写 -n:显示行号 -r:对目录进行递归处理
- 获取主机名:hostname
- 修改主机名:hostnamectl set-hostname 修改的主机名
- !x:执行最近使用过的以x开头的命令更改系统时间:
- rm -rf /etc/localtimer 第一步
- ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 第二步
- 查看系统中的环境变量信息:env
- 设置临时环境变量:export
- 重新读取文件:source
- 环境变量永久生效:对当前用户生效目录:~/.bashrc 对所有用户生效:/etc/profile
二、Linux下常用快捷键
Ctrl+a 光标移到命令行行首
Ctrl+e 光标移到行尾
Esc+b 光标移动到当前单词开头
Esc+f 光标移动到当前单词尾
Ctrl+insert 选中后快捷键复制
Shift+insert 粘贴
ctrl+c 中止终端正在执行的任务或删除整行
Ctrl+k/ctrl+u剪切,删除光标到行尾/行首的字符
Ctrl+d 往前删除一个单词
Ctrl+ <-或->左移或右移一个单词
Ctrl+y 粘贴ctrl+k/ctrl+u/ctrl+w删除的文本
Ctrl+r 搜索执行过的命令 然后<-或->键不执行放入命令输入行 回车:执行
Ctrl+g 退出命令搜索
Ctrl+s锁定终端 无法输入任何命令
Ctrl+q 解锁 退出ctrl+s
Alt +tab/alt+shift+tab切换tab
Ctrl + alt+ <-/-> 切换不同工作台
Alt + F10 最大化/最小化窗口
Ctrl+alt+T/ctrl+shift+T/shift+ctrl+n新建窗口
Alt + 1/ 2 / 3... 切换窗口tab
Ctrl+d关闭窗口
单击鼠标滚轮:选中文字 单击鼠标滚轮 将选中的文字复制到光标所在位置
F11全屏
三、Linux下vim操作:
0 或_或^:光标移动到行首
g或$:光标移动到行尾
gg:光标移动到文档头
G: 光标移动到文档尾
x:删除光标所在字符
D/dd:删除光标所在行
/字符串 查找字符串
Linux使用技巧
Ctrl - 缩小 ctrl shift + 放大
Ctrl + insert 复制 shift + insert 粘贴
Vi +n filename 打开文件且光标置于文件第n行
B/b 光标向前移动一个单词
W/w 光标向后移动一个单词
E/e 光标移动到单词尾
数字+G 光标到指定行
数字+上/下方向键 上下移动光标n行
数字+左/右方向键 左右移动光标n个字符
H 光标移动到屏幕顶部
M 光标移动到屏幕中间
L 光标移动到屏幕尾部
z+enter 当前光标所在行回到屏幕顶部
V 进行一行字符选中
v进入字符选中模式
yw 复制光标所在单词
dd 删除光标所在行 下一行上移
D 删除光标所在行 下一行不上移
dw移动光标到单词头 以删除该单词
dG删除光标所在行直到文件末尾
~ 大小写转换
?字符串 从光标所在位置向后查找字符串
i 在光标所在位置插入 光标后的文本向右相应移动
I 在光标所在行的行首插入
o在光标所在行的下一行插入
O 在光标所在行的上一行插入
a在光标所在位置之后插入
A 在光标所在行的行尾插入
删除光标到文件首:d1G
删除光标到文件尾:dG
Ctrl+v+I+//:注释 ctrl+v+d:取消注释
分屏显示:横/竖屏显示 ctrl + w + s/ctrl + w + v 切换屏:ctrl + w + w
末行模式下输入::sp/vsp 文件名 水平/垂直分屏 :qall退出所有分屏 :wqall保存并退出 所有分屏
使用shell命令分屏;vim -o/-O 文件1 文件2 文件3 水平/垂直分屏
格式化文件:命令行模式下按gg=G
D:删除光标后所在行
d+0:删除光标前所在行
d+$: 删除光标后所在行
关键字搜索:命令行模式 :/xxx 或:?xxx 或搜索光标所在字符串按#
查看系统函数:3+K 光标停在要查询的函数名上
保存退出:wq 或 x
Vim加密文件:末端模式:输入::X ->>>再>>>>>:wq
更换密码:末端模式:输入: :set key=123 取消密码:输入::set key= (注:不可以在未 解锁的情况下修改密码,会造成死锁)
关键字替换,将A替换为B:末行模式::%s/A/B/g文件全局替换 s/A/B/替换光标所在行
1,9s/A/B/替换1到9行 不带g只替换行的第一个A
末行模式使用shell命令::!ls
打开/关闭语法高亮显示:syntax on/off
四、Linux下GCC使用
- gcc *.c -I 路径 //指定头文件路径编译
- gcc *.c -D 宏 //定义宏
生成静态库(linux:libxxx.a windows:libxxx.lib)
- 第一步::生成汇编文件xxx.o:gcc -c XXX1.c XXX2.c
- 第二部:利用汇编文件生成静态库:ar rcs libxxx.a *.o
- 使用:gcc x.c -o xxx -L 库的路径 -l库的名称 (库的名称要掐头去尾)
动态库(linux:libxxx.so wionsows:libxxx.dll)
- 第一步:生成汇编文件xxx.o:gcc -c -fpic xxx1.c xxx2.c
- 第二步:利用汇编文件生成动态库: gcc -shared *.o -o libxxx.so (-shared位置可以任意)
- 使用:gcc x.c -L 库的路径 -l库的名称 -o xxx(库的名称要掐头去尾)
- Shell命令:ldd xxx:查看xxx可执行文件能否加载到需要的动态库
- 解决动态库找不到路径问题:
- echo $LD_LIBRARY_PATH
- 设置环境变量:LD_LIBRARY_PATH=绝对路径:$LD_LIBRARY_PATH (此设置只对当前终端 有效)
- 对普通用户有效:将环境变量放到家目录下的.bashrc中
让环境变量生效:1.重新打开终端 或2.执行: . ~/.bashrc(命令作用:重新加载配置 文件,.的作用source)
- 对root用户生效:放到/etc/profile文件中
生效:. /etc/profile(使用通过)
- 方法二:将动态库绝对路径写到/etc/ld.so.conf 后执行:ldconfig(ldconfig -v 查看动态 库信息)(使用通过)
- 方法三:使用软连接 ln -s 绝对路径/libxxx.so /usr/lib/libxxx.so(测试通过)
五、Linux下GDB的使用
- 进入gdb调试:①gcc -g xxx.c -o yyy ②gdb yyy
- 打断点: ①b yyy ②b 文件绝对路径/xxx.c:行号 b 文件名:行号
- info b 查看断点信息 或i b d 断点编号:删除断点 d 1-5删除1-5号断点
- 设置断点无效:dis 断点号
- 设置断点有效: ena 断点号
- 设置条件断点:b if i==5
- info r:查看寄存器值
- 运行:r或run或start (start命令执行到man函数第1行停住后执行c)只能执行一次
- 单步(不近函数体):n
- 进入函数内部:s
- 跳出函数体:f或finish(函数体内不能有断点)
- 跳出循环体:until
- 运行到下一个断点:c
- 查看函数调用栈:bt
- 监视全局变量,变量值改变程序停下:watch 变量名
- 什么也不输入,直接回车:执行上一步得命令
- 退出GDB调试:quit或q
- 设置命令行参数:set args 参数
- 查看查看设置的参数:show args
- 查看文件代码:l或list 文件名:函数名或行号
- 设置list查看代码行数:set list 数量
- 查看显示的行数量:show list
- 打印变量:打印变量的值 p 变量 打印变量的类型:ptype 变量名
- 打印变量只设置一次,以后每次执行到都会执行,自动显示:display 变量名 取消:undisplay 变量编号//或delete diaplay 变量编号
- 设置变量的值:set var 变量名=值