安装VMware WorkStation
去官网安装即可,选择与本机相适应的版本。
安装Linux操作系统
选用CentOS 7 版本 64位操作系统,对应的镜像文件可去官网进行下载。
在创建好的虚拟机中,选择获取系统的路径下找到该镜像文件,依据引导完成安装。
将虚拟机空间划分为
boot引导程序区
-
swap交换区
内存 ↔ 交换区
app
用户区
值得注意的是,启动盘sda/的大小可以稍微配置大一些,总的磁盘占用空间也可以稍微配置大一些,这里配置的是100G,200MB分配给启动盘,2G分配给SWAP交换区,将磁盘剩余资源可以分配给根目录区。
配置虚拟机的网络服务
查询实体机的本地网络连接,win10系统中 控制面板-网络和Internet - 网络连接 ,找到当前连上网的连接方式,右击属性可以查看IPv4地址的分配方式。可以动态获取IP,也可以自己指定IP(IP, mask, gateway)
配置虚拟机网络,则要完成
- 找到网卡位置
cd etc/sysconfig/network-scripts/ 来到网络配置脚本路径
ls 查看其中配置文件,使用ls -l 可以查看文件的权限。
例子:
-rwxr-xr-x 1 root root 6444 09-22 15:33 shmwrite
-rw-r--r-- 1 root root 1443 09-22 15:33 shmwrite.c
drwxr-xr-x 2 root root 4096 09-22 17:19 test
第一个符号用 ‘d’和‘-’表示目录还是非目录,之后每三维为一组,分表表示所有者权限,同组用户权限和其他用户权限的读、写和执行的操作权限。
r表示拥有读的权限
w表示拥有写的权限
x表示拥有可执行的权限
-表示没有该权限
修改权限可用chmod命令来修改文件权限。
例如: chmod 754 test
4代表读权限,2代表写权限,1代表执行权限; 7=4 + 2 + 1,表示拥有可读可写可执行权限; 5=4 + 1,表示拥有可读可执行权限,但是没有写权限;0 代表没有任何权限
以此类推,修改文件夹及其子文件夹的权限,-R参数是递归 处理目录下的所有文件以及子文件夹,加入-R 参数,就可以将读写权限传递给子文件夹
例如 chmod -R 777 /home/mypackage
那么mypackage 文件夹和它下面的所有子文件夹的属性都变成了777
如果只修改/home/hi文件夹下的所有文件权限(不包括子文件夹里面的文件),可以
chmod 777 /home/hi/*
如果是只读文件,修改文件权限,则需要切换管理员。
- su
命令从普通用户切换到管理员用户
su [用户名]
管理员用户切换到普通用户
login
使用login命令会退出当前用户,重新进度登录操作界面
vi ifcfg-ens33 使用vi文本编辑器对0号以太网的配置文件ifcfg-ens33进行编辑
修改参数
ONBOOT=YES 启动时应用
BOOTPROTO=STATIC 启动模式 之前是动态主机配置协议,现在改为静态,自己设置IP
IPADDR=
如何确定IPADDR的取值呢?来到VMware Station的编辑-虚拟网络编辑器,搭建虚拟机时,已经选用的是NAT模式。
可以看到子网IP为192.168.111.0 子网掩码 255.255.255.0,前者代表NAT模式下的网络号,末尾为0表示网络号,为255时是局域网广播地址。则目前可用IP从192.168.111.1~192.168.111.254
将目光转向NAT设置,
网关IP是192.168.111.2,该IP已经被网关给占用。
如果勾选了“将主机虚拟适配器连接到此网络”,那么在网络连接中,是可以看到该名称命名的网络连接器的。
进一步查看该设置,可以观察到IP 为192.168.111.1 也被占用了
那么剩余可用IP末位是 3~254
将IP,子网掩码,网关,DNS都设置一下,再保存写入并退出。
之后重启服务 采用命令
service network restart
重启之后使用 ifconfig命令可以查看本虚拟机的网络配置
ping 外网是走得通的,通过配置静态IP实现了网络的链接
- 配置协议
(1)删除网卡物理地址+UUID,客隆是防止多个虚拟机之间有相同的物理地址
(2)IPADDR NETMASK GATEWAY DNS1 DNS2
(3) 重启网络服务 使修改的配置信息生效
(4)测试是否能联通外网
基于虚拟机的快照 客隆多台虚拟机
相当于某一个时间节点的备份,可以回滚到当前快照。
在快照管理中,找到“客隆”,依据指令提示完成后续客隆操作。
选择“创建链接客隆”,确定虚拟机名称和位置。
那么开启客隆的虚拟机,修改其配置,网卡信息的内容,可以依照上一节。
也需要修改主机名:
cd /etc/sysconfig/
vi network
在内修改主机名
为了保证该虚拟机的MAC地址唯一,找到MAC地址有关的配置信息,保存的是MAC地址与网卡的关系
vi /etc/udev/rules.d/70-persistent-net.rules
把这玩意删了,系统会重新生成一个,我们可以尝试一下。
rm -f /etc/udev/rules.d/70-persistent-net.rules
==||
xshell xftp的简单使用
官网下载安装
点开xshell,连接到某一台虚拟机上,使用指令
ssh root@[点分十进制IP]
进行连接,输入root账户对应的密码,就成功连接了。
使用xftp可以进行文件传输。
linux内外部命令
使用bash shell软件操作Linux内核,键入的命令会被根据空格来分割字符串,
把第一个字符看做命令,后一个字符看做参数;
判断命令是内部的还是外部的,内部命令会在内核直接执行;
外部命令则会去寻找外部可执行文件。
Q:使用外部命令会降低使用效率吗?(每次不都会去找外部命令吗?)
A:不会 ,设置环境变量PATH,在PATH内配置的路径中找。
使用指令echo $PATH
,查看该变量包含内容
type [指令]
可以查看指令的类型,是内部指令还是外部指令。
ifconfig
查看网卡配置信息,使用type ifconfig可以发现这是一个外部命令,不含builtin都是外部命令。
cat [文件名]
查看文件内容
file [文件名]
查看文件类型
whereis [指令]
查看某些命令的位置,如type ifconfig
查看命令帮助文档
man [指令]
得到指令的help文档 看外部命令
help [指令]
查看内部指令的帮助文档
bash shell 定义变量
使用echo可以查看变量。
变量直接赋值为数字,字符串。
使用小括号创建数组,元素之间空格相隔,直接调用数组变量返回首个数组元素,使用${array[i]}能够返回第i位元素。
echo $$
返回当前bash shell 的进程号
vim [变量名]
进入文本编辑
hash命令优化查询时间
bash shell 中有一个缓存表,hashTable用于缓存指令所在的位置,下次执行指令操作的时候不用再去扫描PATH路径下的指令包。使用hash -r
可以清空该table
介绍Linux文件系统
以树状形式展示,文件系统层次化标准
/boot
: 系统启动相关的文件,如内核,initrd,以及grud(bootloader)
/dev
: 设备文件
/etc
: 配置文件
/home
: 用户的家目录,每一个用户的家目录通常默认为 /home/username
/root
:管理员的家目录
/lib
: 库文件
/media
: 挂载点目录,移动设备
/mnt
: 挂载点目录,额外的临时文件系统
/opt
: 可选目录,第三方程序的安装目录
/proc
: 伪文件系统,内核映射文件 /proc 路径下可以存放当前运行的线程的文件
/sys
: 伪文件系统,跟硬件设备相关的属性映射文件
/tmp
:临时文件 ,/var/tmp
/var
: 可变化的文件
/bin
:用户命令,是一些可执行文件
/sbin
: 存放管理相关的命令
df -h
命令展示不同的分区信息,不加-h 容量单位是K,加了会适应
du
显示文件系统使用情况,查看其子文件夹占用大小
ls
显示当前目录下的所有文件 ls [完整目录]
后面常接的: -a 查看隐藏目录, -l 显示长列表(也可以直接用ll
)
pwd
查看当前所在位置的完整目录
查看文件的信息
例如
-rw-r--r--. 1 root root 224 Sep 26 2018 !
drw-r--r--. 4 root root 4096 Jul 11 2018 abc
文件类型
-
:普通类型
d
:目录文件
b
:块设备文件(block)
c
:字符设备文件(character)
l
: 符号链接文件(symbolic link file) 类似于window的快捷方式
p
:命令管道文件(pipe)
s
:套接字文件(socket)
文件权限
:9位,每3位一组,每组中的位表示:rwx(读,写,执行),短横表示没有该权限(文件的拥有者(owner) 前3位,文件的从属的组(group) 中间3位,其他人 后3位)
文件硬件连接的次数
该文件的拥有者,所属组的组名
文件大小(size),单位是字节
时间戳:最近一次被修改的时间
文件系统相关的命令
cd ..
返回上一级目录
cd~
返回根目录
mkdir
创建文件夹 父级路径不存在时无法创建路径,但是带上参数 -p则可以。
使用mkdir {x,y,z}tmp 可以在当前路径下创建三个文件路径 xtmp,ytmp和ztmp
cp
拷贝文件 copycp 源全路径名(相对路径名) 目的路径名(可以用一个点表示当前路径)
mv
移动文件 move 也可以自己移动给自己(修改名称)如果要把一个文件路径及其下面的文件和子路径都拷贝到另一个文件夹下,要在cp指令后面直接加上一个-r,表示递归执行后续操作。
rm
删除 remove,后面直接跟上文件名,rm -f 表示强制删除;rm -r -f (rm -rf)可以强制删除一个路径及其下的所有内容ln
建立硬连接 link 使一个文件和另一个连接的文件指向同一个底层文件,他们会有相同的文件id号,相同的连接次数(连了之后加一),修改其中一个,另一个也会受到影响. 使用ll -i
可以查看当前路径下所有文件的连接情况。如果将B连接上A,如果删除一个硬连接A的文件,文件B不会受到影响.修改文件A,文件B会对应受到影响。如果连接的时候使用软连接 ln -s profile 123,那么文件123是通过profile文件指向底层的文件的,如果删除了profile文件,将无法通过访问123文件而访问到底层文件。
stat
查看文件的详细信息
文件名,大小,块数,IO块,访问权限,访问/修改/改变权限的时间
touch
一致时间、创建新文本 摸一下,那么该文件的三个时间戳都会变成当前文件。可以指定增量文件的时间。touch也可以创建新文件文本相关的命令
cat
查看文件的内容 cat [文件名],可以连接多个文件,以标准的文件形式打印出来,一屏幕无法显示时需要滚动显示
more
可以做文件的分页显示,但是要回看还是要用滑轮。这个可以做大文件的查看。
less
查看文件 空格下一页 按b上一页 回车下一行,说明把文件读出来放置在内存中再查看的。
head -5
加文件名,可以查看该文件的前5行
tail -5 /profile.bak
查看profile.bak的最后5行内容,不写参数则是默认后10行
使用man tail 可以看后面所解的描述符,接用-f 时可以实时显示出该文件的增量数据,可以查看服务器运行状态。
管道
一个竖杠 | ,左边的内容以输出流的形式传递给右边的输入流来接收。
xargs
从标准输入建立和执行命令行echo "/" | ls -l
本来是想打印跟目录下的所有信息,但是ls -l无法接受“/”这一输出流的指令,所以显示的是当前目录信息。但是用了echo "/" | xargs ls -l
就可以组合使用
head -8 qwer | tail -1
把该文件的前8行传给输出,但只输出最后一行,相当于输出了该文件的第8行。
文本编辑器 vi
使用指令vi 文件名
, 以编辑模式进入该文件并查看内容,光标默认处于行首。
编辑模式
vi +10 profile.bak
光标会出现在第10行,可以定位到某一行,只写加号会定位到行末尾。
字符:
使用j和k可以进行上下移动,h和l可以进行左右移动。
单词:
使用w可以到下一个单词的首字母,b可以回退到上一个单词的首字母,e会跳到下一个单词的词尾。
行内:
按下0,光标可以到该行的第一个字符,绝对行首。
按下shift + ^,会跳到首个非空格字符。
按下 shift + $,会处于该行的行尾。
行间:
G: 文章末尾
3G:第3行
gg:文章开头
翻页:
ctrl + f ,下一页,ctrl + b,上一页。
删除&替换单个字符
x : 删除光标位置字符
3x:删除光标开始3个字符
r+替换字符: 替换光标位置字符
删除命令
dd: 删除一行
dw:删除一个单词
复制粘贴
在想要复制的单词处,按下yw,在需要粘贴处按下p,则会将原单词粘贴至目标处。
按下yy则是复制光标所在行,再按下p则是复制一行。大写p实在光标下复制一行,小写p在光标上复制一行。
撤销
按下u,表示对上一步操作的撤销。
按下ctrl + r,把撤销的动作恢复了。
按下一个点( . ),重复上一步的操作。
输入模式
在编辑模式下,按下i这个键,表示Insert,也可以用a键,表示在当前光标之后的位置处进入输入模式,i则表示在光标前。
小写的o表示在当前光标所在行的下一行,大写O表示下方,A表示行尾。
按下esc从输入模式退回编辑模式。
末行模式
回到编辑模式之后,按冒号 ( :)来到末行模式。
:w write 写入,表示保存
:q quit 表示直接退出
:q! 不保存并退出
:wq 保存并退出 可以使用 shift + zz 一样强行保存并退出
:w! 强制保存
set nu :显示每一行的行号,等同于 set number,去掉行号,set nonumber(set nonu)
set readonly :将文件设置为只读模式,进入保护状态
查找,使用 :/+查找内容
,n N表示向下查找还是向上查找。如果用的是问号 :?+查找内容
,表示向上查找,那么n 和 N的方向就相反了。
使用感叹号,可以执行命令,比如ll -l
,再按一次回车就返回编辑模式。
s查找并替换
/:[查找字串]/[替换字串] 关键字(g i) 这个正斜杠就是分割用,也可以使用#和@来替代
g: 表示一行内,全部替换(gloable)
i:忽略大小写,ignoreUpperLowerCase
范围的约束
n: 行号
. : 当前光标
+n : 偏移n行
$ : 末尾行 , ¥-3(表示倒数3行)
%全文
:s/before/after/ (替换光标行处的第一个before为after)
:s/before/after/ g (替换光标行中的全部before为after)
:s/before/after/ gi (替换光标行全部before为after,忽略大小写)
:.,+3s/before/after/ gi (当前行和往下数3行的before全给替换)
:%s/before/after/ gi (全文替换) 等同于 :0,$s/before/after/ gi
删除数据
:0,$d 删除全文数据
:.,+2d 删除前3行数据
:1,3d 删除1~3行数据
:$,-1d 删除倒数两行
:$-1d 删除倒数第二行
复制粘贴
:1,3y 之后再按p 可以把1到3行的内容继续复制
Linux正则表达式简单使用
定义L正则表达是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符以及这些字符的组合,组成一个“规则字符串”。该规则来表达对字符串的一种过滤。
匹配操作符
\ 转义字符
. 匹配任意单个字符
[1249a],[^12],[a-k] [^0-9]非数字 ^[0-9]行首有数字
^ 行首
$ 行尾
<,> : <abc> 单词首位边界
| 连接操作符
(,) 选择操作符
\n 反向引用 表示第几个括号内的规则
重复操作符
? 匹配0到1次
- 匹配0到多次
- 匹配1到多次
{n} 匹配n次
{n,} 匹配n到多次
{n,m} 匹配n到m次
Linux中通过grep命令使用正则表达式来匹配信息
包含3位数字的行:
grep -E "([^0-9][0-9]|^[0-9])0-9" txt
grep "\([^0-9][0-9]\|^[0-9]\)[0-9]\([0-9][^0-9]\|[0-9]$\)" txt
找出hello为单词词首的行
grep "<hello|>" txt
找到‘l’出现2到3次的行
grep "l{2,3}" txt
其他文本处理命令
Cut
显示切割的行数
f:选择显示的列
s:不显示没有分隔符的行
d:自定义分隔符
cut -d ' ' -f1 txt
以空格为分隔符,切割txt文件,并保留第一列
cut -d ' ' -f1,2,3 txt
以空格为分隔符,切割txt文件,并保留第一二三列,也可以写为 cut -d ' ' -f1-3 txt
.
cut -d ' ' -f1-3 -s txt
不会显示没有分隔符的行
Sort
n:按数值排序
r:倒序
t:自定义分隔符
k:选择排序
u:合并相同行
f:忽略大小写
wc 统计单词 wordcount
sed : 行编辑器
sed [options] 'Command' file ...
options:
-n:静默模式,不再默认显示模式空间中的内容
-i:直接修改原文件
-e SCRIPT 可以同时执行多个脚本
-f/PATH/TO/SED SCRIPT
-r:表示使用扩展正则表达式
Command:
d:删除符合条件的行
p:显示符合条件的行
a \string:在 指定的行后面追加新行,内容为string
\n: 可以用于换行
i \string: 在指定的行前面添加新行,内容为String
c : 取代, c的后面可以接字符串
s/pattern/string/修饰符:查找并替换,默认只替换每行中第一次被模式匹配到的字符串
g:行内全局替换
i:忽略大小写
s///Ls###,s@@@
(),\1,\2
文本分析工具awk
awk -F '(pattern + action)' (filenames)
支持自定义分隔符
支持正则表达式
支持自定义变量,数组a[1],a[tom],map(key)
支持内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录
FS 设置输入域分隔符,等价于命令-F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
支持函数
print ,split ,substr,sub,gsub
支持流程控制语句,类C语言
if ,while,do/while,for,break,continue
没懂 ==||
Linux用户与权限
useradd [username]
添加名为useranme的用户
userdel [username]
删除该用户
在/home 路径下会多一个用户,在/var/mail/ 路径下会多一个用户,要删的话也要把这个文件结构给删了。
passwd [username] 为某个用户设置密码
groupadd [组名]
创建一个组
usermod -G
[组名] [用户名] 把用户添加进组
id [用户名]
查看用户id,组id,所加入组织(可能有多个,但是第一个一定是他自己)
chown root:[组名] [组名]
修改文件的访问权限的所有者 管理员权限:组权限
chmod g+w [组名]
给组加上写权限
chmod o-x [组名]
给其他组去除执行权限
u表示属主,创建组的用户(多为管理员) g表示属组,组内成员 o表示其他
su [用户名]
切换用户
sudo
管理员权限工作
Linux软件安装
Redhat 提供了rpm管理体系
是已经编译的软件包,可以针对不同平台系统编译目标软件包
软件包虽然包含了依赖检测,但依然需要做人为检查。
rpm安装,指定安装路径
-ivh --prefix [路径名] [文件名]
rpm卸载
-e PACKAGE_NAME
rpm -qa : 查询已经安装的所有包
rpm -q PACKAGE_NAME:查询指定的包是否已经安装
rpm -qi PACKAGE_NAME:查询指定的包说明信息
rpm -ql PACKAGE_NAME:查询指定的包安装后生成的文件列表
rpm -qc PACKAGE_NAME:查询指定的包安装的配置文件
rpm -qd PACKAGE_NAME:查询指定的包安装的帮助文件
rpm -q --scripts PACKAGE_NAME:查询指定的包中包含的脚本
rpm -qf /path/to/somefile: 查询文件是由哪个rpm包安装生成的