本节主要讲 gdb、shutdown 、rpm/yum/apt-get 和 mount
目录
gdb 用法
shutdown 和 reboot
rpm
mount
umount
USB
前一节讲了 gcc 是编译用的,gdb 则是调试用的,类似于 VS 中的 debug,可以断点、单步调试
$ gcc -g -o test test.c
$ gdb test
选项
list |
l |
显示多行源代码 |
break |
b |
设置断点,程序运行到断点的位置会停下来 |
info |
i |
描述程序的状态 |
run |
r |
开始运行程序 |
display |
disp |
跟踪查看某个变量,每次停下来都显示它的值 |
step |
s |
执行下一条语句,如果该语句为函数调用,则进入函数执行其中的第一条语句 |
next |
n |
执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句) |
|
p |
打印内部变量值 |
continue |
c |
继续程序的运行,直到遇到下一个断点 |
set var name=v |
|
设置变量的值 |
start |
st |
开始执行程序,在main函数的第一条语句前面停下来 |
file |
|
装入需要调试的程序 |
kill |
k |
终止正在调试的程序 |
watch |
|
监视变量值的变化 |
backtrace |
bt |
产看函数调用信息(堆栈) |
frame |
f |
查看栈帧 |
quit |
q |
退出GDB环境 |
只有 root 权限才能关机和重启
init0 是关机,init6 是重启
一般来说著名的 linux 系统基本上分两大类:
1、RedHat 系列:Redhat、Centos、Fedora 等
2、Debian 系列:Debian、Ubuntu 等
在这两大类系统上想安装东西时要使用的命令如下
RedHat 系列
1、rpm
$ rpm -i *.rpm # 安装
$ rpm -ivh *.rpm # 安装并且有安装进度等提示信息
$ rpm -Uvh *.rpm # 升级并且有安装进度等提示信息
$ rpm -ivh –force -nodeps mypck-1.1-2RJ.i386.rpm
# 安装mypck包且显示安装信息等,软件版本号1.1,发行号为2
# RH表操作系统,i386表示这个软件包适用于intel 80386以上的x86架构的计算机(AI32)
$ --force表示强制安装,-nodeps忽略缺失的依赖文件
$ rpm -U *.rpm # *为包名,升级一个已存在的软件包
$ rpm -e * # *为包名,卸载一个包,注意不要有后缀.rpm
$ rpm -qa|grep -i 'name' # 查看是否安装有名为name的rpm包
$ rpm -qif `which rpm_pkg_name` # 返回软件包的有关信息(看文件在哪个包里)
rpm 的包名比较长,因为不同的机器、不同的 linux 版本要使用 rpm 包也不一样,所以要自己找对应的包
2、yum 黄狗
最简单,yum 帮你去找对应的包,你只要说你要什么包就行了
# yum会自己去帮你找你需要的包是哪个版本,可以不用指定
# yum install httpd # 安装httpd包
# yum remove httpd # 卸载httpd和相关的包
# yum list # 查看所有可安装的包
# yum list installed # 查看所有已安装的包
# yum update # 升级所有包同时升级系统和软件内核
3、tar
有 gcc 的机器才用
Debian 系列
apt和apt-get
Ubuntu上常用的包安装命令为apt和apt-get
区别:
两个命令差的不多;
apt是apt-get、apt-cache 和 apt-config 中最常用命令选项的集合;
linux发行商鼓励使用apt,apt提供了 Linux 包管理的必要选项
$ apt install pkg # 安装包,或者apt-get install
$ apt remove pkg # remove卸载包但保留配置文件,purge删除包同时删除文件,或者apt-get remove,purge对应为apt-get purge
$ apt show pkg # 显示安给定包的信息,包括它的依赖关系、安装和下载大小、包的来源、包内容的描述等等,对应为apt-cache show
$ apt list zlib* # 找出本地仓库中所有已zlib开头的包,只写apt list就会列出所有包,apt-get没这个功能
$ apt search keyword # 搜索给定关键字,并列出所有的包和描述,在找指定功能的包的时候会用到,对应为apt-cache search
$ apt autoremove pkg # 自动删除不需要的包, 对应为apt-get autoremove
apt-get
linux 是用于服务器的操作系统,服务器最重要意识 cpu,二是硬盘
早起 linux 还有什么显卡声卡,现在说到设备基本就是硬盘,所以 mount 的操作对象是硬盘
硬盘满了,买个硬盘然后打开机箱插机器上 mount 就行了
插上硬盘后:
$ fdisk -l # 查看分区状态,看有没有没分区的空盘,插了一块就有 /dev/sda 两块就有 /dev/sdb
sdb 是一个物理硬盘,现在要把这个硬盘放到软件可以访问的地方上
$ fdisk
一般来说用 n(加一个新分区),这就获得一个新的逻辑分区
接下来用 mkfs 格式化
一般用 mkfs.xfs
$ mkfs.ext4 /dev/sdb1 or # 或 mkfs.xfs /sdb1
# 除了 xfs 还有 NFS,NFS就是把 A 机器上的硬盘 mnt 到 B 机器上,B的也可以 mnt 到 A 的上,这样共享数据而且安全,但要搭建网络
# NIS 还可以做到多台机器/用户共享一个内容,登录一台机器就是登录十台机器,公司小局域网里可能用到
$ mkdir -p /mnt/backup2
$ mount /dev/sdb1 /mnt/backup2
这就把硬盘挂载上了,之后对于 /mnt/backup2 的访问就是对硬盘 /dev/sdb1 的访问
一般也不加 -type 说明是那种类型
因为 mount 之后会在 /proc/filesystems 里挨个试,哪个试成功了就是那个类型所以无需指定
要注意的就是硬盘要 mnt 到并列的目录下,不要一个在 mnt 一个在 mnt/hd1 下
使用 $ mount 查看当前的 mnt 的状态,但是看不到哪个硬盘挂在哪里,也看不到空间
实际上用的是 $ df -h
umount 就是 unmount ,取消挂载,当初写的时候写错了少写了个 n
umount 显示 device is busy 说明硬盘的内容还有在读写,这时候不能硬把硬盘拔下来不然东西就没了,可能会把机器搞坏
解决方法
1、关机
可能造成工作丢失
2、umount -l
lazy umount 会断开设备并关闭打开该设备的全部句柄
插入 U 盘
这里是 root 的权限所以不是 $ 是 #
# mkdir /mnt/usb1
# ls /dev/sd* # u 盘的设备文件也是 sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sdb /dev/sdb1 # 出现的文件为挂载的 sata 硬盘
现在,插上 U 盘,再观察/dev/ 目录
# ls /dev/sd*
/dev/sda /dev/sda2 /dev/sdb /dev/sdc
/dev/sda1 /dev/sda3 /dev/sdb1 /dev/sdc1
# 多出来的 sdc 为 U 盘的设备文件,现在把新增的设备 mount 上
[root@forward /]# mount /dev/sdc1 /mnt/usb1
$ cp /home/yd211/1.txt /mnt/usb1
$ sync # 把 linux cash 中还没做的命令强行做,也就是同步
$ umount /mnt/usb1 # umount /dev/sdc1 也行
如果 umount 不了显示 busy,就用 umount -l 强行卸载
可以拔出 U 盘了