本节主要讲 gdb、shutdown 、rpm/yum/apt-get 和 mount

目录

​gdb 用法​

​shutdown 和 reboot​

​rpm​

​mount​

​umount​

​USB​


gdb 用法

前一节讲了 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

执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句)

print

p

打印内部变量值

continue

c

继续程序的运行,直到遇到下一个断点

set var name=v

 

设置变量的值

start

st

开始执行程序,在main函数的第一条语句前面停下来

file

 

装入需要调试的程序

kill

k

终止正在调试的程序

watch

 

监视变量值的变化

backtrace

bt

产看函数调用信息(堆栈)

frame

f

查看栈帧

quit

q

退出GDB环境

 

shutdown 和 reboot

只有 root 权限才能关机和重启

init0 是关机,init6 是重启

 

rpm

一般来说著名的 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

 

 

mount

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

umount 就是 unmount ,取消挂载,当初写的时候写错了少写了个 n

umount 显示 device is busy 说明硬盘的内容还有在读写,这时候不能硬把硬盘拔下来不然东西就没了,可能会把机器搞坏

解决方法

1、关机

可能造成工作丢失

2、umount -l

lazy umount 会断开设备并关闭打开该设备的全部句柄

 

USB

插入 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 盘了