目录
一.云计算基础
1.什么是服务器
2.典型服务模式
3.完整的操作系统
4.Linux 发行版本
5.RHEL,**红帽企业版 Linux**
6.Linux**简介**
二.虚拟机介绍与网络
虚拟软件安装
1.软硬件准备
2.虚拟机准备
3.虚拟机兼容性选择
网络
1.桥接与NAT区别
2.运用
三.分区与格式化
1.计算机容量单位
2.分区
3.分区命令
4.格式化与运用
四.linux安装
真机Linux 安装
Linux 安装步骤
VMware 安装 Centos7
1.连接光盘
2.开启虚拟机
3.安装操作系统
4.密码三原则
五.配置ip与远程工具
1.nmtui配置IP
2.远程工具
?3.nmcli配置ip
六.linux使用注意事项
1.Linux 严格区分大小写
2.Linux 一切皆文件
3.Linux 不靠扩展名区分文件类型
4.Linux 中所有的存储设备都必须在挂载之后才能使用
5.Windows 下的程序不能直接在 Linux 中使用
七.linux管理建议
1.Linux 目录结构
2.远程服务器关机及重启时的注意事项
3.不要在服务器访问高峰运行高负载命令
4.远程配置防火墙时不要把自己踢出服务器
5.指定合理的密码规范并定期更新
6.合理分配权限
7.定期备份重要数据和日志
八.inode的概述
inode是什么?
目录文件
硬链接
软链接
inode的特殊作用
实际问题
九.linux基础命令
1.命令的基本格式
2.常用命令
3.基本权限命令
setfacl命令
4.帮助命令
5.搜寻命令
6.其他命令
7.压缩与解压缩命令
8.关机和重启命令
9.网络命令
配置ip
10.系统痕迹命令
11.挂载命令
mount 命令基本格式
光盘挂载
挂载 U 盘
挂载 NTFS 分区
十.vim命令
vi编辑器简介
vim编辑器简介
基本使用
vim 使用技巧
十一.软件包安装
1.软件包分类
2.源码包
1)源码包什么样
2)源码包特点
3.二进制包
1)二进制包分类
2)RPM包的基本用法
3)rpm包在线安装(yum安装)
4.yum命令
4.源码包的安装与管理。
1)软件包的选择
2)安装过程
3)删除
4)打补丁
5.脚本安装程序
1.Webmin 简介
2.下载Webmin的安装文件,
3.解压缩文件,命令是:
4.进入webmin的解压缩目录,然后运行setup.sh,命令为:
5.一路回车即可安装完成,
6.等看到安装完成的提示之后,
7.刚安装时是英文界面,登录webmin系统后,
十二.用户的管理
1.用户相关文件
1)用户信息文件
2) 密码文件
3)组信息文件
4)组密码文件
5)用户的家目录
6)用户邮箱目录
7)用户模板目录
2.用户管理命令
1 )添加用户
2)设定密码
3 用户信息修改命令
4 删除用户
5 切换用户身份与查看用户
6.组管理命令
1 )添加用户组命令
2 )删除用户组
3 )把用户添加进组或从组中删除
4)改变有效组
一.云计算基础
1.什么是服务器
?能够为其他计算机提供服务的更高级的电脑
–机架式
–塔式
–机柜式
–刀片式
2.典型服务模式
?C/S,Client/Server架构
–由服务器提供资源或某种功能
–客户机使用资源或功能
3.完整的操作系统
Linux 内核 + 各种外围软件
4.Linux 发行版本
发行版的名称/版本由发行方(公司或个人)决定
Red Hat Enterprise Linux 6/7
Suse Linux Enterprise 12
Debian Linux 9.1
Ubuntu Linux 16.10/17.04
5.RHEL,**红帽企业版 Linux**
Red Hat Enterprise Linux
可以订阅获取软件升级、技术支持等服务
CentOS,社区企业操作系统
Community Enterprise Operating System
免费使用、免费软件源
官网:The CentOS Project
6.Linux**简介**
1)Linux**是一种操作系统!!**
操作系统:一堆软件的集合,让计算机硬件正常的工作
C/S结构:客户端(简单、方便)与服务端(稳定、高效、安全)
2)Unix/Linux**发展史**
? UNIX诞生,1970-1-1
– Ken Thompson、Dennis Ritchie
– 根据MULTICS项目的经验开发了一个多任务
操作系统 —— UNICS,后改为UNIX
– 1973年,用C语言重写了UNIX
– 1978年,有大约600台计算机运行UNIX
3)Linux之父,Linus Torwalds
– 1991年10月,发布0.02版(第一个公开版)内核
– 1994年03月,发布1.0版内核
– 标准读音:“哩呐科斯”
内核:调配计算机硬件资源
用户---->内核---->硬件
内核版本号:主版本.次版本.修订号
4)Linux**版本及应用**
? 发行版的名称/版本由发行方决定
– Red Hat Enterprise Linux 5/6/7/8
– Suse Linux Enterprise 12
– Debian Linux 7.8
– Ubuntu Linux 14.10/15.04
– ……
5)Red Hat**系列版本**
? 红帽 Linux 企业版
– 简称RHEL(Red Hat Enterprise Linux)
– Red Hat - We make open source technologies for the enterprise
? Fedora Core 社区版
– Fedora
? CentOS,社区企业操作系统
– Community Enterprise Operating System
– The CentOS Project
二.虚拟机介绍与网络
虚拟软件安装
1.软硬件准备
软件:推荐使用 VMware,我用的是 VMware 12
镜像:CentOS6 ,如果没有镜像可以在阿里云下载 阿里云开源镜像站资源目录
硬件:因为是在宿主机上运行虚拟化软件安装centos,所以对宿主机的配置有一定的要求。最起码i5,CPU双核、硬盘500G、内存4G以上。
2.虚拟机准备
1)打开VMware选择新建虚拟机
2)典型安装与自定义安装
典型安装:VMware会将主流的配置应用在虚拟机的操作系统上,对于新手来很友好。
自定义安装:自定义安装可以针对性的把一些资源加强,把不需要的资源移除。避免资源的浪费。
这里我选择自定义安装。
3.虚拟机兼容性选择
这里要注意兼容性,如果是VMware12创建的虚拟机复制到VM11、10或者更低的版本会出现一不兼容的现象。如果是用VMware10创建的虚拟机在VMware12中打开则不会出现兼容性问题。
4)选择稍后安装操作系统
5)操作系统的选择
这里选择之后安装的操作系统,正确的选择会让vm tools更好的兼容。这里选择linux下的CentOS
6)虚拟机位置与命名
虚拟机名称就是一个名字,在虚拟机多的时候方便自己找到。
VMware的默认位置是在C盘下,我这里改成F盘。
7)处理器与内存的分配
处理器分配要根据自己的实际需求来分配。在使用过程中CPU不够的话是可以再增加的。这次只做安装CentOS演示,所以处理器与核心都选1.
内存也是要根据实际的需求分配。我的宿主机内存是8G所以我给虚拟机分配2G内存。
8)这里选择桥接模式
9)其余两项按虚拟机默认选项即可
10)磁盘容量
磁盘容量暂时分配100G即可后期可以随时增加,不要勾选立即分配所有磁盘,否则虚拟机会将100G直接分配给CentOS,会导致宿主机所剩硬盘容量减少。 勾选将虚拟磁盘拆分成多个文件,这样可以使虚拟机方便用储存设备拷贝复制。
11)磁盘名称,默认即可
12)需要的硬件
点击自定义硬件
选择声卡、打印机等不需要的硬件然后移除。
13)点击完成,已经创建好虚拟机。
网络
1.桥接与NAT区别
网络连接类型的选择,网络连接类型一共有桥接、NAT、仅主机和不联网四种。
桥接:选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系,相当于连接在同一交换机上。
NAT:NAT模式就是虚拟机要联网得先通过宿主机才能和外面进行通信。
仅主机:虚拟机与宿主机直接连起来
桥接与NAT模式访问互联网过程,如下图所示
2.运用
连接方式 | 连接网卡 | 是否能连接本机 | 是否能连接局域网 | 是否能连接外网 |
---|
桥接 | 本地真实网卡 | 可以 | 可以 | 可以 | NAT | VMnet8 | 可以 | 不能 | 可以 | 仅主机 | VMnet1 | 可以 | 不能 | 不能 |
真机网卡一搬有两块网卡:有限,无线
三.分区与格式化
1.计算机容量单位
一般用B,KB,MB,GB,TB,PB,EB,ZB,YB,BB来表示,它们之间的关系是:
1KB (Kilobyte 千字节)=1024B,
1MB (Megabyte 兆字节 简称“兆”)=1024KB,
1GB (Gigabyte 吉字节 又称“千兆”)=1024MB,
1TB (Terabyte 万亿字节 太字节)=1024GB,
1PB (Petabyte 千万亿字节 拍字节)=1024TB,
1EB (Exabyte 百亿亿字节 艾字节)=1024PB,
1ZB (Zettabyte 十万亿亿字节 泽字节)= 1024 EB,
1YB (Yottabyte 一亿亿亿字节 尧字节)= 1024 ZB,
1BB (Brontobyte 一千亿亿亿字节)= 1024 YB.
产商一般=1000
一块硬盘的“艺术”之旅(硬盘空间使用,经历的步骤)
?识别硬盘 => 分区规划 => 格式化 => 挂载使用
2.分区
MBR/msdos**分区模式**
分区类型:主分区、扩展分区(占用所有剩余空间)、逻辑分区
–最多只能有4个主分区;扩展分区可以没有,至多有一个;~4个主分区,或者 3个主分区+1个扩展分区(n个逻辑分区);最大支持容量为 2.2TB 的磁盘(总);
扩展分区不能格式化,空间不能直接存储数据,扩展分区里可以有无数个分区;
可以用于存储数据的分区:主分区与逻辑分区
分区模式GPT
全局唯一标识分区表 ;–突破固定大小64字节的分区表限制 ;–最多可支持128个主分区,最大支持18EB容量(总)
3.分区命令
划分MBR磁盘分区
命令:fdisk常用交互指令:
m 列出指令帮助
p 查看现有的分区表(存放分区信息的表格)
n 新建分区
d 删除分区
q 放弃更改并退出
w 保存更改并退出
parted**常用分区指令**
–help //查看指令帮助
–mktable gpt //建立指定模式分区表(不能重复执行,否则会把硬盘所有的数据清除一遍,包括分区表)
–mkpart 分区的名称 文件系统类型 start end //指定大小或百分比%作为起始、结束位置
unit GB #使用GB作为单位
–print //查看分区表
–rm 序号 //删除指定的分区
–quit //退出交互环境
mkfs.ext4 mkfs.xfs 格式化文件系统
如上自动挂载并测试配置文件是否正确然后挂载mount -a
查看
4.格式化与运用
格式化:赋予空间文件系统的过程
? ? ? ?block:数据块,一个默认4kb(1,2k都行)
? ? ? ? ? ? ? ? 文件存储块可能不在一起
? ? ? ?Inode:i节点,一个128个字节,
? ? ? ? ? ? ? ? 时间+权限+位置
文件系统:数据在空间中存放的规则
Windows常见的文件系统:NTFS FAT(兼容性强)
Linux常见的文件系统:ext4(RHEL6) xfs(RHEL7) FAT
格式命令 :mkfs.’格式文件系统’ 磁盘分区
最后挂载使用: 临时:mount 磁盘 目录
自动挂载:/etc/fstab
? ? ? ? ? ? ?设备路径 挂载点 文件系统类型 参数 备份标记 检测顺序
? ? ? ? ? ? ?mount -a
? ? ? ? ? ? ?检测开机自动挂载配置文件,格式是否正确 并自动挂载
Lsblk: 查看本机识别的所有硬盘
Blkid :**查看磁盘uuid及格式化模式(type)**
df -h : 查看所有挂载点(+a则是查看所有)
Partprobe :刷新分区表
四.linux安装
安装之前要进入BIOS界面选择启动顺序,linux默认从EM盘里启动,可以改为光盘或U盘
真机Linux 安装
本章节我们将为大家介绍 Linux 的安装,安装步骤比较繁琐,现在其实云服务器挺普遍的,价格也便宜,如果自己不想搭建,也可以直接买一台学习用用,参考各大云服务器比较。
本章节以 centos6.4 为例。
centos 下载地址:
可以去官网下载最新版本:Download
以下针对各个版本的ISO镜像文件,进行一一说明:
-
CentOS-7.0-x86_64-DVD-1503-01.iso : 标准安装版,一般下载这个就可以了(推荐) -
CentOS-7.0-x86_64-NetInstall-1503-01.iso : 网络安装镜像(从网络安装或者救援系统) -
CentOS-7.0-x86_64-Everything-1503-01.iso: 对完整版安装盘的软件进行补充,集成所有软件。(包含centos7的一套完整的软件包,可以用来安装系统或者填充本地镜像) -
CentOS-7.0-x86_64-GnomeLive-1503-01.iso: GNOME桌面版 -
CentOS-7.0-x86_64-KdeLive-1503-01.iso: KDE桌面版 -
CentOS-7.0-x86_64-livecd-1503-01.iso : 光盘上运行的系统,类拟于winpe -
CentOS-7.0-x86_64-minimal-1503-01.iso : 精简版,自带的软件最少
注:建议安装64位Linux系统。
旧版本下载地址:Download - CentOS Wiki
接下来你需要将下载的Linux系统刻录成光盘或U盘。
注:你也可以在Window上安装VMware虚拟机来安装Linux系统。
Linux 安装步骤
1、首先,使用光驱或U盘或你下载的Linux ISO文件进行安装。
界面说明:
-
Install or upgrade an existing system 安装或升级现有的系统 -
install system with basic video driver 安装过程中采用基本的显卡驱动 -
Rescue installed system 进入系统修复模式 -
Boot from local drive 退出安装从硬盘启动 -
Memory test 内存检测
注:用联想E49安装时选择第一项安装时会出现屏幕显示异常的问题,后改用第二项安装时就没有出现问题
2、这时直接"skip"就可以了
注:这里可能会报显卡失败等问题,排错:换镜像,重装虚拟机,重装本机系统,最后换网卡等设备
3、出现引导界面,点击"next"
4、选中"English(English)"否则会有部分乱码问题(初学者尽量安装中文)
5、键盘布局选择"U.S.English"
6、选择"Basic Storage Devices"点击"Next"
7、询问是否删除所有数据,新电脑安装系统选择"Yes,discard any data"
8、Hostname填写格式"英文名.姓"(初学者建议不改)
9、网络设置安装图示顺序点击就可以了
10、时区可以在地图上点击,选择"shanghai"并取消System clock uses UTC前面的对勾
11、设置root的密码
12、硬盘分区,一定要按照图示点选
13、调整分区,必须要有/home这个分区,如果没有这个分区,安装部分软件会出现不能安装的问题
14、询问是否格式化分区
15、将更改写入到硬盘
16、引导程序安装位置
17、最重要的一步,也是本教程最关键的一步,也是其他教程没有提及的一步,按图示顺序点击
18、取消以下内容的所有选项
Applications
Base System
Servers
并对Desktops进行如下设置
即取消如下选项:
Desktop Debugging and Performance Tools
Desktop Platform
Remote Desktop Clients
Input Methods**中仅保留ibus-pinyin-1.3.8-1.el6.x86_64,其他的全部取消**
19、选中Languages,并选中右侧的Chinese Support然后点击红色区域
20、调整完成后如下图所示
21、至此,一个最精简的桌面环境就设置完成了,
22、安装完成,重启
23、重启之后,的License Information
24、Create User
Username:填写您的英文名(不带.姓)
Full Name:填写您的英文名.姓(首字母大写)
25、"Date and Time" 选中 "Synchronize data and time over the network"
Finsh之后系统将重启
26、第一次登录,登录前不要做任何更改,这个很重要!!!登录之后紧接着退出
第二次登录,选择语言,在红色区域选择下拉小三角,选other,选中"汉语(中国)"
27、登录之后,请一定按照如下顺序点击!
至此,CentOS安装完成,如有其他问题,请随时与我联系!!
VMware 安装 Centos7
1.连接光盘
注:内存必须大于628MB不然会简易安装
右击刚创建的虚拟机,选择设置
先选择CD/DVD,再选择使用ISO映像文件,最后选择浏览找到下载好的镜像文件。启动时连接一定要勾选上后确定。
2.开启虚拟机
3.安装操作系统
开启虚拟机后会出现以下界面:
选择第一项,安装直接CentOS 7,回车,进入下面的界面
选择安装过程中使用的语言,这里选择英文、键盘选择美式键盘。点击Continue
首先设置时间
时区选择上海,查看时间是否正确。然后点击Done
选择需要安装的软件
选择 Server with Gui,然后点击Done
选择安装位置,在这里可以进行磁盘划分。
选择i wil configure partitioning(我将会配置分区),然后点击done
如下图所示,点击加号,选择/boot,给boot分区分200M。最后点击Add
然后以同样的办法给其他三个区分配好空间后点击Done
然后会弹出摘要信息,点击AcceptChanges(接受更改)
设置主机名与网卡信息
首先要打开网卡,然后查看是否能获取到IP地址(我这里是桥接),再更改主机名后点击Done。
最后选择Begin Installation(开始安装)
设置root密码
设置root密码后点击Done
点击USER CREATION 创建管理员用户
输入用户名密码后点击Done
等待系统安装完毕重启系统即可
4.密码三原则
复杂性:
大于8位
大写,小写,数学,符号四种最少包含三种
不允许使用和个人相关的内容
不允许使用现有的英文单词
易记忆性:
时效性:180天
五.配置ip与远程工具
1.nmtui配置IP
~]# nmtui
#通过nmtui工具设置ip地址,注意激活onboot=yes
~]# service network restart
#重启网络服务
一般步骤:先编辑后激活,一步都不能少
使用nmtui可以为新网卡添加连接,然后进行ip配置,也可以对已经存在且使用的网卡进行ip的直接设置
2.远程工具
xshell远程工具
1)Xshell的下载与安装
首先我们到Xshell的官网下载最新版本的Xshell软件,填入你的用户名和邮箱,勾选Xshell Only,点击下载即可。
系统会把下载链接发到你的邮箱,找到链接下载软件即可。
2)在xshell里添加会话
安装好Xshell之后,双击Xshell图标,就可以打开Xshell工具。新安装的xshell会自动提示你需要添加一个会话,点击新建。
在弹出的窗口中依次填上如下数据:
名称:就是会话的名字,随便写,方便记住就行 主机:就是你的服务器的IP地址 端口号:就是你空间的端口号ssh port,一般VPS服务器的端口是22
其他都默认不填,填好后点击左侧的用户身份验证
在用户身份验证这一块填写你的服务器的用户名和密码,一般用户名是root,密码要自己记住。
填写好之后点击确定就可以了。
3)通过xshell连接服务器
打开Xshell之后,在左上角点击文件–>打开,在会话面板中,选中你要连接的会话,然后点击连接
?第一次进入的时候,会出现以下提示,点击接受并保存?
?如果xshell面板中出现以下提示,则表示连接成功。
?如果提示密码不对,就要检查密码,必要时手动输入密码。有的时候多出一个空格,密码都会错误,所以复制的时候要注意。
到这一步Xshell就已经安装成功了,接下来你就可以输入指令远程控制你的服务器了。输入指令要注意用鼠标右键复制粘贴,而不是用快捷键Ctrl+C, Ctrl+V去控制,切记切记!
?3.nmcli配置ip
1)修改内核参数网卡命令规则
#grub内核引导程序 修改网卡命令规则eth0
~]# Vim /etc/default/grub
# 第六行修改:GRUB_CMDLINE_LINUX="…….. quiet net.ifnames=0 biosdevname=0”(生成网卡名规则)
?
#让网卡命名规则生效
~]# grub2-mkconfig -o /boot/grub2/grub.cfg :
?
#重启生效:
~]# reboot
2)添加网卡名
~]# nmcli connection add type ethernet ifname eth0 con-name eth0
# nmcli connection 添加 类型 以太网设备 网卡设备名为eth0 mcli命令的命名为eth0
# nmcli connection delete [网卡名] :删除多于的网卡
3)添加IP地址、子网掩码、网关地址:
~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.7/24 ipv4.gateway 192.168.4.254 Ipv4.dns 8.8.8.8 connection.autoconnect yes
?
#激活
~]# nmcli connection up eth0 ?
# nmcli connection modify eth0 : nmcli connection 修改 网卡名
# ipv4.method manual(auto) :ipv4.方法 手工配置 (自动分配)
# ipv4.addresses 192.168.4.7/24 :ipv4.地址 192.168.4.7/24
# ipv4.gateway 192.168.4.254 :ipv4.网关 192.168.4.254
# Ipv4.dns 8.8.8.8 : ipv4.域名解析ip地址8.8.8.8
# connection.autoconnect yes :每次开机自动启用以上所有参数
4)验证
#查看网卡
~]# ifconfig
?
#查看路由表
~]# route -n
?
#查看网卡
~]# nmcli connection show
?
#查看ip地址
~]# ip address show
六.linux使用注意事项
1.Linux 严格区分大小写
Linux 是严格区分大小写的,这一点和 Windows 不一样,所以操作时要注意区分大小写的不同,包括文件名和目录名、命令、命令选项、配置文件设置选项等。(linux命令没大写)
2.Linux 一切皆文件
Linux 中所有内容都是以文件的形式保存和管理的;
硬件设备也是文件,这和 Windows 完全不同,Windows 是通过设备管理器来管理硬件的。Linux 的设备文件保存在/dev/目录中,硬盘文件是/dev/sd[a-p],光盘文件是/dev/hdc 等。
3.Linux 不靠扩展名区分文件类型
Windows 是依赖扩展名区分文件类型的,比如,“.txt”是文本文件、“.exe”是执行文件、“.ini”是配置文件、“.mp4”是小电影等。但 Linux 不是靠扩展名区分文件类型的,而是靠权限位标识来确定文件类型的,而且文件类型的种类也不像 Windows 下那么多,常见的文件类型只有普通文件、目录、链接文件、块设备文件、字符设备文件等几种。Linux 的可执行文件不过就是普通文件被赋予了可执行权限而已。 但 Linux 中的一些特殊文件还是要求写“扩展名”的,并不是 Linux 一定要靠扩展名来识别文件类型,写这些扩展名是为了帮助管理员来区分不同的文件类型。这样的文件扩展名主要有以下几种。
-
压缩包:Linux 下常见的压缩文件名有.gz、.bz2、.zip、.tar.gz、.tar.bz2、.tgz 等。为什么压缩包一定要写扩展名呢?其实很好理解,如果不写清楚扩展名,那么管理员不容易判断压缩包的格式,虽然有命令可以帮助判断,但是直观一点更加方便。另外,就算没写扩展名,在 Linux 中一样可以解压缩,不影响使用。 -
二进制软件包:CentOS 中所使用的二进制安装包是 RPM 包,所有的 RPM 包都用“.rpm”扩展名结尾,目的同样是让管理员一目了然。 -
程序文件:Shell 脚本一般用“.sh”扩展名结尾,其他还有用“.c”扩展名结尾的 C 语言文件等,“*.py”扩展名结尾的python文件。 -
网页文件:网页文件一般使用“.html”“.php”等结尾,不过这是网页服务器的要求,而不是 Linux的要求。
4.Linux 中所有的存储设备都必须在挂载之后才能使用
Linux 中所有的存储设备都有自己的设备文件名,这些设备文件必须在挂载之后才能使用,包括硬盘、U 盘和光盘。挂载其实就是给这些存储设备分配盘符,只不过 Windows 中的盘符用英文字母表示,而 Linux中的盘符则是一个已经建立的空目录。我们把这些空目录叫作挂载点(可以理解为Windows的盘符),把设备文件(如/dev/sdb)和挂载点(已经建立的空目录)连接的过程叫作挂载。
5.Windows 下的程序不能直接在 Linux 中使用
Linux 和 Windows 是不同的操作系统,可以安装和使用的软件也是不同的,所以能够在 Windows中安装的软件是不能在 Linux 中安装的。有好处吗?当然有,那就是能够感染 Windows 的病毒和木马都对 Linux 无效。有坏处吗?也有,那就是所有的软件要想在 Linux 中安装,必须单独开发针对 Linux的版本,或者依赖模拟器软件运行。 很多软件也会同时推出针对 Windows 和 Linux 的版本,如大家熟悉的即时通信软件 QQ、音乐软件 网易云音乐。
七.linux管理建议
1.Linux 目录结构
目 录 名 | 目录的作用 |
---|
/bin/ | 存放系统命令的目录,普通用户和超级用户都可以执行。是/usr/bin/目录的软链接 | /sbin/ | 存放系统命令的目录,只有超级用户才可以执行。是/usr/sbin/目录的软链接 | /usr/bin/ | 存放系统命令的目录,普通用户和超级用户都可以执行 | /usr/sbin/ | 存放系统命令的目录,只有超级用户才可以执行 | /boot/ | 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序 | /dev/ | 设备文件保存位置 | /etc/ | 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 | /home/ | 普通用户的家目录。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的家目录,所有普通用户的宿主目录是在/home/下建立一个和用户名相同的目录。如用户love2的家目录就是/home/love2/ | /lib/ | 系统调用的函数库保存位置。是/usr/lib/的软链接 | /lib64/ | 64 位函数库保存位置。是/usr/lib64/的软链接 | /lost+found/ | 当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中 fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是/boot 分区的备份恢复目录 | /media/ | 挂载目录。系统建议是用来挂载媒体设备的,如软盘和光盘 | /misc/ | 挂载目录。系统建议用来挂载 NFS 服务的共享目录。我们在刚刚已经解释了挂载,我们应该知道只要是一个已经建立的空目录就可以作为挂载点。那么系统虽然准备了三个默认挂载目录/media、/mnt、/misc,但是到底在哪个目录中挂载什么设备都可以由管理员自己决定 | /mnt/ | 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。现在系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 | /opt/ | 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过习惯还是把软件放到/usr/local/目录中,也就是说,/usr/local/目录也可以用来安装软件 | /proc/ | 虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如/proc/cpuinfo 是保存 CPU信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems 是保存文件系统列表信息的。。。 | /sys/ | 虚拟文件系统。和/proc/目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息 | /root/ | root 的宿主目录。普通用户宿主目录在/home/下,root 宿主目录直接在“/”下 | /run/ | 系统运行时产生的数据,如 ssid,pid 等相关数据。/var/run/是此目录的软链接 | /srv/ | 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 | /tmp/ | 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。我们建议此目录中不能保存重要数据,最好每次开机都把该目录清空 | /usr/ | 系统软件资源目录。注意 usr 不是 user 的缩写,而是“UNIX Software Resource”的缩写,所以不是存放用户数据的目录,而是存放系统软件资源的目录。系统中安装的软件大多数保存在这里 | /usr/lib/ | 应用程序调用的函数库保存位置 | /usr/local/ | 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置 | /usr/share/ | 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录 | /usr/src/ | 源码包保存位置 | /usr/src/kernels/ | 内核源码保存位置 | /var/ | 动态数据保存位置。主要保存缓存、日志以及软件运行所产生的文件 | /var/lib/ | 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在/var/lib/mysql/目录中 | /var/log/ | 系统日志保存位置 | /var/run/ | 一些服务和程序运行后,它们的 PID(进程 ID)保存位置。是/run/目录的软链接 | /var/spool/ | 放置队列数据的目录。就是排队等待其他程序使用的数据,比如邮件队列和打印队列 | /var/spool/mail/ | 新收到的邮件队列保存位置。系统新收到的邮件会保存在此目录中 | /var/spool/cron/ | 系统的定时任务队列保存位置。系统的计划任务会保存在这里 |
2.远程服务器关机及重启时的注意事项
为什么远程服务器不能关机呢?很简单,远程服务器没有放置在本地,关机后,谁可以帮你按开机电源键启动服务器?虽然计算机技术日新月异,但是像插入电源和开机这样的工作还是需要手工进行的。如果服务器在远程,一旦关机,就只能求助托管机房的管理人员帮你开机了。
远程服务器重启时需要注意两点。
2.1 远程服务器在重启前,要中止正在执行的服务
计算机的硬盘最怕在高速存储时断电或重启,非常容易造成硬盘损坏。所以,在重启前先中止你的服务,甚至可以考虑暂时断开对外提供服务的网络。可能你会觉得服务器有这么娇贵吗?我的笔记本电脑经常强行关机,也没有发现硬盘损坏啊?这是因为你的个人计算机没有很多人访问,强制断电时硬盘并没有进行数据交换。小心驶得万年船!
2.2 重启命令的选用
Linux 可以识别的重启命令有很多条,但是建议大家使用“shutdown -r now”命令重启。这条命令在重启时会正常保存和中止服务器中正在运行的程序,是安全重启命令。"reboot" 和"init 6"都不安全。不推荐使用。而且最好在重启前执行几次“sync”命令,这条命令是数据同步命令,可以让暂时保存在内存中的数据同步到硬盘上。
3.不要在服务器访问高峰运行高负载命令
在服务器访问高峰,如果使用一些对服务器压力较大的命令,则有可能会造成服务器响应缓慢甚至死机。 哪些命令是高负载命令呢?其实,如果大家使用过 Windows 操作系统,则也会留意到一些操作会给计算机带来较大的运算压力,道理都是一样的,如复制大量的数据、压缩或者解压缩大文件、大范围的硬盘搜索等。 什么时间算作访问高峰期呢?一般认为 17:00—24:00 算作访问高峰期。当然,每台服务器具体提供的服务不同,访问高峰期有时也会有所出入。比如,服务器主要是供美国人民访问的,那就要考虑时差的问题;或者服务器提供的服务很特殊,访问高峰期可能也不同。 一般我们建议在凌晨 4:00—5:00 执行这些命令。
4.远程配置防火墙时不要把自己踢出服务器
简单来讲,防火墙就是根据数据包自身的参数来判断是否允许数据包通过的网络设备。我们的服务器要想在公网中安全地使用,就需要使用防火墙过滤有害的数据包。但是在配置防火墙时,如果管理员对防火墙不是很熟悉,则有可能把自己的正常访问数据包和有害数据包全部过滤掉,导致自己也无法正常登录服务器,如防火墙关闭了远程连接的 SSH 服务的端口。 防火墙配置完全是靠手工命令完成的,配置规则和配置命令相对也比较复杂,万一设置的时候心不在焉,悲剧就发生了。 如何避免这种尴尬的情况发生呢?最好的方法当然是在服务器本地配置防火墙,这样就算不小心把自己的远程登录给过滤了,还可以通过本机登录来进行恢复。如果服务器已经在远程登录了,要配置防火墙,那么最好在本地测试完善后再进行上传,这样会把发生故障的概率降到最低。虽然在本地测试好了,但是传到远程服务器上时仍有可能发生问题。所以如果需要远程配置防火墙,那么先写一个系统定时任务,让它每 5 分钟清空一下防火墙规则,就算写错了也还有反悔。
5.指定合理的密码规范并定期更新
6.合理分配权限
服务器管理有一个最简单的原则:给予用户最小的权限。
7.定期备份重要数据和日志
八.inode的概述
inode是什么?
理解inode,要从文件储存说A起。
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
inode的内容
inode包含文件的元信息,具体来说有以下内容:
## 文件的字节数
# 文件拥有者的User ID
# 文件的Group ID
# 文件的读、写、执行权限
# 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
# 链接数,即有多少文件名指向这个inode
# 文件数据block的位置
可以用stat命令,查看某个文件的inode信息:
stat example.txt
总之,除了文件名以外的所有文件信息,都存在inode之中。至于为什么没有文件名,下文会有详细解释。
inode的大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
# 查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。
~]# df -i
?
# 查看每个inode节点的大小,可以用如下命令:
~]# sudo dumpe2fs -h /dev/hda | grep "Inode size"
由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。
inode号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。
# 使用ls -i命令,可以看到文件名对应的inode号码:
~]# ls -i example.txt
目录文件
Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。
目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。
# ls命令只列出目录文件中的所有文件名:
~]# ls /etc
# ls -i命令列出整个目录文件,即文件名和inode号码:
~]# ls -i /etc
# 如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。ls -l命令列出文件的详细信息。
~]# ls -l /etc
硬链接
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
ln命令可以创建硬链接:
ln 源文件 目标文件
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的".硬链接“。
软链接
除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。
这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。
~]# ln -s命令可以创建软链接。
~]# ln -s 源文文件或目录 目标文件或目录
inode的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
-
有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。 -
移动文件或重命名文件,只是改变文件名,不影响inode号码。 -
打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。
实际问题
在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。
查找原因:
/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
解决方案: 1、删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。 2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题: ln -s /opt/newcache /data/cache
九.linux基础命令
1.命令的基本格式
1)命令提示符
[root@localhost ~]#
[]:这是提示符的分隔符号,没有特殊含义。
root:显示的是当前的登录用户。
@:分隔符号,没有特殊含义。love2:当前系统的主机名(默认主机名是 localhost.localdomain,我已经修改了)。
~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
#:命令提示符。超级用户是#; 普通用户是$
2)命令的基本格式
[root@localhost ~]#
命令 [选项] [参数]
ls 是最常见的目录操作命令,主要作用是显示目录下的内容。
命令名称:ls。
英文原意:list。
所在路径:/bin/ls。
执行权限:所有用户。
功能描述:显示目录下的内容
2.常用命令
1)目录操作命令
绝对路径与相对路径的区别
绝对路径: 以根目录开始的路径
相对路径: 以当前路径为参照的路径
# 绝对路径
~]# cd /mnt/ ?
?
# 相对路径
mnt]# ls
a b c
mnt]# cd a/
ls 命令
~]#ls [选项] [文件名或目录名]
选项: ?
-a: ? 显示所有文件,包括隐藏文件;隐藏文件是告诉用户该文件为重要文件,一般木马与病毒文件也是隐藏文件
-d: ? 显示目录信息,而不是目录下的文件 ?
-h: ? 人性化显示,按照我们习惯的单位显示文件大小 ?
-i: ? 显示文件的i节点号 ?
-l: ? 长格式显示
-R:递归查看
--color=when: 支持颜色输出,when的值默认是always(总显示颜色),也可以是never(从不显示颜色)和auto(自动)
~]# ls -l
total 4
drwxr-xr-x 3 root root ?4096 Sep ?3 ?2020 ansible
lrwxrwxrwx 1 root root ? ?13 Apr 20 ?2020 rc.local -> rc.d/rc.local
#第一列:权限。具体权限以后再说明。
#第二列:引用计数。文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录 有多少个一级子目录。
#第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户。
#第四列:所属组。默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
#第五列:大小。默认单位是字节。
#第六列:文件修改时间。文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个 时间不是文件的创建时间。
#第七列:文件名。
cd 命令
cd 是切换所在目录的命令 命令名称:cd 英文原意:change directory 所在路径:Shell 内置命令 执行权限:所有用户。 功能描述:切换所在目录
注:cd 直接回root家目录
特殊符号 | 作用 |
---|
.. | 表示上一层目录 | . | 表示当前目录 | ~ | 表示家目录 | - | 表示上一次所在目录 |
pwd 命令
pwd 命令是查询所在目录的命令 命令名称:pwd 英文原意:print name of current/working directory 所在路径:/bin/pwd 执行权限:所有用户。 功能描述:查询所在的工作目录
mkdir 命令
mkdir 是创建目录的命令, 命令名称:mkdir。 英文原意:make directories。 所在路径:/bin/mkdir。 执行权限:所有用户。 功能描述:创建空目录。
选项:-p :递归建立所需目录,连同父目录一并创建
注:同一级目录下绝对不能同时存在同名目录
[root@love2 ~]# mkdir [选项] 目录名 选项 ?
rmdir 命令
删除目录的命令 rmdir 命令名称:rmdir 英文原意:remove empty directories 所在路径:/bin/rmdir 执行权限:所有用户 功能描述:删除空目录
-p: 递归删除目录
注:rmdir 命令的作用十分有限,因为只能删除空目录,所以一旦目录中有内容,就会报错。
~]# rmdir [选项] 目录名 选项
2)文件操作命令
touch 命令
创建空文件或修改文件时间;也就是已经存在的文件会修改时间 命令名称:touch 英文原意:change file timestamps 所在路径:/bin/touch 执行权限:所有用户 功能描述:创建文件或修改文件的时间戳
注:同级目录下同名文件不可同时存在,但命令可以重复打;也可以同时创建多个文件
~]# touch [参数] [参数] [参数]
stat 命令
stat 是查看文件详细信息的命令,而且可以看到文件的这三个时间 命令名称:stat。 英文原意:display file or file system status 所在路径:/usr/bin/stat 执行权限:所有用户。 功能描述:显示文件或文件系统的详细信息
~]# stat nginx.tar.gz
文件: ‘nginx.tar.gz’
大小: 3229419 块: 6312 io快: 4096 常规文件
设备: fd11h/64785d Inode: 275281678 Links: 1
权限: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
环境:.....
Access: 2021-11-26 16:50:02.815109997 +0800 #最近访问时间
Modify: 2021-11-26 10:33:48.785156265 +0800 #最近更改时间,指的是内部数据修改
Change: 2021-11-26 16:03:51.250354201 +0800 #状态修改时间,指其权限等等
Birth: - #创建时间;一般linux是不记录创建时间的
cat 命令
cat 命令用来查看文件内容。 命令名称:cat 英文原意:concatenate files and print on the standard output 所在路径:/bin/cat 执行权限:所有用户。
注:cat不适合看大文件
~]# cat [选项] 文件名 选项:
-n: 显示行号
-A: 相当于-vET选项的整合,用于列出所有隐藏符号
-E: 列出每行结尾的回车符$
-T: 把Tab键用^I显示出来
-v: 列出特殊字符
more 命令
more 是分屏显示文件的命令 命令名称:more 英文原意:file perusal filter for crt viewin 所在路径:/bin/more 执行权限:所有用户 功能描述:分屏显示文件内容。 more 命令比较简单,一般不用什么选项,命令会打开一个交互界面,可以识别一些交互命令。常用的交互命令如下: 空格键:向下翻页 b:向上翻页 回车键:向下滚动一行 /字符串:搜索指定的字符串 q:退出。
less 命令
less 命令和 more 命令类似,只是 more 是分屏显示命令,而 less 是分行显示命令。 命令名称:less 英文原意:opposite of more 所在路径:/usr/bin/less 执行权限:所有用户 功能描述:分行显示文件内容
head 命令
head 是用来显示文件开头的命令
命令名称:head 英文原意:output the first part of files 所在路径:/usr/bin/head 执行权限:所有用户 功能描述:显示文件开头的内容
注:不打行数默认10行。
~]# head [选项] 文件名
-n 行数: 从文件头开始,显示指定行数
-v: 显示文件名
# 查看开头四行
~]# head -n 5 ansible.cfg
# config file for ansible -- http://ansible.com/
# ==============================================
# This config file provides examples for running
# the OpenShift playbooks with the provided
# 选项不打也行
~]# head -5 ansible.cfg
# config file for ansible -- http://ansible.com/
# ==============================================
# This config file provides examples for running
# the OpenShift playbooks with the provided
tail 命令
显示文件结尾的命令。 命令名称:tail。 英文原意:output the last part of files 所在路径:/usr/bin/tail。 执行权限:所有用户 功能描述:显示文件结尾的内容。
注:不打行数,默认10行
~]# tail [选项] 文件名
选项:
-n 行数: 从文件结尾开始,显示指定行数
-f: 监听文件新增内容。
# 查看结尾四行
~]# tail -n 4 ansible.cfg
fact_caching_connection = $HOME/ansible/facts
fact_caching_timeout = 600
callback_whitelist = profile_tasks
StrictHostKeyChecking = no
# 选项不打也行
~]# tail -4 ansible.cfg
fact_caching_connection = $HOME/ansible/facts
fact_caching_timeout = 600
callback_whitelist = profile_tasks
StrictHostKeyChecking = no
ln 命令
命令名称:ln 英文原意:make links between file. 所在路径:/bin/ln 执行权限:所有用户 功能描述:在文件之间建立链接
1 )基本使用
~]# ln [选项] 源文件 目标文件
选项:
-s: 建立软链接文件。如果不加“-s”选项,则建立硬链接文件
-f: 强制。如果目标文件已经存在,则删除目标文件后再建立链接文件
2) 软连接
~]# ln -s edu.txt /tmp/
软链接特征:
#软链接和源文件拥有不同的 Inode 和 Block
#两个文件修改任意一个,另一个都改变
#删除软链接,源文件不受影响;删除源文件,软链接不能使用
#软链接没有实际数据,只保存源文件的 Inode,不论源文件多大,软链接大小不变
#软链接的权限是最大权限 lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文件权限
#软链接可以链接目录
#软链接可以跨分区
#软链接特征明显,建议使用软连接
#软连接一定要写绝对路径
3)硬链接
~]# ln edu.txt /tmp/ (不写名字,和原文件名一致)
#也就是 /root/edu.txt 和 /tmp/edu.txt 是硬链接文件
#硬链接特征:
#源文件和硬链接文件拥有相同的 Inode 和 Block
#修改任意一个文件,另一个都改变
#删除任意一个文件,另一个都能使用
#硬链接不能链接目录
#硬链接不能跨分区
#硬链接标记不清,很难确认硬链接文件位置,不建议使用
3)目录和文件都能操作的命令
rm 命令
rm 是强大的删除命令,不仅可以删除文件,也可以删除目录 命令名称:rm 英文原意:remove files or directories 所在路径:/bin/rm 执行权限:所有用户 功能描述:删除文件或目录
~]# rm [选项] 文件或目录
选项: -f: 强制删除(force)
-i: 交互删除,在删除之前会询问用户
-r: 递归删除,可以删除目录(recursive)
cp 命令
cp 是用于复制的命令 命令名称:cp。 英文原意:copy files and directories 所在路径:/bin/cp。 执行权限:所有用户 功能描述:复制文件和目录。
~]# cp [选项] 源文件 目标文件
选项:
-a: 相当于-dpr选项的集合
-d: 如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接
-i: 询问,如果目标文件已经存在,则会询问是否覆盖
-p: 复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间)
-r: 递归复制,用于复制目录
mv 命令
mv 是用来剪切的命令 命令名称:mv 英文原意:move (rename) files 所在路径:/bin/mv 执行权限:所有用户。 功能描述:移动文件或改名。
~]# mv [选项] 源文件 目标文件
选项:
-f: 强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖
-i: 交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
-v: 显示详细信息
3.基本权限命令
1)权限的概述
在linux中文件一般靠inode号
使用ls命令查看时,发现长格式显示的第一列就是文件的权限
~]# ls -ld roles
drwxr-xr-x 8 root root 138 Nov 24 16:12 roles
权限位一共有 10 位,这 10 位权限位的含义如下图所示。
第 1 位代表文件类型。
Linux 不像 Windows 使用扩展名表示文件类型,而是使用权限位的第 1 位表示文件类型。虽然 Linux 文件的种类不像 Windows 中那么多,但是分类也不少,详细情况 可以使用“info ls”命令查看。
“-”:普通文件。
“d”:目录文件。Linux 中一切皆文件,所以目录也是文件的一种。
“l”:软链接文件。
“b”:块设备文件。这是一种特殊设备文件,存储设备都是这种文件,如分区文件/dev/sda1 就是这种文件。
“c”:字符设备文件。这也是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘 等。
# 该文件开头的文件不能删除,该文件为唯一文件
“p”:管道符文件。这是一种非常少见的特殊设备文件。
“s”:套接字文件。这也是一种特殊设备文件,一些服务支持 Socket 访问,就会产生这样的文件。
注:info代表以书的形式查看
如果有字母,则代表拥有对应的权限;如果是“-”,则代表没有对应的权限。
第 2~4 位代表文件所有者的权限 r:代表 read,是读取权限。 w:代表 write,是写权限。 x:代表 execute,是执行权限
第 5~7 位代表文件所属组的权限,同样拥有“rx”权限。
第 8~10 位代表其他人的权限,同样拥有“rx”权限
2)基本权限命令。
chmod,修改权限的命令 。
命令名称:chmod。 英文原意:change file mode bits。 所在路径:/bin/chmod。 执行权限:所有用户。 功能描述:修改文件的权限模式
命令格式:
chmod 选项 命令模式 文件...
-R: 递归设置权限,也就是给子目录中的所有文件设定权限
权限模式
chmod 命令的权限模式的格式是“ugoa[perms]]”,也就是“用户身份[权限]]” 的格式。
用户身份
-
u:代表所有者(user)。 -
g:代表所属组(group)。 -
o:代表其他人(other)。 -
a:代表全部身份(all)。
赋予方式
权限
-
r:读取权限(read)。 -
w:写权限(write)。 -
x:执行权限(execute)。 例如
chmod o-w a.txt
#把a.txt针对其他人写权限移除。
数字权限
数字权限的赋予方式是最简单的,但是不如之前的字母权限好记、直观。 4:代表“r”权限。 2:代表“w”权限。 1:代表“x”权限。 例如
chmod 644 a.txt
# 为a.txt 设置 rw-r--r-- 权限
常用权限
数字权限的赋予方式更加简单,但是需要用户对这几个数字更加熟悉。其实常用权限也并不多,只有如下几个。
-
644:这是文件的基本权限,代表所有者拥有读、写权限,而所属组和其他人拥有只读权限。 -
755:这是文件的执行权限和目录的基本权限,代表所有者拥有读、写和执行权限,而所属组和其他人拥有读和执行权限。 -
777:这是最大权限。在实际的生产服务器中,要尽力避免给文件或目录赋予这样的权限,这会造成一定的安全隐患。
3)基本权限的作用
权限含义的解释 首先,读、写、执行权限对文件和目录的作用是不同的
权限对文件的作用。
-
读(r):对文件有读(r)权限,代表可以读取文件中的数据。如果把权限对应到命令上,那么一旦对文件有读(r)权限,就可以对文件执行 cat、more、less、head、tail 等文件查看命令。 -
写(w):对文件有写(w)权限,代表可以修改文件中的数据。如果把权限对应到命令上,那么一旦对文件有写(w)权限,就可以对文件执行 vim、echo 等修改文件数据的命令。注 意:对文件有写权限,是不能删除文件本身的,只能修改文件中的数据。如果要想删除文件, 则需要对文件的上级目录拥有写权限。 -
执行(x):对文件有执行(x)权限,代表文件拥有了执行权限,可以运行。在 Linux 中,只要文件有执行(x)权限,这个文件就是执行文件了。只是这个文件到底能不能正确执行, 不仅需要执行(x)权限,还要看文件中的代码是不是正确的语言代码。对文件来说,执行(x)权限是最高权限。
权限对目录的作用。
-
读(r):对目录有读(r)权限,代表可以查看目录下的内容,也就是可以查看目录下有哪些子文件和子目录。如果把权限对应到命令上,那么一旦对目录拥有了读(r)权限,就可 以在目录下执行 ls 命令,查看目录下的内容了。 -
写(w):对目录有写(r)权限,代表可以修改目录下的数据,也就是可以在目录中新建、 删除、复制、剪切子文件或子目录。如果把权限对应到命令上,那么一旦对目录拥有了写(w) 权限,就可以在目录下执行 touch、rm、cp、mv 命令。对目录来说,写(w)权限是最高权限。 -
执行(x):目录是不能运行的,那么对目录拥有执行(x)权限,代表可以进入目录。如果 把权限对应到命令上,那么一旦对目录拥有了执行(x)权限,就可以对目录执行 cd 命令,进入目录。
目录的可用权限 目录的可用权限其实只有以下几个。
-
0:任何权限都不赋予。 -
5:基本的目录浏览和进入权限。 -
7:完全权限。
4)所有者和所属组命令
注:普通用户能修改所有者是自己的文件的权限;但普通用户不能修改文件的所有者(哪怕文件是属于这个普通用户的);只有超级用户才能修改所有者。
chown 命令
chown 是修改文件和目录的所有者和所属组的命令, 命令名称:chown。 英文原意:change file owner and group。 所在路径:/bin/chown。 执行权限:所有用户。 功能描述:修改文件和目录的所有者和所属组。
# 命令格式
~]# chown [选项] 所有者:所属组 文件或目录
-R: 递归设置权限,也就是给子目录中的所有文件设置权限
chgrp 命令
chgrp 是修改文件和目录的所属组的命令
命令名称:chgrp。 英文原意:change group ownership。 所在路径:/bin/chgrp。 执行权限:所有用户。 功能描述:修改文件和目录的所属组
# 命令格式
~]# chgrp [选项] 组名 文件或目录
-R: 递归设置权限,也就是给子目录中的所有文件设置权限
5)umask 默认权限
当我们登录系统之后创建一个文件或者目录总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反 。
查看umask权限。
# 用八进制数值显示 umask权限
~]# umask
0022
# 用字母表示文件和目录的初始权限
~]# umask -S
u=rwx,g=rx,o=rx
#设置umask值
umask 033
# 注:永久修改需要要配置/etc/profile环境变量配置文件
umask 权限的计算方法 我们需要先了解一下新建文件和目录的默认最大权限。
-
对文件来讲,新建文件的默认最大权限是 666,没有执行(x)权限。这是因为执行权限对文件 来讲比较危险,不能在新建文件的时候默认赋予,而必须通过用户手工赋予 -
对目录来讲,新建目录的默认最大权限是 777。这是因为对目录而言,执行(x)权限仅仅代表 进入目录,所以即使建立新文件时直接默认赋予,也没有什么危险。 按照官方的标准算法,umask 默认权限需要使用二进制进行逻辑与和逻辑非联合运算才可以得到正确的新建文件和目录的默认权限。这种方法既不好计算,也不好理解, 所以这里还是按照权限字母来讲解 umask 权限的计算方法。我们就按照默认的 umask 值是 022 来分别计算一下新建文件和目录的默认权限吧。 -
文件的默认权限最大只能是 666,而 umask 的值是 022 “-rw-rw-rw-”减去 “-----w--w-”等于“-rw-r--r—” -
目录的默认权限最大可以是 777,而 umask 的值是 022 “drwxrwxrwx”减去“d----w--w-”等于“drwx-r-xr-x”
注意:umask 默认权限的计算绝不是数字直接相减。 例如 umask 是 033
6)附加权限(特殊权限)
StickyBit权限
占用其他人(Other)的x位显示为t或T,取决于其他人是否有x权限适用于目录,用来限制用户滥用写入权在设置了t权限的文件夹下,即使用户有写入权限,也不能删除或改名其他用户文档
格式:chmodo+t[目录]
SetGID权限
占用属组(Group)的x位显示为s或S,取决于属组是否有x权限对目录有效在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份
格式:chmod g+s[目录] #赋予SGID特殊权限
acl访问策略
–能够对个别用户、个别组设置独立的权限
–大多数挂载的EXT3/4、XFS文件系统默认已支持
setfacl命令
格式:setfacl [选项] u:用户名:权限 文件...
setfacl [选项] g:组名:权限文件...
常用命令选项
-m:修改ACL策略
-x:清除指定的ACL策略
-b:清除所有已设置的ACL策略
-R:递归设置ACL策略
# ACL策略-黑名单的使用(单独拒绝某些用户)
setfacl -m u:用户:--- 目录
查看acl访问权限:
~]# getfacl [目录]
附加权限SUID权限(SetUID)
占用属主(User)的x位显示为s或S,取决于属主是否有x权限,仅对可执行的程序有意义当其他用户执行带SUID标记的程序时,具有此程序属主的身份和相应
~]# chmodu+s[目录]
4.帮助命令
man 命令
man 是最常见的帮助命令,也是 Linux 最主要的帮助命令 命令名称:man。 英文原意:format and display the on-line manual pages。 所在路径:/usr/bin/man。 执行权限:所有用户。 功能描述:显示联机帮助手册
使用
~]# man [选项] 命令
选项:
-f: 查看命令拥有哪个级别的帮助 或 whatis 命令
-k: 查看和命令相关的所有帮助 或 apropos 命令
~]# man tar
#详细帮助。
# 查看,命令有哪些级别
~]# man -f cat
cat (1p) - concatenate and print files
cat (1) - concatenate files and print on the standard output
查看cat命令有哪几个级别的命令。
man命令帮助级别
info 命令
info 命令的帮助信息是一套完整的资料,每个单独命令的帮助信息只是这套完整资料中的某一个小章节。
常用快捷键
~]# info [参数] <命令>
?键:它就会显示info的常用快捷键。
N键:显示(相对于本节点的)下一节点的文档内容。
P键:显示(相对于本节点的)前一节点的文档内容。
U键:进入当前命令所在的主题。
M键:敲M键后输入命令的名称就可以查看该命令的帮助文档了。
G键:敲G键后输入主题名称,进入该主题。
L键:回到上一个访问的页面。
SPACE键:向前滚动一页。
BACKUP或DEL键:向后滚动一页。
Q:退出info。
help 命令
help 只能获取 Shell 内置命令的帮助 命令名称:help。 英文原意:help。 所在路径:Shell 内置命令。 执行权限:所有用户。 功能描述:显示 Shell 内置命令的帮助。 可以使用 type 命令来区分内置命令与外部命令 ,shell 是 Linux 的命令解释器
#区分是否是内外命令
~]# type help
help is a shell builtin #表示为shell内置命令
--help 选项
绝大多数命令都可以使用“--help”选项来查看帮助,这也是一种获取帮助的方法。
例如: ~]# ls --help 这种方法非常简单,输出的帮助信息基本上是 man 命令的信息简要版
5.搜寻命令
whereis命令
whereis是搜索系统命令的命令,也就是说,whereis 命令不能搜索普通文件, 而只能搜索系统命令。 命令名称:whereis 英文原意:locate the binary, source, and manual page files for a command。 所在路径:/usr/bin/whereis。 执行权限:所有用户。 功能描述:查找二进制命令、源文件和帮助文档的命令。
~]# whereis whereis
whereis: /usr/bin/whereis /usr/share/man/man1/whereis.1.gz
#whereis 命令不仅可以查看命令位置,还可以显示帮助文档位置。
which 命令
命令名称:which。 英文原意:shows the full path of (shell) commands。 所在路径:/usr/bin/which。 执行权限:所有用户。 功能描述:列出命令的所在路径
[root@love2 ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
#which命令与whereis命令类似,但是which命令会显示命令别名。
locate 命令
locate 命令才是可以按照文件名搜索普通文件的命令。
命令名称:locate。 英文原意:find files by name。 所在路径:/usr/bin/locate。 执行权限:所有用户。 功能描述:按照文件名搜索文件。
## 优点:按照数据库搜索,搜索速度快,消耗资源小。
## 数据库位置/var/lib/mlocate/mlocate.db,
## 可以使用 updatedb 命令强制更新数据库。
## 缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。
~]# locate edu.txt
/root/edu.txt
配置文件 /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes" #开启搜索限制,使该配置文件生效。
PRUNEFS = "9p afs anon_inodefs.... # 在 locate执行搜索时,禁止搜索这些文件系统类型
PRUNENAMES = ".git .hg .svn..." #禁止搜索以这些后缀名结尾的文件
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev ..." #不搜索这些目录
find 命令
命令名称:find。 英文原意:search for files in a directory hierarchy。 所在路径:/bin/find。 执行权限:所有用户。 功能描述:在目录中搜索文件。(精确搜索)
按照文件名搜寻
~]# find 搜索路径 [选项] 搜索内容
选项:
-name: 按照文件名搜索
-iname: 按照文件名搜索,不区分文件名大小写
-inum: 按照inode号搜索
按照文件大小搜索
~]# find 搜索路径 [选项] 搜索内容
选项: -size [+|-]大小:
按照指定大小搜索文件 这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件.
1bytes=8byte,我们在电脑上可见的最小单位为字节
`b' for 512-byte blocks (this is the default if no suffix is used)
# 这里是默认单位,如果单位为b或不写单位,则按照512Byte
`c' for bytes
# 搜索单位是c,按字节搜索字节
`w' for two-byte words
# 搜索单位是w,按照算字节(中文)搜索
`k' for Kilobytes (units of 1024 bytes)
# 按照KB单位搜索,必须是小k
`M' for Megabytes (units of 1048576 bytes)
# 按照MB单位搜索,必须是大写的M
`G' for Gigabytes (units of 1073741824 bytes)
#按照GB单位搜索,必须是大写的G
# 用法示例
~]# find . -size 442c
./edu.txt
按照修改时间搜索
Linux 中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个 时间,我们也可以按照时间来搜索文件。
~]# find 搜索路径 [选项] 搜索内容 选项:
-atime [+|-]时间: 按照文件访问时间搜索
-mtime [+|-]时间: 按照文件数据修改时间搜索
-ctime [+|-]时间: 按照文件状态修改时间搜索
【+/-】时间的含义(以10为例):
-10:代表10天内修改的文件
10(不写+—):则代第十天修改的文件
+10:代表10天之前修改的文件
按照权限搜索命令格式。
~]# find 搜索路径 [选项] 搜索内容
选项:
-perm 权限模式: 查找文件权限刚好等于“权限模式”的文件
-perm -权限模式: 查找文件权限全部包含“权限模式”的文件
-perm +权限模式: 查找文件权限包含“权限模式”的任意一个权限的文件
按照所有者和所属组搜索
~]#
find 搜索路径 [选项] 搜索内容
选项:
-uid 用户ID: 按照用户ID查找所有者是指定ID的文件
-gid 组ID: 按照用户组ID查找所属组是指定ID的文件
-user 用户名: 按照用户名查找所有者是指定用户的文件
-group 组名: 按照组名查找所属组是指定用户组的文件
-nouser: 查找查找没有所有者的文件,主要用于查找垃圾文件
按照文件类型搜索
~]# find 搜索路径 [选项] 搜索内容
选项:
-type d: 查找目录
-type f: 查找普通文件
-type l: 查找软链接文件
-type s : 查找套接字文件
逻辑运算符
用于连接多个条件.
选项:
-a: and逻辑与
-o: or逻辑或
-not: not逻辑非/[!]
~]# find . -size +442c -a -type f
#查找当前路径下大于442字节且类型为普通文件的文件。
其他选项
-exec
~]# find 搜索路径 [选项] 搜索内容 -exec 命令2 {} ;
这个选项的作用其实是把 find 命令的结果交给由“-exec”调用的命令 2 来处理。“{}”就 代表 find 命令的查找结果。
-ok 选项
“-ok”选项和“-exec”选项的作用基本一致,
区别在于:“-exec”的命令 2 会直接处理,而不询 问;“-ok”的命令 2 在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行
~]# find -size +442k -a -type f -ok wc -l {} \;
查找大于442k,文件类型为普通文件的文件,且统计每个文件的行数。
grep 命令
grep 的作用是在文件中提取和匹配符合条件的字符串行,支持正则匹配。(模糊搜索)
~]# grep [选项] "搜索内容" 文件名
选项:
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
--color=auto: 搜索出的关键字用颜色显示
find与grep的区别
通配符:用于匹配文件名,完全匹配
通配符 | 作用 |
---|
? | 匹配一个任意字符 | * | 匹配 0 个或任意多个任意字符,也就是可以匹配任何内容 | [] | 匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是 a,或者是 b,或者是 c | [-] | 匹配范围内一个任意字符例如,-代表一个范围[1-9],匹配1-9中的任意一个字符;英文必须大写的在前面[A-z]; | [^] | 表示匹配不是中括号内的一个字符。例如,[ ^0-9]代表匹配一个不是数字的字符 | {} | 多组不同的字符串,全匹配{a,min,xy} |
正则表达试:用于匹配字符串,包含匹配
正则 | 作用 |
---|
? | 匹配前一个字符重复 0 次,或 1 次(?是扩展正则,需要使用 egrep 命令) | * | 匹配前一个字符重复 0 次,或任意多次 | [] | 匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是 a,或者是 b,或者是 c | [-] | 匹配范围内一个任意字符例如,[1-9],匹配1-9中的任意一个字符 | [^] | 表示匹配不是中括号内的一个字符。例如,0-9代表匹配一个不是数字的字符 | ^ | 匹配行首 | $ | 匹配行尾 |
6.其他命令
管道符(文本流)
注:管道符后就会变成文本,故管道后可接grep
命令格式: 命令 1 | 命令 2 命令 1 的正确输出作为命令 2 的操作对象.
~] ll -a /etc/ | more
#列出/etc目录下所有文件,且分页显示。
netstat命令(与ss命令一样)
利用 netstat 指令可让你得知整个 Linux 系统的网络情况。
~]# netstat [选项]
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
# 提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
#示例,查看正在连接的数量
]# netstat -an | grep ESTABLISHED
tcp 0 0 172.17.0.51:22 172.17.0.43:51198 ESTABLISHED
alias 命令的别名
命令的别名,就是命令的小名,主要是用于照顾管理员使用习惯的。
~]# alias grep='grep --color=auto'
# 执行 grep命令时,其实是执行 grep --color=auto 目的是自动显示颜色
# 可以在命令行中直接设置,但是是临时生效,重启就没了,可写到文件里,
~]# vim ~/.bashrc
~]# unalias 命令
#取消别名
快捷键
tab | 命令或路径等的补全键,linux用的最多的一个快捷键 |
---|
ctrl+a | 光标迅速回到行首 | ctrl+e | 光标迅速回到行尾 | ctrl+f | 光标向右移动一个字符 | ctrl+b | 光标向左移动一个字符 | ctrl+insert | 复制命令行内容(mac系统不能使用) | shift+insert | 粘贴命令行内容(mac系统不能使用) | ctrl+k | 剪切(删除)光标处到行尾的所有字符 | ctrl+u | 剪切(删除)光标处到行首的所有字符 | ctrl+w | 剪切(删除)光标前的一个字符 | ctrl+y | 粘贴 ctrl+k、ctrl+u、ctrl+w删除的字符 | ctrl+c | 中断终端正在执行的任务并开启一个新的一行 | ctrl+h | 删除光标前的一个字符(相当于退格键) | ctrl+d | 退出当前shell命令行,如果是切换过来的用户,则执行这个命令回退到原用户 | ctrl+r | 搜索命令行使用过的历史命令记录 | ctrl+m | 回车 | ctrl+g | 从ctrl+r的搜索历史命令模式中退出 | ctrl+l | 清楚屏幕所有的内容,并开启一个新的一行 | ctrl+s | 锁定终端,使之任何人无法输入 | ctrl+q | 解锁ctrl+s的锁定状态 | ctrl+z | 暂停在终端运行的任务,使用"fg"命令可以使暂停恢复 | !! | 执行上一条命令 | !pw | 这是一个例子,是执行以pw开头的命令,这里的pw可以换成任何已经执行过的字符 | !pw:p | 这是一个例子,是仅打印以pw开头的命令,但不执行,最后的那个“p”是命令固定字符 | !num | 执行历史命令列表的第num条命令,num代指任何数字(前提是历史命令里必须存在) | !$ | 代指上一条命令的最后一个参数,该命令常用于shell脚本中 | esc+. | 注意那个".“ 意思是获取上一条命令的(以空格为分隔符)最后的部分 | esc+b | 移动到当前单词的开头 | esc+f | 移动到当前单词的结尾 | alt+. | 使用前一个命令的最后一个词 | 方向建(上下键) | 历史命令 |
重定向
类型 | 操作符 | 用途 |
---|
覆盖重定向输出 | > | 将命令行的正常执行输出覆盖保存到文件 | 追加重定向输出 | >> | 将命令行的正常执行输出追加保存到文件 | 覆盖重定向错误输出 | 2> | 将命令行的错误执行输出覆盖保存到文件 | 追加重定向错误输出 | 2>> | 将命令行的错误执行输出追加保存到文件 | 混合重定向 | &> | 将错误和正确的输出都覆盖到同一个文件 | 混合重定向 | &>> | 将错误和正确的输出都追加到同一个文件 |
7.压缩与解压缩命令
在 Linux 中可以识别的常见压缩格式有十几种,比如:".zip"、".gz"、".bz2"、“tar”、".tar.gz"、".tar.bz2"等等
".zip" 格式
".zip" 是 Windows 中最常用的压缩格式,Linux 也可正确识别 ".zip" 格式,这可以方便的和 Windows 系统通用压缩文件。
".zip" 格式压缩命令:
zip [选项] 压缩包名 源文件或源目录 选项: ? -r:压缩目录
~]# zip mytxt.zip abc.txt abd.txt bcd.txt
adding: abc.txt (deflated 6%)
adding: abd.txt (stored 0%)
adding: bcd.txt (stored 0%)
# 把三个 txt 文件压缩成一个 zip 文件
".zip" 格式解压缩命令:
unzip [选项] 压缩包名 选项: -d:指定解压缩位置
~]# unzip -d /home/hepingfly/abc/ mytxt.zip
Archive: mytxt.zip
inflating: /home/hepingfly/abc/abc.txt
extracting: /home/hepingfly/abc/abd.txt
extracting: /home/hepingfly/abc/bcd.txt
# 如果不指定 -d 参数,默认解压到当前目录下
".gz" 格式(不能打包)
".gz" 格式压缩命令:
gzip [选项] 源文件 选项: ?-c:将压缩数据输出到标准输出中,可以用于保留源文件 ? -d:解压缩 ? -r:压缩目录 注:gzip 压缩文件后会把源文件删除掉,它是不支持保留源文件的
~]# gzip abc.txt
~]# ll
总用量 12
-rw-rw-r--. 1 hepingfly hepingfly 60 2月 22 01:33 abc.txt.gz
# 压缩完之后源文件也会被删除掉
----------------------------------------------------------------------------
~]# gzip -c bcd.txt > bcd.txt.gz
~]# ll
总用量 16
-rw-------. 1 hepingfly hepingfly 0 2月 21 00:37 bcd.txt
-rw-r--r--. 1 root root 28 2月 25 00:55 bcd.txt.gz
# 你使用 gzip -c bcd.txt 命令,会把压缩数据输出到屏幕上,现在我不让它输出到屏幕上,而是重定向到一个压缩文件中,这样就实现了在压缩你文件的同时不删除源文件
----------------------------------------------------------------------------
~]# gzip -r aaaa/
~]# ll aaaa/
总用量 8
-rw-r--r--. 1 root root 26 2月 25 01:02 a.txt.gz
-rw-r--r--. 1 root root 26 2月 25 01:02 b.txt.gz
# 你使用 gzip -r 命令,它是把这个目录下的所有文件都压缩,而不会把这个目录压缩(不能打包)
**".gz" 格式解压缩命令:
gzip -d 压缩包名 gunzip 压缩包名 上面两个命令都可以
".bz2 格式(不能压缩目录)"
".bz2" 格式,是 Linux 的另一种压缩格式,从理论上来讲,".bz2" 格式的算法更先进、压缩比更好;而 ".gz" 格式相对来讲压缩时间更快
".bz2" 格式压缩命令:
bzip2 [选项] 源文件 选项: ? -d:解压缩 ? -k:压缩时保留源文件 ? -v:显示压缩的详细信息
~]# bzip2 -k bcd.txt
~]# ll
总用量 20
-rw-------. 1 hepingfly hepingfly 0 2月 21 00:37 bcd.txt
-rw-------. 1 hepingfly hepingfly 14 2月 21 00:37 bcd.txt.bz2
# 保留源文件压缩
注:
这条命令不能压缩目录,压缩目录就会报错。前面的 gzip 命令是不能打包,你用 gzip 命令压缩目录,它会把你目录下的文件进行压缩,不会把你这个目录进行压缩
".bz2" 格式解压缩命令:
bzip2 -d 压缩包 bunzip2 压缩包 上面两个命令都可以
tar命令
".tar" 格式的打包和解打包都使用 tar 命令,区别只是选项不同。
".tar" 格式打包命令:
tar [选项] [-f 压缩包名] 源文件或目录 选项: ? -c:打包 ? -f:指定压缩包的文件名。压缩包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名。 ? -v:显示打包文件过程
# 归档(打包)
~]# tar -cvf test.tar abd.txt bcd.txt
abd.txt
bcd.txt
".tar" 格式解打包命令:
tar [选项] 压缩包 选项: ? -x:解打包 ? -f:指定压缩包的文件名 ? -v:显示解打包文件过程
-t: 显示归档中的文件清单(不解压)
~]# tar -xvf test.tar
abd.txt
bcd.txt
~]# tar -tf test.tar
abd.txt
bcd.txt
".tar.gz" 和 ".tar.bz2" 格式
使用 tar 命令直接打包压缩
tar [选项] 压缩包 源文件或目录 选项: ? -z:压缩和解压缩 ".tar.gz" 格式 ? -j: 压缩和解压缩 ".tar.bz2" 格式
-C:指定目录
-J:压缩和解压缩 ".tar.xz" 格式
# 压缩
~]# tar -jcvf test.gz.bz2 abd.txt bcd.txt
abd.txt
bcd.txt
~]# ll
总用量 24
-rw-r--r--. 1 root root 160 2月 25 23:11 test.gz.bz2
---------------------------------------------------------------
# 解压缩
~]# tar -jxvf test.gz.bz2
abd.txt
bcd.txt
----------------------------------------------------------------
# 压缩
~]# tar -zcvf test.tar.gz abd.txt bcd.txt
abd.txt
bcd.txt
~]# ll
总用量 12
-rw-r--r--. 1 root root 0 2月 22 02:09 abd.txt
-rw-------. 1 hepingfly hepingfly 0 2月 21 00:37 bcd.txt
-rw-r--r--. 1 root root 154 2月 25 23:14 test.tar.gz
----------------------------------------------------------------
# 解压缩
~]# tar -zxvf test.tar.gz
abd.txt
bcd.txt
--------------------------------------------------------------
# 只查看不解压
~]# tar -ztvf test.tar.gz
-rw-r--r-- root/root 0 2019-02-22 02:09 abd.txt
-rw------- hepingfly/hepingfly 0 2019-02-21 00:37 bcd.txt
--------------------------------------------------------------
# 解压到指定目录(-C 一定要跟在压缩包后面)
~]# tar -zxvf test.tar.gz -C aaaa/
abd.txt
bcd.txt
--------------------------------------------------------------
# 解压指定文件
~]# tar -ztvf test.tar.gz # 我先查看这个压缩包里面有哪些文件
-rw-r--r-- root/root 0 2019-02-22 02:09 abd.txt
-rw------- hepingfly/hepingfly 0 2019-02-21 00:37 bcd.txt
[root@hepingfly hepingfly]# tar -zxvf test.tar.gz -C aaaa/ abd.txt
abd.txt
# 我只把 abd.txt 文件解压到 aaaa 目录下
8.关机和重启命令
sync 命令
命令名称:sync 英文原意:flush file system buffers 所在路径:/bin/sync 执行权限:所有用户 功能描述:刷新文件系统缓冲区。
注:关机之前执行可同步数据
shutdown 命令
命令名称:shutdown 英文原意:bring the system down 所在路径:/sbin/shutdown。 执行权限:超级用户。 功能描述:关机和重启命令的基本格式如下:
注:在那时的 Linux 中,只有 shutdown 命令在关机或重启之前会正确地中止进程及服务,所以我们一直认为 shutdown 才是最安全的关机与重启命令
~]# shutdown [选项] 时间 [警告信息]
-c: 取消已经执行的shutdown命令
-h: 关机
-r: 重启 3
#示例
~]# shutdown -r now
#重启, now是现在重启的意思
~]# shutdown -r 05:30
#指定时间重启,但会占用前台终端
~]# shutdown -r 05:30 &
#把定义重启命令放入后台,&是后台的意思
~]# shutdown -c
# 取消定时重启
~]# shutdown -r +10
# 10分钟之后重启
# 关机和定时关机
~]# shutdown -h now
#现在关机
~]# shutdown -h 05:30
#指定时间关机
reboot 命令
#在现在的系统中,reboot 命令也是安全的,而且不需要加入过多的选项
~]# reboot #重启
-f: 强制
halt 和 poweroff 命令
这两个都是关机命令,直接执行即可。这两个命令不会完整关闭和保存系统的服务,类似于我们直接手动电源键关机。不建议使用。
~]# halt
~]# poweroff
init 命令
init 是修改 Linux 运行级别的命令,也可以用于关机和重启。这个命令并不安全,不建议使用。
~]# init 0 关机
~]# init 6 重启
9.网络命令
配置ip
配置 IP 地址
IP 地址是计算机在互联网中唯一的地址编码。每台计算机如果需要接入网络和其他计算机进行数 据通信,就必须配置唯一的公网 IP 地址。 配置 IP 地址有两种方法: 1)setup 工具
注: Red Hat 系列专有的命令,其他的 Linux 系列不一定有此命令
2)手工修改配置文件
~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 重启网络服务
~]# service network restart
3)在虚拟机上复制的虚拟机ip报错
复制镜像有可能需要重置 UUID(唯一识别符)
~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
#删除MAC地址行
~]# rm -rf /etc/udev/rules.d/70-persistent-net.rules
#删除MaC地址和UUID绑定文件
~]# reboot #重启Linux
ip命令
ip 命令的功能很多!基本上它整合了 ifconfig 与 route 这两个命令,不过ip 的功能更强大! 如果您有兴趣的话,请自行 vi /sbin/ifup 就知道整个 ifup 就是利用 ip 这个命令来实现的
~]# ip [选项] [动作] [命令]
选项 :设定的参数,主要有:
-s :显示出该设备的统计数据(statistics),例如总接受封包数等;
动作:就是是可以针对哪些网络参数进行动作,包括有:
link :关于设备 (device) 的相关设定,包括 MTU, MAC 地址等等
addr/address :关于额外的 IP 设定,例如多 IP 的实现等等;
route :与路由有关的相关设定
于设备(device) 的相关设定: ip link
ip link 可以设定与设备 (device) 有关的相关设定,包括 MTU 以及该网络设备的 MAC 等等, 当然也可以启动 (up) 或关闭 (down) 某个网络设备。整个语法是这样的:
~]# ip [-s] link show <== 单纯的查阅该设备相关的信息
~]# ip link set [device] [动作与参数]
# 参数
show:仅显示出这个设备的相关内容,如果加上 -s 会显示更多统计数据;
set :可以开始设定项目, device 指的是 eth0, eth1 等等设备代号;
# 动作与参数:包括以下动作:
up|down :启动 (up) 或关闭 (down) 某个设备,其他参数使用预设的以太网参数;
address :如果这个设备可以更改 MAC ,用这个参数修改;
name :给予这个设备一个特殊的名字;
mtu :设置最大传输单元。
nmcli命令
nmcli命令 是 NetworkManager client 网络管理客户端
~]# nmcli [OPTIONS] OBJECT { COMMAND | help }
OPTIONS
-t[erse] # terse output 简洁的输出
-p[retty] # pretty output 漂亮的输出
-m[ode] tabular|multiline # output mode 输出模式
-f[ields] <field1,field2,...>|all|common # specify fields to output 指定要输出的字段
-e[scape] yes|no # escape columns separators in values 在值中转义列分隔符
-n[ocheck] # 不要检查nmcli和NetworkManager版本
-a[sk] # 要求缺少参数
-w[ait] <seconds> # 设置超时等待整理操作
-v[ersion] # 显示程序版本
-h[elp] # 打印此帮助
OBJECT
g[eneral] NetworkManager的一般状态和操作
n[etworking] 整体组网控制
r[adio] NetworkManager切换开关
c[onnection] NetworkManager的连接
d[evice] 由NetworkManager管理的设备
a[gent] NetworkManager秘密代理或polkit代理
# 实例
nmcli connection show # 查看当前连接状态
nmcli connection reload # 重启服务
nmcli connection show -active # 显示活动的连接
nmcli connection show "lan eth0"# 显示指定一个网络连接配置
nmcli device status # 显示设备状态
nmcli device show eno16777736 # 显示指定接口属性
nmcli device show # 显示全部接口属性
nmcli con up static # 启用static连接配置
nmcli con up default # 启用default连接配置
nmcli con add help # 查看帮助
ifconfig 命令
命令名称:ifconfig。 英文原意:configure a network interface。 所在路径:/sbin/ifconfig。 执行权限:超级用户 功能描述:查看ip地址相关信息
~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:39:48:4A
mac地址
inet addr:100.100.100.22 Bcast:100.100.100.255 Mask:255.255.255.0
ipv4地址 广播 子网掩码
inet6 addr: fe80::20c:29ff:fe39:484a/64 Scope:Link
ipv6地址
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:158 errors:0 dropped:0 overruns:0 frame:0
TX packets:115 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16810 (16.4 KiB) TX bytes:14897 (14.5 KiB)
接受的数据包情况 发送的数据包情况
lo Link encap:Local Loopback
本机回环网卡
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
ping 命令
ping 是常用的网络命令,主要通过 ICMP 协议进行网络探测,测试网络中主机的通信情况。 命令名称:ping。 英文原意:send ICMP ECHO_REQUEST to network hosts。 所在路径:/bin/ping。 执行权限:所有用户。 功能描述:向网络主机发送 ICMP 请求。
~]# ping [选项] IP
选项:
-b: 后面加入广播地址,用于对整个网段进行探测
-c 次数: 用于指定ping的次数
-s 字节: 指定探测包的大小
netstat 命令与ss一样
netstat 是网络状态查看命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接,在 CentOS 7.x 中 netstat 命令默认没有安装,如果需要使用,需要安装 net-snmp 和 net-tools 软件包。 命令名称:netstat。 英文原意:Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships 所在路径:/bin/netstat 执行权限:所有用户。 功能描述:输出网络连接、路由表、接口统计、伪装连接和组播成员
~]# netstat [选项]
选项:
-a: 列出所有网络状态,包括Socket程序
-c 秒数: 指定每隔几秒刷新一次网络状态
-n: 使用IP地址和端口号显示,不使用域名与服务名
-p: 显示PID和程序名
-t: 显示使用TCP协议端口的连接状况
-u: 显示使用UDP协议端口的连接状况
-l: 仅显示监听状态的连接
-r: 显示路由表
# 查看所有连接
~]# netstat -an
协议 接收数据 发送.. 本机ip与端口 远程ip与端口 状态 进程id和服务名
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:52326 0.0.0.0:* LISTEN 1297/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1275/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1517/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1352/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1596/master
# State:状态详解
常见的状态主要有以下几种。
- LISTEN:监听状态,只有 TCP 协议需要监听,而 UDP 协议不需要监听。
- ESTABLISHED:已经建立连接的状态。如果使用“-l”选项,则看不到已经建立连接的状态。
- SYN_SENT:SYN 发起包,就是主动发起连接的数据包。
- SYN_RECV:接收到主动连接的数据包。
- FIN_WAIT1:正在中断的连接。
- FIN_WAIT2:已经中断的连接,但是正在等待对方主机进行确认。
- TIME_WAIT:连接已经中断,但是套接字依然在网络中等待结束。
- CLOSED:套接字没有被使用。
在这些状态中,我们最常用的就是 LISTEN 和 ESTABLISHED 状态,一种代表正在监听,另一种代表已经建立连接。
write 命令
命令名称:write 英文原意:send a message to another user 所在路径:/usr/bin/write。 执行权限:所有用户 功能描述:向其他用户发送信息
登录终端模式 | 终端数 | 命令 |
---|
本地字符终端 | tty1-6 | alt+F1-6 | 本地图形终端 | tty7 | ctrl+alt=F7(按住3秒,需要安装启动图形界面) | 远程终端 | pts/0-255 | |
# 先查看有哪些远程终端
~]#w
09:48:23 up 3 days, 13:58, 3 users, load average: 0.00, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 172.17.0.43 09:24 7.00s 41.41s 0.00s w
root pts/1 172.17.0.43 09:25 23:23 0.01s 0.01s -bash
root pts/2 172.17.0.43 09:25 23:14 0.01s 0.01s -bash
#输入命令直接回车(ctrl+D保存退出)
~]# write root tty1
# 向 在 tty1(本地终端 1 )登 录 的 root 用户发送信息,使用“ Ctrl+D ” 快捷键 保存发送 的 数据
123
#客户端查看
~]#
Message from root@VM-0-51-centos on pts/0 at 09:50 ...
123
wall 命令
write 命令用于给指定用户发送信息,而 wall 命令用于给所有登录用户发送信息,包括你自己。
~]# wall 123456
[root@localhost ~]#
Broadcast message from root@localhost.localdomain (pts/0) (Wed Nov 27 16:02:15 2019):
123456
mail 命令
mail 是 Linux 的邮件客户端命令,可以利用这个命令给其他用户发送邮件。 命令名称:mail。 英文原意:send and receive Internet mail。 所在路径:/bin/mail。 执行权限:所有用户。 功能描述:发送和接收电子邮件。
发送邮件
~]# mail root 给root发送邮件
Subject: ..... #主题
ni jiu shi ge dd #内容
. # . 结束邮件
EOT
发送文件内容
我们在写脚本时,有时需要脚本自动发送一些信息给指定用户,把要发送的信息预先写到文件中
~]# mail -s 'test ' root < /root/anaconda-ks.cfg
You have mail in /var/spool/mail/root
选项:
-s: 指定邮件标题
# 把 /root/anaconda-ks.cfg 文件 的 内容发送给 root 用户
读取邮件
~]# mail
Heirloom Mail version 12.4 7/29/08. Type ? for help.
"/var/spool/mail/root": 2 messages 2 new
>N 1 root Wed Nov 27 16:05 18/612 "haha"
N 2 root Wed Nov 27 16:08 77/2106 "test"
&
# N:表示新邮箱 1:标题 root:发件人的姓名 Wed Nov 27 16:05 18/612:时间 "haha":邮件的标题
# 常用命令
? 显示帮助
h: headers:列出邮件标题列表
d: delete:删除指定邮件。比如想要删除第二封邮件,可以输入“d 2”。
s: save:保存邮件。可以把指定邮件保存成文件,如“s 2 /tmp/test.mail”。
quit:退出,并把已经操作过的邮件进行保存。比如移除已删除邮件、保存已阅读邮件等。
exit:退出,但是不保存任何操作。
注:邮件默认保存地址
~]# ls /var/spool/mail/
rpc user1
10.系统痕迹命令
linux会记录用户使用linux的痕迹,系统中有一些重要的痕迹日志文件,如/var/log/wtmp、/var/run/utmp、/var/log/btmp、/var/log/lastlog 等日志文件,如果你用 vim 打开这些文件,你会发现这些文件是二进制乱码。这是由于这些日志中保存的是系统的重要登录痕迹,包括某个用户何时登录了系统,何时退出了系统,错误登录等重要的系统信息。这些信息要是可以通过 vim 打开,就能编辑,这样痕迹信息就不准确,所以这些重要的痕迹日志,只能通过对应的命令来进行查看。
w 命令
w 命令是显示系统中正在登陆的用户信息的命令,这个命令查看的痕迹日志是/var/run/utmp。 命令名称:w 英文原意:Show who is logged on and what they are doing. 所在路径:/usr/bin/w 执行权限:所有用户 功能描述:显示登录用户,和他正在做什么
注:CPU/内存原则,70/90
~]# w
11:04:07 up 22:52, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 100.100.100.1 10:19 7.00s 0.13s 0.00s w
# 详细参数解释
# load average:
系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值 超过 1 就是高负载;如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数。
# TTY:
登陆的终端: tty1-6:本地字符终端(alt+F1-6 切换);tty7:本地图形终端(ctrl+alt+F7 切换,必须安装启动图形界面);pts/0-255:远程终端。
第一行的内容 | |
---|
11:04:07 | 系统当前时间时间 | up 22:52 | 持续开机时间 | 1 user | 登陆用户 | load average: 0.00, 0.01, 0.05 | 系统CPU在1分钟,5分钟,15分钟前的平均负载 | 第二行的内容 | | USER | 登录用户 | TTY() | 登录终端 | FROM | 从哪一个地址登录 | LOGIN@ | 本地登录为空 | IDLE | 登陆时间 | JCPU | 用户闲置时间 | PCPU | 所有的进程占用的CPU时间 | WHAT | 用户正在进行的操作 |
who 命令
who 命令和 w 命令类似,用于查看正在登陆的用户,但是显示的内容更加简单,也是查看/var/run/utmp 日志。
~]# who
root pts/0 2019-11-26 10:19 (100.100.100.1)
users
users与who , w 命令类似,用于查看正在登陆的用户
last 命令
last 命令是查看系统所有登陆过的用户信息的,包括正在登陆的用户和之前登陆的用户。这个命令查看的是/var/log/wtmp 痕迹日志文件.
~]# last
root pts/0 100.100.100.1 Wed Aug 14 17:09 - 19:58 (02:48)
root pts/0 100.100.100.1 Wed Aug 14 17:07 - 17:08 (00:01)
reboot system boot 3.10.0-957.21.3. Wed Aug 14 17:06 - 00:14 (07:08)
#系统重启信息记录
root pts/0 100.100.100.1 Wed Aug 14 17:02 - down (00:03)
#用户名 终端号 来源IP地址 登陆时间 - 退出时间
lastlog 命令
lastlog 命令是查看系统中所有用户最后一次的登陆时间的命令,他查看的日志是/var/log/lastlog文件
~]# lastlog
Username Port From Latest
root pts/0 100.100.100.1 Tue Nov 26 10:19:33 +0800 2019
bin **Never logged in**
daemon **Never logged in**
#用户名() 终端 来源IP 登陆时间
lastb 命令
lastb 命令是查看错误登陆的信息的,查看的是/var/log/btmp 痕迹日志:
~]# lastb
11.挂载命令
mount 命令基本格式
linux 所有存储设备都必须挂载使用,包括硬盘 命令名称:mount 命令所在路径:/bin/mount 执行权限:所有用户
~]# mount -l
# 查询系统中已经挂载的设备,
-l 会显示卷标名称
~]# mount –a
# 依据配置文件 /etc/fstab 的内容,自动挂载
~]# mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点
-t 文件系统: 加入文件系统类型来指定挂载的类型,可以 ext3、ext4、iso9660 等文件系统。
-L 卷标名: 挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项: 可以指定挂载的额外选项,比如读写权限、同步异步等,如果不指定,则默认值生效:
例1 :比如在进行系统修复时,使用光盘修复模式时,/ 分区默认是只读,我们需要进行从新挂载/分区。
~]# mount -o remount,rw /
例2 :挂载分区
~]# mkdir /mnt/disk1 # 建立挂载点目录
~]# mount /dev/sdb1 /mnt/disk1 # 挂载分区
特殊选项:
注:特殊权限不建议改,一般remount用于修改权限
光盘挂载
光盘挂载的前提依然是指定光盘的设备文件名,不同版本的 Linux,设备文件名并不相同。 CentOS 5.x 以前的系统,光盘设备文件名是/dev/hdc CentOS 6.x 以后的系统,光盘设备文件名是/dev/sr0 不论哪个系统都有软连接/dev/cdrom,与可以作为光盘的设备文件名
~]# mkdir /mnt/cdrom #必须是空目录
~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/
# 挂载光盘;-t指定光盘类型可以不写,因为系统默认识别;如果报没有光盘则添加-t
# 用完之后记得卸载:
~]# umount /dev/sr0
~]# umount /mnt/cdrom
#因为设备文件名和挂载点已经连接到一起,卸载哪一个都可以 注意:卸载的时候需要退出光盘目录,才能正常卸载.
挂载 U 盘
U 盘会和硬盘共用设备文件名,所以 U 盘的设备文件名不是固定的,需要手工查询
# 查询命令:
~]# fdisk -l #查询硬盘然后就是挂载
# 挂载命令如下:
~]# mount -t vfat /dev/sdb1 /mnt/usb/
# 挂载 U 盘。因为是 Windows 分区,所以是 vfat 文件系统格式
如果 U 盘中有中文,会发现中文是乱码。Linux 要想正常显示中文,需要两个条件:
挂载命令如下:
~]# mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb/
# 挂载 U 盘,指定中文编码 格式 为 UTF-8
卸载命令如下:
~]# umount /mnt/usb/
# 查看编码
~]# echo $LANG
en_US.utf8
挂载 NTFS 分区
linux默认不识别NTFS分区的
Linux 的驱动加载顺序:
-
驱动直接放入系统内核之中。这种驱动主要是系统启动加载必须的驱动,数量较少。 -
驱动以模块的形式放入硬盘。大多数驱动都已这种方式保存,保存位置在 /lib/modules/3.10.0-862.el7.x86_64/kernel/中。 -
驱动可以被 Linux 识别,但是系统认为这种驱动一般不常用,默认不加载。如果需要加载这种驱动,需要重新编译内核,而 NTFS 文件系统的驱动就属于这种情况。
使用 NTFS-3G 安装 NTFS 文件系统模块:
~]# wget https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz #下载驱动
~]# tar -zxvf ntfs-3g_ntfsprogs-2017.3.23.tgz # 解压
~]# cd ntfs-3g_ntfsprogs-2017.3.23 # 进入解压目录
~]# ./configure # 编译器准备。没有指定安装目录,安装到默认位置中
~]# make # 编 译
~]# make install # 编译安装
# 挂载
~]# mount –t ntfs-3g /dev/sdb1 /mnt/win
十.vim命令
vi编辑器简介
-
vi编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,vi是效率很高的文本编辑器。尽管在Linux上也有很多图形界面的编辑器可用,但vi在系统和服务器管理中的功能是那些图形编辑器所无法比拟的。 -
vi 编辑器并不是一个排版程序,它不像Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。没有菜单,只有命令,且命令繁多。vi有3种基本工作模式:命令行模式、文本输入模式和末行模式。 -
Vim是vi的加强版,比vi更容易使用。vi的命令几乎全部都可以在vim上使用 # 如果用不惯vim择可以设置别名
~]# alias vi='vim'
# 永久设置
~]# vi .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vi='vim'
vim编辑器简介
vim 是一个全屏幕纯文本编辑器,是 vi 编辑器的增强版,我们主要讲解的是 vim 编辑器
基本使用
vim 的工作模式
命令模式:是主要使用快捷键的模式,命令模式想要进入输入模式,可以使用以下的方式:
命令 | 作用 |
---|
a | 在光标所在字符后插入 | A | 在光标所在行尾插入 | i | 在光标所在行前插入 | I | 在光标所在行首插入 | o | 在光标下插入新行 | O | 在光标上插入新行 |
输入模式:主要用于文本编辑,和记事本类似,输入数据就好
末行模式
:w 保存不退出 ?
:w(大写) + 新文件名 把文件另存为新文件
:q 不保存退出 ?
:wq 保存退出 ?
:! 强制 ?
:q! ? 强制不保存退出,用于修改文件之后,不保存数据退出。
:wq! 强制保存退出,当文件的所有者或者 root 用户,对文件没有写权限的时候,强制写入数据使用。
?
# 快捷键保存推出
# shift zz
命令模式操作
移动光标
# 上下左右移动光标
上下左右移动光标 上、下、左、右方向键,或者 H、j、k、l ? ?
?
# 把光标移动到文件头或尾 ?
gg :移动到文件头
G ? :移动到文件尾(shift+g) ?
?
# 移动到行首或行尾
0 :移动到行首
$ :移动到行尾 ?
?
# 移动到指定行
:n ? 移动到第几行 ?
#这里 n 是数字,准备移动到第几行,就用哪个数字。 ```
删除或剪切
## 删除字母
x ? :删除单个字母
nx :删除n个字母
?
## 删除整行或剪切
dd ? :删除单行
ndd ? :删除多行
:n1,n2d 删除指定范围的行
# 删除整行或多行,这是比较常用的删除方法。这里的 dd 快捷键既是删除,也是剪切。删除内容 放入了剪切板,如果不粘贴就是删除,如果粘贴就是剪切。
?
## 粘贴
p ? 粘贴到光标后
P(大) 粘贴到光标前
## 从光标所在行删除到文件尾
dG 从光标所在行删除到文件尾 ?
#“d”是删除行,“G”是文件尾,连起来就是从光标所在行删除到文件尾。
复制
yy ? :复制单行
nyy :复制多行 ?
#复制之后的粘贴,依然可以使用 p 键或 P(大)键
撤销
u ? :撤销
ctrl+r :反撤销 ?
?
#“u”键能一直撤销到文件打开时的状态,类似 Windows 下“ctrl+z”键的作用。 ?
?
#“ctrl+r”能一直反撤销到最后一次操作状态,类似 Windows 下“ctrl+y”键的作用。
替换
r :替换光标所在处的字符
R :从光标所在处开始替换字符,按ESC结束 ?
# “r”键替换单一字符,不用进入输入模式,实际使用时,比进入输入模式删除后再修改,要方便。
vim 配置文件
vim 支持更多的设置参数,可以通过“:set all”进行查看。设置参数都只是临时生效,一旦关闭文件再打开,又需要重新输入。如果想要永久生效,需要手工建立 vim 的配置文件“~/.vimrc”,把你需要的参数写入配置文件就永久生效了。
设置参数 | 含义 |
---|
:set nu :set nonu | 显示与取消行号 | :syntax on :syntax off | 是否依据语法显示相关的颜色帮助。在Vim中修改相关的配置文件或Shell脚本文件时(如前面示例的脚本/etc/init.d/sshd),默认会显示相应的颜色,用来帮助排错,如果觉得颜色产生了干扰,则可以取消此设置 | :set hlsearch :set nohlsearch | 设置是否将查找的字符串高亮显示。默认是set hlsearch高亮显示 | :set ruler :set noruler | 设置是否显示右下角的状态栏。默认是set ruler | :set showmode :set noshowmode | 设置是否在左下角显示如“-INSERT-”之类的状态栏。默认是set showmode | :set list :set nolist | 设置是否显示隐藏字符(Tab建用“I”表示,回车符用“$”表示)默认是nolist。如果用set list,类似于“cat -A 文件名” |
vim支持更多的设置参数,可以通过“:set all” 进行查看。
这些设置参数都只是临时生效,一旦关闭文件再打开,又需要重新输入。如果想要
永久生效,需要手工建立vim的配置文件“~/. vimrc”,把你需要的参数写入配置文件就永久生效了。
注 : Windows下回车符在Linux中是用“^M$"符号显示,而不是“$”符。这样会导致Windows下编辑的程序脚本,无法在Linux中执行。这时可以通过命令“dos2unix",把Windows格式转为Linux格式,当然反过来“unix2dos"命令就是把Linux格式转为Windows格式。这两个命令默认没有安装,需要手工安装才能使用。
vim 使用技巧
在 vim 中导入其他文件内容或命令结果
导入其他文件内容
:r 文件名 ? 把文件内容导入光标位置 可以把其他文件的内容导入到光标所在位置
在 vim 中执行系统命令
:!命令 在 vim 中执行系统命令 这里只是在 vim 中执行系统命令,但并不把系统命令的结果写入到文件中。
导入命令结果
:r !命令 在 vim 中执行系统命令,并把命令结果导入光标所在行 在 vim 中执行系统命令,并把命令结果导入光标所在行
设定快捷键
:map 快捷键 快捷键执行的命令
# 自定义快捷键 vim 允许自定义快捷键,常用的自定义快捷键如下:
:map ^_ I#<ESC>
# 按“ctrl+/”时,在行首加入注释
:map ^B x
# 按“ctrl+b”时,删除光标字母(删除注释)
注意:^B 快捷键不能手工输入,需要执行 ctrl+V+B 来定义,或 ctrl+V ,然后 ctrl+B。
字符替换
:ab 源字符 替换为字符
# 在 vim 编辑中,有时候需要频繁输入某一个长字符串(比如邮箱),这时使用字符串替换,能增 加输入效率,例如: :ab 123@163.com 当碰到“mymail”时,转变为邮箱
多文件打开
在 vim 中可以同时打开两个文件,只要执行如下命令:
~]# vim -o abc bcd
~]# vim -O abc bcd
#-o 小写 o 会上下分屏打开两个文件
#-O 大写 O 会左右分屏打开两个文件 这样可以同时打开两个文件,方便操作。
# 如果是“-o”上下打开两个文件,可以通过先按“ctrl+w”, 再按“上下箭头”的方式在两个文件之间切换。
# 如果是“-O”左右打开两个文件,可以通过先按“ctrl+w”,再按“左右箭头”的方式在两个文 件之间切换。
查找
/查找内容
# 从光标所在行向下查找
?查找内容
# 从光标所在行向上搜索
n 下一个
N 上一个
替换
:1,10s/old/new/g
# 替换 1 到 10 行的所有 old 为 new
:%s/old/new/g
# 替换整个文件的 old 为 new 替换字符串
:1,10s/^/#/g
## 注释 1 到 10 行 #不同语言注释不一样。
:1,10s/^#//g
# 取消注释
:1,10s/^/\/\//g
## 1 到 10 行,行首加入//
#因为/在vim命令中有特殊含义,所以要用反斜杠\进行转义
:1,10s/^\/\///g
# 取消 1 到 10 行行首的//
十一.软件包安装
1.软件包分类
软件包选择建议:
源码包:如果服务是给大量客户端提供访问的,建议使用源码包,源码包效率更高(LAMP)
RPM包:如果程序是给少量用户访问,或者本地使用的,建议RPM包,因为RPM包管理方便
rpm包是光盘中直接包含的,所以不需要用户单独安装下载;而源码包是通过官方网站下载的,如果需要使用,是需要单独下载的。
2.源码包
1)源码包什么样
直接由编程语言写成,没经过编译。类似于java的 .calss 文件,c的 .c文件。
~]# vim hello.c
#include <stdio.h> int main (void) {
? printf ("hello world\n");
}
?
~]# gcc -c hello.c
# - c 生成“ .o ”头文件。这里会生成 hello.o 头文件,但是不会生成执行文件
?
~]# gcc -o hello hello.o
# - o 生成执行文件,并制定执行文件名。这里生成的 hello 就是可执行文件
?
~]# ./hello
hello world
# 执行 hello 文件
2)源码包特点
源码包的优点:
源码包有缺点:
3.二进制包
1)二进制包分类
DPKG 包:
是由 Debian Linux 所开发出来的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理。主要应用在 Debian 和 unbuntu 中。
RPM 包:
是由 Red Hat 公司所开发的包管理系统。功能强大,安装、升级、查询和卸载 都非常简单和方便。目前很多 Linux 都在使用这种包管理方式,包括 Fedora、CentOS、 SuSE 等。
特点
RPM 包的优点:
缺点:
RPM包依赖
1)树形依赖 a---->b---->c
2)环形依赖 a---->b---->c---->a 以上两种情况,我们可以用命令一次将所需要的软件包全部安装,就不需要考虑依赖性问题。
3)函数库依赖 :a软件包依赖与另外软件包中的函数库或者模块,我们需要找到该模块或者该函数库对应的软件包。
可通过该网站查询Rpmfind mirror
2)RPM包的基本用法
1)rpm安装
1)rpm包的概述
? RedHat Package Manager
由红帽公司提出,RedHat、SUSE等系列采用
建立集中数据库,记录软件包安装/卸载等变化信息,分析软件包依赖关系
2)rpm包命名规则
~]# httpd-2.2.15-15.el6.centos.1.i686.rpm
#httpd 软件包名
#2.2.15 软件版本
#15 软件发布的次数
#el6 软件发行商。el6 是 RedHat 公司发布,适合 RHEL6.x(Red Hat Enterprise Linux)和 CentOS6.x 下使用 i686 适合的硬件平台。RPM 包可以在不同的硬件平台安装,选择适合不同 CPU 的软件版本,可以最大化的发挥 CPU 性能,所以出现了所谓的 i386(386 以上计算机都可以安装)、i586(586 以上的计算机都可以安装)、i686(奔腾 II 以上计算机都可以安装,目前所有的 CPU 都是 奔腾 II 以上,所以这个软件版本居多)、x86_64(64 位 CPU 可以安装)和 noarch(没有硬 件限制)等文件名了。
#rpm 包的扩展名 Linux 下文件不是靠扩展名区分文件类型,也就是 Linux 中扩展 名没有任何含义。可是这里怎么又出现了扩展名呢?原因很简单,如果我不把 RPM 的扩展名 叫做“.rpm”,管理员很难知道这是一个 RPM 包,当然也就无法正确安装了。也就是说如果 RPM 包不用“.rpm”作为扩展名,系统可以正确识别没有问题,可是管理员很难识别这是个什么样的软件。
包全名:如果操作的是未安装软件包,则使用包全名,而且需要注意绝对路径 包名:如果操作的是已经安装的软件包,则使用包名即可,系统会生产 RPM 包的数据库(/var/lib/rpm/)。
3)rpm包手工命令安装
默认安装位置
目录 | 作用 |
---|
/etc/,/etc/软件名/ | 配置文件目录 | /usr/sbin/,/sbin, /usr/bin/ | 可执行命令目录 | /usr/lib/ | 程序使用的函数库保存位置 | /usr/share/doc/ | 软件基本使用手册保存位置 | /usr/lib/,/usr/share/man | 程序文档,帮助文档保存位置 |
4)安装命令
rpm –ivh 包全名 # 注意一定是包全名。如果跟包全名的命令 要注意路径,因为软件包在光盘当中。
选项: ?
-i ? # install 安装(install) ?
-v ? # 显示更详细的信息(verbose) ?
-h ? # 打印#显示安装进度(hash)
--nodeps ?# 不检测依赖性安装。软件时会检测依赖性,确定所需的底层软件是否安装。 如果没有安装则会报错。不管依赖性,强行安装。这样不检测依赖性安装的软件基本是不能使用的,所以不建议这样做。
--replacefiles # 替换文件安装。如果安装软件包,可是包中部分文件已经存在,那么 正常安装时候,会报错“某个文件已经存在”从而导致软件无法安装,使用这个选项可 以忽视这个报错,而覆盖安装。
--replacepkgs # 替换软件包安装。如果软件包已经安装,此选项可以把软件包重复安装一遍。
--force ?# 强制安装。不管是否已经安装,都重新安装。就是—replacefiles 和 —replacepkgs 的综合。
--test # 测试安装。不会实际安装,只是检测一下依赖性。
--prefix # 指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。注意: 如果指定了安装路径,软件没有安装到系统默认路径中的话,系统会找不到这些安装的软件,需要进行手工配置才能被系统识别。所以 rpm 包我们一般都采用默认路径安装。源码包则必须指定安装目录
5)服务启动
# 第一种启动方式
~]# service 服务名 start|stop|restart|status
参数: ?
start: ? 启动服务 ?
stop: ? 停止服务
restart: 重启服务
status: 服务状态
?
# 第二种启动方式如httpd(标准启动方式)
~]# /etc/rc.d/init.d/httpd start|stop|restart|status
2)RPM 包升级
~]# rpm –Uvh 包全名
选项: ?
-U(大写) 升级安装,如果没有安装过,系统直接安装。如果安装过的版本较旧,则升级到新版本(upgrade)
?
~]# rpm –Fvh 包全名
选项:
-F(大写) 升级安装,如果没有安装过,则不会安装。必须安装有较旧版本,才能升级(freshen)
?
3)卸载
~]# rpm -e 包名
选项:
--nodeps 不检查依赖性 ?
-e ? 卸载
注:卸载也是有依赖的
4)查询
1)查询软件包是否安装 可以查询软件包是否安装
~]# rpm –q 包名
选项: ?
-q: 查询(query)
2)查询系统中的所有安装软件包 可以查询 Linux 系统中所有已经安装的软件包
~]# rpm -qa ?
选项: ?
-a:所有(all)
3)查询软件包的详细信息 可以查询已经安装的某个软件包的详细信息
~]# rpm –qi 包名
选项:
-i: 查询软件信息(information)
查询还没有安装的软件包的详细信
~]# rpm –qip 包全名
选项:
-p: 查询没有安装的软件包(package)
4)查询软件包中的文件列表 可以查询已经安装的软件包中的文件列表和安装的完整目录
~]# rpm –ql 包名
选项:
-l: 列出软件包中所有的文件列表和软件所安装的目录(list)
查询还没有安装的软件包中的文件列表和打算安装的位置
~]# rpm –qlp 包全名
选项:
-p: 查询没有安装的软件包信息(package)
5)查询系统文件属于哪个 RPM 包
~]# rpm –qf 系统文件名
选项:
-f: 查询系统文件属于哪个软件包(file)
6)查询软件包所依赖的软件包 查询系统中和已经安装的软件包有依赖关系的软件包
~]# rpm –qR 包名
选项:
-R: 查询软件包的依赖性(requires)
可以查询没有安装的软件包的依赖性吗?加“-p”选项即可。例如,查看一下还没有安装的 httpd 软件包的依赖包,可以执行如下命令:
[root@localhost ~]# rpm -qpR /mnt/cdrom/Packages/httpd-2.2.15-53.el6.centos.x86_64
5)验证
1)基本命令
~]# rpm –Va
选项:
-Va 校验本机已经安装的所有软件包
~]# rpm –V 已安装的包名
选项:
-V 校验指定 RPM 包中的文件(verify)
~]# rpm –Vf 系统文件名
选项:
-Vf 校验某个系统文件是否被修改
2)验证举例
~]# rpm -V httpd
S.5....T. c /etc/httpd/conf/httpd.conf
# 有输出说明改变了,反之没改变
验证内容 文件类型 最后是文件名。
那么验证内容中的 8 个信息的具体内容 如下:
S 文件大小是否改变
M 文件的类型或文件的权限(rwx)是否被改变
5 文件 MD5 校验和是否改变(可以看成文件内容是否改变)
D 设备的主从代码是否改变
L 文件路径是否改变
U 文件的属主(所有者)是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变
apache 配置文件的文件类型是 c,那么还有哪些文件类型呢?
c 配置文件(config file)
d 普通文档(documentation)
g “鬼”文件(ghost file),很少见,就是该文件不应该被这个 RPM 包
l 授权文件(license file)
r 描述文件(read me)
6)数字证书
上面的校验方法只能对已经安装的 RPM 包中的文件进行校验,但是如果 RPM 包本身就被动过手脚, 那么校验就不能解决问题了。 我们就必须使用数字证书验证了。首先必须找到原厂的公钥文件,然后进行安装 ,再安装 RPM 包是。 用rpm命令安装软件时会去提取 RPM 包中的证书信息,然后和本机安装的原厂证书进行验证,如果验证通过,则允许安装;如果验证不通过,则不允许安装并警告。 1)数字证书位置
~]# ll /mnt/cdrom/RPM-GPG-KEY-CentOS-6
-r--r--r-- 2 root root 1706 11月 27 2013 /mnt/cdrom/RPM-GPG-KEY-CentOS-6
2)数字证书导入
~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
选项:
--import 导入数字证书
#查询已经安装的证书
~]# rpm -qa | grep gpg-pubkey
gpg-pubkey-c105b9de-4e0fd3a3
7)RPM包中文件的提取
有时候我们会将某些软件的文件误删,所以我们可以通过命令提取特定文件。 1)使用命令 rpm2cpio+ cpio
~]# rpm2cpio 包全名 | cpio -iduv .文件绝对路径
rpm2cpio 将 rpm 包转换为 cpio 格式的命令
cpio 是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
cpio还原时,命令解释。
-i:copy-in 模式,还原
-v:显示还原过程
-c:使用较新的 portable format 存储方式
-d:还原时自动新建目录
-u:自动使用较新的文件覆盖较旧的文件
2)示例、假如我们不小心 将位于 /bin/find 删掉了。我们可以通过以下步骤恢复
# 先查出该命令对应的软件包名
~]# rpm -qf /bin/find
findutils-4.4.2-9.el6.x86_64
# 提取文件到当前文件下
~]# rpm2cpio /mnt/cdrom/Packages/findutils-4.4.2-9.el6.x86_64.rpm | cpio -iduv ./bin/find
# 将find命令移动到/bin目录下
[root@love2 ~]# mv bin/find /bin/
3)rpm包在线安装(yum安装)
1)yum源文件解析
yum 源配置文件保存在/etc/yum.repos.d/目录中,文件的扩展名一定是“.repo”。也就是说, yum 源配置文件只要扩展名是“.repo”就会生效。
~]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Epel.repo epel.repo epel-testing.repo offline-yum.repo
# 网络yum可以直接用,但光盘yum源,要将.repo结尾的文件移动了一下。
[base]
name=Qcloud centos extras - $basearch
gpgcheck=1
gpgkey=http://mirrors.tencentyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=1
baseurl=http://mirrors.tencentyun.com/centos/$releasever/extras/$basearch/
[base]:容器名称,一定要放在[]中
name:容器说明,可以自己随便写。
mirrorlist:镜像站点,这个可以注释掉。
baseurl:我们的 yum 源服务器的地址。默认是 CentOS 官方的 yum 源服务器,是可以使用的。 如果你觉得慢,则可以改成你喜欢的 yum 源地址。
enabled:此容器是否生效,如果不写或写成 enabled=1 则表示此容器生效,写成 enabled=0 则表示此容器不生效。
gpgcheck:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效
gpgkey:数字证书的公钥文件保存位置。不用修改。
2)搭建本地光盘yum源
第一步:放入 CentOS 安装光盘,并挂载光盘到指定位置
~]# mkdir /mnt/cdrom # 创建 cdrom 目录,作为光盘的挂载点
~]# mount /dev/sr0 /mnt/cdrom/ #挂载
第二步:修改其他几个 yum 源配置文件的扩展名,让它们失效,因为只有扩展名是“*.repo”的 文件才能作为 yum 源配置文件。当然你也可以将不需要的移动到另外的目录。
第三步:修改光盘 yum 源配置文件 CentOS-Media.repo,参照以下方法修改:
~]# vim CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom/
# file:///media/cdrom/
# file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
第四步 清除原先yum缓存,并且建立新的缓存
yum clean all && yum makecache
3)网络yum
~]# vim /etc/yum.repo.d/other.repo
[other]
name=liunx
baseurl=http://192.168.4.7/other/
enabled=1
gpgcheck=0
# 在清除缓存,重新刷新
~]# yum clean all
~]# yum repolist
4)自定义yum
# 去官网下载安装包(rpm)同一放到一个目录下
~]# reaterepo '此目录下的包' # 生成仓库清单文件
# 创建yum文件
~]# vim /etc/yum.repos.d/mydvd.repo
[rpm] # 唯一标识
name=myrpm
baseurl=file:///tools/other # 指定Yum仓库的路径
enabled=1
gpgcheck=0
5)开机自启
~]# vim /etc/fstab
挂载设备 挂载点 格式( blkid 看) 参数 0 0
# 作用:自动解决依赖关系安装软件
# 服务:为客户端自动解决依赖关系安
# 装软件
# 服务端 (本机):仓库数据文件清单:(repodat)
# 软件包文件:Packages
4.yum命令
1)查询
# 查询 yum 源服务器上所有可安装的软件包列表
~]# yum list
# 查询 yum 源服务器中是否包含某个软件包。
~]# yum list bind
已加载插件:fastestmirror, security
Loading mirror speeds from cached hostfile
可安装的软件包
bind.x86_64 32:9.8.2-0.47.rc1.el6 c6-media
# 搜索 yum 源服务器上所有和关键字相关的软件包
~]# yum search apache #搜索包含有apache关键字软件包
已加载插件:fastestmirror, security
Loading mirror speeds from cached hostfile
======================================================== N/S Matched: apache ========================================================
ant-apache-bcel.x86_64 : Optional apache bcel tasks for ant
ant-apache-bsf.x86_64 : Optional apache bsf tasks for ant
# 查询指定软件包的信息
~]# yum info bind
已加载插件:fastestmirror, security
Loading mirror speeds from cached hostfile
可安装的软件包
Name : bind
Arch : x86_64
Epoch : 32
Version : 9.8.2
Release : 0.47.rc1.el6
Size : 4.0 M
Repo : c6-media
...
2)安装
~]# yum -y install 包名
选项:
install 安装
-y 自动回答 yes。如果不加-y,那么每个安装的软件都需要手工回答 yes
3)升级
~]# yum -y update 包名
# 升级指定的软件包
选项: update: 升级
-y: 自动回答 yes
~]# yum -y update
# 升级本机所有软件包
4)卸载
~]# yum remove 包名
# 卸载指定的软件包
5)yum组管理命令
1)查询可以安装的软件组
~]# yum grouplist
# 列出所有可用的软件组列表
2)查询软件组内包含的软件
~]# yum groupinfo 软件组名
# 列出软件组中包含的软件
例:
~]# yum groupinfo Emacs
已加载插件:fastestmirror, security
设置组进程
Loading mirror speeds from cached hostfile
组:Emacs
描述:GNU Emacs 可扩展、可自定义的文本编辑器。
必要的软件包:
emacs
可选的软件包:
ctags-etags
emacs-auctex
emacs-gnuplot
emacs-nox
3)安装软件组
~]# yum groupinstall 软件组名
# 安装指定软件组,组名可以由 grouplist 查询出来
4)移除软件组
~]# yum groupremove 软件组名
# 卸载指定软件组
4.源码包的安装与管理。
1)软件包的选择
-
如果软件包是给大量客户提供访问,建议使用源码包安装,如LAMP环境搭建,因为源码包效率更高。 -
如果软件包是给Linux底层使用,或只给少量客户访问,建议使用rpm包安装,因为rpm包简单。 -
在如今硬件水平的不断提高,这两种软件包安装的效果差距越来越小,还是看自己的选择,追求速度的话可以选择rpm包,更多的功能和扩展可以选择源码包安装。
2)安装过程
(1)下载软件包。 (2)解压缩。 (3)进入解压目录。 (4)./configure 编译前准备 这一步主要有三个作用:
-
在安装之前需要检测系统环境是否符合安装要求。 -
定义需要的功能选项。“./configure”支持的功能选项较多,可以执行“./configure --help” 命令查询其支持的功能。一般都会通过“./configure --prefix=安装路径”来指定安装路径。 -
把系统环境的检测结果和定义好的功能选项写入 Makefile 文件,后续的编译和安装需要依赖这个文件的内容。 需要注意的是,configure 不是系统命令,而是源码包软件自带的一个脚本程序,所以必须采用 “./configure”方式执行(“./”代表在当前目录下)。
(5)make 编译
make 会调用 gcc 编译器,并读取 Makefile 文件中的信息进行系统软件编译。编译的目的就是把 源码程序转变为能被 Linux 识别的可执行文件,这些可执行文件保存在当前目录下。编译过程较为耗时,需要有足够的耐心。 (6)make clean:清空编译内容(非必需步骤)。
如果在“./configure”或“make”编译中报错,那么我们在重新执行命令前一定要记得执行 make clean 命令,它会清空 Makefile 文件或编译产生的“.o”头文件。 (7)make install: 编译安装
这才是真正的安装过程,一般会写清楚程序的安装位置。如果忘记指定安装目录,则可以把这个 命令的执行过程保存下来,以备将来删除使用。
3)删除
源码包没有删除命令,如果需要删除,直接删除安装目录即可
4)打补丁
我们可以拿已经修改改过的文件与未修改过的文件进行比较,生成补丁文件,如果不小心误删除文件,可以使用补丁文件进行恢复。
diff命令介绍
~]# diff 选项 old new # 比较 old 和 new 文件的不同
选项:
-a 将任何文档当做文本文档处理
-b 忽略空格造成的不同
-B 忽略空白行造成的不同
-I 忽略大小写造成的不同
-N 当比较两个目录时,如果某个文件只在一个目录中,则在另一个目录中视作空文件
-r 当比较目录时,递归比较子目录
-u 使用同一的输出格式
举例:
#创建测试目录
~]# mkdir /test
#生成两个文件,new.txt 比 old.txt 多一行内容。
~]# echo "123" > old.txt
~]# cat old.txt > new.txt
~]# echo "456" >> new.txt
#使用diff命令生成补丁文件
~]# diff -auNr old.txt new.txt > txt.patch
#查看txt.patch,如下
~]# cat txt.patch
--- old.txt 2019-11-30 09:40:57.191124425 +0800
+++ new.txt 2019-11-30 09:41:11.814004591 +0800
@@ -1 +1,2 @@
123
+456
此时我们已经生成了补丁文件,若假如我们不小心删除了new.txt文件,我们可以用patch命令恢复,由于我们使用的是相对路径生成的补丁文件,所以我们需要在刚才的test目录下执行patch命令。
#切换目录
~]# cd /text
#打补丁,此时将old.txt文件内容恢复到与new.txt一样
~]# patch -pn < txt.patch
选项:
-pn n为数字。代表按照补丁中的路径,指定更新问件路径
#查看old.txt内容
~]# cat old.txt
123
456
5.脚本安装程序
1.Webmin 简介
Webmin是目前功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器 访问Webmin的各种管理功能并完成相应的管理动作。目前Webmin支持绝大多数的Unix系统,这些系统除了各种版本的linux以为还包 括:AIX、HPUX、Solaris、Unixware、Irix和FreeBSD等。
Webmin 让您能够在远程使用支持 HTTPS (SSL 上的 HTTP)协议的 Web 浏览器通过 Web 界面管理您的主机。这在保证了安全性的前提下提供了简单深入的远程管理。这使得 Webmin 对系统管理员非常理想,因为所有主流平台都有满足甚至超出上述需求的 Web 浏览器。而且,Webmin 有其自己的“Web 服务器”,因此不需要运行第三方软件(比如 Web服务器)。万事具备。Webmin 的模块化架构允许您在需要时编写您自己的配置模块
2.下载Webmin的安装文件,
命令是:
~]# wget http://prdownloads.sourceforge.net/webadmin/webmin-1.670.tar.gz
到官网下载也可,我喜欢用wget命令来下载。
3.解压缩文件,命令是:
~]# tar -zxvf webmin-1.670.tar.gz
4.进入webmin的解压缩目录,然后运行setup.sh,命令为:
~]# ./setup.sh
5.一路回车即可安装完成,
最后有一个地方需要设置用户名和密码的地方,用户名默认是admin,可以自己修改,下面的密码一定要输入自己容易记忆的密码。
详细操作如下:
Config file directory[/etc/webmin]: 回车 //直接回车表示选择默认安装路径,
也可下其它路径,然后接回车键
Log file directory[/var/webmin]: 回车 //同上,表示日志文件夹存放路径
Web server port (default 10000):回车 //指定Web访问的端口,默认端口为10000
Login name (default admin)://在这里输入登录用户名,默认是“admin”
Login password: 输入密码
Password again: 再次输入密码
Start Webmin at boot time (y/n):输入”y”
6.等看到安装完成的提示之后,
在浏览器中输入
http://ip:10000 或 http://localhost:10000/ ,
然后回车,如果看到一个登陆界面,就说明webmin已经安装成功了。至此表明,安装在Linux系统下的Webmin可以正常工作了。
正确输入用户名及口令(默认只有root账号可以登陆),就可以对系统管理了。
7.刚安装时是英文界面,登录webmin系统后,
依次打开
Webmin →Webmin Configuration →Language,在 Display in Language处选择Simplified Chinese (ZH_CN),
然后再点击”Change Language”重新进入webmin系统时就会显示中文了。
十二.用户的管理
1.用户相关文件
1)用户信息文件
/etc/passwd
注:系统以ID号来识别用户的
root:x:0:0:root:/root:/bin/bash ? ? ?
第一列: 用户名 第二列: 密码位(标记) 第三列: 用户 ID
-
0 超级用户 UID。如果用户 UID 为 0,代表这个账号是管理员账号。那 Linux 中 如何把普通用户升级成为管理员呢?就是把其他用户的 UID 修改为 0 就可以了。 -
1-499 系统用户(伪用户)UID。这些 UID 账号是系统保留给系统用户的 UID,也就是 说 UID 是 1-499 范围内的用户是不能登录系统的,而是用来运行系统或服务的。其中 1-99 是系统保留的账号,系统自动创建。100-499 是预留给用户创建系统账号的。 -
500-65535 普通用户 UID。建立的普通用户 UID 从 500 开始,最大到 65535。这些用户足够使用了,但是如果不够也不用害怕,2.6.x 内核以后的 Linux 系统用户 UID 已经 可以支持 2^32这么多了。
第四列:组 ID GID 添加用户时,如果不指定用户所属的初始组,那么会建立和用户名相同的组 第五列: 用户说明 第六列: 用户家目录 ~ 第七列: 登录 shell /bin/bash
注:默认用户(系统用户)不能删除,删除责对应服务起不来
2) 密码文件
/etc/shadow
root(1):$1$KhnBfFyK$0G/sKHf50fT9fEHA9zr2f0(2):(3):0(4):99999(5):7(6):(7):(8):(9)
第一列: 用户名
第二列: 加密密码 我们也可以在密码前人为的加入“!”或“*”改变加密值让密码暂时失效,使这个用户无法登陆,达到暂时禁止用户登录的效果。
注意:所有伪用户的密码都是“!!”或“*”,代表没有密码是不能登录的。当然我新创建的用户如果不设定密码,它的密码项也是“!!”,代表这个用户没有密码,不能登录。
第三列: 密码最近更改时间, 从1970 年 1 月 1 日算起,按天来算,我的为空,代表创建后就没改过密码。
# 日期转换成时间戳
~]# echo $(( $(date --date="2022-01-01" +%s)/86400+1 ))
18993
?
# 时间戳转换成日期
~]# date -d "1970-01-01 18993 days"
第四列: 两次密码的修改间隔时间,为0代表没有限制。(和第 3 字段相比)
第五例: 密码有效期(和第 3 字段相比)
第六列: 密码修改到期前的警告天数(和第 5 字段相比)
第七列: 密码过期后的宽限天数(和第 5 字段相比)
第八列: 密码失效时间,这里同样要写时间戳,也就是用 1970 年 1 月 1 日进行时间换算。如果超过了失效时间,就算密码没有过期,用户也就失效无法使用了
第九列: 保留
3)组信息文件
/etc/group
root:x:0:root
第一列: 组名
第二列: 组密码位(不建议添加密码)
第三列: GID
第四列: 此组中支持的其他用户.附加组是此组的用户
4)组密码文件
/etc/gshadow
如果我给用户组设定了组管理员,并给该用户组设定了组密码,组密码就保存在这个文件当中。 组管理员就可以利用这个密码管理这个用户组了。
5)用户的家目录
root用户家目录为 /root
普通用户家目录为 /home/用户名
6)用户邮箱目录
这个邮箱在/var/spool/mail 目录当中,
例如 user1 用户的邮箱就是/var/spool/mail/user1 文 件
7)用户模板目录
/etc/skel/,创建新用户时,用户家目录内容跟该文件夹内容一致。
~]# ~/.bash_profile
# 每次登录系统时执行,定义初始变量值
?
~]# ~/.bashrc
# 每次进入新的Bash环境时执行(开启新的终端)
?
~]# /root/.bashrc
# 定义当前永久别名
?
~]# /etc/bashrc
# 全局配置文件,影响全体用户(开启新的终端)
2.用户管理命令
原则:Linux一个用户必须至少属于一个组
唯一标识:UID(编号从0开始的编号,默认最大60000)管理员root的UID:永远为0;普通用户的UID:默认从1000开始
1 )添加用户
手工删除用户
手工删除用户试验:手工删除,如果可以正常建立用户,证明用户删除干净。
# 创建一个用户会在一下文件中生成信息
# /etc/passwd (用户) ? ?
# /etc/shadow (用户密码) ?
#/etc/group ? (组)
#/etc/gshadow (组密码) ?
#/home/ ? ? ? (用户家目录) /var/spool/mail/ (用户邮箱)
# 创建用户
~]# useradd ceshi
?
# 查看文件中的用户信息
~]#grep ceshi /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:ceshi:x:1000:1000::/home/ceshi:/bin/bash
/etc/shadow:ceshi:!!:18993:0:99999:7:::
/etc/group:ceshi:x:1000:
/etc/gshadow:ceshi:!::
~]# ls /home/ /var/spool/mail/
/home/:
ceshi
?
/var/spool/mail/:
ceshi
?
# 删除文件中的用户信息与家目录,和邮件文件
~]# vim -O /etc/passwd /etc/shadow /etc/group /etc/gshadow
dd 删除ceshi
:wq! 强制保存退出
~]# rm -rf /home/ceshi /var/spool/mail/ceshi
?
# 测试是否删除(或useradd直接创建成功则成功)
~]# su - ceshi
su: user ceshi does not exist
useradd 命令
~]# useradd 选项 用户名
选项:
-u 550 指定 UID
-g 组名 指定初始组 不要手工指定
-G 组名 指定附加组,把当前用户添加到某一个用户的附加组中。
-c 说明 添加说明
-d 目录 手工指定家目录,目录不需要事先建立
-s 指定shell,如 -s /bin/bash
?
# 直接创建用户
~]# useradd ceshi
# 注:如果时伪用户则不需要创建密码,反之则需创建密码才能登录
useradd 默认值
useradd 添加用户时参考的默认值文件主要有两个,分别是/etc/default/useradd 和 /etc/login.defs
1)/etc/default/useradd文件
~]# vim /etc/default/useradd
# useradd defaults file
GROUP=100 #这个选项是建立用户的默认组,也就是说添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。
HOME=/home #用户家目录
INACTIVE=-1 #这个选项就是密码过期后的宽限天数,也就是/etc/shadow 文件的第七个字段。如果是天数,比 如 10 代表密码过期后 10 天后失效;如果是 0,代表密码过期后立即失效;如果是-1,则代表密码永远不会失效。
EXPIRE= #这个选项是密码失效时间,也就是/etc/shadow 文件的第八个字段。也就说用户到达这个日期后 就会直接失效。当然这里也是使用时间戳来表示日期的。默认值是空,所以所有新建用户没有失效时间,永久有效。
SHELL=/bin/bash # 用户启动程序
SKEL=/etc/skel # 用户模板位置
CREATE_MAIL_SPOOL=yes #默认创建邮箱
2)/etc/login.defs
# 这个文件有些注释,把注释 删除掉,文件内容就变成下面这个样子了
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7
# 密码最长有效期 最小有效期 最小长度 最大长度
UID_MIN 500 UID_MAX 60000
# 普通最小用户id 普通最大用户id
GID_MIN 500 GID_MAX 60000
#普通最小组id 普通最大组id
CREATE_HOME yes
# 是否自动创建用户家目录
UMASK 077
# 这行指定的是建立的用户家目录的默认权限
USERGROUPS_ENAB yes
# 这行指定的是使用命令 userdel 删除用户时,是否删除用户的初始组,默认是删除
ENCRYPT_METHOD SHA512
# 密码加密方式
2)设定密码
passwd命令
设置密码与修改自身密码一致
注:root可以修改任意用户的密码,而其他用户只能修改自己的
# 直接执行passwd,再输入两次密码就行。两次密码必须一致(#交互式设置)
~]# useradd ceshi
~]# passwd ceshi
Changing password for user ceshi.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
-l :锁定用户,仅root用户可用
-u :解锁,仅root用户可用
--stdin: 可以管道符输出的数据作为用户的密码,主要在批量用户是使用
# 示例
~]# ]# passwd -l ceshi
Locking password for user ceshi.
passwd: Success
# 与直接进入配置文件修改一致
~]# cat /etc/shadow
....
ceshi:!!$1$4Y4TYBX6$BXdlIkv0lZCAGXhwsNOh71:18994:0:99999:7:::
~]# echo "123" | passwd --stdin ceshi
Changing password for user ceshi.
passwd: all authentication tokens updated successfully.
# 用户登录即修改密码
~]# chage -d 0 lamp
# 把密码修改日期归零(shadow第3字段)
3 用户信息修改命令
~]#usermod [选项] 用户名
选项:
-u UID: 修改用户的 UID
-d 家目录: 修改用户的家目录。家目录必须写绝对路径
-c 用户说明: 修改用户的说明信息,就是/etc/passwd 文件的第五个字段
-g 组名: 修改用户的初始组,就是/etc/passwd 文件的第四个字段
-G 组名: 修改用户的附加组,其实就是把用户加入其他用户组
-s shell: 修改用户的登录 Shell。默认是/bin/bash
-e 日期: 修改用户的失效日期,格式为“YYYY-MM-DD”。/etc/passwd文件的第八个字段
-L: 临时锁定用户(Lock)
-U: 解锁用户(Unlock)
-l: 改名 格式 usermod -l newname oldname
~]# usermod -l 新名 旧名
# 注:linux不建议修改用户名,建议删除用户在创建用户,因为用户修改了但组名及等一些配置是不会改的,及容易把自己绕晕
4 删除用户
~]# userdel [-r] 用户名
选项:
-r: 在删除用户的同时删除用户的家目录
# 注:不加-r则不会删除家目录文件
5 切换用户身份与查看用户
~]# su [选项] 用户名
选项:
-: 选项只使用“-”代表连带用户的环境变量一起切换
-c 命令: 仅执行一次命令,而不切换用户身份
# 查看是否存在该用户
~]# id 用户
# 查看当前用户
~]# whoami
6.组管理命令
作用:方便管理用户
唯一标识:GID(编号从0开始的编号,默认最大60000)组账户的分类:基本组:系统创建与用户同名附加组(从属组):由管理员创建,由管理员进行加入
1 )添加用户组命令
groupadd
~]# groupadd [选项] 组名
选项:
-g GID: 指定组 ID
2 )删除用户组
groupdel
~]#groupdel 组名
3 )把用户添加进组或从组中删除
gpasswd
~]# gpasswd [选项] 组名
选项:
-a 用户名: 把用户加入组
-d 用户名: 把用户从组中删除
-M: 定义组成员用户列表,可设置多个
-A: 定义组管理员列表(把某个用户加入到某个组里当管理)
# 例如:把用户love2添加到love1组中。与usermod类似记一个就好
~]# gpasswd -a love2 love1
Adding user love2 to group love1
4)改变有效组
newgrp
更改当前用户的有效组
~]# groupadd group1 # 添加组 group1
~]# gpasswd -a user1 group1 # 把 user1 用户加入 group1 组
Adding user user1 to group group1
~]# su – user1 # 切换成 user1 身份
~]$ touch test1 # 创建文件 test1
~]$ ll test1
-rw-rw-r-- 1 user1 user1 0 1 月 14 05:43 test1 #test1 文件的默认属组是 user1 组
~]$ newgrp group1 # 切换 user1 用户的有效组为group1组
~]$ touch test2 # 创建文件 test2
~]$ ll test2
-rw-r--r-- 1 user1 group1 0 1 月 14 05:44 test2
#test2 文件的默认属组是 group1 组
#其实 newgrp 就是切换用户的组身份。
|