常用 Linux 指令
lsb_release -a
查看Linux环境下安装的系统版本
pwd
查看当前所在目录
ls
列出当前目录下的文件及文件夹。绿色是可执行文件,蓝色是文件夹,白色是文件。
mkdir 目录名
创建目录
touch test.c
创建文件
mv 文件/文件夹 要移动到的目录
mv 原文件名 新文件名
还可以改文件的名字
cp 文件 目录
cp -r 文件夹 文件夹 要移动到哪
如果要copy的不止一个文件,加上 -r 递归拷贝
rm file1 file2 file3 ...
可以将写的文件全部移除。
rm *.filesuffix
以后缀名的方式删除,指明的后缀匹配文件全部删除
rmdir 目录
可以删除空目录
rm -r 目录
递归删除目录中的文件
rm -rf mulu
递归删除目录 且强制删除不被提醒
tree
以树的形式来展示当前文件夹中的文件。目录树
tar -xzvf file.tar.gz
解压 .tar.gz 文件
which exe
查看 可执行文件exe 的绝对路径
动态链接 环境配置相关
ldd exe_name
查看可执行程序的动态库依赖关系
env
输出当前系统环境下的环境变量 。环境变量的作用:当系统去运行一个程序 但又没有给出程序的绝对路径时,系统在当前目录下即相对路径下找不到程序时,就会去 path 环境中去找看有没有程序的路径。
export LD_LIBRARY_PATH=$LD_LIBRARY:拼接上动态库的绝对路径
设置环境变量,跟环境名,值的部分先用 $把原来的环境变量获取到,在用 :在原来的环境变量的基础上拼接新的变量。 LD_LIBRARY_PATH 是在当前终端中配置的,临时的,当终端重启后,就不在有效,动态加载器在定位时就会找不到该动态库。
永久的环境变量配置 动态库的绝对位置:用户级别/系统级别的环境变量配置。
source ./.bashrc
每次更改完环境变量后 确定一下
echo $环境名
来查看环境中的变量
vim 命令
cat 文件名
查看文件中的内容
vim 文件名
创建一个文件并编辑
:e
更新内容
:w
vim 编辑器下 保存但不退出
:wq
保存并推出
:q
推出
:q!
强制退出
:e!
放弃所有修改,到达上次保存的状态处
shift+g
调到最后一行
set nu
设置行号
IO 函数相关
man
查看操作手册的
man 2 open
linux 下IO函数的一个说明文档
man 3 fopen
标准C的IO函数说明
man 3 perror
打印errorno对应的错误描述的说明文档
ln -s 源文件 生成的软链接文件
软链接文件指向源文件,
/etc/passwd
/etc/group
下存放着 所有用户对应的 uid 和所在组的 gid
useradd 用户名
添加新的用户
id 用户名
查看用户的 uid 和 gid
进程相关
ps aux / ajx
aux 可以查看进程的CPU,内存的 当前 占用信息;而 ajx 可以查看到父进程和进程组的一些信息。
a
显示终端上的所有进程,包括其他用户的进程u
显示进程的详细信息x
显示没有控制终端的进程j
列出与作业控制相关的信息
其中的 STAT 参数含义:
D 不可中断 Uninterruptible(usually IO)
R 正在运行,或在队列中的进程
S(大写) 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
< 高优先级
N 低优先级
s 包含子进程
+ 位于前台的进程组
top [-d 信息更新的时间间隔]
动态的显示进程信息
可以按以下按键对显示的结果进行排序:
M 根据内存使用量排序
P 根据 CPU 占有率排序
T 根据进程运行时间长短排序
U 根据用户名来筛选进程
K 输入指定的 PID 杀死进程
tty
查看当前终端设备
echo $$
查看当前进程的 pid
kill pid
杀死进程号 pid 指定的进程。
- 想要 kill 掉自己所在的进程
kill -9 pid
kill -l
可以查看 kill 中的所有信号。-9 就是 9 所代表的宏指令
killall name
根据进程名杀死进程
./xxxx &
进程在后台运行,但在终端打印
fg
将后台进程切换到前台
ctrl + z
将进程切换到后台
GDB 调试状态下的常用指令
gcc xxx.c -o xxx.exe -g
加 -g生成带 调试信息的可执行文件
gdb xxx.exe
进入到调试模式
quit
退出调试模式
l
调试模式下显示可执行程序的代码
l 行号
查看 指定行号附近的代码l 函数名
查看 指定函数附近的代码l 文件名:行号
查看 指定文件的指定行号附近的代码l 文件名:函数名
查看 指定文件指定函数附近的代码
b
加断点
b 行号
在 指定行加断点b 函数名
在 指定函数加代码b 文件名:行号
在指定文件的指定行加断点b 文件名:函数名
在 指定文件指定函数处加断点
i b
查看断点信息
d 断点编号
删除断点编号指定的断点
start
停到程序入口
r
直到第一个断点处才停
c
继续运行到下一个断点处
n
向下执行一行代码
set follow-fork-mode parent|chile
设置当创建子进程时 是调试父进程还是子进程
show follow-fork-mode
查看调试的是父进程还是子进程
set detach-on-fork on|off
设置当子进程被创建后,子进程是否自动脱离父进程执行,因为本质上每个进程是独立运行的,需要的资源都被分配好后,即可等待时间片来执行。而设置 detach-on-fork off 后,子进程创建后不脱离父进程,会进入阻塞态。
show detach-on-fork
查看当前的进程是否自动脱离父进程情况
info inferiors
查看调试的进程
inferior id
切换当前调试的进程
detach inferiors id
使进程id 脱离GDB调试
段错误 调试,通过查看 core文件来找问题
- 先查看 core file size:
ulimit -a
- 根据提示修改 core file size:
ulimit -c unlimited
- 编译生成 core文件:
gcc xxx.c -o xxx -g
需要调试信息 - 进入 gdb调试:
gdb xxx
- 输入指令
core-file core
即可
共享内存操作命令
ipcs
ipcs -a
打印当前系统中所有进程间通信方式的信息(消息队列,共享内存段,信号量数组)
ipcs -m
打印共享内存的消息
ipcs -q
打印消息队列的消息
ipcs -s
打印信号量数组的消息
每种通信方式的表示 都由键和 id(shmid/msqid/semid) 组成
ipcrm
ipcrm -M shmkey
通过 键key 来移除共享内存段,这个移除并不能真正的将其内存段,而是将其标记为删除,当状态为0 时才会真正删除
ipcrm -m shmid
通过 id来移除共享内存段
ipcrm -Q msqkey
ipcrm -q maqid
ipcrm -S semket
ipcrm -s semid
线程相关
ps -Lf pid
查看指定进程(pid) 的线程(LWP)有哪些。
getconf GNU_LIBPTHREAD_VERSION
查看当前 pthread 库版本
网络相关
netstat
查看网络相关信息
-a
所有的 socket-p
显示正在使用的 socket 程序的名称-n
直接显示 IP地址,而不通过域名服务器- 例子
netstat -anp | grep my_port
显示端口号为 port 的 socket信息