Linux
Linux
概述
Linux是基于Unix的,Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机。
Linux系统的应用
- 服务器系统、web应用服务器、数据库服务器、接口服务器、DNS、FTP…
- 嵌入式系统路由器、防火墙、手机、PDA、IP分享器、交换器、家电用品的微电脑控制器等等
- 高性能运算、计算密集型应用(Linux有强大的运算能力)
- 桌面应用系统
- 移动手持系统
Linux的版本
Linux的版本分为两种:内核版本和发行版本。内核版本是指在Linus领导下的内核小组开发维护的系统内核版本号
Linux的安装
什么是虚拟机
虚拟机:
一台虚拟的电脑
虚拟软件:
虚拟软件是一个可以使你在一台机器上同时运行二个或更多Windows、LINUX等系统。它可以模拟一个标准PC环境。这个环境和真实的计算机一样,都有芯片组、CPU、内存、显卡、声卡、网卡、软驱、硬盘、光驱、串口、并口、USB控制器等
常用的虚拟软件:
- VmWare:收费的
- VirtualBox:免费的。
安装VmWare
- 双击安装exe软件
- 点击next进行安装
- 选择安装方式(Typical)
- Typical:典型安装
- Custom:自定义安装
- 选择程序安装的位置
- 选择是否自动检测更新,如果勾选,有新版本是会提示你更新版本,点击next进行下一步
- 创建快捷方式,选择后点击next
- 配置完成,开始安装程序,点击continue
- 开始安装虚拟原件
注意:虚拟软件安装完成后会在控制面板\网络和Internet\网络连接下多出两个虚拟网卡Vmware Network Adapter VMnet1 和VMWare Network Adapter VMnet8,需要将这两个网卡禁用,不然就无法收到视频了
CentOS6安装
文件->新建虚拟机或直接点击创建新的虚拟机图标
选择典型(推荐)-> 下一步
选择稍后安装操作系统 -> 下一步
选择操作系统和版本(Linux版本CentOS64位)
输入虚拟机名称和安装路径
设置磁盘大小(选择将磁盘拆分为多个文件)
自定义硬件
选择CentOS安装镜像文件
点击安装完成
启动虚拟机
选择第一项,安装全新操作系统或者现有操作系统
Tab键进行选择,选择Skip,退出检测
点击next
选择语言,选择中文简体
选择键盘样式
选择存储设备(基本存储设备)
输入主机名
配置网络

设置时区,勾选使用UTC时间
输入根用户(root)的密码
根据Linux具体功能选择不同的方式

选择现在自定义,自定义安装需要的软件,如桌面配置、安装Eclipse、Java平台等等
点击下一步,开始安装
安装完成后,点击重新导引
点击前进按钮
点击是,同意许可,在点击前进按钮
创建用户
设置日期和时间,如果可以上网,勾选在网上同步日期和时间,最后点击前进,完成安装。
Linux的远程访问
一般是通过xshell和CRT软件去连接
Linux的目录结构
Linux的常用命令
Tab键,输入文件前几个字母,按住Tab键,Linux会帮我们自动补全
目录管理
绝对路径、相对路径
绝对路径:路径的全称
相对路径:相对当前文件的路径
返回上一级目录:cd ..
当前目录:./
ls(列出目录!)
在Linux中ls可能是最常常被使用的!
-a参数:all,查看全部的文件,包括隐藏文件
-l参数:列出所有的文件,包含文件的属性和权限,没有隐藏文件
所有Linux命令可以组合使用。
1 |
|
cd命令 切换目录
cd 目录名(绝对路径都是以/开头的,相对路径,相对于当前目录该如何寻找)
1 |
|
pwd 显示当前用户所在的目录
1 |
|
mkdir 创建一个目录
1 |
|
rmdir删除目录(只能删除空的文件夹)
rmdir仅能删除空的目录,如果下面存在文件,需要先删除文件,递归删除多个目录加-p即可
1 |
|
cp(复制文件或者目录)
cp 原来的地方 新的地方
1 |
|
如果拷贝目录下文件重复,就选择覆盖(y)或者放弃(n)
如果拷贝到其他目录,路径选择绝对路径或着相对路径
1 |
|
rm(移除文件或者目录!)
-f:忽略不存在的文件,不会出现警告,强制删除
-r:递归删除目录!
-i:互动,删除询问是否删除
rm -rf:系统中的所有文件就被删除了,删库跑路就是这么操作的!
1 |
|
mv 移动文件或者目录!或者重命名文件
-f:强制移动
-u:只替换已经更新过得文件
1 |
|
基本属性
看懂文件属性
Linux系统是一种典型的多用户系统,不同用户处于不同地位,拥有不同权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在LInux中我们可以使用ll
或者ls -l
命令来显示一个文件的属性以及文件所属的用户和组。
1 |
|
实例中,boot文件的第一个属性用”d”表示。”d”在linux中代表改文件是一个目录文件。
在Linux中第一个字符代表这个文件是目录、文件或者链接文件等等:
- 当为【d】则是目录
- 当为【-】则是文件
- 当为【I】则表示为链接文档(link file,快捷方式之类的)
- 若是【b】则表示为装置文件里面的可供存储的接口设备(可随机存取装置)
- 若是【c】则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
接下来的字符中,以三个为一组,且均为【rwx】的三个参数的组合。其中【r】代表可读(read)、【w】代表可写(write)、【x】代表可执行(execute)。要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号【-】而已。每个文件的属性由左边第一部分的10个字符来确定:
文件类型 | 属主权限 | 属组权限 | 其他用户权限 |
---|---|---|---|
0 | 1 2 3 | 4 5 6 | 7 8 9 |
d | r w x | r - x | r - x |
目录文件 | 读 写 执行 | 读 写 执行 | 读 写 执行 |
从左至右用0-9这些数字来表示。
第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限,第4-6位确定属组(所有者的同组用户)拥有该问文件的权限,第7-9位确定其他用户拥有该文件的权限。
其中:
第1、4、7位表示读权限,如果用”r”字符表示,则有读权限,如果用”-“字符表示,则没有读权限
第2、5、8位表示写权限,如果用”w”字符表示,则有写权限,如果用”-“字符表示,则没有写权限
第3、6、9位表示可执行权限,如果用”x”字符表示,则有执行权限,如果用”-“字符表示,则没有执行权限。
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
同时,在linux系统中,用户是按组分类的,一个用户属于一个或多个组
文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户
因此,linux系统按文件所有者,文件所有者同组用户和其他用户来规定了不同的文件访问权限
在以上实例中,boot是一个目录文件,属主和属组都为root
修改文件属性
- chgrp:更改文件属组(ch就是change,grp:group组)
1 |
|
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会改变
- chown:更改文件属主,也可以同时更改文件属组(ch:change,own:owner,主人)
1 |
|
- chmod:更改文件9个属性(必须要掌握)
你没有权限操作此文件
1 |
|
Linux文件属性有两种设置方法,一种是数字(常用的数字),一种是符号。
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
先复习下刚刚上面提到的数据:文件的权限字符为:[-rwxrwxrwx],这九个权限是三个三个一组的,其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
1 |
|
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:[-rwxrwx—],分数则是:
owner = rwx=4+2+1=7
group = rwx=4+2+1=7
others =— =0+0+0=0
1 |
|
文件查看内容
Linux系统中使用以下命令来查看文件的内容:
cat由第一行开始显示文件内容,用来读文章,或者读取配置文件,都可以使用cat命令
tac从最后一行开始显示,可以看出tac是cat的倒着写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22[root@iZwz9co82as0c0mputkvksZ network-scripts]# cat ifcfg-eth0
# Created by cloud-init on instance boot automatically, do not edit.
# If you don't want cloud-init genrated automatically,you can disable it in /etc/cloud/cloud.cfg
# For more information, please refer to: https://help.aliyun.com/document_detail/57803.html
#
BOOTPROTO=dhcp
DEVICE=eth0
ONBOOT=yes
STARTMODE=auto
TYPE=Ethernet
USERCTL=no
[root@iZwz9co82as0c0mputkvksZ network-scripts]# tac ifcfg-eth0
USERCTL=no
TYPE=Ethernet
STARTMODE=auto
ONBOOT=yes
DEVICE=eth0
BOOTPROTO=dhcp
#
# For more information, please refer to: https://help.aliyun.com/document_detail/57803.html
# If you don't want cloud-init genrated automatically,you can disable it in /etc/cloud/cloud.cfg
# Created by cloud-init on instance boot automatically, do not edit.nl显示的时候,顺道输出行号,看代码的时候,希望显示行号。(常用)
1
2
3
4
5
6
7
8
9
10
11
12[root@iZwz9co82as0c0mputkvksZ network-scripts]# nl ifcfg-eth0
1 # Created by cloud-init on instance boot automatically, do not edit.
2 # If you don't want cloud-init genrated automatically,you can disable it in /etc/cloud/cloud.cfg
3 # For more information, please refer to: https://help.aliyun.com/document_detail/57803.html
4 #
5 BOOTPROTO=dhcp
6 DEVICE=eth0
7 ONBOOT=yes
8 STARTMODE=auto
9 TYPE=Ethernet
10 USERCTL=nomore一页一页的显示文件内容
(使用空格键翻页,enter代表向下看一行,:f可以查看当前行号)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45[root@iZwz9co82as0c0mputkvksZ etc]# more csh.login
# /etc/csh.login
# System wide environment and startup programs, for login setup
if ( ! ${?PATH} ) then
if ( $uid == 0 ) then
setenv PATH "/usr/local/sbin:/usr/sbin:/usr/local/bin:/
usr/bin"
else
setenv PATH "/usr/local/bin:/usr/bin:/usr/local/sbin:/u
sr/sbin"
endif
else
#add sbin directories to the path
foreach p ( /usr/local/sbin /usr/sbin )
switch (":${PATH}:")
case "*:${p}:*":
breaksw
default:
if ( $uid == 0 ) then
set path = ( ${p} ${path:q} )
else
set path = ( ${path:q} ${p} )
endif
breaksw
endsw
end
endif
setenv HOSTNAME `/usr/bin/hostname`
set history=1000
if ( -d /etc/profile.d ) then
set nonomatch
foreach i ( /etc/profile.d/*.csh /etc/profile.d/csh.local )
if ( -r "$i" ) then
if ($?prompt) then
source "$i"
else
source "$i" >& /dev/null
endif
endif
--More--(96%)less与more类似,但是比more更好的是,他可以往前翻页(空格下翻页 ,上下键代表翻动页面,退出使用q命令,查找字符串/要查询的字符向下查询,向上查询使用?要查询的字符串,n继续搜寻下一个,N向上寻找)
head只看头几行,通过-n参数来控制显示几行!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22[root@iZwz9co82as0c0mputkvksZ etc]# head -n 20 csh.login
# /etc/csh.login
# System wide environment and startup programs, for login setup
if ( ! ${?PATH} ) then
if ( $uid == 0 ) then
setenv PATH "/usr/local/sbin:/usr/sbin:/usr/local/bin:/usr/bin"
else
setenv PATH "/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin"
endif
else
#add sbin directories to the path
foreach p ( /usr/local/sbin /usr/sbin )
switch (":${PATH}:")
case "*:${p}:*":
breaksw
default:
if ( $uid == 0 ) then
set path = ( ${p} ${path:q} )
elsetail只看尾巴几行,-n参数来控制倒着看几行,同上。
你可以使用man命令来查看各个命令的使用文档,如:man cp。
网络配置目录:cd /etc/sysconfig/network-scripts/
默认的网络配置文件:ifcfg-eth0
Linux链接的概念(了解即可)
Linux链接分为两种:硬链接,软链接!
硬链接:A—-B,假设B是A的硬链接,那么他们两个指向了同一文件,允许一个文件拥有多个路径,用户可以通过这种机制建立硬链接到一些重要文件上,防止误删!
软链接:就是类似Windows下的快捷方式,删除了源文件,快捷方式也访问不了了
创建链接使用ln命令
touch命令
创建文件
echo
输入字符串,也可以输入到文件中
1 |
|
Vim编辑器
什么是Vim编辑器
vim通过一些插件可以实现IDE一样的功能。
Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。尤其是Linux中,必须要会使用Vim(查看内容,编辑内容,保存内容)
简单来说vi是老式的字处理器,不过功能已经很齐全了,但是还有可以进步的地方。
vim则可以说是程序开发者的一项很好用的工具
所有Unix Like系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在。
连vim的官方网站(http://www.vim.org)自己也说vim是一个程序开发工具而不是文字处理软件vim-cu3kydzm1t00db2o1yir4u8piujl7fs9iu0cz05dm9cia9416fop5a6v6alskcq2e2dva/)
三种使用模式
基本上vi/vim分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)这三种模式的作用分别是:
1 |
|
命令模式:
用户刚刚启动vi/vim,便进入命令模式。
此状态下敲击键盘动作会被vim识别为命令,而非输入字符,比如我们此时按下i,并不会输入一个字符,i被当做了一个命令。
以下是常用的几个命令:
- i 切换到输入模式,以输入字符
- x 删除当前光标所在的字符。
- :切换到底线命令模式,以在最低一行输入命令。如果是编辑模式需要先退出编辑模式(esc键)
若想要编辑文件:启动Vim,进入命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多的命令。
输入模式:
在命令模式下按下i就进入输入模式
在输入模式中,可以使用以下按键:
- 字符按键以及shift组合,输入字符
- enter,回车键、换行
- back space,退格键,删除光标前一个字符
- del,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- home/end,移动光标到行首/行尾
- page up/page down,上/下翻页
- insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- esc,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下:(英文冒号)就进入底线命令模式,光标就移动到了最底下,就可以在这里输入一些底线命令了。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多
在底线命令模式中,基本的命令有(已经省略了冒号)
- q退出程序
- w保存文件
按esc键可随时退出底线命令模式
Vim按键说明
除了上面简易范例的i,esc,:wq之外,其实vim还有非常多的按键可以使用
第一部分:一般模式可以用的光标移动,复制粘贴,搜索替换等
移动光标的方法 | |
---|---|
h 或 向左箭头键(←) | 光标向左移动一个字符 |
j 或 向下箭头键(↓) | 光标向下移动一个字符 |
k 或 向上箭头键(↑) | 光标向上移动一个字符 |
l 或 向右箭头键(→) | 光标向右移动一个字符 |
[Ctrl] + [f] | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) |
[Ctrl] + [b] | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) |
[Ctrl] + [d] | 屏幕『向下』移动半页 |
[Ctrl] + [u] | 屏幕『向上』移动半页 |
+ | 光标移动到非空格符的下一行 |
- | 光标移动到非空格符的上一行 |
n< space> | 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。 |
0 或功能键[Home] | 这是数字『 0 』:移动到这一行的最前面字符处 (常用) |
$ 或功能键[End] | 移动到这一行的最后面字符处(常用) |
H | 光标移动到这个屏幕的最上方那一行的第一个字符 |
M | 光标移动到这个屏幕的中央那一行的第一个字符 |
L | 光标移动到这个屏幕的最下方那一行的第一个字符 |
G | 移动到这个档案的最后一行(常用) |
nG | n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu) |
gg | 移动到这个档案的第一行,相当于 1G 啊!(常用) |
n< Enter> | n 为数字。光标向下移动 n 行(常用) |
搜索替换 | |
---|---|
/word | 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可!(常用) |
?word | 向光标之上寻找一个字符串名称为 word 的字符串。 |
n | 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串! |
N | 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。 |
删除、复制与粘贴 | |
---|---|
x, X | 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用) |
nx | n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。 |
dd | 删除游标所在的那一整行(常用) |
ndd | n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用) |
d1G | 删除光标所在到第一行的所有数据 |
dG | 删除光标所在到最后一行的所有数据 |
d$ | 删除游标所在处,到该行的最后一个字符 |
d0 | 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 |
yy | 复制游标所在的那一行(常用) |
nyy | n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用) |
y1G | 复制游标所在行到第一行的所有数据 |
yG | 复制游标所在行到最后一行的所有数据 |
y0 | 复制光标所在的那个字符到该行行首的所有数据 |
y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
p, P | p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行!举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢?那么原本的第 20 行会被推到变成 30 行。(常用) |
J | 将光标所在行与下一行的数据结合成同一行 |
c | 重复删除多个数据,例如向下删除 10 行,[ 10cj ] |
u | 复原前一个动作。(常用) |
[Ctrl]+r | 重做上一个动作。(常用) |
第二部分:一般模式切换到编辑模式的可用的按钮说明
进入输入或取代的编辑模式 | |
---|---|
i, I | 进入输入模式(Insert mode):i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。(常用) |
a, A | 进入输入模式(Insert mode):a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用) |
o, O | 进入输入模式(Insert mode):这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』;O 为在目前光标所在处的上一行输入新的一行!(常用) |
r, R | 进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用) |
[Esc] | 退出编辑模式,回到一般模式中(常用) |
第三部分:一般模式切换到指令行模式的可用的按钮说明
指令行的储存、离开等指令 | |
---|---|
:w | 将编辑的数据写入硬盘档案中(常用) |
:w! | 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊! |
:q | 离开 vi (常用) |
:q! | 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。 |
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~ | |
:wq | 储存后离开,若为 :wq! 则为强制储存后离开 (常用) |
ZZ | 这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开! |
:w [filename] | 将编辑的数据储存成另一个档案(类似另存新档) |
:r [filename] | 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面 |
:n1,n2 w [filename] | 将 n1 到 n2 的内容储存成 filename 这个档案。 |
:! command | 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中看 /home 底下以 ls 输出的档案信息! |
:set nu 设置行号,代码中经常使用 | 显示行号,设定之后,会在每一行的前缀显示该行的行号 |
:set nonu | 与 set nu 相反,为取消行号! |
账号管理
简介
Linux系统是一个多用户多任务的分时操作系统,任何一个要是用系统资源的用户,都必须首先向管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一个方面也可以帮助用户组织文件,并为用户提供安全性保护
每一个账户都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有以下几个方面:
- 用户账号的添加、删除与修改
- 用户口令的管理
- 用户组的管理
用户账号的管理
用户账号的管理工作主要涉及到用户账号的添加,修改和删除
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号,用户组,主目录和登录Shell等资源。
属主,属组
useradd 命令添加用户
useradd -选项 用户名
参数说明:
- 选项 :
- -c :comment 指定一段注释性描述。
- -d :目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- -g :用户组 指定用户所属的用户组。
- -G: 用户组,用户组 指定用户所属的附加组。
- -m:使用者目录如不存在则自动建立。比如/home/xgh
- -s: Shell文件 指定用户的登录Shell。
- -u:用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
- 用户名 :
- 指定新账号的登录名。
测试:
1 |
|
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。
删除用户 userdel
userdel -r xgh 删除用户的时候将他的目录页一并删除。
1 |
|
修改用户 usermod
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
修改已有用户的信息使用usermod命令,其格式如下:
1 |
|
常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
例如:
1 |
|
此命令将用户kuangshen的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。
1 |
|
用户的密码设置
用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。
命令的格式为:
1 |
|
可使用的选项:
- -l 锁定口令,即禁用账号。
- -u 口令解锁。
- -d 使账号无口令。
- -f 强迫用户下次登录时修改口令。
如果默认用户名,则修改当前用户的口令。
例如,假设当前用户是kuangshen,则下面的命令修改该用户自己的口令:
1 |
|
如果是超级用户,可以用下列形式指定任何用户的口令:
1 |
|
普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。
为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。
为用户指定空口令时,执行下列形式的命令:
1 |
|
此命令将用户 kuangshen的口令删除,这样用户 kuangshen下一次登录时,系统就不再允许该用户登录了。
passwd 命令还可以用 -l(lock) 选项锁定某一用户,使其不能登录,例如:
1 |
|
切换用户
切换用户的命令为:su username 【username是你的用户名哦】
从普通用户切换到root用户,还可以使用命令:sudo su
在终端输入exit或logout或使用快捷方式ctrl+d,可以退回到原来用户,其实ctrl+d也是执行的exit命令
在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之间加-,例如:【su - root】
$表示普通用户
#表示超级用户,也就是root用户
用户组管理
属主、属组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理(开发组、测试组、运维组、root组),不同Linux系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理设计用户组的添加,删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
创建一个用户组 groupadd
1 |
|
创建完用户组后可以得到一个组的id,这个id是可以指定的( -g 520:指定端口)
如果不指定就是自增。
删除用户组 groupdel
1 |
|
修改用户组的权限信息和名字 groupmod -g | -n
1 |
|
用户切换用户组
1 |
|
扩展:文件的查看
/etc/passwd
1 |
|
这个文件中的每一行都代表这一个用户,我们可以从这里看出这个用户的主目录在那里,可以看到属于哪一个组。
登录口令:把真正加密后的用户口令存放到/etc/shadow文件中,密码进行加密,保证我们密码的安全性。
磁盘管理
df (列出文件系统整体使用量) du(检查磁盘空间使用量,进入文件夹使用,du -a)
1 |
|
1 |
|
Mac或者想使用Linux挂载我们的一些本地磁盘或者文件
挂载:mount
1 |
|
卸载:umount [挂载位置](加-f代表强制卸载)
进程管理
对于我们开发人员来说,其实Linux更多偏向于使用即可。
什么是进程
- 无论在Linux中还是Windows中,每一个程序都有自己的一个进程,每一个进程都有一个id号
- 每一个进程,都有一个父进程
- 进程可以有两种存在方式:前台!(关闭窗口就结束) 后台运行!
- 一般的话服务都是后台运行的,基本的程序都是前台运行的。
命令
ps :查看当前系统中正在执行的各种进程的信息
ps -xx:
- -a 显示当前终端运行的所有的进程信息(当前的进程: 一个)
- -u 以用户的信息显示进程
- -x 显示后台运行进程的参数!
1 |
|
对于我们来说,只需要记住一个命令即可 ps -xx|grep 进程名字!过滤进程信息
ps -ef:可以查看到父进程的信息,看父进程一般可以通过目录树结构来查看(pstree)
1 |
|
结束进程:杀到进程,等价与Windows结束任务
kill -9 进程的id
但是我们平时写的java代码死循环了,可以选择结束进程!杀进程
1 |
|
Linux上常用网络操作
主机名配置
- hostname:查看主机名
- hostname xxx 修改主机名,重启后无效
如果想要永久生效,可以修改/etc/sysconfig/network文件
IP地址配置
- ipconfig:查看(修改)IP地址(重启后无效)
- ipconfig eth0 192.168.12.22 :修改ip地址
如果想要永久生效修改/etc/sysconfig/network-scripts/ifcfg-eth0文件
1 |
|
域名映射
/etc/hosts 文件用于在通过主机名进行访问时做ip地址解析之用,相当于window系统的C:\Windows\System32\drivers\etc\hosts文件的功能
网络服务管理
- service network status:查看指定服务的状态
- service network stop:停止指定服务
- service network start:启动指定服务
- service network restart:重启指定服务
- service –status-all:查看系统中所有的后台服务
- netstat -nltp:查看系统中网络进程的端口监听情况
防火墙设置
防火墙根据配置文件/etc/sysconfig/iptables来控制本机的出、入网络访问行为
- service iptables status :查看防火墙状态
- service iptables stop:关闭防火墙
- service iptables start:启动防火墙
- chkconfig iptables off:禁止防火墙自启
环境安装
安装软件一般有三种方式:
- rpm
- 解压缩
- yum在线安装
JDK安装
==下载jdk rpm安装包==
安装Java环境(如果出现安装32位jdk与64位系统不符的话,执行yum install glibc.i686)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 检测当前系统是否存在java环境! java -version
# 如果有的话就需要卸载
# rpm的话 rpm -qa|grep jdk #检查JDK版本信息
# 然后运行一下代码删除
# yum -y remove jdk1.8-1.8.0_201-fcs.i586
# 或者这个,都可
# rpm -e --nodeps jdk1.8-1.8.0_201-fcs.i586
#卸载完毕即可安装jdk
# rpm -ivh rpm包
#配置环境变量
#查找java安装目录
find / -name 'java'安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19[root@zhuixun zhuixun]# rpm -ivh jdk-8u221-linux-x64.rpm
warning: jdk-8u221-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:jdk1.8-2000:1.8.0_221-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
[root@zhuixun zhuixun]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)卸载
1
2
3[root@zhuixun /]# rpm -qa |grep jdk
jdk1.8-1.8.0_201-fcs.i586
[root@zhuixun /]# yum -y remove jdk1.8-1.8.0_201-fcs.i586配置环境变量
cd /etc/profile
在文件的最后面增加java的配置和Windows安装环境变量一样的!1
2
3
4
5
6
7
8
9
10
11
12
13JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
CLASSPATH=%JAVA_HOME%\lib;%JAVA_HOME%/jre/lib
PATH=$JAVA_HOME/bin;$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$path:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
# 一定要在最后加上这一行,这样就不会导致每次远程连接成功后都没有ls命令等
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin让这个配置文件生效
source /ect/profile
一定要在最后加上这一行,这样就不会导致每次远程连接成功后都没有ls命令等
1
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
Tomcat安装(解压缩安装)
1、安装好了Java环境后我们可以测试下Tomcat!准备好Tomcat的安装包!
2、将文件移动到/usr/tomcat/下,并解压!
1 |
|
3、运行Tomcat,进入bin目录,和我们以前在Windows下看的都是一样的
1 |
|
4、确保Linux的防火墙端口是开启的,如果是阿里云,需要保证阿里云的安全组策略是开放的!
1 |
|
安装Docker(yum安装)
基于 CentOS 7 安装
官网安装参考手册:https://docs.docker.com/install/linux/docker-ce/centos/
确定你是CentOS7及以上版本
1
2[root@192 Desktop]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)yum安装gcc相关(需要确保 虚拟机可以上外网 )
1
2yum -y install gcc
yum -y install gcc-c++卸载旧版本
1
2
3
4
5
6
7
8
9
10yum -y remove docker docker-common docker-selinux docker-engine
# 官网版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine安装需要的软件包
1
yum install -y yum-utils device-mapper-persistent-data lvm2
设置stable镜像仓库
1
2
3
4
5
6
7
8# 错误
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
## 报错
[Errno 14] curl#35 - TCP connection reset by peer
[Errno 12] curl#35 - Timeout
# 正确推荐使用国内的
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo更新yum软件包索引
1
yum makecache fast
安装Docker CE
1
yum -y install docker-ce docker-ce-cli containerd.io
启动docker
1
systemctl start docker
测试
1
2
3
4
5docker version
docker run hello-world
docker images
宝塔面板安装
https://www.bilibili.com/video/av91821322
使用Linux命令
1 |
|
1 |
|
安装svn(Subversion)
安装svn服务器
1
2
3
4yum install subversion
#查看版本
svnserve --version创建svn仓库
- 在/home下创建svn目录并用svn管理员创建库
1
2
3[root@localhost /]# cd /home
[root@localhost home]# mkdir svn
[root@localhost home]# svnadmin create /home/svn- 查看svn仓库文件
1
2[root@localhost home]# ls svn
conf db format hooks locks README.txt目录说明
conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)。
db目录:就是所有版本控制的数据存放文件。
format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。
hooks目录:放置hook脚本文件的目录。
locks目录:用来放置subversion见艰苦锁定数据的目录,用来追踪存取文件库的客户端
进入conf文件夹
1
2
3[root@localhost home]# cd svn/conf
[root@localhost conf]# ls
authz passwd svnserve.confauthz文件是权限控制文件
passwd是帐号密码文件
svnserve.conf SVN服务配置文件
设置账号密码
1
2
3
4[root@localhost conf]# vim passwd
[users]
root1=root1
root2=root2设置权限
1
2
3
4
5[root@localhost conf]# vim authz
[/]
root1=rw
root2=rw
*=说明:
r 为可读
w 为可写
rw为可读可写
*= 代表其他用户无任何权限
(一定要记得 在[/]下面设置每一个用户的权限, 在[groups]下设置用户组的权限, 有的配置文件下没有[/], 设置单个用户权限的时候一定要添加上,如果不添加上,就会一直认证失败)
修改配置文件svnserve.conf
1
2
3
4
5
6
7
8
9[root@localhost conf]# vi svnserve.conf
打开下面的5个注释
anon-access = read #匿名用户可读
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
realm = /home/svn # 认证空间名,版本库所在目录
# 注意:删除原有的#,并且前面不要有空格说明:anon-access = none 是为了在eclipse中可以通过svn查看资源历史记录
启动svn
1 |
|
查看svn启动情况:ps -ef|grep svn
停止svn:kill -9 端口号
- 注意事项
svn默认端口号为3690
linux服务器需要开放3690端口号
1firewall-cmd –permanent –zone=public –add-port=3690/tcp
重启防火墙
1firewall-cmd –reload
在服务器页面安全组中添加规则:开发3690接口
- 测试连接
上传项目(找到项目文件夹执行下面操作)
- 本地安装好了svn(小乌龟)后,右键选择==>tortoiseSvn==>导入(inport开头)
- url地址格式为:svn://外网地址/项目名称
url地址开头svn是因为linux安装的是Subversion(遵循的是svn协议)
https开头是因为linux安装的是VisualSVN-server
安装mysql8+(root:zhuixun)
获取mysql yum源
打开网址:https://dev.mysql.com/downloads/repo/yum/,选择对应linux版本,点击“No thanks, just start my download.”,进行下载。将下载地址复制,得到rpm包的地址
下载和安装mysql源,wget加上刚刚复制的地址:wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
如果显示wget未找到命令,则需要先安装wget
1
yum -y install wget
然后再执行上面命令
安装mysql源(上面下载的源版本是多少这里就是多少)
1
yum -y localinstall mysql80-community-release-el7-3.noarch.rpm
在线安装mysql(下载东西多网速还慢,需要等很久)
1
yum -y install mysql-community-server
下载完之后启动mysql
1
systemctl start mysqld
设置开机启动
1
2systemctl enable mysqld
systemctl daemon-reload通过命令查看生成的随机密码
1
cat /var/log/mysqld.log | grep password
进入数据库登录界面,输入上面复制的密码
1
mysql -uroot -p
ALTER USER ‘root‘@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘你要改的密码’; 命令来修改密码
注意:刚开始有密码强弱校验的,所以你只能修改为一个强度较高的密码:Root_12root,修改完密码后在修改密码校验规则(mysql8以上才会出现)
可用命令查看 validate_password 密码验证插件是否安装
1
SHOW VARIABLES LIKE 'validate_password%';
mysql8调整密码验证规则
1
2set global validate_password.policy=0;
set global validate_password.length=1;
在通过ALTER USER ‘root‘@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘’你的密码’;命令修改密码
配置数据库默认编码为utf-8
* 修改/etc/my.cnf配置文件,在\[mysqld\]下添加编码配置
1
2
character_set_server=utf8
init_connect='SET NAMES utf8'
* 编辑保存完重启mysql服务
1
systemctl restart mysqld
* 查看下编码
1
show variables like '%character%';
- 通过以下命令,进行远程访问的授权
1
2
3
4
5
create user 'root'@'%' identified with mysql_native_password by '你的密码';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;
- 输入exit退出,打开防火墙开放3306端口
如果没有开启防火墙,则输入:systemctl start firewalld开启
输入下面命令开放3306端口
1
2
3
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
如果使用的是阿里云服务,需要在安全规则组打开3306端口
使用工具测试连接
安装redis
注意一定要设置密码,不设置的话,有可能会被远程下载病毒导致服务器崩溃
下载redis
进入官网找到下载地址https://redis.io/download(右键Download按钮,选择复制链接,,一般选择最新版本,下面的地址也应该是最新版本的地址)
进入到Xshell(默认当前是root根目录)
1
wget http://download.redis.io/releases/redis-版本号.tar.gz
解压并安装redis
解压安装包
1
tar -zvxf redis-版本号.tar.gz
进入解压后的文件夹进行编译
1
make
安装(多了一个PREFIX这个关键字的作用是编译的时候用于指定程序存放的路径,如果我们不添加关键字,会将执行文件存放在/usr.local/bin目录。这里指定目录也方便后续的卸载,后续直接rm -rf /usr/local/redis即可删除redis)
1
make PREFIX=/usr/local/redis install
修改redis.conf文件(由于字数太多,可以通过/daemonize去查找属性,默认是no,更改为yes即可,n字符切换到下一个即可,查找到结果后输入:noh退回到正常模式)
这里我要将daemonize改为yes,不然我每次启动都得在redis-server命令后面加符号&,不这样操作则只要回到Linux控制台则redis服务会自动关闭,同时也将bind注释,将protected-mode设置为no。
这样启动后我就可以在外网访问了。1
vim /usr/local/redis/redis.conf
修改完上面三个属性后,还可以去修改密码(默认密码为空)
- 在配置文件中找到这一行#requirepass foobared
- 删除前面的注释符号#,并把foobared修改成自己的密码或者另起一行设置密码(requirepass 123456)
设置redis开机启动
在/etc/systemd/systemx下创建redis-service
1
touch redis-service
编写redis-service中的内容
1
2
3
4
5
6
7
8
9
10
11[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/redis7/redis-7.2.1/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target==注意:redis-server是redis解压包下的bin目录下==
配置开机启动
1
2
3
4
5
6
7
8
9
10
11
12#重载系统服务,是修改生效
systemctl daemon-reload
#启动
systemctl start redis
#停止
systemctl stop redis
#重启
systemctl restart redis
#查看状态
systemctl status redis
# 设置开机启动
systemctl enable redis
这边如果需要远程连接,还需要开启防火墙端口和阿里云安全组
开启防火墙6379端口
1
firewall-cmd --zone=public --add-port=6379/tcp --permanent
命令含义: –zone #作用域 –add-port=80/tcp #添加端口,格式为:端口/通讯协议 –permanent #永久生效,没有此参数重启后失效
注:开启后需要重启防火墙才生效
重启防火墙
1
firewall-cmd --reload
查看开启端口列表
1
firewall-cmd --list-ports
进入阿里云安全组开启6379端口
下载Redis Desktop Manager远程连接
- 地址:https://www.xiazai99.com/down/soft174858.html
- 下载后直接解压启动
- 连接时只需要设置远程ip地址,有设置密码则要设置密码
安装node
我们可以直接去node官网去下载对应的压缩包或者直接在linux通过命令去下载
1
wget https://nodejs.org/download/release/v14.1.0/node-v14.1.0-linux-x64.tar.gz
解压压缩包
1
tar -zxvf node-v14.1.0-linux-x64.tar.gz
配置环境变量
1
vim /etc/profile
输入下面配置
1
2NODE_HOME=node的解压路径
export PATH=$NODE_HOME/bin:$PATHesc退出编辑,:wq保存并退出
重新编译配置文件
1
source /etc/profile
查看是否安装成功
1
node -v
linux服务器域名配置
以阿里云为例,进入控制台,找到域名,可以看到域名列表
选择解析
设置服务器域名
配置oos所需的CNAME
nginx配置域名以及SSL证书
主要是为了可以通过域名直接访问,以及使用https访问,减少网站被访问提醒的不安全问题。
修改nginx配置文件
1 |
|