1.文件和目录操作:
ls: 列出文件和目录
cd: 切换目录
pwd: 显示当前工作目录
touch: 创建空文件或更新文件的访问时间
mkdir: 创建新目录
cp: 复制文件或目录
mv: 移动文件或目录
rm: 删除文件或目录
cat: 查看文件内容
more 或 less: 分页查看文件内容
head: 查看文件开头部分
tail: 查看文件结尾部分
2.文件内容处理:
grep: 在文件中搜索指定字符串
find: 在目录中查找文件
wc: 统计文件中的行数、字数和字节数
sort: 对文件内容进行排序
uniq: 删除文件中的重复行
cut: 从文件中截取字段
sed: 流编辑器,用于处理文本流
3.文件权限和所有权管理:
chmod: 修改文件或目录的权限
chown: 修改文件或目录的所有者和所属
4.系统信息查看:
date: 显示或设置系统时间和日期
uptime: 查看系统运行时间和负载
ps: 显示进程状态
top: 实时显示系统进程状态
df: 查看磁盘空间使用情况
du: 查看文件和目录的磁盘使用情况
5.网络命令:
ping: 测试网络连通性
ifconfig 或 ip: 显示或配置网络接口信息
netstat: 显示网络状态信息
ssh: 安全远程登录
scp: 安全复制文件或目录
wget 或 curl: 下载文件或网页
6.系统管理:
reboot: 重启系统
shutdown: 关闭系统
useradd: 添加新用户
passwd: 修改用户密码
userdel: 删除用户
su: 切换用户
linux下软件安装
两种安装包管理机制:
debian linux:deb软件包 - ubuntu用的就是这个
redhat linux:rpm软件包
deb软件包分为两种:
二进制软件包(deb) .deb --> 安装软件的软件包
源码包(deb-src) .dsc
软件包命名:
软件包的管理工具:dpkg、apt
1.dpkg
特点:安装时需要软件包存在,不需要从镜像站点获取软件包。
不需要网络,不能检查软件的依赖关系
dpkg命令:
sudo dpkg -i 软件包的完整名称:安装软件
sudo dpkg -r 软件名:卸载软件
sudo dpkg -s 软件名:查看软件的安装状态
sudo dpkg -P 软件名:完全卸载
sudo dpkg -L 软件名:列出软件目录信息
2.apt
特点:安装时不需要软件包存在,需要从镜像站点获取软件包
需要网络,能检查软件之间的依赖关系
apt-get:
sudo apt-get install 软件名:下载并安装软件
sudo apt-get remove 软件名:卸载软件
sudo apt-get remove --purge 软件名 :完全卸载
/var/cache/apt/archives --> 软件包默认存放的路径
sudo apt-get clean : 清除下载的软件包
sudo apt-get download 软件名 :下载软件包,但是不安装
sudo apt-get upgrade 软件名 :更新软件
sudo apt-get update :更新源
执行download命令会出现的问题:
原因:只让虚拟机下载了软件包,并没有安装软件包的权限
进程管理命令
进程:是程序运行一次的过程,动态的
程序:存放在此版空间上的可执行文件
ps 查看进程状态
ps -aux
USER(用户) PID(进程id) %CPU %MEM VSZ RSS TTY(终端 ?:不依赖终端) STAT(状态) START TIME COMMAND
PID:是唯一标识id号
ps -ef:查看父进程的id :PPID
ps -ajx:PPID PID PGID(组id) SID(会话ID)
可以通过man ps 查看关于进程状态的信息
进程状态:
D uninterruptible sleep (usually IO)不可中断睡眠态
R running or runnable (on run queue)运行态
S interruptible sleep (waiting for an event to complete)可中断睡眠态
T stopped by job control signal停止态
t stopped by debugger during the tracing调试器打断
X dead (should never be seen)死亡态
Z defunct ("zombie") process, terminated but not reaped by its
parent僵尸态
< high-priority (not nice to other users)高优先级
N low-priority (nice to other users)低优先级
L has pages locked into memory (for real-time and custom I
锁定到内存中
s is a session leader 会话组组长
l is multi-threaded (using CLONE_THREAD, like NPTL pthread
do)线程
+ is in the foreground process group前台进程
./a.out &:将a.out在后台运行
fg 编号:将后台运行的进程拉到前台运行
ctrl z:将前台运行的进程暂停同时放在后台
bg 编号:将后台暂停的进程在后台运行起来
top 动态显示进程的状态
在进程管理中,NI通常表示进程的Nice值(Nice Value)。Nice值是用来调整进程优先级的参数,它可以影响进程在系统中的调度顺序
Nice值通常是一个整数,在大多数操作系统中,它的范围通常是-20到+19。较小的Nice值表示进程的优先级较高,而较大的Nice值表示进程的优先级较低
NI:优先级 +19 ~ -20 值越小,优先级越高
PR:20 + NI
在进程管理中,PR通常表示进程的优先级(Priority)。进程优先级是操作系统用来管理和调度进程的一种机制。每个进程都有一个与之相关联的优先级,用于确定进程在系统中的调度顺序。
renice 修改正在运行的进程的优先级
sudo renice -n num PID
num:要修改的NI值
PID:要修改的进程id
下图是top查看到的更改之后的优先级
下图是ps-aux查看到的进程状态:
nice 定制运行的优先级
sudo nice -n num ./可执行文件
下图是top查看到的更改之后的优先级
下图是ps-aux查看到的进程状态:
kill:发送信号
kill -l:查看linux下的信号
2) SIGINT ctrl+c 结束进程
3) SIGQUIT 退出
4) SIGILL 结束进程
9) SIGKILL 杀死进程 不可忽略信号
10) SIGUSR1 未定义功能
12) SIGUSR2 未定义功能
13) SIGPIPE 管道破裂信号
14) SIGALRM 时钟信号
17) SIGCHLD 子进程状态发生改变会给父进程发送
- SIGSTOP 停止 不可忽略信号
kill num PID:给指定的进程发送num信号
网络管理
配置方法:
ifconfig: 查看网络信息
ping 域名/ip: 检查网络连通性
文件系统命令
文件系统类型
磁盘文件系统:指本地主机中实际可以访问到的文件系统,包括硬盘、CD-ROM、DVD、USB存储器、磁盘阵列等。常见文件系统格式有:autofs、coda、Ext(Extended File sytem,扩展文件系统)、Ext2、Ext3、VFAT、ISO9660(通常是CD-ROM)、UFS(Unix File System,Unix文件系统)、ReiserFS、XFS、JFS、FAT(File Allocation Table,文件分配表)、FAT16、FAT32、NTFS(New Technology File System)等;
网络文件系统:是可以远程访问的文件系统,这种文件系统在服务器端仍是本地的磁盘文件系统,客户机通过网络远程访问数据。常见文件系统格式有:NFS(Network File System,网络文件系统)、Samba(SMB/CIFS)、AFP(Apple Filling Protocol,Apple文件归档协议)和WebDAV等;
专有/虚拟文件系统:不驻留在磁盘上的文件系统。常见格式有:TMPFS(临时文件系统)、PROCFS(Process File System,进程文件系统)和LOOPBACKFS(Loopback File
Linux文件
/bin:存放系统中最常用的可执行文件
/dev:存放所有设备文件,包括硬盘、分区、键盘、鼠标、USB、tty等
/home:用户主目录的默认位置
/mnt:该目录通常用于作为被挂载的文件系统的挂载点
/usr:用于存放与系统用户直接有关的文件和目录,例如应用程序及支持它们的库文件
文件操作相关的命令
- file 文件名:查找文件属性信息
a.out:文件名
ELF:类型
64-bit LSB shared object:小端存储
x86-64:64位操作系统
version 1 (SYSV):版本
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2:动态链接的库
BuildID[sha1]=929170c6441faf1ed8244921a012c77550a8584a:动态ID
for GNU/Linux 3.2.0:gcc编译器的版本
not stripped: 文件没有被压缩
- cat 文件名:将文件的内容输出终端
cat -n 文件名:输出显示行号
- find 查找文件
格式:find 路径 -name "文件名" --> 从路径开始往后查找文件
find ./ -name "*.c"
grep 查询指定字符串
grep "字符串" 文件名:在一个文件中查找
grep "字符串" 路径 -nR:从路径开始往后查找,找到所有用到这个字符串的文件
-n:回显找到的行数
-R:查找路径可以是目录,-R会进行递归查找
rm -f 文件名:强制删除,文件存不存在都会删除
rm -rf 目录名:强制删除目录,目录存不存在都会删除
head 文件名:默认输出文件内容的前10行
head -num 文件名:输出文件内容前num行
tail 文件名:默认输出文件内容的后10行
tail -num 文件名:输出文件内容后num行
tail 文件名 | head -5
5.解压和压缩
gzip 和 gunzip
特点:
只能对单个的普通文件进行压缩或解压
不能进行归档,压缩后或解压后源文件不存在
压缩后生成压缩格式为 .gz 格式
压缩:gzip 文件名 ---> 默认生成:文件名.gz 压缩文件
解压:gunzip 压缩文件名 ---> 默认解压为:文件名
bzip2 和 bunzip2(特点和 gzip相似)
压缩后生成的压缩格式为 .bz2 格式
压缩:bzip2 文件名 ---> 默认生成:文件名.bz2 压缩文件
解压:bunzip2 压缩文件名 ---> 默认解压为:文件名
xz 和 unxz(特点和 gzip相似)
压缩后生成的压缩格式为 .xz 格式
压缩:xz 文件名 ---> 默认生成:文件名.xz 压缩文件
解压:unxz 压缩文件名 ---> 默认解压为:文件名
zip和unzip
zip命令用于将一个或多个文件压缩成单一的压缩文件
注意:
1)具有归档功能,并进行压缩
2)可以压缩文件夹,后缀为.zip。压缩文件夹需加-r
3)压缩或者解压后源文件依然存在
压缩:zip 压缩文件名 要压缩的文件列表
解压:unzip 压缩文件名
tar
选项:
-c:创建一个新的归档文件
-v:显示归档和释放的过程信息
-x:释放归档文件
-f:用户指定归档文件的文件名
-t:列出tar归档文件中包含的文件或目录
-j:由tar生成归档,然后由bzip2压缩 .bz2
-z:由tar生成归档,然后由gzip压缩 .gz
-J: 由tar生成归档,然后由xz压缩 .xz
格式:
tar 选项 压缩文件名 要压缩的文件列表
压缩组合:
tar -cvjf file.tar.bz2 *
tar -cvzf file.tar.gz *
tar -cvJf file.tar.xz *
解压:tar -xvf xxx.tar.压缩格式
注:tar -cvf file.tar * --> 只归档不压缩
注意:
1)具有归档功能,并通过选项可以进行压缩或解压
2)压缩或解压后源文件存在
3)需要写全压缩或解压的文件名格式:
压缩文件名.tar.压缩格式
查看压缩或归档文件中存在的内容:
6.硬链接和软连接(符号链接)
硬链接
硬链接文件可以理解为文件的副本(可以理解为复制粘贴)
ln 根据 Linux系统分类给文件 inode(ls -li) 号进行建立,没有办法跨越文件系统
格式:ln 被链接的文件(源文件) 生成链接文件(目标文件)
- 硬链接的属性是 - 相当于生成一个副本 起别名
- 源文件删除链接文件依然存在
- 删除源文件后,即使创建一个和源文件同名文件,也和硬链接文件之间不存在链接关系
- 修改其中一个文件的内容另一个会更改
- 硬链接文件和源文件拥有相同的inode号
软连接
理解为wins下的快捷方式
ln -s 利用文件的路径来建立的,最好从绝对路径开始
格式:ln -s 被链接的文件(源文件) 生成链接文件(目标文件)
- 软连接文件属性 l 相当于快捷方式
- 修改内容都变化
- 软连接文件可以连接目录
- 源文件删除,链接断开,在原来的位置创建就可以重新链接
硬链接和软连接的区别
首先,从使用的角度讲,两者没有任何区别,都与正常文件访问方式一样,支持读写,如果是可执行文件的话也可以直接执行
本质区别:
硬链接:本质上是同一个文件
软连接:本质上不是同一个文件
跨设备区别:
硬链接:不支持
软连接:支持
inode区别:
硬链接:相同
软连接:不同
连接数:
硬链接:创建新的硬链接,连接数会增加,删除硬链接,链接数减少
软连接:创建或删除,链接数不会变化
文件夹:
硬链接:不支持
软连接:支持
7. gdb调试
启动GDB:在终端中运行gdb命令,然后在GDB提示符中输入要调试的可执行文件的路 径, 例如: gdb ./my_program。
设置断点: 使用break命令设置断点,例如:break main在main函数处设置断点。
运行程序:在GDB中使用run或r命令运行程序,例如:run。
单步执行:使用step或s命令单步执行程序,按行执行并进入函数。
运行到断点:使用continue或c命令运行程序,直到遇到下一个断点。
查看变量:使用print或p命令查看变量的值,例如:print my_variable。
查看堆栈:使用backtrace或bt命令查看函数调用堆栈。
跟踪变量:使用watch命令跟踪 变量的值变化,例如:watch my_variable。
删除断点:使用delete命令删除断点,例如:delete 1删除序号为1的断点。
退出GDB:使用quit或q命令退出GDB。
8. gcc编译步骤
预处理:对以#号开头的内容进行替换,不会检查语法错误。
gcc -E hello.c -o hello.i
编译:对代码进行编译,可以检查语法错误 。
gcc -S hello.i -o hello.s
汇编:将汇编代码转换成机器代码。
gcc -c hello.s -o hello.o
链接:将目标文件和其他可能需要的库文件链接在一起,生成可执行文件。
gcc hello.o -o hello