LAMP:Linux Apache MySQL PHP
LNMP:Linux Nginx MySQL PHP
WAMP:Windows Apache MySQL PHP
Linux 是一个操作系统。
它微软公司开发的一款桌面操作系统(闭源系统)。版本有 dos、win98、win NT、win XP、win 7、win vista、win 8、win 10。服务器操作系统:win server 2003、win server 2008、win server 2012。
苹果公司开发的一款操作系统(闭源系统),目前最新的版本是 IOS12。界面风格还是不错。对于系统底层的优化也是很好。
Linux 是一个开源的操作系统,目前是市面上占有率极高的服务器操作系统。目前其分支有很多。安卓
Unix 是 Linux 操作系统的前身,Unix 时间戳是指 1970 年 1 月 1 日 0 时 0 分 0 秒,1970 年是 Unix 的时间元年,也就是 Unix 诞生的年份。
之所以大部分的公司开发的时候都是使用 Linux 操作系统,取决于两个特性:
稳定性:取决于系统的底层架构,一般情况下 Linux 系统能做到很长时间不关机一点也不卡顿;
安全性:开源系统,所有人都可以贡献自己的源代码为 Linux 系统打补丁;
问:开源一定意味着免费么?
答:不一定,有些可能会进行服务收费,例如 Redhat。
Linux 的开发作者,李纳斯·托瓦兹。荷兰在校大学生。
李纳斯当时学校使用的就是 Unix 操作系统,然后其对系统的底层代码进行了修改,放到了学校为学生开放的网站上,原先他把文件命名写成了 Linus’s Unix,后期网络管理发现之后觉得这个名字不好,自己手动的将名字改成 Linux。随后其他同学下载之后发现这个版本还是挺好用的,随后都把自己代码贡献给李纳斯。
上面所说的版本是指Linux 的内核版本,不是指分支的发行版本。
Linux 是开源的操作系统。所谓开源就是指开放源代码。
开源文化的倡导人。
目前分支比较多,常见的有 centos(社区企业网络操作系统)、RedHat、乌班图、debian 等等。
具体的分支,可以查看【文件】中的 Linux 分支图。
通常情况下安装分为真机安装、在虚拟环境中安装。
真机安装:是指将电脑上的操作系统真实的换做其他的操作系统;
虚拟环境安装:是指通过一些特殊的软件虚拟出一个安装环境,然后在安装环境中进行安装;
虚拟环境可以通过特殊的软件来实现:VMare Wrokstation、Virtual Box 等。
32 位安装:适用于 32 位电脑;
64 位安装:是用于 64 位电脑;
系统的位数可以在【计算机】-【属性】中查看:
CentOS-6.6-i386-bin-DVD1.iso:镜像文件,也就是 Linux 的安装包
第一步:先运行 VM 的安装程序,然后点击下一步
第二步:同意其许可协议,然后点击下一步
第三步:选择安装的位置
说明:该路径是指虚拟机软件的安装路径。
第四步:选择是否帮助 VM 公司提高软件的用户体验,可以不选。
第五步:勾选快捷方式
第六步:点击安装按钮
第七步:安装完成
桌面上会有这个图标:
要求在网卡里面要多出 2 个网卡:
安装完成之后打开软件会看到下面的界面:
第一步:打开软件,点击屏幕中大的“+”或者选择【文件】选项卡中的【创建新的虚拟机】创建新的虚拟机
第二步:在弹出的引导界面,选择【自定义(高级)】,点击【下一步】
第三步:在选择虚拟机兼容性界面直接点击下一步
第四步:选择介质来源,这个时候选择第三个【稍后安装操作系统】,然后点击【下一步】
第五步:选择操作系统类型,然后点击下一步
第六步:设置虚拟机的名称已经其安装目录
说明:这个路径是指虚拟机安装的操作系统所产生的文件存放目录,不是指虚拟机的安装目录;
第七步:选择虚拟操作系统的 cpu 核心数
说明:此处以及后续的配置设置中设置的配置不要超过当前运行电脑的配置。
第八步:设置操作系统的内存数值,一般情况下默认即可
说明:
1、设置内存的数值必须是 4 的倍数;
2、内存的设置数值不要超过当前电脑的内存数值;
第九步:选择网络类型,选择【NAT】,然后点击【下一步】
第十步:选择 I/O 控制器类型,默认即可,点击【下一步】
第十一步:选择磁盘类型,默认即可,点击【下一步】
第十二步:选择磁盘位置,选【创建新的磁盘】,然后点击【下一步】
第十三步:选择磁盘大小,默认 20G
第十四步:设置磁盘文件位置,默认即可,点击【下一步】
第十五步:安装向导结束,点击【完成】就可以
安装完成看到下面这个界面:
第十六步:选择镜像文件
点击【编辑虚拟机设置】
选择 ISO 文件,然后点击【确定】:
此处 iso 文件不需要解压。
开启虚拟机:
第十七步:选择【安装或更新一个已经存在的系统】,按下回车
小技巧:首次运行虚拟机系统的时候,我们可能把鼠标点进去,然后发现鼠标出不来了,这个时候我们可以按下键盘上的组合键【ctrl+alt】,鼠标就可以出到外面的系统了。
第十八步:是否检测媒体文件,不检测,通过 ← 和 → 来选择选项,选择【skip】,按下回车
第十九步:重新引导之后选择唯一一个按钮【next】
第二十步:选择语言,可以选择【简体中文】,然后点击【next】
第二十一步:选择键盘类型,默认【美式英语】即可,点击【下一步】
第二十二步:选择存储设备类型,默认即可,然后点击【下一步】
第二十三步:设置磁盘,选择【忽略所有数据】
第二十四步:设置网络
设置网卡开机自动连接
点击【应用】再点击【关闭】
最后再点击【下一步】
第二十五步:设置时区,默认即可,直接点击【下一步】
第二十六步:设置密码,密码对用的用户名是 root
密码有限制:最少是 6 位,并且建议是大写+小写+数字的组合
设置完成之后点击【下一步】
第二十七步:选择安装类型,这个时候选择【使用所有空间】,然后点击【下一步】
然后选【将修改写入磁盘】
第二十八步:选择 Linux 系统的安装模式,默认 desktop-现在自定义-下一步
下一步中勾选【开发】中的【开发工具】
注意:一定要确保【开发工具】前面有一个 √。
然后再点击【下一步】
第二十九步:等待安装完成重新引导,这个过程需要安装 1160 多个软件,时间大概消耗 20 分钟左右
第三十步:完成之后点击【重新引导】,系统会重新启动
第三十一步:在欢迎界面点击【前进】
在许可协议界面同意协议,再点击【前进】
第三十二步:设置新的用户(非超级管理员用户),填写好之后点击【前进】
第三十三步:设置时间,然后点击【前进】
第三十四步:设置 kdump 的时候会提示错误,因为没有足够的内存,所以这一步默认跳过,最后点击【完成】
第三十五步:重启之后的效果
会出现一个登录框,并且显示出非 root 用户的帐号名,点击需要进行登录的用户名之后输入其密码即可进行登录;如果需要使用 root 帐号登录,则点击【其他】,然后输入 root 用户名和密码即可。
登录之后的显示界面:
/:表示的是根的意思
/bin:(binary)存放的是一些二进制文件,但是在 Linux 中二进制文件是可以被执行的。这个目录中的命令文件是给普通用户使用(非超级管理员用户)。
/etc:Linux 下所有的配置文件都会存放到 etc 目录。
/home:是所有非 root 用户家目录的一个集合。
/root:root 用户的家目录。
/sbin:sbin 表示 super bin(shell bin),里面同样也类似于 bin 目录,也存放了一些二进制文件,只不过这些命令只能是让超级管理员去运行。
/usr:存放着一些用户自己安装的软件,其实类似于 windows 下的 Program Files 目录。
/var:(variable)存放着 Linux 下的一些日志文件,在实际开发的时候有一些公司也习惯把 Apache 或者 nginx 的站点目录也会放到这个目录中。
了解:常见的 shell。
Csh、tcsh、zsh、bash等
在 Linux 中如何打开命令行界面?
打开方式:在 Linux 中的任意一个空白的地方(不要点着图标),右键然后选择【在终端中打开】,会看到一个类似于下面界面的窗口:
命令行符号介绍:
关于用户身份标记说明:
在 Linux 中#表示超级管理员身份,$符号表示普通用户。
通用语法格式:# 指令名称 [选项][操作的目标]
假设:让小明去楼下超市买清风牌的餐巾纸和农夫山泉牌矿泉水。
语法 1:#ls [路径]
表示列出指定路径下的文件夹和文件的名字,如果路径没有指定则列出当前路径下的(list)
例如:在 root 用户的家目录中输入 ls 命令,则会看到以下的效果:
要求列出/home 的文档的名称。
#ls /home
语法 2:#ls -l [路径]
表示以列表的形式列出指定路径下的文件夹和文件的名字
例如:使用 ls –l 的命令列出当前用户家目录中的文件夹和文件信息
语法 3:#ls -la [路径]
表示以列表的形式列出指定路径下的文件夹和文件名(包含隐藏文件,all)
例如:在当前用户的家目录中输入 ls –la 命令可以查看全部的文件夹和文件名,并且包含了隐藏文件(特点是以“.”开头的名字)
表示的含义:清空当前屏幕中全部的命令(其实质是没有清空,只不过是顶到上面去了)
语法:#clear
等效于快捷键:ctrl + L
作用:切换用户(switch user)。
语法:#su 需要切换到的用户名(用户名可以不写,则表示切换到 root 用户)
例如:
1、从 root 用户切换到 admin 用户。
#su admin
2、从 admin 用户切换到 root 用户。
#su root
等价于:
#su
通过上述两个命令的操作发现一个结论:
当切换到的用户权限如果比当前用户的权限低,可以直接切换,不需要密码;反之,如果从低往高切换则要求输入被切换到的账户对应的密码。
作用:切换目录(change directory)。
语法:#cd 需要切换到的路径(路径可以是相对路径,也可以是绝对路径)
路径可以写也可以不写,不写则表示切换到当前用户的家目录。
例如:
1、从 root 用户家目录中切换到 admin 用户的家目录中
#cd /home/admin
提示:在切换路径或者后期打开一个文件的时候可以多建议使用 tab 键(可以自动补全命令路径)。
2、切换用户切换到 admin 用户,然后从 admin 用户的家目录使用 cd 切换到 root 的家目录
#su admin
#cd /root
结论: 低级用户没有权限访问高级用户相关的资源。
关于路径:
路径分为相对路径和绝对路径。
相对路径是相对当前路径的一种表现形式。
特点:只要不是以“/”开头的就是相对路径。
绝对路径是直接从“根”开始的一种路径形式。
特点:以“/”开头的路径称之为绝对路径。
案例:从 root 用户家目录中切换到 admin 用户的家目录中,要求以相对路径形式书写。
#cd ../home/admin
分析:
当前路径:/root
目标路径:/home/admin
作用:打印当前的工作路径(print working directory)。
例如:在当前用户的家目录中使用 pwd 命令。
命令:touch
语法:#touch路径
例如:
1、在当前路径下创建一个文件名字叫 php2018.txt。
# touch php2018.txt
2、在磁盘根目录下创建文件 php2018.txt。
# touch /php2018.txt
命令:mkdir [make directory]
语法:#mkdir 文件夹路径
例如:在 root 的桌面上创建一个 php69 的文件夹
#mkdir php69
问题:
#mkdir index.php 创建的是什么? 【文件夹】
问题:
在上述的指令执行的基础上行,执行#touch index.php,创建的是什么?【什么都没有】
命令:cp (copy)
语法:#cp [-r] 需要复制的文档 需要保存的位置
选项说明:
-r:表示递归。如果复制的是文件夹,则-r 就不是选项,是必须要加的。
问题:文档在复制的过程中,其名称一般是否变化? 【不变,数量变化】
案例 1:需要使用 root 用户,将根下的 php2018.txt 复制到 admin 用户的家目录下
#cp /php2018.txt /home/admin/
案例 2:将桌面上(当前目录)的 php69 文件夹复制到 admin 的家目录下
#cp php69 /home/admin/
命令:mv (move)【剪切+粘贴】
语法:#mv 需要操作的文档 新的文档的位置
案例:【移动/剪切】将 admin 家目录下的 php2018.txt,移动到 root 家目录下。
问题:移动操作会影响什么? 【路径变化,数量不变,名称不变】
#mv /home/admin/php2018.txt /root/
案例 2:【重命名】将 root 下的 php2018.txt 重命名为 php.doc。
问题:重命名操作会影响什么? 【名称变,路径不变,数量不变】
#mv /root/php2018.txt /root/php.doc
命令:rm (remove)
语法:#rm [-rf] 需要删除的文档
选项说明:
-r:表示递归
-f:force,表示强制,没有删除确认提示
案例 1:删除 root 下的 php.doc
案例 2:删除 root 下的 php 文件夹
面试题:
请问使用 root 用户“#rm -rf /”这个命令能不能执行?
答:从语法上讲,该指令可以执行,表示递归删除根,但是这个操作很危险,不建议执行。
作用:查看一个文件的末 n 行
语法:#tail -n 文件的路径
说明:-n 可以不写,不写,默认表示 10 行。
案例:使用 tail 指令查看 root/install.log 文件的末 5 行和末 10 行
#tail -5 /root/install.log
#tail /root/install.log 等价于 #tail -10 /root/install.log
作用:查看文件的头 n 行
语法:#head -n 文件的路径
注意:如果不指定-n 则默认头 10 行
案例:使用 head 指令查看 root/install.log 文件的头 5 行和头 10 行
#head -5 /root/install.log
#head /root/install.log 等价于 #head -10 /root/install.log
作用:查看某个文件的全部内容(将内容全部输出在命令行中)【正序】
语法:#cat 文件路径 1 文件路径 2 文件路径 3 …
案例:使用 cat 指令输出 install.log 文件内容
#cat /root/install.log
作用:查看某个文件的全部内容(倒序的)
语法:#tac 文件路径 1 文件路径 2 文件路径 3…
案例:使用 tac 指令输出 install.log 文件内容
#tac /root/install.log
作用:打开一个文件,显示内容
语法:#vim 文件路径
例如:打开/root/install.log
#vim /root/install.log
退出输入“:q”按下回车即可。
作用:重启计算机
语法:#reboot
注意:部分情况下(除非自开机以来只有当前一个普通用户登录过)普通用户无法执行 reboot 指令
作用:关机
语法:#shutdown -h 时间
时间常见的值:
now:(shutdown -h now),表示立即关机
+m:(m 表示 minutes 数字),例如+5,则表示五分钟之后关机
作用:关机(关闭内存)
语法:#halt
在命令行中可以使用 ctrl+a,来进行光标的快速定位:可以将命令行中的光标从其他的位置快速移动到行首。【ahead】
在命令行中可以使用 ctrl+e,来进行光标的快速定位:可以将命令行中的光标从任意位置快速定位到行末。【end】
在命令行输入的位置可以按下 ↑ 来查看之前的执行命令历史,可以按下 ↓ 来翻到最新的命令执行历史。【即使远程终端断开连接,下次连接上依然可以使用】
按照下面的语法:
#需要执行的命令 > 需要保存到的文件路径 【覆盖写】
或者
#需要执行的命令 >> 需要保存到的文件路径 【追加写】
作用:du 表示 directory used,显示出目录所占的磁盘空间大小的情况。
语法:#du -sh 目录路径
选项说明:
-s:表示 sumary,汇总统计
-h:表示以较高可读性的形式显示
案例:使用 du -sh 指令统计出“/etc”的大小情况
作用:disk free,查看磁盘的剩余空间的情况。
语法:#df -h
选项说明:
-h:表示以较高可读性单位进行查看。
作用:查看内存的使用情况
语法:#free -m
选项含义:
-m:表示以 mb 为单位进行查看
注意:
第一行表示 memory,是内存各项的数字。
其中,如果查看可用的剩余内存,应该是 3527 的位置。
如果看的是剩余的内存,则应该是 3725 的位置。
作用:表示根据条件去查询文档的所在位置。
语法:#find 范围路径 选项 选项的值
常见的选项:
-name:根据名字进行查询
-type:根据文档的类型进行查询。[d 表示文件夹,f 表示普通文件,s 表示套接字文件,l 表示连接文件,c 表示字符设备文件,b 表示块状设备文件]
-user:根据所有者进行查询
-group:根据所属的用户组进行查询
-size:根据大小进行查询
案例:我们记不清一个文件 httpd.conf 所在位置,现在要求使用 find 指令进行查询
#find / -name httpd.conf -type f
补充:-name 选项支持通配符(“*”),模糊查询。
例如:假设我需要查询磁盘中全部的.conf 文件,则可以写成:#find / -name *.conf -type f
作用:表示 process show,查看进程
语法:#ps -ef
选项含义:
-e:等价于-A,all,表示全部
-f:表示 full,显示全部的列
操作效果:
UID:该进程的启动用户名;
PID:process id,进程的 id 号
PPID:parent process id,父级进程 id 号
C:表示的 cpu 的使用情况
STIME:start time,启动时间
TTY:终端的设备编号,“?”表示该进程不是由终端发起的
TIME:持续运行的时间
CMD:command,显示进程的名称或者位置
补充:结束进程的指令
#kill PID
作用:操作服务的(启动/停止/重启)
语法:#service 服务名 start/stop/restart
案例:使用 service 指令启动 apache(httpd)
#service httpd start
注意:对于服务名是存在要求的,要求服务名必须存在于“/etc/init.d”目录下。
除了可以用 service 指令操作服务,还可以通过如下语法:
#/etc/init.d/服务名 start/stop/restart
所以刚才 apache 的启动指令还可以写成:#/etc/init.d/httpd start
作用:搜索、过滤,主要用于对文件/内容进行筛选,选出需要的内容
语法:#grep [选项] 关键词 文件路径/内容
常见的选项:
-v:排除
案例:使用 grep 筛选出 php2018.txt 中的 admin 行
案例:使用 grep -v 实现排除 admin 所在行
扩展用法:
#grep -E “关键词 1|关键词 2|…” 文件路径或内容
选项:-E 表示 extension,该语法表示多条件筛选,“|”表示 or
上述扩展用法等价于:
#egrep “关键词 1|关键词 2|….” 文件的内容或路径
作用:word count,其作用是用于统计文件的各项数值(行、单词数、字节数)
语法:#wc -lwc 文档的路径
选项含义:
-l:line,行数
-w:word,单词数
-c:byte,字节数
案例:使用 wc 指令分别统计文件/etc/passwd 的行、单词数、字节数
#wc -lwc /etc/passwd
注意:lwc 选项的顺序,不影响其指令输出的结果的顺序,结果顺序一定是行 、 单词 、字节。
管道严格意义上说其不是指令,其只是一个符号“|”。该符号主要起到辅助的作用,能够将多个指令合在一行上进行操作。主要用在搜索过滤等上面。
语法:# 必须在终端中有输出内容的指令 | 有输入的指令[要求有读取文件内容的需求]
管道的核心理解概念:管道前面的指令的输出其实就是管道后面指令的输入。
案例:通过 ps 指令查看进程,只查看 httpd 的进程。
#ps -ef | grep “httpd”
课堂作业:
“/etc/passwd”文件是存储用户信息的文件,该文件中一行即为一个用户,要求使用所学的指令统计出当前计算机中一共有多少个用户。
#cat /etc/passwd | wc -l
Vi 编辑器是所有 Unix 及 Linux 系统下标准的编辑器,类似于 windows 系统下的 notepad(记事本)编辑器,由于在 Unix 及 Linux 系统的任何版本,Vi 编辑器是完全相同的,因此可以在其他任何介绍 vi 的地方都能进一步了解它,Vi 也是 Linux 中最基本的文本编辑器,学会它后,我们将在 Linux 的世界里畅行无阻,尤其是在终端中。
关于 vim:
vi 和 vim 都是 Linux 中的编辑器,不同的是,vim 比较高级,可以视为 vi 的升级版本。vi 使用于文本编辑,但是 vim 更适用于 coding(写代码的)。
Vim 重点是光标的移动,模式切换,删除,查找,替换,复制,粘贴,撤销命令的使用。
在后期使用的 Linux 系统中,有些可能没有初始自带 vim,而自带了 vi,那么 vim 指令是不能直接使用的,需要先安装。
Vim 中存在三种模式(大众的认知):命令模式、编辑模式(输入模式)、末行模式(尾行模式)。
命令模式:在该模式下是不能对文件直接编辑,可以输入快捷键(命令)进行一些操作(删除行,复制行,移动光标,粘贴等等)【打开文件之后默认进入的模式】;
编辑模式:在该模式下可以对文件的内容进行编辑;
末行模式:可以在末行输入命令来对文件进行操作(搜索、替换、保存、退出、撤销、高亮等等);
Vim 的打开文件的方式:
#vim 文件路径 作用:打开指定的文件(可以是不存在的)
#vim +数字 文件的路径 作用:打开指定的文件,并且将光标移动到指定行
#vim +/关键词 文件的路径 作用:打开指定的文件,并且高亮显示关键词(搜索)
重点:先复制出一个/etc/passwd 文件,复制当前目录下(千万不要在 etc 下直接修改!!!)
注意:该模式是打开文件的第一个看到的模式(打开文件即可进入)
① 光标移动到行首
按键:shift + 6 或 ^(T 字母上面的 6,不要按小键盘的 6)
② 光标移动到行尾
按键:shift + 4 或 $(R 字母的左上角的 4,不是小键盘的 4)
③ 光标移动到首行行首
按键:gg
④ 光标移动到末行行首
按键:G [Capslk 再加 G 键] / [Shift + G 键]
⑤ 翻屏
向上翻屏:按键 ctrl + b (before) 或 PgUp
向下翻屏:按键 ctrl + f (after) 或 PgDn
⑥ 快速定位到指定行
数字 G
① 复制光标所在行
按键:yy
粘贴:在想要粘贴的地方按下 p 键【将粘贴在光标所在行的下一行】,如果想粘贴在光标所在行之前,则使用 P 键
② 以光标所在行为准(包含当前行),向下复制指定的行数
按键:数字 yy
① 剪切/删除光标所在行
按键:dd (删除之后下一行上移)
注意:dd 严格意义上说是剪切命令,但是如果剪切了不粘贴就是删除的效果。
② 剪切/删除光标所在行为准(包含当前行),向下删除/剪切指定的行
按键:数字 dd (删除之后下一行上移)
③ 剪切/删除光标所在的当前行(光标所在位置)之后的内容,但是删除之后下一行不上移
按键:D (删除之后当前行会变成空白行)
撤销:输入“:u”(不属于命令模式) 或者 u (undo)
恢复:ctrl + r 恢复(取消)之前的撤销操作【重做,redo】
末行模式进入之后的特征:光标在最后一行上
编辑模式进入之后的特征:在最后一行有类似于“——插入(insert)—–”的提
注意:末行模式和编辑模式之间是没有办法直接切换的,必须先走命令模式。
进入方式:由命令模式进入,按下“:”或者“/(表示查找)”即可进入
退出方式:
a. 按下 esc
b. 连按 2 次 esc 键
c. 删除末行全部输入字符
① 保存操作(write)
输入:“:w” 保存文件
输入:“:w 路径” 另存为 (了解)
② 退出(quit)
输入:“:q” 退出文件
默认情况下,退出的时候需要对已经进行修改的文件进行保存(:w),然后才能退出。
③ 保存并退出
输入:“:wq” 保存并且退出
④ 强制 (!)
输入:“:q!” 表示强制退出,刚才做的修改操作不做保存
⑤ 搜索/查找
输入:“/关键词”,再按下回车 【按下/也是进入末行模式的方式之一】
例如:想在 passwd 文件中搜索“sbin”关键词
在搜索结果中切换上/下一个结果:N/n (next)
如果需要取消高亮,则需要在末行模式中输入:“:nohl”【no highlight】
⑥ 替换
:s/搜索的关键词/新的内容 替换光标所在行的第一处符合条件的内容
:s/搜索的关键词/新的内容/g 替换光标所在行的全部符合条件的内容
:%s/搜索的关键词/新的内容 替换整个文档中每行第一个符合条件的内容
:%s/搜索的关键词/新的内容/g 替换整个文档的符合条件的内容
%表示整个文件
g 表示全局(global)
案例:将测试文件中的 bin 关键词全部替换成 xxxx
:%s/bin/xxxx/g
⑦ 显示行号(临时)
输入:“_:set nu_”[number]
如果想取消显示,则输入:“:set nonu”
补充:要想永久显示行号,需要进行对 vim 的配置。
建议创建文件:“~/.vimrc”(该配置是针对用户的,每个用户自己家下有一个独立.vimrc)
⑧ 扩展:部分命令模式操作使用末行模式实现
了解:
末行模式下的复制(yy)、剪切(dd)、删除(dd)操作
复制语法:“:开始行号,结束行号 y”,例如输入“:1,10y”
剪切删除语法:“:开始行号,结束行号 d”,例如输入“:1,10d”
一步到位的复制语法——“:开始行号,结束行号 co 粘贴到的行号”
剪切粘贴一步到位语法——“:开始行号,结束行号 m 粘贴到的行号”
重点看前 2 个进入方式:i(insert)、a(after)。
退出方式:按下 esc 键
什么是异常退出:在编辑文件之后并没有正常的去 wq(保存退出),而是遇到突然关闭终端或者断电的情况,则会显示下面的效果,这个情况称之为异常退出:
解决办法:删除“.文件名.swp”文件即可解决上述问题。
Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的密码。
用户在登录时键入正确的用户名和密码后,就能够进入系统和自己的主目录。
要想实现用户账号的管理,要完成的工作主要有如下几个方面:
用户账号的添加、删除、修改以及用户密码的管理。
用户组的管理。
注意三个文件:
/etc/passwd 存储用户的关键信息
/etc/group 存储用户组的关键信息
/etc/shadow 存储用户的密码信息
① 添加用户
语法:#useradd 选项 用户名
常用选项:
-g:表示指定用户的用户主(主要)组,选项的值可以是用户组的 id,也可以是组名
-G:表示指定用户的用户附加(额外)组,选项的值可以是用户组的 id,也可以是组名
-u:uid,用户的 id(用户的标识符),系统默认会从 500 之后按顺序分配 uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯 QQ 的自选靓号情况】
-c:comment,添加注释(选择是否添加)
-s:指定用户登入后所使用的shell 解释器 【专门的接待员】
-d:指定用户登入时的启始目录(家目录位置)
-n:取消建立以用户名称为名的群组(了解)
案例:创建用户 zhangsan,不带任何选项
#useradd zhangsan
验证是否成功:
a. 验证/etc/passwd 的最后一行,查看是否有 zhangsan 的信息;
#tail -1 /etc/passwd
b. 验证是否存在家目录(在 Centos 下创建好用户之后随之产生一个同名家目录);
扩展:认识 passwd 文件
用户名:密码:用户 ID:用户组 ID:注释:家目录:解释器 shell
用户名:创建新用户名称,后期登录的时候需要输入;
密码:此密码位置一般情况都是“x”,表示密码的占位;
用户 ID:用户的识别符;【-u】
用户组 ID:该用户所属的主组 ID;【-g】
注释:解释该用户是做什么用的;【-c】
家目录:用户登录进入系统之后默认的位置;【-d】
解释器 shell:等待用户进入系统之后,用户输入指令之后,该解释器会收集用户输入的指令,传递给内核处理;【如果解释器是/bin/bash 表示用户可以登录到系统,/sbin/nologin 表示该用户不能登录到系统】【-s】
注意:在不添加选项的时候,执行 useradd 之后会执行一系列的操作
a. 创建同名的家目录;
b. 创建同名的用户组;
案例:添加选项,创建用户 lisi,让 lisi 属于 501 主组,附加组 500,自选靓号 666,并且要求不能登录到系统,可以写注释为“user lisi”。
#useradd -g 501 -G 500 -u 666 -s /sbin/nologin -c “user lisi” lisi
验证是否创建成功:
注意:查看用户的主组可以查看 passwd 文件,查看附加组可以查看 group 文件。
linux123 行的含义:在 linux123 的组里(组 id 是 500)有一个组内用户 lisi(lisi 的附加组就是 500,附加组的名字是 linux123)。
如果需要为一个用户指定多个附加组,只需要将多个附件组的 id 通过英文逗号“,”分割即可。
【主组只能有 1 个(类似于亲生父母只有一对),附加组可以多个,也可以没有附加组(类似于认干爹干妈,可以有也可以没有,也可以有多个)】
【主组必须有】
【文档的属组指的是主组】
② 修改用户
语法:#usermod 选项 用户名
Usermod:user modify,用户修改
常用选项:
-g:表示指定用户的用户主组,选项的值可以是用户组的 id,也可以是组名
-G:表示指定用户的用户附加组,选项的值可以是用户组的 id,也可以是组名
-u:uid,用户的 id(用户的标识符),系统默认会从 500 之后按顺序分配 uid,如果不想使用系统分配的,可以通过该选项自定义【类似于腾讯 QQ 的自选靓号情况】
-l:修改用户名
-c<备注>:修改用户帐号的备注文字
-d<登入目录>:修改用户登入时的目录
-s<shell>:修改用户登入后所使用的 shell
案例:修改 zhangsan 用户主组为 500,附加组改为 501
#usermod -g 500 -G 501 zhangsan
案例:修改 zhangsan 用户用户名,改为 wangerma
#usermod -l wangerma zhangsan
③ 设置密码
Linux 不允许没有密码的用户登录到系统,因此前面创建的用户目前都处于锁定状态,需要设置密码之后才能登录计算机。
语法:#passwd [用户名] 【如果不指定用户名则修改自己的密码】
案例:设置 wangerma 用户的密码
#passwd wangerma
在设置密码的时候也是没有任何输入提示的,放心输入,确保两次输入的密码一致,按下回车即可。
也可以使用弱密码,但是不建议,否则会看到以下的提示:
设置密码之后 shadow 文件中的体现:能够看出 lisi 用户没有密码的。
在设置用户密码之后可以登录帐号,例如此处需要登录 wangerma
切换用户命令:#su [用户名] (switch user)
如果用户名不指定则表示切换到 root 用户。
切换用户需要注意的事项:
a. 从 root 往普通用户切换不需要密码,但是反之则需要 root 密码;
b. 切换用户之后前后的工作路径是不变的;
c. 普通用户没有办法访问 root 用户家目录,但是反之则可以;
④ 删除用户
语法:#userdel 选项 用户名
Userdel:user delete(用户删除)
常用选项:
-r:表示删除用户的同时,删除其家目录;
案例:删除 wangerma 用户
#userdel -r wangerma
注意:已经登录的 wangerma 用户删除的时候提示删除失败,但是没有登录的 lisi 用户可以正常删除。
解决办法:简单粗暴,kill 对应用户的全部进程
提示:所有跟用户操作的命令(除 passwd 外,只能修改自己的密码,即不指定用户名)只有 root 超级管理员有权限执行。
备注:也可以在登录需要删除的用户之后,按下快捷键“ctrl+d”进行对当前用户的注销,随后退回到上一个用户(root)此时就可以对需要删除的用户进行删除操作。
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同,如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group 文件的更新。
文件结构:
用户组名:密码:用户组 ID:组内用户名
密码:X 表示占位符,虽然用户组可以设置密码,但是绝大部分的情况下不设置密码;
组内用户名:表示附加组是该组的用户名称;
① 用户组添加
语法:#groupadd 选项 用户组名
常用选项:
-g:类似用户添加里的“-u”,-g 表示选择自己设置一个自定义的用户组 ID 数字,如果自己不指定,则默认从 500 之后递增;
案例:使用 groupadd 指令创建一个新的用户组,命名为 admins
#groupadd admins
② 用户组编辑
语法:#groupmod 选项 用户组名
常用选项:
-g:类似用户修改里的“-u”,-g 表示选择自己设置一个自定义的用户组 ID 数字
-n:类似于用户修改“-l”,表示设置新的用户组的名称
案例:修改 admins 用户组,将组 ID 改成 520,将名称改为 admin123
#groupmod -g 520 -n admin123 admins
③ 用户组删除
语法:#groupdel 用户组名
案例:删除 admin 组
#groupdel admin
注意:当如果需要删除一个组,但是这个组是某个用户的主组时,则不允许删除(附加组是可以的);如果确实需要删除,则先从组内移出所有用户。
提示
针对用户和用户组的管理指令,除了 passwd 指令之外,其他指令一般情况下只有 root 用户可以执行。
在 Linux 中分别有读、写、执行权限:
读权限:
对于文件夹来说,读权限影响用户是否能够列出目录结构
对于文件来说,读权限影响用户是否可以查看文件内容
写权限:
对文件夹来说,写权限影响用户是否可以在文件夹下“创建/删除/复制到/移动到”文档
对于文件来说,写权限影响用户是否可以编辑文件内容
执行权限:
一般都是对于文件来说,特别脚本文件。
对于文件来说,执行权限影响文件是否可以运行。
对于文件夹来说,执行权限影响对应的用户是否可以在文件夹内执行指令。
由于 Linux 是多用户、多任务的操作系统,因此可能常常有多人同时在某台主机上工作,但每个人均可在主机上设置文件的权限,让其成为个人的“私密文件”,即个人所有者。因为设置了适当的文件权限,除本人(文件所有者)之外的用户无法查看文件内容。
例如某个 MM 给你发了一封 Email 情书,你将情书转为文件之后存档在自己的主文件夹中。为了不让别人看到情书的内容,你就能利用所有者的身份去设置文件的适当权限,这样,即使你的情敌想偷看你的情书内容也是做不到的。
与文件所有者同组最有用的功能就体现在多个团队在同一台主机上开发资源的时候。例如主机上有 A、B 两个团体(用户组),A 中有 a1,a2,a3 三个成员,B 中有 b1,b2 两个成员,这两个团体要共同完成一份报告 F。由于设置了适当的权限,A、B 团体中的成员都能互相修改对方的数据,但是团体 C 的成员则不能修改 F 的内容,甚至连查看的权限都没有。同时,团体的成员也能设置自己的私密文件,让团队的其它成员也读取不了文件数据。在 Linux 中,每个账户支持多个用户组。如用户 a1、b1 即可属于 A 用户组,也能属于 B 用户组【主组和附加组】。
这个是个相对概念。打个比方,大明、二明、小明一家三兄弟住在一间房,房产证上的登记者是大明(owner 所有者),那么,大明一家就是一个用户组,这个组有大明、二明、小明三个成员;另外有个人叫张三,和他们三没有关系,那么这个张三就是其他人(others)了。
同时,大明、二明、小明有各自的房间,三者虽然能自由进出各自的房间,但是小明不能让大明看到自己的情书、日记等,这就是文件所有者(用户)的意义。
在 Linux 中,还有一个神一样存在的用户,这就是 root 用户,因为在所有用户中它拥有最大的权限 ,所以管理着普通用户。因此以后在设置文档的权限的时候不必考虑 root 用户。
要设置权限,就需要知道文件的一些基本属性和权限的分配规则。在 Linux 中,ls 命令常用来查看文档的属性,用于显示文件的文件名和相关属性。
#ls -l 路径 【ls -l 等价于 ll】
标红的部分就是 Linux 的文档权限属性信息。
Linux 中存在用户(owner)、用户组(group)和其他人(others)概念,各自有不同的权限,对于一个文档来说,其权限具体分配如下:
bVk3s0
十位字符表示含义:
第 1 位:表示文档类型,取值常见的有“d 表示文件夹”、“-表示文件”、“l 表示软连接”、“s 表示套接字”、“c 表示字符设备”、“b 表示块状设备”等等;
第 2-4 位:表示文档所有者的权限情况,第 2 位表示读权限的情况,取值有 r、-;第 3 位表示写权限的情况,w 表示可写,-表示不可写,第 4 位表示执行权限的情况,取值有 x、-。
第 5-7 位:表示与所有者同在一个组的用户的权限情况,第 5 位表示读权限的情况,取值有 r、-;第 6 位表示写权限的情况,w 表示可写,-表示不可写,第 7 位表示执行权限的情况,取值有 x、-。
第 8-10 位:表示除了上面的前 2 部分的用户之外的其他用户的权限情况,第 8 位表示读权限的情况,取值有 r、-;第 9 位表示写权限的情况,w 表示可写,-表示不可写,第 10 位表示执行权限的情况,取值有 x、-。
注意:除了权限位上的 rwx 以及-之外,还有一些特殊的权限代码“s”、“t”,这些不在本次考虑范围内。
权限分配中,均是 rwx 的三个参数组合,且位置顺序不会变化。没有对应权限就用 – 代替。
语法:#chmod [选项] 权限模式 文档
注意事项:
常用选项:
-R:递归设置权限 (当文档类型为文件夹的时候)
权限模式:就是该文档需要设置的权限信息
文档:可以是文件,也可以是文件夹,可以是相对路径也可以是绝对路径。
注意点:如果想要给文档设置权限,操作者要么是 root 用户,要么就是文档的所有者。
给谁设置:
u:表示所有者身份 owner(user)
g:表示给所有者同组用户设置(group)
o:表示 others,给其他用户设置权限
a:表示 all,给所有人(包含 ugo 部分)设置权限
如果在设置权限的时候不指定给谁设置,则默认给所有用户设置
权限字符:
r:读
w:写
x:表示执行
-:表示没有权限
权限分配方式:
+:表示给具体的用户新增权限(相对当前)
-:表示删除用户的权限(相对当前)
=:表示将权限设置成具体的值(注重结果)【赋值】
设置多个身份的权限时候,每个身份之间需要通过英文逗号分开。
例如:需要给/root/anaconda-ks.cfg 文件(-rw——-.)设置权限,要求所有者拥有全部的权限,同组用户拥有读和写权限,其他用户只读权限。
答案:
所有者(u):rwx
同组用户(g):rw
其他用户(o):r
方式 1:
#chmod u=rwx,g=rw,o=r /root/anaconda-ks.cfg
方式 2:
#chmod u+x,g+rw,o+r /root/anaconda-ks.cfg
提示:当文档拥有执行权限(任意部分),则其颜色在终端中是绿色。
#chmod ug=rwx 形式,如果有两部分权限一样则可以合在一起写的
等价于:
#chmod u=rwx,g=rwx
例如:如果 anaconda-ks.cfg 文件什么权限都没有,可以使用 root 用户设置所有的人都有执行权限,则可以写成
什么权限都没有应该是:———-
目标的效果:—x–x–x
#chmod a=x anaconda-ks.cfg
#chmod a+x anaconda-ks.cfg
#chmod u+x,g+x,o+x anaconda-ks.cfg
#chmod ugo=x anaconda-ks.cfg
#chmod ugo+x anaconda-ks.cfg
#chmod +x anaconda-ks.cfg
案例:设置文件“~/yunwei/yunwei.txt”权限,要求所有者全部权限,同组用户拥有读权限、写权限,其他人拥有读权限
#chmod u=rwx,g=rw,o=r ~/yunwei/yunwei.txt
更改要求:所有者全部权限,同组用户拥有读权限、写权限,其他人拥有读权限、写权限
练习:
① 设置文件夹/tmp/yunwei 的权限(如果文件夹不存在,自行创建),要求权限为递归权限,并且所有者有全部权限,同组用户有读执行权限,其他用户只读权限;
② 设置文件/tmp/yunwei/class04.sh 权限,文件如果不存在则自行创建,要求权限为所有者全部权限,同组用户读和执行权限,其他用户没有权限;
③ 使用普通用户在/tmp/yunwei 目录下创建 test 目录,设置目录权限为所有者拥有全部权限,同组用户只读,其他用户只读;
经常会在一些技术性的网页上看到类似于#chmod 777 a.txt 这样的一个权限,这种形式称之为数字形式权限(777)。
读:r 4
写:w 2
执行:x 1
没有任何权限(-):0
例如:需要给 anaconda-ks.cfg 设置权限,权限要求所有者拥有全部权限,同组用户拥有读执行权限,其他用户只读。
分析:
所有者:全部权限 = 读 + 写 + 执行 = 4 + 2 + 1 = 7
同组用户:读执行权限 = 读 + 执行 = 4 + 1 = 5
其他用户:只读权限 = 读 = 4
最终得出的结果是 754
#chmod 754 anaconda-ks.cfg
面试题:用超级管理员设置文档的权限命令是#chmod -R 731 aaa,请问这个命令有没有什么不合理的地方?
所有者 = 7 = 4 + 2 + 1 = 读 + 写 + 执行
同组用户 = 3 = 2 + 1 = 写 + 执行
其他用户 = 1 = 执行
问题在权限 731 中 3 表示写+执行权限,但是写又不必须需要能打开之后才可以写,因此必须需要具备读权限,因此权限不合理。以后建议各位在设置权限的时候不要设置这种“奇葩权限”。单独出现 2、3 的权限数字一般都是有问题的权限
注意:在写权限的时候千万不要设置类似于上面的这种“奇葩权限”。如果一个权限数字中但凡出现 2 与 3 的数字,则该权限有不合理的情况。
练习:
① 使用 root 用户设置文件夹/root/20180811 的权限为:所有者全部权限,同组用户拥有读和执行权限,其他用户没有权限,请使用数字权限的形式设置,写出指令;750
② 请使用 root 用户写出设置文件/root/20180811.txt 文件的权限,权限要求为:所有者拥有全部权限,同组用户要求可以读写,其他用户只读,要求使用数字形式;764
③ 张三疯(root)收到某个 MM 的情书,请使用数字形式设置张三疯的 Email 情书权限(文件为/root/email.doc),权限要求只有所有者可以读写,除此之外任何人没有权限;600
使用 root 用户创建一个文件夹(/oo),权限默认,权限如下:
需要在 oo 目录下创建文件(oo/xx.txt),需要给 777 权限:
扩展:
在 Linux 系统中,创建文档的权限有一个默认值,以当前的系统为例,其创建文件夹之后的默认权限是 755,创建文件之后的权限是 644。
之所以会这样是受到了系统中 umask(掩码)的值的影响,其是用于指定文档创建好之后的权限,umask 默认为 022。
计算方式:
对于文件:文件的权限 = 666 – umask 掩码
对于文件夹:文件夹的权限 = 777 - umask 掩码
切换到 linux123 用户(不是文档所有者,也不是同组用户,属于 other 部分):
问题 1:linux123 用户是否可以打开 oo/xx.txt 文件?
问题 2:linux123 用户是否可以编辑 oo/xx.txt 文件?
问题 3:linux123 用户是否可以删除 oo/xx.txt 文件?
在 Linux 中,如果要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写权限,如果有才可以删除。
属主:所属的用户(文件的主人),文档所有者
属组:所属的用户组(同组用户的组名称)
前面的那个 root 就是属主
后面的那个 root 就是属组
这两项信息在文档创建的时候会使用创建者的信息(用户名、用户所属的主组名称)。
之所以需要设置这个:如果有时候去删除某个用户,则该用户对应的文档的属主和属组信息就需要去修改(类似离职之前的工作交接)。
作用:更改文档的所属用户(change owner)
语法:#chown [-R] 新的 username 文档路径
案例:将先前设置的/oo 目录的所有者设置成成 linux123
#chown -R linux123 /oo
作用:更改文档的所属用户组(change group)
语法:#chgrp [-R] groupname 文档的路径
案例:将刚才 oo 目录的所有用户组名改为 linux123
#chgrp -R linux123 /oo
思考,如何通过一个命令实现既可以更改所属的用户,也可以修改所属的用户组呢?
答:可以实现的,通过 chown 命令
语法:#chown [-R] username:groupname 文档路径
案例:将刚才 oo 的文档的所属组所属用户修改为 root
#chown -R root:root /oo
问题:zhangsan 用户使用自己的帐号创建文件 index.html,并且当时默认的权限是 644,后续管理员 root 将该文件的属主改成了 lisi,属组改成 lisi,则 zhangsan 对文件的操作权限有变化吗?如果有权限是多少?
在 Linux 中分别有读、写、执行权限:
读权限:
对于文件夹来说,读权限影响用户是否能够列出目录结构
对于文件来说,读权限影响用户是否可以查看文件内容
写权限:
对文件夹来说,写权限影响用户是否可以在文件夹下“创建/删除/复制到/移动到”文档
对于文件来说,写权限影响用户是否可以编辑文件内容
执行权限:
一般都是对于文件来说,特别脚本文件。
对于文件来说,执行权限影响文件是否可以运行。
对于文件夹来说,执行权限影响对应的用户是否可以在文件夹内执行指令。
由于 Linux 是多用户、多任务的操作系统,因此可能常常有多人同时在某台主机上工作,但每个人均可在主机上设置文件的权限,让其成为个人的“私密文件”,即个人所有者。因为设置了适当的文件权限,除本人(文件所有者)之外的用户无法查看文件内容。
例如某个 MM 给你发了一封 Email 情书,你将情书转为文件之后存档在自己的主文件夹中。为了不让别人看到情书的内容,你就能利用所有者的身份去设置文件的适当权限,这样,即使你的情敌想偷看你的情书内容也是做不到的。
与文件所有者同组最有用的功能就体现在多个团队在同一台主机上开发资源的时候。例如主机上有 A、B 两个团体(用户组),A 中有 a1,a2,a3 三个成员,B 中有 b1,b2 两个成员,这两个团体要共同完成一份报告 F。由于设置了适当的权限,A、B 团体中的成员都能互相修改对方的数据,但是团体 C 的成员则不能修改 F 的内容,甚至连查看的权限都没有。同时,团体的成员也能设置自己的私密文件,让团队的其它成员也读取不了文件数据。在 Linux 中,每个账户支持多个用户组。如用户 a1、b1 即可属于 A 用户组,也能属于 B 用户组【主组和附加组】。
这个是个相对概念。打个比方,大明、二明、小明一家三兄弟住在一间房,房产证上的登记者是大明(owner 所有者),那么,大明一家就 ��� 一个用户组,这个组有大明、二明、小明三个成员;另外有个人叫张三,和他们三没有关系,那么这个张三就是其他人(others)了。
同时,大明、二明、小明有各自的房间,三者虽然能自由进出各自的房间,但是小明不能让大明看到自己的情书、日记等,这就是文件所有者(用户)的意义。
在 Linux 中,还有一个神一样存在的用户,这就是 root 用户,因为在所有用户中它拥有最大的权限 ,所以管理着普通用户。因此以后在设置文档的权限的时候不必考虑 root 用户。
要设置权限,就需要知道文件的一些基本属性和权限的分配规则。在 Linux 中,ls 命令常用来查看文档的属性,用于显示文件的文件名和相关属性。
#ls -l 路径 【ls -l 等价于 ll】
标红的部分就是 Linux 的文档权限属性信息。
Linux 中存在用户(owner)、用户组(group)和其他人(others)概念,各自有不同的权限,对于一个文档来说,其权限具体分配如下:
bVk3s0
十位字符表示含义:
第 1 位:表示文档类型,取值常见的有“d 表示文件夹”、“-表示文件”、“l 表示软连接”、“s 表示套接字”、“c 表示字符设备”、“b 表示块状设备”等等;
第 2-4 位:表示文档所有者的权限情况,第 2 位表示读权限的情况,取值有 r、-;第 3 位表示写权限的情况,w 表示可写,-表示不可写,第 4 位表示执行权限的情况,取值有 x、-。
第 5-7 位:表示与所有者同在一个组的用户的权限情况,第 5 位表示读权限的情况,取值有 r、-;第 6 位表示写权限的情况,w 表示可写,-表示不可写,第 7 位表示执行权限的情况,取值有 x、-。
第 8-10 位:表示除了上面的前 2 部分的用户之外的其他用户的权限情况,第 8 位表示读权限的情况,取值有 r、-;第 9 位表示写权限的情况,w 表示可写,-表示不可写,第 10 位表示执行权限的情况,取值有 x、-。
注意:除了权限位上的 rwx 以及-之外,还有一些特殊的权限代码“s”、“t”,这些不在本次考虑范围内。(黏贴位,特殊权限位)
权限分配中,均是 rwx 的三个参数组合,且位置顺序不会变化。没有对应权限就用 – 代替。
语法:#chmod [选项] 权限模式 文档路径
注意事项:
常用选项:
-R:递归设置权限 (当文档类型为文件夹的时候)
权限模式:就是该文档需要设置的权限信息
文档:可以是文件,也可以是文件夹,可以是相对路径也可以是绝对路径。
注意点:如果想要给文档设置权限,操作者要么是 root 用户,要么就是文档的所有者。
给谁设置:
u:表示所有者身份 owner(user)
g:表示给所有者同组用户设置(group)
o:表示 others,给其他用户设置权限
a:表示 all,给所有人(包含 ugo 部分)设置权限
如果在设置权限的时候不指定给谁设置,则默认给所有用户设置
什么权限-权限字符:
r:读
w:写
x:表示执行
-:表示没有权限
如何设置-权限分配方式:
+:表示给具体的用户新增权限(相对当前)
-:表示删除用户的权限(相对当前)
=:表示将权限设置成具体的值(注重结果)【赋值】
设置多个身份的权限时候,每个身份之间需要通过英文逗号分开。
例如:需要给/root/anaconda-ks.cfg 文件(-rw——-.)设置权限,要求所有者拥有全部的权限,同组用户拥有读和写权限,其他用户只读权限。
答案:
#chmod u+x,g+rw,o+r /root/anaconda-ks.cfg
或者:
#chmod u=rwx,g=rw,o=r /root/anaconda-ks.cfg
提示:当文档拥有执行权限(任意部分),则其颜色在终端中是绿色。
#chmod ug=rwx 形式,如果有两部分权限一样则可以合在一起写的
等价于:
#chmod u=rwx,g=rwx
例如:如果 anaconda-ks.cfg 文件什么权限都没有,可以使用 root 用户设置所有的人都有执行权限,则可以写成
什么权限都没有应该是:———-
目标的效果:—x–x–x
#chmod a=x anaconda-ks.cfg
#chmod a+x anaconda-ks.cfg
#chmod u+x,g+x,o+x anaconda-ks.cfg
#chmod ugo=x anaconda-ks.cfg
#chmod ugo+x anaconda-ks.cfg
#chmod +x anaconda-ks.cfg
案例:设置文件“~/php/php.txt”权限,要求所有者全部权限,同组用户拥有读权限、写权限,其他人拥有读权限
#chmod u=rwx,g=rw,o=r ~/php/php.txt
更改要求:所有者全部权限,同组用户拥有读权限、写权限,其他人拥有读权限、写权限
#chmod o+w ~/php/php.txt
练习:
① 设置文件夹/tmp/php 的权限(如果文件夹不存在,自行创建),要求权限为递归权限,并且所有者有全部权限,同组用户有读执行权限,其他用户只读权限;
#mkdir /tmp/php
#chmod -R u=rwx,g=rx,o=r /tmp/php
② 设置文件/tmp/php/class.sh 权限,文件如果不存在则自行创建,要求权限为所有者全部权限,同组用户读和执行权限,其他用户没有权限;
#touch /tmp/php/class.sh
#chmod u=rwx,g=rx,o=— /tmp/php/class.sh
③ 使用普通用户在/tmp/php 目录下创建 test 目录,设置目录权限为所有者拥有全部权限,同组用户只读,其他用户只读;(创建不了 test 用户)
经常会在一些技术性的网页上看到类似于#chmod 777 a.txt 这样的一个权限,这种形式称之为数字形式权限(777)。
读:r 4
写:w 2
执行:x 1
没有任何权限(-):0
组合权限数字的时候遵循,最短路径要求,并且最多只能出现一次。
例如:需要给 anaconda-ks.cfg 设置权限,权限要求所有者拥有全部权限,同组用户拥有读执行权限,其他用户只读。
分析:
所有者(第 1 位):全部权限 = 读 + 写 + 执行 = 4 + 2 + 1 = 7
同组用户(第 2 位):读执行 = 读 + 执行 = 4 + 1 = 5
其他用户(第 3 位):读 = 4
组合: 754
最终得出的结果是 754
#chmod 754 anaconda-ks.cfg
面试题:用超级管理员设置文档的权限命令是#chmod -R 731 aaa,请问这个命令有没有什么不合理的地方?
所有者 = 7 = 4 + 2 + 1 = 读 + 写 + 执行
同组用户 = 3 = 2 + 1 = 写 + 执行
其他用户 = 1 = 执行
问题在权限 731 中 3 表示写+执行权限,但是写又不必须需要能打开之后才可以写,因此必须需要具备读权限,因此权限不合理。以后建议各位在设置权限的时候不要设置这种“奇葩权限”。单独出现 2、3 的权限数字一般都是有问题的权限
注意:在写权限的时候千万不要设置类似于上面的这种“奇葩权限”。如果一个权限数字中但凡出现 2 与 3 的数字,则该权限有不合理的情况。
练习:
① 使用 root 用户设置文件夹/root/20180811 的权限为:所有者全部权限,同组用户拥有读和执行权限,其他用户没有权限,请使用数字权限的形式设置,写出指令;750
② 请使用 root 用户写出设置文件/root/20180811.txt 文件的权限,权限要求为:所有者拥有全部权限,同组用户要求可以读写,其他用户只读,要求使用数字形式;764
③ 张三疯(root)收到某个 MM 的情书,请使用数字形式设置张三疯的 Email 情书权限(文件为/root/email.doc),权限要求只有所有者可以读写,除此之外任何人没有权限;600
使用 root 用户创建一个文件夹(/oo),权限默认,权限如下:
需要在 oo 目录下创建文件(oo/xx.txt),需要给 777 权限:
扩展:
在 Linux 系统中,创建文档的权限有一个默认值,以当前的系统为例,其创建文件夹之后的默认权限是 755,创建文件之后的权限是 644。
之所以会这样是受到了系统中 umask(掩码)的值的影响,其是用于指定文档创建好之后的权限,umask 默认为 022。
计算方式:
对于文件:文件的权限 = 666 – umask 掩码
对于文件夹:文件夹的权限 = 777 - umask 掩码
切换到 admin 用户(不是文档所有者,也不是同组用户,属于 other 部分):
问题 1:admin 用户是否可以打开 oo/xx.txt 文件?
问题 2:admin 用户是否可以编辑 oo/xx.txt 文件?
问题 3:admin 用户是否可以删除 oo/xx.txt 文件?
在 Linux 中,如果要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写权限,如果有才可以删除。
属主:所属的用户(文件的主人),文档所有者
属组:所属的用户组(同组用户的组名称)
前面的那个 root 就是属主
后面的那个 root 就是属组
这两项信息在文档创建的时候会使用创建者的信息(用户名、用户所属的主组名称)。
之所以需要设置这个:如果有时候去删除某个用户,则该用户对应的文档的属主和属组信息就需要去修改(类似离职之前的工作交接)。
作用:更改文档的所属用户(change owner)
语法:#chown [-R] 新的 username 文档路径
注意:修改所有者的人必须是 root 或者所有者自己,其他人无权修改所有者。
案例:将先前设置的/oo 目录的所有者设置成成 admin
#chown -R admin /oo
作用:更改文档的所属用户组(change group)
语法:#chgrp [-R] groupname 文档的路径
案例:将刚才 oo 目录的所有用户组名改为 admin
#chgrp -R admin /oo
思考,如何通过一个命令实现既可以更改所属的用户,也可以修改所属的用户组呢?
答:可以实现的,通过 chown 命令
语法:#chown [-R] username:groupname 文档路径
案例:将刚才 oo 的文档的所属组所属用户修改为 root
#chown -R root:root /oo
问题:zhangsan 用户使用自己的帐号创建文件 index.html,并且当时默认的权限是 644,后续管理员 root 将该文件的属主改成了 lisi,属组改成 lisi,则 zhangsan 对文件的操作权限有变化吗?如果有权限是多少?
问题:reboot、shutdown、init、halt,在普通用户身份上都是操作不了,但是有些特殊的情况下又需要有执行权限。又不可能让 root 用户把自己的密码告诉普通用户,这个问题该怎么解决?
该问题是可以被解决的,可以使用 sudo(switch user do)命令来进行权限设置。Sudo 可以让管理员(root)事先定义某些特殊命令谁可以执行。
默认 sudo 中是没有除 root 之外用户的规则,要想使用则先配置sudo。
Sudo 配置文件:/etc/sudoers
该文件默认只读,不允许修改,因此不能直接修改。
a. 配置 sudo 文件请使用“#visudo”,打开之后其使用方法和 vim 一致
b. 配置普通用户的权限
Root 表示用户名,如果是用户组,则可以写成“%组名”
ALL:表示允许登录的主机(地址白名单)
(ALL):表示以谁的身份执行,ALL 表示 root 身份
ALL:表示当前用户可以执行的命令,多个命令可以使用“,”分割
案例:使用 admin 这个用户,赋予其添加用户权限。
注意:在写 sudo 规则的时候不建议写直接形式的命令,而是写命令的完整路径。
路径可以使用 which(whereis 亦可)命令来查看
语法:#which 指令名称
Whereis 会找出一些非可执行文件,建议使用 which
在添加好对应的规则之后就可以切换用户,切换到普通用户 admin,再去执行:
此时要想使用刚才的规则,则以以下命令进行:
#sudo 需要执行的指令(就是放权的指令名称)
此时输入的密码是当前执行 sudo 指令的用户的密码,而非 root 密码。
在输入 sudo 指令之后需要输入当前的用户密码进行确认的操作(不是 root 用户密码),输入之后在接下来 5 分钟内再次执行 sudo 指令不需要密码。
补充:在普通用户下怎么查看自己具有哪些特殊权限呢?
#sudo -l 表示 list
最后:sudo 不是任何 Linux 分支都有的命令,常见 centos 与 ubuntu 都存在 sudo 命令。
作业:使用 sudu 实现让普通用户具备添加、删除用户的权限。
运行模式也可以称之为运行级别(Running Level)。
在 linux 中存在一个进程:init (initialize,初始化),进程 id 是 1。
查看进程:#ps -ef|grep init
该进程存在一个对应的配置文件:inittab(系统运行级别配置文件,位置/etc/inittab)
文件的主要内容:
根据上述的描述,可以得知,Centos6.5 中存在 7 种运行级别/模式。
0 — 表示关机级别(不要将默认的运行级别设置成这个值)
1 — 单用户模式(找回 root 密码的)
2 — 多用户模式,不带 NFS(Network File Syetem)
3 — 多用户模式,完全的多用户模式(不带桌面的,纯命令行模式)
4 — 没有被使用的模式(被保留模式)
5 — X11,完整的图形化界面模式
6 — 表示重启级别(不要将默认的运行级别设置成这个值)
与该级别相关的几个命令(临时切换,立即生效):
#init 0 表示关机
#init 3 表示切换到不带桌面的模式(CLI 命令行模式)
#init 5 切换到图形界面(前提必须先确保已经安装了图形化界面)
#init 6 重启电脑
注意:init 指令需要超级管理员的权限,普通用户无法执行。
这些命令其实都是调用的 init 进程,将数字(运行级别)传递给进程,进程去读配置文件执行对应的操作。
① 切换到纯命令行模式下(临时切换,重启之后又恢复)
#init 3
切换之后需要输入用户名和密码,在输入密码的时候没有“*”提示输入,只要自己确认输入的密码没有错误,按下回车即可。
② 回到桌面模式
#init 5
③ 设置模式永久为命令行模式
将/etc/inittab 文件中的 initdefault 值设置成 3,然后重启操作系统。
切换重启之后默认即命令行模式:
需要的场景:远程连接、配置相关软件时
指令:#ifconfig
得知的信息有:
① 有 2 块网卡,一个叫 eth0,另一个 lo(本地回环网卡,本机 ip)
②ip 地址是 inet addr 那一项
位置:/etc/sysconfig/network-scripts/ifcfg-*文件
ONBOOT:表示是否自动连接
BOOTPROTO(COL):网卡启动之后使用的协议,一般情况下是 DHCP
HWADDR:硬件地址(mac 地址,物理地址),计算机之间的通信都是依赖于 mac 地址
扩展:针对像网卡配置目录层次比较深的文件,如果需要频繁更改,可以将需要的文件设置一个快捷方式,将其放在经常操作的目录,以简化后续的打开文件操作。
语法:#ln -s 原始路径 快捷方式路径
案例:将 ifcfg-eth0 文件在 root 家目录下创建快捷方式。
#ln -s /etc/sysconfig/network-scripts/ifcfg-eth0 /root/wangka.conf
可以通过 service 指令来对网络的服务进行重启/停止/启动等操作。
语法:#service network start/stop/restart (操作所有的网卡设备)
上述的指令还等价于:#/etc/init.d/network start/stop/restart
补充对于单个网卡的操作:
#ifdown 网卡名 停止某个网卡
#ifup 网卡名 启动某个网卡
注意:上述这些操作不要随意在服务器上运行。
ssh(secure shell,安全外壳协议),该协议有 2 个常用的作用:远程连接、远程文件传输。
协议使用端口号:默认是 22。
可以是被修改的,如果需要修改,则需要修改 ssh 服务的配置文件:
#/etc/ssh/ssh_config
端口号可以修改,但是得注意 2 个事项:
a. 注意范围,端口范围是从 0-65535;
b. 不能使用别的服务已经占用的端口(常见的不能使用:20,21,23,25,80,443,3389,3306,11211 等等);
服务启动/停止/重启 {服务名中的 d 全称 daemon,守护进程}
#service sshd start/stop/restart
#/etc/init.d/sshd start/stop/restart
Sshd 服务一般默认就已经启动,不需要再去启动,可以在修改完其配置的情况下重启。
终端工具主要帮助运维人员连接远程的服务器,常见终端工具有:Xshell、secureCRT、Putty 等。以 putty 为例:
① 获取服务器 ip 地址,可以通过 ifconfig 命令进行查看,然后顺手测试 ip 的连接相通性
#ifconfig
此处获取的 ip 地址地址还是 192.168.254.130
测试连通性:ping 192.168.254.130
② 打开 putty,输入相关的信息
③ 在弹出 key 确认的时候点击“是”,以后不会再提示
④ 输入登录信息
之前在虚拟机的 centos 中全部的指令在远程终端中都是可以得到执行的。
扩展:不借助第三方工具实现远程连接。
① 打开 Windows 的 cmd 黑窗口(前提是 Windows 必须安装 ssh 服务,如果没有而需要这个功能,则自行安装 openSSH)
② 输入“ssh 需要登录的用户名@远程服务器的连接地址”回车
③ 输入密码
例如:
可视化的界面传输工具:Filezilla
安装好之后可以查看到桌面图标:
① 选择“文件”- “站点管理器(Ctrl + S)”
② 点击“文件”菜单下方的“▽”选择需要连接的服务器,连接好之后的效果
③ 从本地 windows 上传文件到 linux 中方式
支持直接拖拽文件,也可以右键本地需要上传的文件,然后点选“上传”即可
④ 下载 linux 文件到本地
支持服务器文件直接拖拽到本地,也可以在右侧窗口选择需要下载的文件,右键,点选“下载”。
在 Linux 系统中,软件的管理方式有三种:rpm、yum、编译方式。
优点:对于软件包的操作比较简单,通过简单指令即可操作
缺点:
① 安装时需要自行下载软件包
② 安装、卸载软件时需要考虑到依赖关系
③ 软件的自定义性比较差,不适合有特殊需求的场景
语法:
① 查询
#rpm -qa 关键词 (查询机器上是否有安装指定的软件包)
选项说明:
-q:query,查询
-a:all,所有
② 卸载
#rpm -e 软件包全称 [–nodeps] (卸载软件,包的全称需要通过 ① 去查询)
选项说明:
-e:卸载
--nodeps:忽略依赖关系
③ 安装
#rpm -ivh 软件包路径 (软件包的下载需要自行解决)
选项说明:
-i:install,安装
-v:显示安装过程
-h:以“#”形式显示安装过程
④ 更新(了解)
#rpm -Uvh 软件包路径 (软件包的下载需要自行解决)
选项说明:
-U:upgrade,升级
-v:显示安装过程
-h:以“#”形式显示安装过程
案例:查询、卸载、安装 firefox 浏览器。
查询:
卸载:
安装:
① 查找 FF31.1.0 软件包
/https://cdn.jsdelivr.net/gh/JingHong0202/blog_images/images/CentOS_6.6_Final/Packages
② 开始安装
优点:
① 快速、傻瓜式的软件管理方式
② 在联网情况下,自动从服务器上下载软件包(内、外网服务器均可)
③ 自动解决软件依赖关系
缺点:
因其底层实为 rpm 操作,所以也丧失了对软件的自定义功能
Yum 常用语法:
① 搜索/查询相关
#yum search [all] 关键词 (根据关键词搜索服务器上的包资源)
#yum list [关键词] (列出所有的包,包含已经安装的和可供安装的)
#yum list installed [关键词] (列出当前已经安装的包)
② 安装
注意:操作指令(install)与-y 选项可以颠倒,下同。
#yum [-y] install 关键词 (安装指定的软件)
③ 卸载
#yum [-y] remove 关键词 (卸载指定的软件)
④ 更新
#yum [-y] update (更新整个系统,包含内核)
#yum [-y] update 关键词
案例:使用 yum 方式快速安装 LAMP环境。
建议采用 PAM 的安装顺序,原因是在安装 php 的时候,yum 会顺带安装 apache。
#yum install php
#yum install mysql-server
MySQL 的初始化(设置 root 密码的):
#service mysqld start
#mysql_secure_installation
启动 apache
#service httpd start
安装好的 apache 默认站点在:/var/www/html/位置
Apache 配置文件位于:/etc/httpd/conf/httpd.conf
优点:
① 用户可选择需要的软件功能
② 源码方式,有开发能力的用户,可对源码进行自定义
缺点:
① 需要自行解决依赖关系
② 编译时间较长
③ 容易出错,一旦出错,需要重新编译安装
编译安装步骤:
① 下载源码包
② 解压源码包
③ 进入解压目录
④ 配置安装
⑤ 编译
⑥ 安装
案例:编译安装 Nginx。
类似于 apache,是一款开源的 web 服务器软件,其默认用的端口号也是 80。
① 下载 nginx 包
下载地址:https://nginx.org/en/download.html
复制下载地址。
需要将下载地址在终端中输入,进行下载:
#cd /usr/local/src
#wget https://nginx.org/download/nginx-1.15.5.tar.gz
② 解压压缩包
#tar -jxvf 路径(针对.tar.bz2 格式)
#tar -zxvf 路径(针对.tar.gz 格式) 【当前选这个】
#tar -zxvf nginx-1.15.5.tar.gz
③ 进入解压后的目录
#cd nginx-1.15.5
④ 配置安装
配置包含:指定安装的位置、需要的模块功能
指定位置使用:–prefix 选项
例如:–prefix=/usr/local/nginx
# ./configure –prefix=/usr/local/nginx
需要安装 2 个依赖:
#yum install pcre-devel
#yum install zlib-devel
然后继续重新配置,确认没有问题会看到如下效果:
⑤ 编译&&完成安装
#make && make install
测试 NGINX 的使用:
#service httpd stop
注意:nginx 编译安装之后不支持 service 指令进行操作,需要找到 nginx 的执行文件才能启动。
nginx -s reload ## 重新载入配置文件 nginx -s reopen ## 重启 Nginx nginx -s stop # #停止 Nginx
命令
css
tab键可以补全文件或路径名进入指定目录cd/usr/local/src/下载资源(淘宝镜像 .gz后缀文件)
wget https://nodejs.org/dist/v10.12.0/node-v10.12.0-linux-x64.tar.gz 下载完成后, 执行解压命令 tar xvf node-v10.12.0-linux-x64.tar.gz
删掉文件 rm -f 文件名 cd node-v10.12.0-linux-x64/bin 查看文件,会看到 node npm ls 设置全局, 在任何目录都可能运行
node 和 npm 命令 ln -s / usr/local/src/node-v10.12.0-linux-x64/bin/node / usr/local/bin/node
ln -s / usr/local/src/node-v10.12.0-linux-x64/bin/npm / usr/local/bin/npm
因为个别同学服务器地区问题原因,全局变量配置不成功,就配置到 / bin/下面 ln -s /
usr/local/src/node-v10.12.0-linux-x64/bin/node / bin/node ln -s /
usr/local/src/node-v10.12.0-linux-x64/bin/npm / bin/npm;
css
11. 安全组开放访问端口
- 进入实例
- 安全组
- 配置规则
- 添加安全规则
- 协议类型 TCP
- 80/80
- 6000/9999
- 443/443
- 协议类型 HTTP/HTTPS
- 80/80
- 授权类型:地址段访问
- 授权对象
- 0.0.0.0/0
图形化文件上传工具
/usr/local/src
里pm2 是一个带有负载均衡功能的 Node 应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有 CPU,并保证进程永远都活着
css
进入node/bin目录安装pm2
npm i -g pm2
$ pm2 start app.js -i 4
#后台运行pm2,启动4个app.js # 也可以把'max' 参数传递给 start # 正确的进程数目依赖于Cpu的核心数目
$ pm2 start app.js --name my-api
# 命名进程
$ pm2 list
# 显示所有进程状态
$ pm2 monit
# 监视所有进程
$ pm2 logs
# 显示所有进程日志
$ pm2 stop all
# 停止所有进程
$ pm2 restart all
# 重启所有进程
$ pm2 reload all
# 0秒停机重载进程 (用于 NETWORKED 进程)
$ pm2 stop 0
# 停止指定的进程
$ pm2 restart 0
# 重启指定的进程
$ pm2 startup
# 产生 init 脚本 保持进程活着
$ pm2 web
# 运行健壮的 computer API endpoint (http://localhost:9615)
$ pm2 delete 0
# 杀死指定的进程
$ pm2 delete all
# 杀死全部进程 运行进程的不同方式:
$ pm2 start app.js -i max
# 根据有效CPU数目启动最大进程数目
$ pm2 start app.js -i 3
# 启动3个进程
$ pm2 start app.js -x
#用fork模式启动 app.js 而不是使用 cluster
$ pm2 start app.js -x -- -a 23
# 用fork模式启动 app.js 并且传递参数 (-a 23)
$ pm2 start app.js --name serverone
# 启动一个进程并把它命名为 serverone
$ pm2 stop serverone
# 停止 serverone 进程
$ pm2 start app.json
# 启动进程, 在 app.json里设置选项
$ pm2 start app.js -i max -- -a 23
#在--之后给 app.js 传递参数
$ pm2 start app.js -i max -e err.log -o out.log
# 启动 并 生成一个配置文件 你也可以执行用其他语言编写的app ( fork 模式):
$ pm2 start my-bash-script.sh -x --interpreter bash
$ pm2 start my-python-script.py -x --interpreter python
yum install -y unzip zip
css
Linux中zip压缩和unzip解压缩命令详解
1、把/home目录下面的mydata目录压缩为mydata.zip
zip -r mydata.zip mydata #压缩mydata目录
2、把/home目录下面的mydata.zip解压到mydatabak目录里面
unzip mydata.zip -d mydatabak
3、把/home目录下面的abc文件夹和123.txt压缩成为abc123.zip
zip -r abc123.zip abc 123.txt
4、把/home目录下面的wwwroot.zip直接解压到/home目录里面
unzip wwwroot.zip
5、把/home目录下面的abc12.zip、abc23.zip、abc34.zip同时解压到/home目录里面
unzip abc\*.zip
6、查看把/home目录下面的wwwroot.zip里面的内容
unzip -v wwwroot.zip
7、验证/home目录下面的wwwroot.zip是否完整
unzip -t wwwroot.zip
8、把/home目录下面wwwroot.zip里面的所有文件解压到第一级目录
unzip -j wwwroot.zip
主要参数
-c:将解压缩的结果
-l:显示压缩文件内所包含的文件
-p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
-t:检查压缩文件是否正确
-u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到目录中
-v:执行是时显示详细的信息
-z:仅显示压缩文件的备注文字
-a:对文本文件进行必要的字符转换
-b:不要对文本文件进行字符转换
-C:压缩文件中的文件名称区分大小写
-j:不处理压缩文件中原有的目录路径
-L:将压缩文件中的全部文件名改为小写
-M:将输出结果送到more程序处理
-n:解压缩时不要覆盖原有的文件
-o:不必先询问用户,unzip执行后覆盖原有文件
-P:使用zip的密码选项
-q:执行时不显示任何信息
-s:将文件名中的空白字符转换为底线字符
-V:保留VMS的文件版本信息
-X:解压缩时同时回存文件原来的UID/GID
css
下载安装包lrzsz-0.12.20.tar.gz : http://www.ohse.de/uwe/software/lrzsz.html
# wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz
# tar zxvf lrzsz-0.12.20.tar.gz && cd lrzsz-0.12.20
# ./configure && make && make install
上面安装过程默认把lsz和lrz安装到了/usr/local/bin/目录下, 下面创建软链接, 并命名为rz/sz:
# cd /usr/bin
# ln -s /usr/local/bin/lrz rz
# ln -s /usr/local/bin/lsz sz
yum install -y lrzsz
shutdown -h 10 #计算机将于10分钟后关闭,且会显示在登录用户的当前屏幕中
shutdown -h now #计算机会立刻关机
shutdown -h 22:22 #计算机会在这个时刻关机
shutdown -r now #计算机会立刻重启
shutdown -r +10 #计算机会将于10分钟后重启
reboot #重启
halt #关机
进入到 node 的安装目录 cd /usr/local/src/你的 node 目录/bin
> npm install -g n
ls> n latest
默认会安装到 /usr/local/n/versions/node/11.0.0which node /usr/local/bin/node
> export PATH=$N_PREFIX/bin:$PATH
:wq 保存退出