Linux系统以目录管理系统,根目录是/,往下有bin、root、home等文件夹,超级用户的工作目录是/root, 普通用户的一般是/home/用户名 。各种外接设备要依赖目录进行管理,目录采用挂载来管理外接设备。e.g: 插入u盘后,u盘的文件夹挂载在/media文件夹,该文件夹下的u盘文件夹相当于win的快捷方式,只是一个逻辑映射而非物理内存上的映射。
在VMware中安装centos7,测试学习。
学习重点在标*章节,注意在实践中掌握知识点。
执行 vim 文件 后进入一般模式,用于复制、粘贴、删除。
p.s. 大写字母就是 shift+字母
符号 | 意义 |
---|---|
gg / shift + h | 光标移动至文件开头 |
shift + g/l | 光标移动至最后一行的开始 |
数字 + shift + g | 光标移动至第数字行开头 |
$ | 光标移动至行末尾 |
^ | 光标移动至行开头 |
w | 光标移动至下一个词 头 |
e | 光标移动至下一个词尾 |
b | 光标移动至上一个词头 |
u | 撤销 |
x | 剪切光标所指字符 |
shift + x | 删除当前光标前面那个字符 |
r | 改变光标所指字符 |
shift + r | 更改光标以后的所有字符 |
yy | 复制光标所在行 |
p | 粘贴到光标下一行位置 |
dd | 删除 |
组合命令 | 意义 |
---|---|
y + 数字 + y | 复制几行 |
y$ | 复制光标至行尾 |
y^ | 复制行头至光标前一个字符 |
yw | 复制光标至词尾 |
d + 数字 + d | 删除几行 |
d$ | 删除光标至行尾 |
d^ | 删除行头至光标 |
dw | 删除从光标至词尾 |
一般模式按i进入插入模式,esc退出插入模式
符号 | 意义 |
---|---|
i | 常用 光标前插入 |
I | 光标所在行头插入 |
a | 光标后插入 |
A | 光标所在行尾插入 |
o | 常用 光标下面一行 |
O | 光标上前一行插入 |
一般模式 按 : 或 / 进入该模式, esc退出模式
命令 | 意义 |
---|---|
:w | 保存 |
:q | 退出 |
:wq | 保存并退出 |
:q! | 不保存强制退出 |
/词 | 查找词,n下一个,N上一个 |
:范围s/目标/替换/标志 | 在范围内根据标志进行替换。范围:%-全部;n1,n2-行数范围; 无-当前行。s字符。标志:g-全部; i-忽略大小写;没有/标志则替换首个 |
:%d | 删除全部内容 |
:set nu/nonu | 显示/ 隐藏行号 |
:noh | 取消高亮 |
ping ip-address
windows ip address: win+r -> cmd -> ipconfig 查看连接的适配器显示的ip
Linux ip address: 设置->网络->设置 或 终端->ifconfig
1.桥接 虚拟机直接连接外部网络,对外部可见,主机相当于网桥
2.NAT网络地址转换 虚拟机和主机构建一个专用网络,虚拟机可以访问外部网络,对外部不可见
3.仅主机 虚拟机无法和外部通信
虚拟机网络默认DHCP自动分配,每次分配新ip都得ping连通性。虚拟机ip改成静态分配可以减少连通性测试。
首先在windows中: 网络和Internet -> 状态 -> 更改适配器选项 -> VMware Network Adapter VMnet8 -> 状态 -> 详细信息 中查看虚拟机的IPv4。
接着虚拟机终端中: vim /etc/sysconfig/network-scripts/ifcfg-ens33 -> 修改BOOTPROTO=“static” -> 添加 IP、网关、DNS。
IPADDR=192.168.xxx.100
GATEWAY=192.168.xxx.2
DNS1=192.168.xxx.2
p.s. 这里的ip地址根据子网掩码写,最后的100可以写成任意。网关、dns同理。
最后执行 service network restart 重启网络。
在hosts文件中修改。
主机名改为xxx - hostnamectl set-hostname xxx
映射 vim /etc/hosts -> 添加 ip hostname
主机 C:\Windows\System32\drivers\etc的hosts末尾追加虚拟机中的几条映射,此时测试连通性直接ping hostname即可。
ssh username@hostname
首次输入密码后,后续免密登录。缺点是功能少。
工具Xshell,新建会话 -> 设置连接名,默认主机名=连接名 -> 输入用户名和密码 -> 连接。
工具Xftp传输文件,建立连接后直接拖动文件就可以传输主机和虚拟机的文件。
服务service - 常驻内存的进程,生命周期长
进程process - 正在运行的程序或命令
systemctl start| stop| restsrt| status 服务名
查看服务 /usr/lib/systemd/system
p.s. centos6 的network和centos7的 NetworkManager服务重复,运行NetworkManager服务即可。
centos7 设置服务自启动 setup
查看服务 systemctl list-unit-files
查看级别 systemctl get-default
关闭自启动 systemctl disable 服务名
centos6
级别 | 权限 |
---|---|
0 | 停机 |
1 | 单用户,root,禁止远程 |
2 | 多用户,不支持网络和NFS网络文件系统 |
3 | 常用 多用户,有NFS,登陆后进入控制台命令行模式 |
4 | 无意义,保留 |
5 | 常用 登陆后进入GUI |
6 | 重启 |
centos7
multi-user.target 等价于上面3:多用户有网,无GUI
graphical.target 等价于级别5: 多用户有网,有GUI
命令 | 意义 |
---|---|
shutdown [option] | 默认1min后关机, option是数字 几分钟后关机,now 立刻,时间 按时间,-c 取消, -H 停机, -r 重启 |
sync | 数据从内存同步到硬盘 |
halt | 停机关闭系统,不断电 |
poweroff | 断电 |
reboot | 重启 |
Shell BASH命令行解释器。
Shell接收应用程序、用户命令,调用OS内核;编程语言,可以把命令写进文件,脚本执行。
用户一般操作外层应用程序,通过Shell和Linux内核交互。
*.sh文件,开头为#!/bin/bash,后接注释、命令。
局部变量:只对当前Shell窗口有效。
全局:对当前Shell和其子窗口有效。
系统变量 e.g: $HOME
自定义变量
特殊变量
变量 | 作用 |
---|---|
$n | 数字代表命令后的第几个参数,0是命令,>9加大括号 e.g: $2 ${13}。 |
$# | 获取输入参数个数 |
$* | 以整体形式获取所有参数 e.g: abcefg |
$@ | 以单个形式获取所有参数 e.g: [abc, efg] |
$? | 获取上一次命令状态0-255。 0表示正确。 |
运算符
$[] 或 $(())
此时其中的算式不需要转义。 e.g: a=$1*$2非法, a= $[$1*$2]才表示乘。
命令替换
$()
e.g: a= $( cd $1) 表示把括号内命令结果赋值给a
test 条件 / [ 条件 ] -> echo $? 值为0意为条件True。 []中为空是False,注意这里的空格。
判断大小 -gt大于 -ge大于等于 -lt小于 -le小于等于 -eq等于 -ne不等于
判断权限 -r读 -w写 -x执行
判断文件 -e文件是否存在 -f文件是否存在且是文件 -d文件是否存在且是目录
&& 上一命令执行成功才执行下一条 ||上一命令不成功才执行下一条。e.g: 条件 && opa || opb 表示条件T就执行opa,否则执行opb,类似三元 a>b ? a=2 : b=2
单分支
if [条件]
then
…
else
…
fi
多分支
if [条件]
then
…
elif [条件]
then
…
else
…
fi
if语句每一个条件的code都写在then和elif或else中。else项没有then直接写code。
case $var in
“val1”)
code
;;
“val2”)
code
;;
…
*)
default
;;
esac
*)是默认情况, 其他每一个值都有)和结束时的双分号;;
结束语esac
for (( 初始;条件;变量变化 ))
do
…
done
for var in val1 val2 val3…
do
…
done
这里的值列表用空格隔开
while [条件]
do
…
done
read [op] 参数
读取控制台输入,-p提示信息, -t 指定等待时间(秒),超过该时间直接退出,参数即输入赋给哪个变量。类似scanf(“%d”, &n)。e.g: read -t 10 -p “请输入一个整数” a
意为等待时间10秒,提示信息"请输入一个整数",用户输入的数字赋值给变量a。
basename string/path suffix 获取最后一个/后面的内容,带suffix后缀意为不包含后缀。e.g: basename /root/xxx/xxxx.txt .txt 意为截取该路径中最后一个/后的内容且不带.txt后缀,即xxxx; basename /root/xx/xxx 意为截取得到xxx,可能是文件也可能是目录。
dirname 文件绝对路径 获取文件的路径,即该路径最后一个/以前的内容。e.g: dirname /root/xx/xxx/xxxxx.txt 得到该文件的路径:/root/xx/xxx。
[ func ] funcname[(传入参数)]
{
CODE…
[return val;]
}
调用函数: 函数名 参数1 参数2 …
[]项均为可选项。调用函数前要先声明, $?获取函数返回值,无return 语句默认最后一句结果是返回值,返回值只能是0-255数字。函数内不用专门写传入参数,直接用$1 $2… 表示传入的参数。
常规匹配 不包含特殊符号的正则表达式
特殊字符
符号 | 意义 | 举例 |
---|---|---|
^ | 一行的开头 | ^a 匹配a开头的行 |
$ | 一行的结束 | bash$ 匹配以bash结尾的行 |
^$ | 匹配空行 | |
. | 一个任意字符 | r.g 匹配r开头、g结尾,中任意一个字符的行 |
* | 和上一个字符连用,匹配上一个字符0或多次 | ro*t 匹配r开头,o个数0或任意个,t结尾的字符所在行 |
.* | 匹配所有字符 | ^a.*bash$ 匹配a开头、bash结尾的任意字符所在行 |
[] | 字符区间,匹配某个区间的一个字符 | [a-c,e-f] 匹配a-c或e-f中的一个字符,[0,3]* 匹配任意长度的0或3组成的string |
\ | 转义,把一些命令使用的有作用的符号转义成普通字符 | ‘\ $ ’ 匹配dollar符号,本身$在命令里可以做取值操作,此时加反斜杠\表示不作取值操作,而只是字符’ $ ’ |
扩展特殊符号
grep加-E才能使用扩展匹配
符号 | 意义 | 举例 |
---|---|---|
+ | 出现一次或多次 | a+ 匹配出现1或多次的a |
? | 出现0或1次 | a? 匹配0或1次的a |
{n} | 出现n次 | a{3} 匹配aaa |
命令 | 意义 | 举例 |
---|---|---|
cut [op] filename | -f 列号 -d分隔符,按分隔符分割列,默认\t制表符 -c按字符分割,后加数字表示取第几列 | echo $ PATH 竖线 cut -d “:” -f 3- 表示从系统变量PATH中以:为分隔符截出第三列至最后。$PATH=1:5:3:6:2:7 则截取出3:6:2:7 |
awk [] ‘/patterni/{actioni} …’ filename | pattern是匹配模式,action找到匹配内容执行的命令, -F指定分隔符,-v赋值用户定义变量 |
awk
文本分析工具,把文件逐行读入,以空格为分隔符将每行切片。
内置变量 FILENAME文件名, NR已读记录数-行号, NF浏览记录的域个数-列数
关键词BEGIN END
e.g: cat /etc/passwd | awk -F “:” ‘/^root/ {print $1","$7}’ 表示在passwd文件中使用:作分隔符,找出root开头的那行,打印第一列,逗号,第七列’。
e.g: awk -F “:” -v i=5 ‘{print $3+i}’ /etc/passwd
表示列出passwd文件以:分隔符的第三列结果加i的结果
mesg 查看是否可以把信息显示在终端,是-y
who 查看在线终端,-T 查看服务器所有终端哪些可以通信, 可以+号
write user 终端号 空格键 msg 给在某终端的user发送msg
一般命令的格式 命令+选项option+参数,option是可选项,以下一般在意义列里写选项及作用,有时在命令列省略[option]。e.g: |cat [option] file | 查看文件,-n显示行号| 表示cat -n file为查看文件并显示行号。
命令 | 意义 |
---|---|
man [option] 命令 | 进入命令解释页面,-f 解释Shell内置命令 |
命令 --help | 解释命令 |
help 命令 | 获取Shell内置命令解释。 e.g: help cd |
p.s. type 命令 检查命令是否是Shell内置命令
命令 | 意义 |
---|---|
pwd | 当前工作目录的绝对路径 |
ls | list 列出目录内容 |
cd [option] 目录 | 切换目录 ,cd -表示两个目录切换,cd ~表示跳转用户的工作目录,只有cd表示跳转当前目录 |
. | 表示当前目录 |
两点 | 表示上级目录 |
mkdir [option] 目录名 | 新建目录, option是-p 直接新建不存在的父目录 |
rmdir [option] 目录 | 删除目录, -p和最里的子目录: 删除含有子目录的目录 |
touch 文件 | 新建空文件 |
cp [option] source dest | source复制到dest ,dest可以是目录、文件, -r表示递归复制source的所有文件、目录 |
rm [option] 目录 | 删除目录 -r递归删除,-f强制 |
mv old new | 移动old到new 或 重命名old为new |
cat [option] 文件 | 查看文件内容, 适合小文件 -n显示行号 |
more 文件 | 分屏查看文件 |
less 文件 | 比more更多功能, 根据需要动态加载内容,适合大文件 |
echo [option] output | 控制台输出内容 -e表示读取\原意不需要转义,e.g:\n 直接读取换行,无-e则直接输出\n |
a > b | 输出重定向, 把a内容覆盖文件b |
a >> b | 追加,不覆盖 |
head [option] 文件 | 显示文件头部内容, -n 数字表示前几行 |
tail [option] 文件 | 尾部, -n 数字表示后几行,-f 实时追踪更新 |
ln -s [source] 软链接 | 最前面是小写L,类似win创建快捷方式,软链接存放文件的地址 |
rm -rf 软链接 | 删除软链接,注意若软链接后跟/表示删除链接的实际文件 |
history | 查看控制台历史命令 |
less 在控制台查看文件的操作
操作 | 意义 |
---|---|
空格 or [pagedown] or [p] | 下一页 |
[b] or [pageup] | 上一页 |
q | 离开less |
/key | 向下查找key, n向下、N向上 |
?key | 向上查找key, n向下、N向上 |
注:.开头的文件是隐藏文件;
\是原生命令,去除命令本身的后缀。e.g: \cp … 强制执行复制,没有询问,cp … 是cp -i …的缩写,自带询问;
alias 显示命令完整形态。
命令 | 意义 |
---|---|
date | 当前时间 |
date +%s | 时间戳,距离1970-1-1的秒数 |
date +%Y | 显示年份 |
date “+%Y-%m-%d %H:%M:%S” | 当前时间以 年-月-日 时:分:秒 形式 |
date -d ‘x days age’ | x>0表示前x天,x<0表示后x天 |
date -s ‘YYYY-mm-dd HH:MM:SS’ | 设置系统时间 |
cal | 本月日历 |
cal 2000 | 2000年日历 |
命令 | 意义 |
---|---|
useradd 用户名 | 添加用户 |
userdel 用户名 | 删除用户 |
passwd user | 设置密码 |
id user | 查看用户是否存在 |
su user | 跳转到其他用户 |
sudo 命令 | 赋权,前提要现在 /etc/sudoers文件赋用户root权 |
/etc/passwd | 该文件记录用户信息 |
who am i | 当前是哪个用户 |
whoami | 实际会话是谁先发起的 e.g:先是root->su user1 -> su user2, 运行该命令得到root |
命令 | 意义 |
---|---|
groupadd 组名 | 添加组 |
usermod -g 组名 user | 设置user到某组 |
groupmod -n 新组名 旧组名 | 改组名 |
groupdel 组名 | 删除组 |
/etc/group | 查看分组情况的文件 |
ll 命令查看文件类型。
e.g: -rw-------. 1 root root 1800 x月 xx xx:xx filename表示为 普通文件、文件属者有读和写权限、文件属者同组其他用户没有任何权限、除前两项用户外其他用户也没有任何权限、文件属于root、root在root组、文件大小、时间、文件名。
下标0 -普通文件,d目录,l链接,c字符设备, b块设备。
1-3 user文件拥有者权限。
4-6 group文件属者同组权限。
7-9 other其他用户权限。
其中无权用-表示。
文件:r可读, w可写,x可执行。
目录:r可读即可以list目录,w可修改但不包括删除文件,删除文件==对文件所在目录有w权限,x可进入目录。
命令 | 意义 |
---|---|
chmod [{ugoa} {±=} {rwx}] 文件/目录 | 改文件/目录权限,a=all=u+g+o,+加权, =赋权,-去权,-R表递归 |
chmod 421 文件/目录 | 同上,从下标1开始隔三位划一次作为一个二进制,顺序rwx,有权就为1,4 2 1意为100 010 001表示u可读、g可写、o可执行 |
chown [option] user 文件/目录 | 改变文件/目录的拥有者 ,-R递归 |
chgrp 组 文件/目录 | 改变文件/目录所属的组 |
命令 | 意义 |
---|---|
find 查找范围 [option] | 在范围内递归地查找文件, -name fileName 按文件名查找,这里通配符加引号如"*.txt", -user userName 按用户名,-size +/-xxMB 按文件大小 |
locate key | 在文件名-路径的数据库中查找key,快速定位文件路径 |
updatedb | 更新文件名-路径的数据库以便于locate |
which/whereis 命令 | 命令在哪 |
grep [option] key source | 在source文件中查找key,-n显示行号 |
竖线 | 管道符,把前面命令结果传递给后面命令 |
wc | 统计行数、词个数、字节 |
e.g: grep boot /home/xx/xxx 数线 wc 表示在文件中查找boot词并统计词个数
命令 | 意义 |
---|---|
gzip 文件 | 压缩文件 |
gunzip 文件.gz 文件 | 解压 |
zip [option] xxx.zip 文件 | 压缩文件为 xxx.zip,-r压缩目录 |
unzip [option] xxx.zip | 解压zip, -d <目录> 设置解压路径 |
tar [option] xxx.tar.gz 内容 | 打包压缩文档,-c打包生成.tar文件, -x解包.tar文件, -z打包加gz压缩, -C解压到指定目录, -f指定压缩文件名称, -v显示详细信息,压缩一般tar -zcvf xxx.tar.gz 内容,解压一般tar -zxvf xxx.tar.gz -C <解压目录>把文件解压到该目录 |
命令 | 意义 |
---|---|
tree 目录 | 树状查看目录 |
du 目录/文件 | 显示每个子目录的磁盘使用情况, -h显示单位如GB KB,-a还显示文件 -c还显示总和大小,-s只显示总和,–max-depth=n显示深度为n的目录大小 |
df [option] | 查看空余磁盘, -h带单位 |
free | 显示当前可用内存 |
lsblk [option] | 查看设备挂载情况 -f显示文件系统信息FSTYPE |
mount [-t vfstype] [-o option] device dir | 挂载设备device到dir,-t vfstype文件系统的类型和-o通常不用指定 |
umount 挂载点/设备 | 卸载设备 |
fdisk | 分区,-l 详细显示磁盘分区,该命令只能root用户操作 |
注: 硬盘设备名sda 表示使用SATA硬盘-容量大 or SCSI硬盘-速度快。sda的a表示第一块硬盘,sda1的1表示第一块硬盘的第一块分区。
挂载: 映射目录和存储位置,根据挂载点找到文件内容。e.g: 虚拟机设置->CD/DVD-> 选中’使用ISO镜像文件’ -> 设备状态勾选’已连接’ 此时虚拟机桌面弹出一个光盘图标。lsblk找到光盘挂载点为/run/media/root/…, 此时光盘已自动挂载到挂载点。
手动挂载: mount /dev/cdrom 目录 此时把设备/dev/cdrom即光盘挂载到自定义的目录。
设置开机自动挂载: /etc/fstab 文件追加 '/dev/cdrom 自定义挂载目录 iso9660 defaults 0 0’内容, 第一个0是dump备份, 第二个0优先级。
虚拟机新磁盘分区:
p为主分区,e为扩展分区。Linux中一块硬盘最多4个p,其中一个p可以作为多个e,一块硬盘总共最多分为16块,即p1-4,e5-16, e最多12块。
进程process:一个正在执行的程序或命令。
*d.service 均为守护服务。
命令 | 意义 |
---|---|
ps [option] | 进程状态管理, a带终端的所有用户进程,u当前用户的所有进程, x用户友好显示。-e所有进程,-u某用户的进程, -f完整格式显示,-ef通过PPID查看父子进程 |
kill [op] PID | 终止进程 -9强制终止 |
killall 进程名 | 终止所有包含该名字的进程,谨慎使用 |
pstree | 进程树, -p显示PID, -u显示进程所属用户括号显示。 |
top | 实时监控进程 -d 秒数 设置监控间隔时间,-i不显示闲置、僵死进程, -p查看指定PID进程。 进入后的操作: P以CPU使用率排序, M以内存使用排序, N以PID排序, u筛选用户, k kill |
netstat [option] | 查看网络状态和端口,-a显示所有套接字socket, -n数字化显示,-l 显示监听的服务, -p显示哪个进程在调用 |
命令 | 意义 |
---|---|
crontab | 系统定时任务,首先要启动crond服务, -e编辑任务, -l查询, -r 删除该用户所有任务 |
任务格式 * * * * * 命令
第几个星号 | 意义 |
---|---|
1 | 分钟0-59 |
2 | 小时0-23 |
3 | 第几天 1-31 |
4 | 月1-12 |
5 | 周几0-7 07都为周日 |
星号代表通配符, 逗号代表不连续时间, -代表连续时间,*/n表示间隔n分钟执行一次。
e.g: */10 1,2 * 6-9 * echo “h” >> /xxx/xx
意为: 6-9月的每天1和2时,每隔10分钟 就执行一次xx文件中写h的命令。
安装包必须在本地,必须先安装依赖项。
名称格式: 软件名-version-硬件平台.rpm
命令 | 意义 |
---|---|
rpm -qa | 列出所有RPM包,-qi表示显示详情 |
rpm -e [option] 软件名 | 卸载该包, --nodeps强制卸载别的软件的依赖软件 |
rpm -i RPM包全名 | 安装, -v显示详情, -h 进度条, --nodeps安装前不检查依赖 |
能够从指定服务器自动下载RPM包,并安装且自动处理依赖关系,一次性安装所有依赖。
命令 | 意义 |
---|---|
yum [option] paras | -y对所有回答yes, 参数 install/update/remove/check-update/list/clean/deplist 安装、更新、删除、检查更新、显示、清理缓存、显示依赖关系 |
更换镜像源, 相应网址下载repo文件替换 /etc/yum.repos.d/CentOS-Base.repo
vm右键虚拟机克隆
对新虚拟机更改IP:vim /etc/sysconfig/network-scripts/ifcfg-ens33 中的IP地址。
改主机名: hostnamectl set-hostname 主机名。
p.s. 快照: 类似于存档,保存当前虚拟机文件和状态。