程序包管理
程序的编译过 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 静态编译: 共享编译:.so 二进制应用程序的组成部分: 二进制文件、库文件、配置文件、帮助文件 管理及查看本机装载的库文件: ldconfig /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系; 配置文件为:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 缓存文件:/etc/ld.so.cache /usr/bin 普通用户执行文件 /usr/sbin 服务器执行程序文件和管理程序文件 /dev 块设备文件 /mnt 临时挂载点 /tmp 临时文件存放路径 /usr/src 源代码存放路径 /usr/share/doc/ 帮助文档 i386 32位系统 x86-64 64位系统 rpm -qa xxx 查看系统中已安装的所有rpm软件包 rpm -qi xxx 查看指定软件包的详细信息 rpm -ql xxx 查看安装这个软件包的时候生成的那些文件,Windows默认安装不可以 1、Linux系统中每个配置文件的作用? 普通执行程序文件 /usr/bin 服务器执行程序文件和管理程序文件 /usr/sbin 应用程序配置文件 /etc 日志文件 /var/log 块设备文件 /dev 临时挂载点 /mnt 2、常见的软件包封装类型? rpm软件包 扩展名为“.rpm” deb软件包 扩展名为“.deb” 源代码软件包 一般为“.tar.gz”、“.tar.bz2”等格式的压缩包,包含程序的原始代码 3、bash-4.1.2-15.el6_4.x86_64.rpm bash: 软件名称 4.1.2 版本号 15 次版本号 64 64位系统 4、查看系统中已安装的所有RPM软件包列表 rpm -qa 5、查询指定软件包所安装的目录、文件列表 rpm -ql 软件名 6、查询文件或目录属于哪个 RPM 软件 rpm - qf 文件或目录名 7、查询未安装的 RPM 包文件 rpm - qp[子选项] RPM包文件 8、查看.rpm安装包内所包含的目录、文件列表 rpm -qpl 9、安装rpm软件包 rpm -ivh 软件包 i: intall安装 v: 显示安装过程中的详细信息 h: 以#显示安装进度
yum
定义: 解决软件包的依赖性,可在多个仓库中定位软件包,yum有服务器和客户端,yum服务器里存放着安装软件的包以及 相关软件的元数据(软件的版本号、说明、依赖性等等),客户端想访问服务器获取软件包,得在本地配置一个指向 文件,说明这个服务器在哪里啊等等信息。 yum客户端配置文件: /etc/yum.conf: 为所有仓库提供公共配置 /etc/yum.repos.d/*.repo: 自己设置仓库的指向提供配置 仓库指向的定义:如我们创建了一个名为dvd.repo的仓库配置文件 用vim打开这个文件,格式如下
[base]#表示仓库的名字,中括号里面随便定义名字
name=base #填写名称,描述信息。
baseurl=file:///media/ #它支持多种路径格式,http://、https://、ftp://、file://,(它可以写多个路径
多个路径的时候可以用‘mirrorlist=’后面跟上存放多个路径的文件地址)
gpgcheck=0 #它的作用是检查包的完整性,0表示不检查,默认是1检查
gpgkey=file:///media/RPM-GPG-KEY-CentOS-7 #表示公钥的路径
查看仓库:获取元数据 yum repolist enabled 仅显示激活的仓库,默认 all 显示所有的仓库 disabled 仅显示禁用的仓库 清除缓存: yum clean all var/cache/yum/ #缓存的路径 备注:在我们创建好客户端配置文件后,执行yum repolist获取信息,有时不会更新,还是原来的数据,这时 我们要清除下缓存, 构架缓存:makecache 用yum安装软件: yum install 跟软件名 如 yum install gcc -y #-y是自动回答yes yum reinstall gcc 重新安装包 用yum卸载包: yum remove gcc 查看仓库都有那些包: yum list #查看所有仓库里面的包,从缓存中读取 yum list *ftp* yum list installed 安装好的包 临时禁用仓库: enabled=0 #默认是1 开启 yum日志: ll /var/log/yum.log #列出yum.log文件信息 cat /var/log/yum.log #查看yum.log文件 升级程序包: yum update .. 升级 yum downgrade..降级检查可升级的包:
yum check-update 卸载程序包:yum remove .. 查看程序包:yum info .. 搜索:yum search string1 [string2] [...] 已指定的关键字搜索程序包名及相关信息 查找磁盘上某个文件是由那个包提供的: yum provides pkgname #yum provides *bin/bash 查询指定的包依赖哪些能力及提供的包: yum deplist pkgname #yum deplist tree 查询yum历史: yum history 这时出现历史列表,记录了安装与卸载历史, yum history list 2 #查看编号2这条历史记录信息 info 在我们卸载包的时候它的依赖包是不会一起卸载掉的,这时候我们找到它的安装记录,执行一个命令就可以了 yum history undo 2 #2是编号 包组管理相关命令: grouplist 查看包组 groupinfo 包组名 yum groupinstall "Development Tools" 安装开发包组 groupremove "Development Tools" 卸载开发包组 yum install --downloadonly --downloaddir=/app httpd-manual 仅下载不安装 yum的命令行选项: --nogpgcheck:禁止进行gpg check; -y: 自动回答为“yes”; -q:静默模式; --disablerepo=repoidglob:临时禁用此处指定的repo; --enablerepo=repoidglob:临时启用此处指定的repo; --noplugins:禁用所有插件; 如何使用光盘当作本地yum仓库: (1) 挂载光盘至某目录,例如/media/cdrom # mount -r -t iso9660 /dev/cdrom /media/cdrom (2) 创建配置文件 [CentOS7] name= baseurl= gpgcheck= enabled= 创建yum仓库: createrepo [options]createrepo /app/rpm/ 实验 一、创建centos6 yum源仓库服务器 1) 准备两台cetos系统,一个服务器端一个客户端 2) 在服务器端安装好http包并启动服务、关闭防火墙 yum install httpd #安装httpd包 systemctl start httpd.service #启动服务 iptables -vnL #查看防火墙 systemctl stop firewalld #关闭防火墙 systemctl disable firewalld #下次开机不用启动 3)我们现在cd /var/www/html/目录下创建一个文件 echo welcome to beijing > index.html 4)在heml目录下创建目录 centos/{6,7}/os/x86_64/ mkdir -p centos/{6,7}/os/x86_64/ 5)将centos6的源包复制或挂载到x86_64/下 mount /dev/sr0 centos/6/os/x86_64/ #这是挂载 (注:如果此系统的光盘源是centos7,则新加个CD/DVD,df查看下没有更新,这时候敲下 echo '- - -' > /sys/class/scsi_host/host0/scan ,来通知内核,下面再挂载光盘源 mount /dev/sr1 centos/6/so/x86_64/) 6)访问服务器地址获取源
磁盘管理
一切皆文件:open()打开 read()读 write()写 close()关闭 块设备 block,单位"块",磁盘 字符设备 char,单位"字符",键盘 磁盘的三维:磁头,柱面,扇区 c:2^10=1024 h:2^8=256 s:2^6=64 h:磁头 c柱面 s扇区 一个扇区大小512byte 256*64*1024*512/1024/1024/1024=8GB 分区: MBR,GPT两种分区方式 MBR使用32位表示扇区数,分区不超过2T 0磁道0扇区:512bytes MBR: Master Boot Record 446bytes: boot loader lilo linux loader grub grub2 64bytes:分区表 16bytes: 标识一个分区 2bytes: 55AA 4个主分区; 3主分区+1扩展(N个逻辑分区) MBR结构示意图
GPT分区 支持128个分区,使用64位,支持8Z 列出可用的磁盘设备: 图形化界面:点击“应用程序-系统工具-磁盘” 命令行:gnome-disks lsblk:列出块设备 分区管理命令:fdisk,parted,gdisk fdisk:支持msdos,在centos7中也支持gpt(不建议使用)对于一块硬盘来说,最多只能管理15分区 fdisk -l 查看所有硬盘的分区信息 fdisk -l /dev/sda 查看指定分区的信息 fdisk /dev/sdb o 设置msdos分区表 n 创建分区 d 删除分区 g 设置gpt分区表(不建议使用) m 帮助 p 主分区 e 扩展分区(把所有空间分给扩展) 起始的扇区数 一般直接回车,取可用的最小扇区 结束的扇区数 一般用+XX K/M/G 来指定具体分多少大小的分区 q 退出不保存 w 退出并保存 t 设置分区的类型 L 查看分区的类型所对应的代码表示方式 d 删除指定分区 a 设置该分区为启动分区,或设置为非启动 p 显示分区表 u 更新显示分区起止的单位,在扇区和柱面之间切换 gdisk 只能划分gpt分区 gdisk -l 列出所有硬盘分区表 gdisk -l /dev/sdb 列出指定硬盘的分区表 gdisk /dev/sdb 对分区进行划分 o 创建gpt分区表 m 帮助 n 创建分区 起始的扇区数 一般直接回车,取可用的最小扇区 结束的扇区数 一般用+XX K/M/G 来指定具体分多少大小的分区 q 退出不保存 w 退出并保存 t 设置分区的类型 L 查看分区的类型所对应的代码表示方式 d 删除指定分区 p 显示分区表 parted 支持msdos和gpt 交互和非交互 parted /dev/sda parted -l 列出所有硬盘的分区信息 parted /dev/sda print 列出指定硬盘的分区 parted /dev/sdb mklabel msdos 设置硬盘的分区类型 或gpt parted /dev/sdb mklabel msdos -s 自动回答yes parted /dev/sdb mkpart primary 1 2G parted /dev/sdb mkpart primary 2G 4G parted /dev/sdb mkpart primary 4G 6.5G parted /dev/sdb mkpart extended 6.5G 21.5G parted /dev/sdb mkpart logical 6.5G 7G 对于非系统所在硬盘,内核自动更新分区表,而对于系统所在硬盘,不能直接列新,要使用以下命令 通知内核读取分区表 cenots5\centos7: partprobe (centos6不可用) centos6:partx -a /dev/sda 添加 partx -d --nr /dev/sda7 删除
文件系统类型
Linux文件系统: ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap swap: 交换分区 光盘:iso9660 Windows:fat32, ntfs Unix: FFS, UFS, JFS2 网络文件系统:NFS, CIFS 集群文件系统:GFS2, OCFS2 分布式文件系统:ceph, moosefs, mogilefs, GlusterFS, Lustre 根据其是否支持"journal"功能: 日志型文件系统: ext3, ext4, xfs, ... 非日志型文件系统: ext2, vfat 文件系统的组成部分: 内核中的模块:ext4, xfs, vfat 用户空间的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat Linux的虚拟文件系统:VFS 创建文件系统:mkfs,mke2fs... mkfs命令 (1) # mkfs.FS_TYPE /dev/DEVICE ext4 xfs btrfs vfat (2) # mkfs -t FS_TYPE /dev/DEVICE -L 'LABEL': 设定卷标 例子:mkfs.ext4 /dev/sdb1 #把sdb1设备设置成了ext4类型的文件系统 mke2fs:ext系列文件系统专用管理工具 -t {ext2|ext3|ext4} -b {1024|2048|4096} 指定block大小 -L 'LABEL' -j: 相当于 -t ext3 mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3 -i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小 -N #:指定分区中创建多少个inode -I 一个inode记录占用的磁盘空间大小,128---4096 -m #: 默认5%,为管理人员预留空间占总空间的百分比 -O FEATURE[,...]:启用指定特性 -O ^FEATURE:关闭指定特性 tune2fs:重新设定ext系列文件系统可调整参数的值 -l:查看指定文件系统超级块信息;super block -L 'LABEL':修改卷标 -m #:修预留给管理员的空间百分比 -j: 将ext2升级为ext3 -O: 文件系统属性启用或禁用, –O ^has_journal -o: 调整文件系统的默认挂载选项,–o ^acl *** -U UUID: 修改UUID号
mount挂载
解除此关联关系的过程称之为卸载; 把设备关联挂载点:Mount Point mount 卸载时:可使用设备,也可以使用挂载点 umount 注意:挂载点下原有文件在挂载完成后会被临时隐藏; mount:通过查看/etc/mtab文件显示当前已挂载的所有设备 device:指明要挂载的设备; (1) 设备文件:例如/dev/sda5 (2) 卷标:-L 'LABEL', 例如 -L 'MYDATA' (3) UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e' (4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs dir:挂载点 事先存在;建议使用空目录 进程正在使用中的设备无法被卸载 -t vsftype:指定要挂载的设备上的文件系统类型 -r: readonly,只读挂载 -w: read and write, 读写挂载 -n: 不更新/etc/mtab,mount不可见 cat /proc/mounts 可以看到用-n所隐藏的挂载信息 -a:自动挂载定义在了/etc/fstab文件中尚未挂载的文件系统,且挂载选项中有auto功能) 也可以用mount 后仅跟一个参数,从而去/etc/fstab中找另一个参数。 -L 'LABEL': 以卷标指定挂载设备 -U 'UUID': 以UUID指定要挂载的设备 -B, --bind: 绑定目录到另一个目录上 查看内核追踪到的已挂载的所有设备 cat /proc/mounts -o ro 只读 rw 读写 默认 async|sync 异步传输 atime|noatime diratime/nodiratime auto|noauto 是否可以使用mount -a 自动挂载 exex|noexec 禁止执行任何权限,无论是否有x权限 dev|nodev 是否可以在该文件系统上使用dev设备 suid|nosuid 是否suid权限生效 remount 重新挂载,要在后面具体指挂载选项,如不指定,重新挂载为默认权限 nouser|user 是否允许写入/etc/fstab中的挂载项目让普通用户执行以进行挂载及卸载,如 mount /dev/sda8 acl 是否在挂载时指定acl loop dd if=/dev/zero of=test.iso bs=1M count=100 mkfs.ext4 test.iso mount -o loop test.iso /app/data2 losetup -a 可列出loop挂载的设备 defaults:相当于rw, suid, dev, exec, auto, nouser, async 卸载命令: # umount DEVICE # umount MOUNT_POINT 查看正在访问指定文件系统的进程: # fuser -v MOUNT_POINT 终止所有在正访问指定的文件系统的进程: # fuser -km MOUNT_POINT 挂载交换分区: 启用:swapon swapon [OPTION]... [DEVICE] -a:激活所有的交换分区; -p PRIORITY:指定优先级; 禁用:swapoff [OPTION]... [DEVICE] swapoff /dev/sdb1 禁用swap分区 swap的优先级 swapon -p xx /dev/sdaX 也可以写入/etc/fstab使永久生效 UUID=5a1ff0b5-5c19-42e3-8b6a-65e7d332ee0c swap swap defaults,pri=20 0 0 UUID=8a5c6dbe-1025-462b-ad32-53ded1918d63 swap swap defaults,pri=15 0 0 /app/swap.img swap swap defaults,pri=10 0 0
文件挂载的配置文件/etc/fstab
每行定义一个要挂载的文件系统;
要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序
要挂载的设备或伪文件系统:
设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc, sysfs)
挂载选项:
defaults
转储频率:
0:不做备份
1:每天转储
2:每隔一天转储
自检次序:
0:不自检
1:首先自检;一般只有rootfs才用1;
df、du、dd命令
df [OPTION]... [FILE]... -H 以1000为单位 -T 文件系统类型 -h: human-readable *** -i:inodes instead of blocks -P: 以Posix兼容的格式输出 du [OPTION]... DIR -h: human-readable -s: 合计 # du -sh 查看文件合计大小,在我们复制大文件的时候可以,再开个终端去目标目的,用这个命令可以判断是否是在工作
# df -hT 可以查看已挂载的文件系统格式
dd命令:convert and copy a file
问题与练习
yum问题 一般yum出问题就在两个地方,yum的缓存和yum的yum的本地指向文件配置出错。 比如我把yum源服务仓库地址换了,这时候我们本地yum缓存存的还是没更新之前的地址,这时候就需要清除下缓存,从新获取。 1) 查询命令java来自于哪个rpm包 rpm -qa |grep java 2) 使用本地光盘做为yum源 1.mount /dev/cdrom /media/ 2.vim /etc/yum.repos.d/dvd.repo [base] name=magedu centos $releasever dvd baseurl=file:///media enabled=1 gpgcheck=1 gpgkey=file:///media/RPM-GPG-KEY-CentOS-7
mount
对于有进程访问目录而无法卸载的情况 方法一: [root@localhost_v6 ~]# lsof /app/data1/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sleep 4137 root cwd DIR 8,8 2802688 2 /app/data1 [root@localhost_v6 ~]# kill 4137 方法二: fuser -vm /app/data1 fuser -km /app/data1 练习:通过/etc/fstab ,指定挂载点,可以查出对应的分区名 方法一: dir=/;findfs `cat /etc/fstab |grep -w $dir |cut -d" " -f1` 方法二: dir=/;findfs $(cat /etc/fstab |grep "[[:space:]]$dir[[:space:]]" | cut -d" " -f1) 方法三: dir=/app;findfs $(cat /etc/fstab |grep "$dir[[:blank:]]"|sed -r "s@(.*)[[:blank:]]+$dir.*@\1@") 关于本地仓库自动挂载 autofs(yum安装软件包) systemctl start autofs (开启服务) systemctl enable autofs
扩展swap
1、 基于分区的Swap 第一步 创建分区 fdisk /dev/sda 第二步 签名与激活 mkswap /dev/sda9 swapon /dev/sda9 第三步 开机自动激活,写入/etc/fstab vim /etc/fstab UUID=8a5c6dbe-1025-462b-ad32-53ded1918d63 swap swap defaults 0 0 2、 基于文件的swap dd if=/dev/zero of=swap.img bs=1M count=1024 mkswap swap.img swapon /app/swap.img 开机自动激活,写入/etc/fstab /app/swap.img swap swap defaults 0 0 第四步 swapon -s 查看生效 free -h
linux上访问ntfs文件系统
方法一:重新编译内核,使ntfs模块被编译 read only 方法二:ntfs-3g epel