linux命令笔记(1)

Unix 目录结构

  • Linux系统目录:
    bin:存放二进制可执行文件
    boot:存放开机启动程序
    dev:存放设备文件: 字符设备、块设备
    home:存放普通用户
    etc:用户信息和系统配置文件 passwd、group
    lib:库文件:libc.so.6
    root:管理员宿主目录(家目录)
    usr:用户资源管理目录 unix software resource
  • Linux文件分类
    普通文件:-
    目录文件:d
    字符设备文件:c
    块设备文件:b
    软连接:l
    管道文件:p
    套接字:s
    未知文件。

基础命令

  • ls -Rl 递归查看目录,并显示详细信息
  • rm -r dirname 递归删除目录 rm -rf dirname 强制删除
  • cp filename dirname 复制文件到目录
    cp filename1 filename2 复制文件1并重命名为文件2 即文件1变两份,分别叫filename1和filename2
    cp -a dirname1 dirname2 复制目录1及其下所有文件到目录2 -a是完全复制 文件权限,修改时间
    cp -r dirname1 dirname2 递归复制目录1到目录2
  • ln -s file file.s 创建一个软链接 类似win下的快捷方式,注意使用绝对路径
  • ln file file.h 创建一个硬链接,硬链接指向同一个inode,删除文件会让硬链接-1.硬链接为0时,系统择机删除文件
  • chmod命令

chmod [who] [+|-|=] [mode] filename
操作对象who可以是下述字母中的任一个或者它们的组合
u 表示”用户(user)”,即文件或目录的所有者
g 表示”同组(group)用户”,即与文件所有者有相同组ID的所有用户
o 表示”其他(others)用户”
a 表示”所有(all)用户”,它是系统默认值
操作符号可以是:
+添加某个权限
-取消某个权限
=赋予给定权限并取消其他所有权限(如果有的话)
数字法
chmod xxx filename
x分别对应 文件所有者,所有者所在组,其他用户 x是4(读)+ 2(写)+ 1(执行)的排列组合
例如 chmod 777 test

  • find

find命令:找文件
-type 按文件类型搜索 d/p/s/c/b/l/
find ./ -type d
-name 按文件名搜索
find ./ -name “file.jpg”
-maxdepth 指定搜索深度。应作为第一个参数出现。
find ./ -maxdepth 1 -name “file.jpg”
-size 按文件大小搜索. 单位:k、M、G
find /home/itcast -size +20M -size -50M
这里要注意,两个size一个都不能少,还有就是文件大小单位对大小写敏感
-exec:将find搜索的结果集执行某一指定命令。
find /usr/ -name ‘tmp’ -exec ls -ld {} ; //{}表示囊括了find那一段的结果,去指向ls -ld的内容,\是转义字符,;表示语句结束
-ok: 以交互式的方式 将find搜索的结果集执行某一指定命令(如果是删除之类的命令,记得使用-ok)
在这里插入图片描述

  • grep 查找文件内容

grep -r ‘copy’ ./ -n
-n参数::显示行号
ps监控后台进程工作情况,默认只显示当前可以和用户交互的进程
ps aux | grep ‘test’ – 检索进程结果集。

  • xargs

find … | xargs ls -l 对find操作的结果集进行操作
等价于
find … -exec ls -l {} \;
两者差别在于当结果集合很大的时候,xargs会对结果进行分段处理,所以性能好些
但xargs也有缺陷,xargs默认用空格来分割结果集,当文件名有空格的时候,会因为文件名被切割失效
解决方法
find ./ -name ‘’*.cpp’’ print0 |xargs -print0 ls -l
第一个print0指定结果集分隔为null,第二个print0指定xargs分隔为null

中级

  • df -h 查看磁盘使用情况,-h显示单位
  • free 查看内存使用情况 -m 单位为MB
  • head -n filepath/filename 查看文件前n行,默认十行
  • tail -n filepath/filename 查看文件末尾n行,默认十行
  • tail -f filepath/filename 动态查看文件的变化(不能是用户手动添加的)
  • wc 统计文件内容信息 -lwc 行数 单词数 字节数
  • date 操作,读取时间
  • 在这里插入图片描述
  • cal 操作日历
  • | 管道,主要用于 过滤 ls | grep n 列出目录下带n的文件

高级

  • hostname 输出完整主机名 -f 输出当前全限定域名
  • id 查看用户基本信息 -用户名 显示指定用户的基本信息
  • ps -ef 其中-e等价于-A,显示出所有的行(所有进程) -f显示所有字段(显示所有列)
  • top 动态看服务器占用资源情况(任务管理器),q退出,MEM:内存占用百分比,CPU:CPU百分比。S:状态,S睡眠,R运行。COMMAND:进程的路径
  • top快捷键:M按内存排序,P按cpu排序,1显示多个cpu
  • du -sh 文件路径 查看文件实际大小 -s只显示汇总大小 -h以高可读
  • service 控制软件服务的启动,停止,重启 service 服务名 start/stop/restart
  • kill 进程号
  • reboot 重启 -w写入关机开机日志,不重启,测试时使用
  • shutdown -h “时间” “给用户的提示行” : shutdown -h
  • netstat -tnlp -t只列出tcp -n列出ip地址 -L 过滤出为listen的连接 -p显示进程发起的pid和名称

Vim快捷键

在这里插入图片描述

i 进入编辑模式,光标前插入字符
a 进入编辑模式,光标后插入字符
o 进入编辑模式,光标所在行的下一行插入
I 进入编辑模式,光标所在行的行首插入
A 进入编辑模式,光标所在行的行末插入字符
O 进入编辑模式,光标所在行的上一行插入字符
s 删除光标所在字符并进入编辑模式
S 删除光标所在行并进入编辑模式

  • 命令模式下

x 删除光标所在字符,工作模式不变
dw 删除光标所在单词,要求光标在首字母上,如果不在首字母,只会删除当前位置到单词末,工作模式不变
D 删除光标所在位置到行末,工作模式不变
0(数字) 光标移到行首,工作模式不变
$ 光标移到行尾,工作模式不变
d0 删除光标所在位置到行首,工作模式不变
d$ 删除光标所在位置到行末,工作模式不变
4.一段删除,即删除指定区域
光标选中要删除的首字符,按v进入可视模式,再使用hjkl移动到要删除的末尾,按d删除

  • 末行模式

1.行跳转
:line-回车
2.跳转首行
gg (命令模式)
3.跳转末行
G (命令模式)

5.删除整行:
dd,删除光标所在行
n+dd ,删除从光标开始的n行
6.r 替换光标选中字符
7.yy 复制光标所在行
p 向后粘贴剪切板内容,如果复制整行,这里是粘贴在光标所在位置的下一行
P 向前粘贴剪切板内容,如果是整行,这里是粘贴在光标所在位置的上一行
dd,不是删除,而是剪切,内容去了剪切板,而不是删掉了
(p和P粘贴会出现换行,主要原因是复制整行时,会把行末的换行符也复制下来)
n-yy 复制光标所在位置的n行,包括光标所在行

  • 命令模式下

1.查找
/+findname 命令模式下查找
按回车键启动查找后,按n,会自动找下一个,N跳到上一个
2.查找光标所在单词
光标在目标单词上时,*查找下一个 #查找上一个,这里不要求光标必须在首字母上
3.撤销
u 撤销操作
Ctrl-r 反撤销
从vim中跳转manpage,命令模式下
将光标放在待查看单词上,按K,默认看第一卷
n+K,查看第n卷

  • 末行模式下

替换:末行模式下进行
单行替换
光标置于待替换行, 😒 /待替换词/替换词
全文替换
:%s /待替换词/替换词 这个默认替换每行的首个,一行有多个目标词时,后面的不会变
:%s /待替换词/替换词/g 真正意义上的全局替换
区域替换
:24,35s /待替换词/替换词/g 替换24-35行之间的目标词
末行模式下历史命令
Ctrl-p 上一条命令
Ctrl-n 下一条命令
分屏,末行模式下
:sp 水平分屏
:vsp 竖直分屏
分屏命令+filename,分屏并打开这个文件
分屏后屏幕切换,Ctrl-w-w
使用:q退出光标所在窗口
使用:qall退出所有窗口

编译与运行

  • -I指定头文件所在目录,当头文件和需要编译文件不在同一个目录下时使用
    gcc -I (path) filename.c -o filename.o

-I 指定头文件所在目录位置
-c 只做预处理,编译,汇编。得到二进制文件
-g 编译时添加调试文件,用于gdb调试
-Wall 显示所有警告信息
-D 向程序中“动态”注册宏定义
-l 指定动态库库名
-L 指定动态库路径
-On 编译优化,n=1-3,越大优化越多

动态库 静态库

静态库制作及使用步骤:

1. 将 .c 生成 .o 文件

	gcc -c add.c -o add.o

2. 使用 ar 工具制作静态库

	ar rcs  lib库名.a  add.o sub.o div.o

3. 编译静态库到可执行文件中:

	gcc test.c lib库名.a -o a.out

头文件守卫:防止头文件被重复包含

#ifndef _HEAD_H_

#define _HEAD_H_

......

#endif

动态库制作及使用:

1.  将 .c 生成 .o 文件, (生成与位置无关的代码 -fPIC)

	gcc -c add.c -o add.o -fPIC

2. 使用 gcc -shared 制作动态库

	gcc -shared -o lib库名.so	add.o sub.o div.o

3. 编译可执行程序时,指定所使用的动态库。  -l:指定库名(去掉lib前缀和.so后缀)  -L:指定库路径。

	gcc test.c -o a.out -lmymath -L./lib

4. 运行可以执行程序 ./a.out 出错!!!! --- ldd a.out --> "not found"

	error while loading shared libraries: libxxx.so: cannot open shared object file: No such file or directory

	原因:
		链接器:	工作于链接阶段, 工作时需要 -l 和 -L

		动态链接器:	工作于程序运行阶段,工作时需要提供动态库所在目录位置。

	解决方式:				

		【1】 通过环境变量:  export LD_LIBRARY_PATH=动态库路径

			./a.out 成功!!!  (临时生效, 终端重启环境变量失效)

		【2】 永久生效: 写入 终端配置文件。  .bashrc  建议使用绝对路径。

			1) vi ~/.bashrc (进入根目录)

			2) 写入 export LD_LIBRARY_PATH=动态库路径  保存

			3). .bashrc/  source .bashrc / 重启 终端  ---> 让修改后的.bashrc生效

			4)./a.out 成功!!! 

		【3】 拷贝自定义动态库 到 /lib (标准C库所在目录位置)

		【4】 配置文件法

			1)sudo vi /etc/ld.so.conf

			2) 写入 动态库绝对路径  保存

			3)sudo ldconfig -v  使配置文件生效。

			4)./a.out 成功!!!--- 使用 ldd  a.out 查看

gdb调试

-g:使用该参数编译可以执行文件,得到调试表。

gdb ./a.out

list: list 1  列出源码。根据源码指定 行号设置断点。

b:	b 20	在20行位置设置断点。

run/r:	运行程序

n/next: 下一条指令(会越过函数)

s/step: 下一条指令(会进入函数)

p/print:p i  查看变量的值。

continue:继续执行断点后续指令。

finish:结束当前函数调用。 

quit:退出gdb当前调试。

其他指令:

run:使用run查找段错误出现位置。

set args: 设置main函数命令行参数 (在 start、run 之前)

run 字串1 字串2 ...: 设置main函数命令行参数

info b: 查看断点信息表

b 20 if i = 5:	设置条件断点。

ptype:查看变量类型。

bt:列出当前程序正存活着的栈帧。

frame: 根据栈帧编号,切换栈帧。

display:设置跟踪变量

undisplay:取消设置跟踪变量。 使用跟踪变量的编号。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值