Linux文件目录系统:inux上一切皆文件
linux是一个多用户操作系统,允许多个用户同时登陆,且同时工作,且相互之间互不影响
/bin:存储系统命令对应的可执行文件 /dev:设备文件目录
/etc:存储配置文件 /mnt:临时挂载目录
/root:root用户家目录 /boot:系统启动时所需要的核心镜像文件
/usr:第三方插件的资源及文档 /home:普通用户家目录
/proc:虚拟目录(以进程为单位存储内存的映射)
linux文件类型:普通文件 -
目录文件 d
管道文件 p
链接文件 l
设备文件:字符设备文件c
块设备文件b
套接字文件s
权限划分 -- 按三位划分开,分别表示
属主权限 rwx r 可读权限
组用户权限 rwx w 可写/修改权限
其他用户权限 rwx x 普通文件 -- 可执行
目录文件 -- 可进入
linux文件系统EXT4: 索引式文件系统
inode:权限与属性信息 一个档案一个inode
data block:文件内容 记录档案内容,可能占用多个
super block:系统文件的整体信息、inode/block总量、使用量、剩余量文件系统格式等相关信息
在分区完成后,格式化磁盘时创建
文件操作命令:
ls path: 显示指定目录下的文件, 默认当前目录
ls -a: 显示所有的文件(隐藏文件:以’.’开头) ls -l: 显示文件的详细属性
pwd: 显示当前位置的绝对路径 cd path:切换当前工作目录
绝对路径:从根目录开始的路径 相对路径:从当前位置开始的路径
touch filename 创建文件 mkdir dirname 创建文件夹
rmdir dirname 删除文件夹(空文件夹) rm -r dirname 删除文件夹(非空文件夹)
rm -r filename 删除文件
cp path1/filename path2 拷贝文件 cp -r path1 path2 拷贝文件夹
mv path1/filename path2 剪切文件 mv path1 path2 剪切文件
mv path/filename path/newname 文件重命名 mv path/dirname path/newname 文件夹重命名
chown username filename 修改文件属主 chgrp groupname filename 修改文件组用户
chmod 修改文件权限:
字符方式 : a/u/g/o +/-/= rwx 数字方式 : r:4 w:2 x:1
文件查找命令find
find -选项 参数 搜索路径 查找到后的动作
选项:-name: 根据文件名查找 动作:-print: 显示
-perm: 根据权限查找 -ls: 显示详细信息
-user: 根据用户查找 -quit: 查找到第一个退出
-group: 根据组查找
-type: 根据文件类型查找
-size: 根据文件大小查找
查看文件内容
more: 一页一页显示文件内容,从前向后读取,space下一页,b上一页
less: 一页一页显示文件内容,从前向后滚动读取,上下即上下滚动查看,G:尾部,g:头部 q:退出
tail: [-n][num]file,-n num据文件尾num行开始显示,tail -f file最尾部内容显示,用处:查看日志
head: [-n]将文件前num(默认为10)行输出到标准输出,没有文件或文件名为-:从标准输入获取文件
cat: 显示整个文件,创建文件:cat>file,合并文件:cat file1 file2 >file3
vim编辑器
命令模式:完成对文本内容编辑的批处理操作
批处理操作: 光标的快速移动:
dd: 删除光标所在行 shift 6: 当前行的头
num dd:删除光标开始向下的num行 shift 4: 当前行的尾
d shift g:删除光标到文件尾的内容 shift g: 整个文本最后一行
d gg: 删除光标到文件头的内容 gg: 整个文本第一行
yy: 拷贝光标当前所在的行 num shift g: 第num行
num yy:拷贝光标开始向下的num行 shift h: 当前屏幕首行
p: 粘贴 shift l: 当前屏幕尾行
cc: 删除当前行并进入编辑 shift m: 当前屏幕中间行
shift c: 删除当前光标到尾行的内容并进入编辑
u 撤销上一次操作
r 替换一个字符
shift r 进入替换模式
插入模式(编辑模式):编辑文本内容
末行模式:对整个文本的操作
:w 保存文本 :q 退出编辑
:wq保存并退出 :q! 强制腿粗
:w newfilename 另存为
:set nu 显示行号 :set nonu 取消显示行号
:num 光标定位到num行
:1,$s/oidstring/newstring 用newstring替换整个文本每一行的第一个oldstring
:1,$s/oidstring/newstring/g 用newsting替换整个文本的oldstring 1:第一行
:/string 对文本进行全文向下详细搜索string
:?string 对文本进行全文向上搜索string 使用n来搜索上/下一个
命令模式切换到插入模式: 命令模式替换到末行模式:
a 进入到当前光标后开始编辑 :对文本的设置或保存工作
i 进入当前光标位置开始编辑
o 进入光标下一行开始编辑
O 进入光标上一行开始编辑
tar && gzip
参数:c:创建包 f:指定目标为文件而不是设备 t:仅显示包内容不是真正的释放
x:释放文件 v:显示详细过程 z:GUN版本加入,为一步解压提供支持
压缩文件: 解压文件:
两步压缩: 两步解压:
<1>、打包:tar cf bag.tar filelist gzip -d bag.tar.gz/bag.tgz -》bag.tar
<2>、压缩:gzip bag.tar -》bag.tar.gz压缩包 tar xf bag.tar
一步压缩: 一步解压:
tar zcf bag.tgz filelist 生成bag.tgz压缩包 tar zxf bag.tar.gz/bag.tgz
wc: 统计数目
nl: 显示文件内容和行号
umask: 显示/设置文件的缺省权限
where is:搜索命令所在目录和帮助文档的路径
grep: 文本搜索工具
awk: 行处理器、不会出现溢出或处理缓慢问题
sed: 流编辑器、文本处理工具
diff: 比较文件
sort: 排序工具
uniq: 内容去重
文件的连接:
软连接:ln -s 源文件的绝对路径/文件名 软连接的路径/文件名 相当于快捷方式 修改源文件
硬链接:ln 源文件的绝对/文件名 软连接的路径/文件名 源文件的副本 修改源文件
软连接可以跨文件系统,硬链接不可以 不可对目录文件创建链接
软连接与硬链接使用相同的inode结点,只是链接数增加,软连接源文件与源文件使用不同inode结点
调试相关:
编译链接过程: *.c== filename.c
预编译:gcc -E *.c -o *.i 生成--- *.i文件
编译:gcc -S *.i 生成--- *.s 汇编文件
汇编:gcc -c *.s 生成--- *.o 可重定位的二进制目标文件
链接:gcc *.o 生成--- a.out 可执行文件
gcc *.o -o * 生成--- * 可执行文件
一步:gcc -o filename.c(所有需要编译的文件) *
一步:gcc -o main(最终的可执行文件) filename.c(所有需要编译的文件) -lstdc++
开发版本:
debug版本:可调式版本 release版本
开发版本、可调试版本 发行版本、不可调试版本
生成的可执行文件中包含大量的调试信息 生成的可执行文件没有调试信息,仅可执行
debug版本的生成
gcc编译过程加入–g 一步从源文件到debug版本的可执行文件
gcc -c main.c -g gcc -o main.c debugMain -g
gcc -o debugMain main.o 执行命令:db debugMain 进入gdb
gdb/core文件方式调试
break/b: 设置断点
run/r: 启动运行
info/i: 描述程序状态
display/d 跟踪查看某个变量的值
next/n: 执行到下一行, 逐过程
continue/c: 继续执行,直到下一个断点处
step/s: 执行到下一行, 逐语句,进入到将被调用的函数中执行
finish: 运行程序,直到当前函数返回
until/u: 运行程序,直到退出循环体
quit/q: 退出调试
bracktarce/bt:查看函数堆栈调用信息
start/st: 开始执行程序,在main()函数的第一条语句前停下来
kill/k: 终止正在调试的程序
watch: 监视变量值的变化
f: 查看栈帧
file: 装入需要调试的程序
set var name=v:设置变量的值
strace: 监控当前进程,跟踪进程执行时的系统调用和接收信号
ltrace: 跟踪进程函数调用库的情况
l: 显示main函数所在文件的源码
list filename:num: 显示filename文件num行上下的源码
set listsize count: 设置一次显示源代码的行数
list funaction: 显示函数名位funaction的函数的源码
list first,last: 显示first到last之间的源码
list,last: 显示从当前行到last行的源码
break funaction: 在funaction函数添加断点
break linenum: 在linenum行添加断点
break filename:num: 在filename的num行添加断点
break filename:funaction: 在filename的funaction函数添加断点
break … if condition: 如果condition成立时停住
condition bpnum expression:将bpnum的条件改为expression
info break: 显示断点信息
delete bpnum/range: 删除bpnum断点、range表示范围
disable bpnum/range: 将断点设置为无效
enable bpnum/range: 将断点设置为有效
enable bpnum/range once/delete:停止一次后,将断点disable或delete
p valname: 显示变量的值
p &valname: 显示变量的地址
p 表达式: 显示表达式的值
p funaction(a, b):显示函数的值
p arr/*parr@len 显示数组所有元素
display: 自动显示、参数和p一样
undisplay displaynum:删除自动显示
info display: 显示自动显示的信息
ptype val: 显示变量类型
x/nuf addr: 打印addr表示的内存存储值
n:整数 表示显示内存的长度
f:表示显示的格式: x:16 d:10 o:8 t:2 c字符 f:浮点数
u:从当前地址向后请求的字节数,默认4bytes可指定:b:1 h:2 w:4 g:8
多进程调试:
(gdb)set follow-fork-mode mode
mode可以选择parent或者chile,即选择调试那个进程
未被选择的进程将直接执行结束
多线程调试:
1、利用info threads 查看线程全部信息
2、thread id 调试目标id指定的线程
3、set scheduler-locking off|on|step
off: 不锁定任何线程
on:只有当前被调试的线程继续执行
step:在单步执行为时候,只有当前线程会执行
进程:
ps: 显示进程信息
ps -e: 显示有关其它用户进程的信息
ps -l: 显示自己bash的进程
ps aux: 显示所有系统运行的程序
ps -f: 显示用户id 进程id 父进程id 最近CPU使用情况等信息
kill pid: 结束进程
kill -stop pid: 挂起进程
kill -9 pid: 强制结束进程
kill -1 pid: 重启进程
kill -l: 查看信号
w : 查看登陆用户
pkill: 按照终端号提出用户
pkill ps+kill : 按照进程名结束指定进程
bg 任务号: 将挂起的进程放到后台执行
pg 任务号: 将挂起或后台的进程放到前台执行
jobs: 查看当前有多少后台运行的进程
pstree: 以树状图显示进程
&: 后台运行 CTRL Z后台(停止)
pidof: 找出正在运行进程的pid
pmap [-x/d/q/V/A] pid:查看进程内存映像信息
time pid: 测量指定进程运行消耗的时间及系统资源的消耗信息
taskset: 将某个进程绑定到CPU的某个核上有效控制CPU资源 taskset -p pid 查看进程的绑核情况
用户管理命令:
useradd/assuser newname 添加一个新的用户 newname
-g 执行新用户的主组
-G 将用户添加到副组
-s 指定信用户默认使用的shell终端
-d 指定新用户登陆默认进入的目录
passwd username 修改用户密码
userdel username 删除用户
usermod 修改用户账户信息
系统运行的状态
系统运行的状态存储在/etc/inittab文件中
0 关机
1 单用户模式
2 不带网络的用户模式
3完全的多用户模式优先进入字符界面模式
4 未使用的
5 图形界面模式
6重启
可在root用户下,通过执行init命令切换系统的工作模式
init 0 关机(root)
init 6 重启(root)
halt 关机 poweroff 关机
shut down 关机 reboot 重启
网络:
netstat: 显示网络相关信息,查看占用端口的进程
vnstat: 性能监控
ping: 测试网络连通性,确定网络和各外部主机的状态
ip: 网络配置工具
ss: socket status 显示socket通讯状态
lsof : 列出当前操作系统打开的所有文件描述符 fuser
nc: netcat通过tcpudp协议传输读写数据,根据需要创建不同类型的网络连接
tcpdump: 命令行工具,将网络中传送的数据包完全接获提供 网络数据分析
ifstat: 网络接口监测工具,统计网络接口流量状态
ifconfig: 显示或设置网络设备,查看和更改网络接口的地址和参数
iptraf: ip局域网监控工具,实时监控网卡流量
iftop: 监控网卡流量 iotop
mail: 查看、发送邮件 mail -s http
write: 给用户发信息
系统监测:
top: 提供当前系统的快照,显示最活跃进程,实时显示进程信息 htop
vmstat: 虚拟内存统计:对操作系统的虚拟内存、进程、cpu活动监控 (时间间隔,次数)
iostat: 显示CPU和磁盘IO的统计信息
sar: cpu 内存 磁盘网络流量
watch: 定时重复执行命令并检测命令的运行结果
内存:
ncdu: 查看磁盘占用情况
Free: 显示内存状态
Slabtop: 实时显示slab的缓冲区的细节信息
valgrind: 内存泄漏监测工具
其他
ulimit: 控制shell执行程序的资源 进程及子进程资源使用限制
nm names: 列出某些文件的符号(函数、全局变量)的逻辑地址
ldd: 打印可执行文件依赖的共享库文件列出动态库关系
ipcs: 打印系统中的进程间通讯方式,显示消息对象/共享内存/信号量
ipcrm: 删除消息对象/共享内存/信号量
who: 系统上的其它用户
who am i: 当前登陆系统所使用的用户
w: 系统上的终端及用户
whatis: 显示查询命令的简单说明
--help: 指令的基本用法与选项的介绍
man: 显示所查询命令的使用说明
info: 命令使用说明一页一页查看
which: 指令搜索列出所有指令
users: 显示目前哪些用户登陆了系统
uname: 显示系统本身信息
tty: 目前登陆linux使用的终端
date: 系统当前信息
cal: 日历
clear: 清空屏幕 CTRL L
su: 切换到root用户
objdump: 查看目标文件或可执行文件的构成,反汇编目标文件
readelf: 显示elf文件的信息
ELF文件格式:
.text段: 存放代码指令段
.data段: 存放已初始化且初始化不为零的数据
.bss段: 存放未初始化或初始化为零的数据在文件中不存在,.bss段不占空间,但信息已被保存
数据: 全局变量、静态变量
指令: 其余全为指令