Linux入门

Posted dawncoody

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux入门相关的知识,希望对你有一定的参考价值。

 

Linux概述

消息对列(Kafka、RabbitMQ、RockeetMQ),缓存(Redis),搜索引擎(ES)

集群分布式(需要购买多台服务器,如果没服务器我们就只能使用虚拟机)

我们为什么要学Linux

Linux的几个优点

  1. 免费(这个是大多数人的喜欢的吧)

  2. 很多软件原生是在Linux运行的,庞大的社区支持,生态环境好

  3. 开源,可被定制,开放,多用户的网络操作系统

  4. 相对安全

LInux 简述

Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。

Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX(可移植操作系统接口) 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。

Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

环境搭建

购买云服务器

云服务器就是一个远程电脑,服务器一般不会关机!

  1. 阿里云服务器购买地址:https://www.aliyun.com/minisite/goods?userCode=0phtycgr

  2. 购买完毕后,获取服务器的ip地址,重置服务器密码,就可以远程登录了

    • 获取公网IP地址!

    • 修改自己的登录密码

    技术图片

     

    注意事项:

    技术图片

    技术图片

  3. 下载xShell工具,进行远程连接使用!

技术图片

这个就相当于一个个远程电脑了,只不过都是命令行。

Ctrl + 鼠标滚轮,可以放大缩小

可以用xftp上传文件

技术图片

Linux系统基本命令

开机登录

开机会启动许多程序。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。

开机成功后,它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份,密码是不显示的,输完回车即可!

一般来说,用户的登录方式有三种:

  • 命令行登录

  • ssh登录

  • 图形界面登录

最高权限账户为 root,可以操作一切!

关机

关机指令:shutdown;(直接关机容易造成数据丢失

 sync # 将数据由内存同步到硬盘中。
 ?
 shutdown # 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:
 ?
 shutdown –h 10 # 这个命令告诉大家,计算机将在10分钟后关机
 ?
 shutdown –h now # 立马关机
 ?
 shutdown –h 20:25 # 系统会在今天20:25关机
 ?
 shutdown –h +10 # 十分钟后关机
 ?
 shutdown –r now # 系统立马重启
 ?
 shutdown –r +10 # 系统十分钟后重启
 ?
 reboot # 就是重启,等同于 shutdown –r now
 ?
 halt # 关闭系统,等同于shutdown –h now 和 poweroff
sudo systemctl poweroff

 

Linux系统目录结构

根目录 / ,所有的文件都挂载在这个节点下

登录系统后,在当前明明窗口下输入命令:

 ls /  

技术图片

树状目录结构:

技术图片

  • /binbin是Binary的缩写,这个目录存放着最经常使用的命令。

  • /bot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。(不要动)

  • /dev:dev是Device(设备)的缩写,存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。

  • /etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。

  • /lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。(不要动)

  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。(存放突然关机的一些文件)

  • /media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。

  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

  • /opt这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件。(不用管)

  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。

  • /selinux:这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

  • /srv:该目录存放一些服务启动之后需要提取的数据。

  • /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。

  • /tmp:这个目录是用来存放一些临时文件的。用完即丢的文件,可以放在这个目录下,比如:安装包。

  • /usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。

  • /usr/bin:统用户使用的应用程序。

  • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。(Super用户管理)

  • /usr/src:内核源代码默认的放置目录。

  • /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

  • /www:存放服务器网站相关的资源,环境,网站的项目

常用的基本命令

目录管理

cd 绝对路径、相对路径

绝对路径为路径的全称。

cd:切换目录命令!

./:当前目录

cd .. :返回上一级目录

 

ls (列出目录)

-a参数:all,查看全部的文件,包括隐藏文件

-l参数:列出所有的文件,包括文件的属性和权限,没有隐藏文件

所有的Linux命令可以组合使用,即 ls -al 就是查看全部文件,且列出所有的文件属性和权限。

 

pwd显示当前用户所在的目录!

 [root@cyy ~]# pwd
 /root
 [root@cyy ~]# cd /bin
 [root@cyy bin]# pwd
 /bin

 

touch 创建一个文件

 [root@cyy home]# ls
 redis test www
 [root@cyy home]# touch do.txt #也可以没有后缀名
 [root@cyy home]# ls
 do.txt redis test www

 

 

mkdir 创建一个目录

 [root@cyy /]# cd home/  #创建目录
 [root@cyy home]# ls
 redis www
 [root@cyy home]# mkdir test
 [root@cyy home]# ls
 redis test www
 [root@cyy home]# cd test
 [root@cyy test]# cd ..
 [root@cyy home]# mkdir -p test1/test2/test3 #创建多级目录
 [root@cyy home]# cd test1
 [root@cyy test1]# ls
 test2
 [root@cyy test1]# cd test2/
 [root@cyy test2]# ls
 test3

 

rmdir 删除目录

rmdir仅能删除空的目录,如果下面存在文件,需要先删除文件,递归删除多个目录加 -p 参数即可

 

cp(复制文件或者目录)

cp 原来的地方 拷贝到新的地方

 root@cyy home]# ls
 redis test test.txt www
 [root@cyy home]# cp test.txt test #拷贝文件至目录
 [root@cyy home]# ls
 redis test test.txt www
 [root@cyy home]# cd test.txt
 -bash: cd: test.txt: Not a directory
 [root@cyy home]# cd test
 [root@cyy test]# ls
 test.txt

 

rm(移除或者目录!)

-f 忽略不存在的文件,不会出现警告,强制删除!

-r 递归删除目录!

-i 互动,删除询问是否删除

 rm -rf /* #系统中所有的文件就被删除了(非常危险!不要这样做)
 [root@cyy test]# ls
 test.txt
 [root@cyy test]# cd ..
 [root@cyy home]# ls
 redis test test.txt www
 [root@cyy home]# rm -rf test
 [root@cyy home]# ls
 redis test.txt www

 

mv 移动文件或者目录!(也可以重命名文件夹)

-f 强制

-u 只替换已经更新过的文件

[root@cyy home]# ls
redis  test.txt  www
[root@cyy home]# mkdir test
[root@cyy home]# rm test.txt test
rm: remove regular empty file ‘test.txt’? y
rm: cannot remove ‘test’: Is a directory
[root@cyy home]# ls
redis  test  www

基本属性

看懂文件属性

技术图片

在Liunx中第一个字符代表这个文件是目录、文件或连接文件等等:

  • 当为[d]则是目录

  • 当为[-]则是文件;

  • 若是[I]则表示为链接文档(link file);

  • 若是[b]则代表为装置文件里面的可供储存的接口设备(可随机存取装置);

  • 若是[c]则表示为装置文件里面的串行端口设备,例如键盘鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

每个文件的属性由左边第一部分的10个字符来确定(如下图)。

技术图片

从左至右用0-9这些数字来表示。

第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限。

第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。

 

其中,第1、4、7位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,则没有读权限;

第2、5、8位表示写权限,如果用"w"字符表示,则有写权限,如果用"-"字符表示没有写权限;第3、6、9位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用"-"字符表示,则没有执行权限。

 

修改文件属性

1、chgrp:更改文件属组(一般不要改)

chgrp -R 属组名  文件名

2、chown:更改文件属主,也可以同时更改文件属组(一般不用改)

chown -R 属主名 文件名
chown -R 属主名:属主名 文件名

3、chmod:更改文件9个属性(重点)

chmod -r xyz 文件或目录

Linux文件属性有两种设置方法,一种是数字(常用),一种是符号。

Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。

先复习一下刚刚上面提到的数据:文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

r:4  	w:2  	x:1

chomd 777 文件所有用户可读可写可执行!

 

文件内容查看

Linux系统中使用一下命令来查看文件的内容(命令 + 文件名):

  • cat 由第一行开始显示文件内容(最常用)

  • tac 从最后一行开始显示,可以看出tac是cat的倒着写!

  • nl 显示的时候,顺道输出行号!(常用)

  • more一页一页的显示文件内容(用空格键翻页,Enter向下看一行,:f 显示当前所在行)(常用)

  • less与more类似,但是比more更好的是,他可以往前翻页!(用pageDown,pageUp键翻页,上下键移动行,退出q命令,查找字符串: 用 / + 字符串 这个是向下查询, ? + 要查询的字符串 这个是向上查询 ;n向下搜寻,N向上搜寻)

  • head只看头几行,通过-n参数来控制显示前几行

[root@cyy etc]# head -n 5 csh.login   #表示显示前5行
# /etc/csh.login

# System wide environment and startup programs, for login setup

#add sbin directories to the path

 

  • tail 与head类似,只不过是倒着看几行

网络配置目录:cd /home/etc/sysconfig/network-scripts

ifconfig命令查看网络配置!(windows系统是ipconfig)

 

Linux 链接的概念

Linux的链接分为两种:硬链接、软链接!

硬链接:A --B,假设B是A的硬链接,那么他们两个指向了同一个文件!允许一个文件拥有多个路径。

软链接:相当于Wind上的快捷方式,删除了源文件,快捷方式就访问不了了

创建链接用In命令

ln + 源文件 + 生成文件    创建一个硬链接
ln -s + 源文件 + 生成文件  创建一个软链接

 

echo输出字符串

[root@cyy home]# ls
do.txt  redis  test  www
[root@cyy home]# ln do.txt do2		#生成硬链接
[root@cyy home]# ls
do2  do.txt  redis  test  www
[root@cyy home]# ln -s do.txt do3   #生成软链接
[root@cyy home]# ls
do2  do3  do.txt  redis  test  www
[root@cyy home]# echo "I Love U" >> do2   #向do2里面输入字符串
[root@cyy home]# cat do2  
I Love U
[root@cyy home]# cat do3
I Love U

删除do.txt后

[root@cyy home]# ls
do2  do3  do.txt  redis  test  www
[root@cyy home]# rm -f do.txt 
[root@cyy home]# ls
do2  do3  redis  test  www
[root@cyy home]# cat do2 	#do2还可以正常查看(硬链接)
I Love U
[root@cyy home]# cat do3	#do3不能查看(软链接)
cat: do3: No such file or directory

 

Vim 编辑器

所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。

但是目前我们使用比较多的是 vim 编辑器。

vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。

连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。

技术图片

 

vim 的使用

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)。 这三种模式的作用分别是:

命令模式:

用户刚刚启动 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 保存文件(一般是wq配合使用

简单的说,我们可以将这三个模式想成底下的图标来表示:

技术图片

vi/vim 按键说明

移动光标的方法 
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!  
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
数字 + 空格 例如 20 < space > 则光标会向后面移动 20 个字符距离。
0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
数字+ < Enter > 例如 3 <Enter>光标向下移动3行(常用)
搜索替换 
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!  
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g:%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc:%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
删除、复制与贴上 
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 重做,重做上一个动作。(常用)
这个 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 为止;(常用)
上面这些按键中,在 vi/vim 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔!  
[Esc] 退出编辑模式,回到一般模式中(常用)

第三部分:一般模式切换到指令行模式的可用的按钮说明

指令行的储存、离开等指令 
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
注意一下啊,那个惊叹号 (!) 在 vi/vim 当中,常常具有『强制』的意思~  
: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 相反,为取消行号!

 

账号管理

在公司中,用的应该都不是root用户!

简介

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

每个用户账号都拥有一个唯一的用户名和各自的口令。

用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

实现用户账号的管理,要完成的工作主要有如下几个方面:

  • 用户账号的添加、删除与修改。

  • 用户口令的管理。

  • 用户组的管理。

 

用户账号的管理

用户账号的管理工作只要涉及到用户账号的天加、修改和删除。

添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。

 

useradd 命令 添加用户

useradd -选项 用户名

-m: 自动创建这个用户的主目录

[root@cyy home]# useradd -m Dawn 创建一个用户
[root@cyy home]# ls
Dawn  redis  www

理解一下本质 :Linux中一切皆文件,这里的添加用户说白了就是往莫一个文件中写入用户的信息(信息在/etc/passwd)

 

删除用户 userdel

userdel -r Dawn 删除用户的时候将用户的时候将他的目录也一并删除!

[root@cyy home]# ls
Dawn  redis  www
[root@cyy home]# userdel -r Dawn	#删除用户
[root@cyy home]# ls
redis  www

 

修改用户 usermod

修改用户 usermod 对应修改的内容 修改那个用户

[root@cyy home]# usermod -d /home/cy dawn

修改完毕后查看配置文件即可!

技术图片

切换用户

root用户

技术图片

 

  1. 切换用户的命令为:su + 用户名

  2. 从普通用户切换到root用户,还可以使用命令:sudo su

  3. 在终端输入exit或sogout或使用快捷方式ctrl + d ,可以退回到原来用户,其实ctrl + d也是执行的exit命令

  4. 在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之前加-,例如 :[su - root]

$表示普通用户

#表示超级用户,也就是root用户

hostname 查看主机名

hostname + 用户名 修改主机名

 

用户的密码设置

我们一般通过root创建用户的时候!要配置密码!(Linux上输入密码,密码是不会显示的,不是你的电脑卡了哦~)

如果是超级用户的话用passwd + 用户名 修改用户密码

如果是普通用户直接passwd (然后输入旧密码,就可以输入新密码了)

 

锁定账户!(也就是所谓的冻结账户)

passwd -l + 用户名 锁定之后这个用户就不能登录了

passwd -d + 用户名 -d是指不仅用户名冻结了,密码也删除了。

passwd -u + 用户名 解除锁定

 

用户组管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

创建一个用户组 groupadd

[root@dawn home]# groupadd cc
[root@dawn home]# cat /etc/group #查看用户组

创建完用户组后可以得到一个组的id,这个是可以指定的 -g 123 , 若不指定就是自增 1

 

删除用户组 groupdel

[root@dawn home]# groupdel cc	#删除用户组
[root@dawn home]# cat /etc/group #查看用户组

 

修改用户组的权限信息和名字 groupmod

技术图片

用户如果要切换用户组怎么办?

$ newgrp root

 

与用户账号有关的系统文件(拓展)

这个文件对所有用户都是可读的。它的内容类似下面的例子:

# cat /etc/passwd

root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/home/sam:/bin/sh

从上面的例子我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:

用户名:口令(登录密码,我们不可见):用户标识号:组标识号:注释性描述:主目录:登录Shell

1)"用户名"是代表用户账号的字符串。

通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。

为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。

2)“口令”一些系统中,存放着加密后的用户口令字。

虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。

3)“用户标识号”是一个整数,系统内部用它来标识用户。

一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。

通常用户标识号的取值范围是0~65 535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。

4)“组标识号”字段记录的是用户所属的用户组。

它对应着/etc/group文件中的一条记录。

5)“注释性描述”字段记录着用户的一些个人情况。

例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux 系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。

6)“主目录”,也就是用户的起始工作目录。

它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。

7)用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。

Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。

系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。

用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。

利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。

8)系统中有一类用户称为伪用户(pseudo users)。

这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。

磁盘管理

df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法:

df [-ahikHTm] [目录或文件名]

选项与参数:

  • -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;

  • -k :以 KBytes 的容量显示各文件系统;

  • -m :以 MBytes 的容量显示各文件系统;

  • -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;

  • -H :以 M=1000K 取代 M=1024K 的进位方式;

  • -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;

  • -i :不用硬盘容量,而以 inode 的数量来显示

  1. 将系统内所有的文件系统列出来!

[root@dawn ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs         1929724       0   1929724   0% /dev
tmpfs            1940084    1524   1938560   1% /dev/shm
tmpfs            1940084     520   1939564   1% /run
tmpfs            1940084       0   1940084   0% /sys/fs/cgroup
/dev/vda1       41152812 4407496  34841608  12% /
tmpfs             388020       0    388020   0% /run/user/0
  1. 将容量结果以易读的容量格式显示出来

[root@dawn ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G  1.5M  1.9G   1% /dev/shm
tmpfs           1.9G  520K  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1        40G  4.3G   34G  12% /
tmpfs           379M     0  379M   0% /run/user/0
  1. 将系统内的所有特殊文件格式及名称都列出来

[root@dawn ~]# df -aT
Filesystem    Type 1K-blocks    Used Available Use% Mounted on
/dev/hdc2     ext3   9920624 3823112   5585444  41% /
proc          proc         0       0         0   -  /proc
sysfs        sysfs         0       0         0   -  /sys
devpts      devpts         0       0         0   -  /dev/pts
/dev/hdc3     ext3   4956316  141376   4559108   4% /home
/dev/hdc1     ext3    101086   11126     84741  12% /boot
tmpfs        tmpfs    371332       0    371332   0% /dev/shm
none   binfmt_misc         0       0         0   -  /proc/sys/fs/binfmt_misc
sunrpc  rpc_pipefs         0       0         0   -  /var/lib/nfs/rpc_pipefs
  1. 将 /etc 底下的可用的磁盘容量以易读的容量格式显示

[root@dawn ~]# df -h /etc
Filesystem            Size  Used Avail Use% Mounted on
/dev/hdc2             9.5G  3.7G  5.4G  41% /

 

du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的,这里介绍Linux du命令。

语法:

du [-ahskm] 
  • -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。

  • -h :以人们较易读的容量格式 (G/M) 显示;

  • -s :列出总量而已,而不列出每个各别的目录占用容量;

  • -S :不包括子目录下的总计,与 -s 有点差别。

  • -k :以 KBytes 列出容量显示;

  • -m :以 MBytes 列出容量显示;

  1. 只列出当前目录下的所有文件夹容量(包括隐藏文件夹):

[root@dawn ~]# du
8       ./test4     #<==每个目录都会列出来
8       ./test2
....中间省略....
12      ./.gconfd   #<==包括隐藏文件的目录
220     .           #<==这个目录(.)所占用的总量
  1. 将文件的容量也列出来

[root@www ~]# du -a
12      ./install.log.syslog   #<==有文件的列表了
8       ./.bash_logout
8       ./test4
8       ./test2
....中间省略....
12      ./.gconfd
220     .
  1. 检查根目录底下每个目录所占用的容量

[root@www ~]# du -sm /*
7       /bin
6       /boot
.....中间省略....
0       /proc
.....中间省略....
1       /tmp
3859    /usr     #<==系统初期最大就是他了啦!
77      /var

通配符 * 来代表每个目录。

与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据。

Mac或者想使用Linux挂载我们的一些本地磁盘或者文件!

挂载 :mount

[root@dawn ~]# mount /dev/dawn /mnt/dawn外部设备挂载到dawn挂载到mnt目录下,来实现访问。

卸载 :umount -f [挂载位置] 强制卸载

 

 

进程管理

什么是进程

  1. 在Linux中,每一个程序是有自己的一个进程,每一个进程都有一个id号!

  2. 每一个进程,都会有一个父进程。

  3. 进程可以有两种存在方式:前台 , 后台运行。

  4. 一般的话服务都是后台运行的,基本的程序都是前台运行的。

命令

ps 查看当前系统中正在执行的各种进程的信息。

  • -a 显示当前终端运行的所有的进程信息(当前的进程一个)

  • -u 以用户的信息进程

  • -x 显示后台运行进程的参数

#ps -aux 查看所有的进程
ps -aux|grep mysql
ps -aux|grep redis
ps -aux|grep java

# | 在Linux这个叫做管道符 
#grep 查找文件中符合条件的字符串

 

ps -ef:可以查看到父进程的信息·

ps -ef|grep mysql # 看父进程我们一般可以通过目录树结构来查看!

#进程树
pstree -pu #看的更直观
	-p 显示父id
	-u 显示用户组

结束进程:等价与window结束任务

kill -9 #后面一个参数为进程的id

 

 

环境安装

安装软件一般有三种:rpm、解压缩、yum在线安装

JDK 安装

  1. 下载JDK rpm。去oralce官网下载即可

  2. 安装java环境

#检测当前系统是否存在java环境(java -version)
#如果有的话就需要卸载
#rpm -qa|grep jdk  # 检测JDK版本信息
#rpm -e --nodeps jdk_

#卸载完毕后即可安装jdk
#rpm -ivk rpm包

#配置环境变量!

如果存在可以体前卸载 :

技术图片

安装 :技术图片

配置环境变量 :vim/etc/profile

在配置Java环境变量的时候,将下面四行代码放在这个文件末尾即可。但要注意自己的JDK版本号:

export JAVA_HOME=/usr/lib/jdk1.8.0_241
export JRE_HOME=${JAVA_HOME}/jre    
export CLASSPATH=.:${JAVA_HOME}/lib:${JR

技术图片

然后就可以通过 java -version命令查看java版本信息。

我们发布一个项目试试

#开启防火墙端口
filewall-cmd --zone==public --add-port==9000/tcp --permanent	#9000是要开启的端口
#重启防火墙
systemctl restart filewalld.service
#查看所有开启的端口,记得阿里云(其他的也要配置),需要配置安全组规则
firewall-cmd --list-ports

Tomcat 安装

ssm war 就需要放到tomcat中运行

  1. 下载tomcat,官网下载即可

  2. 解压文件

tar -zxvf apache-tomcat-9.0.36.tar.gz

技术图片

  1. 启动tomcat测试!./xxx.sh 脚本即可运行

#执行 ./startup.sh
#停止 ./shotdown.sh

技术图片

如果防火墙8080端口开了并且阿里云安全组也开放了这个时候就可以直接访问远程了。

#查看firewall服务状态
systemctl status firewalld

#开启、重启、关闭、firewalld.service服务
#开启
service firewalld start
#重启
service firewalld restart
#关闭
service firewlld stop

#查看防火墙规则
firewall-cmd --list-all #查看全部信息
firewall-cmd --list-ports #只看端口信息

#开启端口,选择直接要开启的端口
开启端口命令 :firewall-cmd --zone=public --add-port=80/tcp --permanent 
重启防火墙 :systemctl restart firewalld.service

命令含义 :
--zone #作用域
--add-port==80/tcp#添加端口,格式为 :端口/通讯协议
--permanent #永久生效,没有此参数重启后失效

 

 

Docker(yum安装)

 

我们现在是在LInux下执行,一定要联网那,yum在线安装

  1. 官网安装参考手册:https://docs.docker.com/install/linux/docker-ce/centos/

  2. 检测CentOS 7

[root@dawn bin]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
  1. 安装我们准备的环境

yum -y install 包名    #yum install 安装命令
  1. 清除以前的版本

$ sudo yum remove docker                   docker-client                   docker-client-latest                   docker-common                   docker-latest                   docker-latest-logrotate                   docker-logrotate                   docker-engine
  1. 安装需要的软件包

sudo yum install -y yum-utils   device-mapper-persistent-data   lvm2
  1. 设置stable镜像仓库

    # 错误
    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
  2. 更新yum软件包索引

yum makecache fast
  1. 安装Docker CE

yum -y install docker-ce docker-ce-cli containerd.io
  1. 启动docker

systemctl start docker
  1. 测试

docker version

docker run hello-world

docker images

 

 



#  Linux概述
消息对列(Kafka、RabbitMQ、RockeetMQ),缓存(Redis),搜索引擎(ES)
集群分布式(需要购买多台服务器,如果没服务器我们就只能使用虚拟机)
==我们为什么要学Linux==
Linux的几个**优点**
1. 免费(这个是大多数人的喜欢的吧)2. 很多软件原生是在Linux运行的,庞大的社区支持,*生态环境好*。3. **开源**,可被定制,开放,**多用户的网络操作系统**。4. **相对安全**。
> LInux 简述
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX(可移植操作系统接口) 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
# 环境搭建
> 购买云服务器
云服务器就是一个远程电脑,服务器一般不会关机!
1. 阿里云服务器购买地址:https://www.aliyun.com/minisite/goods?userCode=0phtycgr
2. 购买完毕后,获取服务器的ip地址,重置服务器密码,就可以远程登录了
   - 获取公网IP地址!   - 修改自己的登录密码
   ![image-20200629182154774](https://image.cha138.com/20210619/cd8b9a4514fc494caffd98f56b820f2f.jpg)
   
   **注意事项:**
   ![image-20200629181347782](https://image.cha138.com/20210619/5920444cced64e26a2f7c3752373dfd6.jpg)
   ![image-20200629181730194](https://image.cha138.com/20210619/886c9e531aa747b392a5c29c0e59e20c.jpg)
3. 下载xShell工具,进行远程连接使用!
![image-20200629185330764](https://image.cha138.com/20210619/c12755cfe72744f9bc6077b6f4512596.jpg)
这个就相当于一个个远程电脑了,只不过都是命令行。
**Ctrl + 鼠标滚轮**,可以放大缩小
可以用xftp上传文件
![image-20200629190548526](https://image.cha138.com/20210619/79adc2247fd74c0eaaaa00dfb95777b0.jpg)
# Linux系统基本命令
## 开机登录
开机会启动许多程序。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
开机成功后,它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份,密码是不显示的,输完回车即可!
一般来说,用户的登录方式有三种:
- 命令行登录- ssh登录- 图形界面登录
最高权限账户为 root,可以操作一切!
> 关机
关机指令:shutdown;(***直接关机容易造成数据丢失***)
```bashsync # 将数据由内存同步到硬盘中。
shutdown # 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:
shutdown –h 10 # 这个命令告诉大家,计算机将在10分钟后关机
shutdown –h now # 立马关机
shutdown –h 20:25 # 系统会在今天20:25关机
shutdown –h +10 # 十分钟后关机
shutdown –r now # 系统立马重启
shutdown –r +10 # 系统十分钟后重启
reboot # 就是重启,等同于 shutdown –r now
halt # 关闭系统,等同于shutdown –h now 和 poweroff```


## Linux系统目录结构
根目录 / ,所有的文件都挂载在这个节点下
登录系统后,在当前明明窗口下输入命令:
```bashls /  ```
![image-20200629192854285](https://image.cha138.com/20210619/edae01e6d82749198d4421fb08296078.jpg)
树状目录结构:
![image-20200629192928640](https://image.cha138.com/20210619/1dab2fc1787c4f0288b9bfd16c5f52ad.jpg)
- **/bin** :==bin是Binary的缩写,这个目录存放着最经常使用的命令。==- **/bot**:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。(不要动)- **/dev**:dev是Device(设备)的缩写,存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。- ==**/etc**:这个目录用来存放所有的系统管理所需要的配置文件和子目录。==- ==**/home**:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。==- **/lib**:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。(不要动)- **/lost+found**:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。(存放突然关机的一些文件)
- **/media**:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。- **/mnt**:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。- **/opt**: ==这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。==- **/proc**:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件。(不用管)- ==**/root**:该目录为系统管理员,也称作超级权限者的用户主目录。==- **/sbin**:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。- **/selinux**:这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。- **/srv**:该目录存放一些服务启动之后需要提取的数据。- **/sys**: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。- ==**/tmp**:这个目录是用来存放一些临时文件的。用完即丢的文件,可以放在这个目录下,比如:安装包。==- ==**/usr**:  这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。==- **/usr/bin:**统用户使用的应用程序。- **/usr/sbin:**超级用户使用的比较高级的管理程序和系统守护程序。(Super用户管理)- **/usr/src:**内核源代码默认的放置目录。- ==**/var**:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。==- **/run**:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。- **/www**:存放服务器网站相关的资源,环境,网站的项目
## 常用的基本命令
### 目录管理
> cd   绝对路径、相对路径
绝对路径为路径的全称。
**cd:切换目录命令!**
**./:当前目录**
**cd ..  :返回上一级目录**


> ls  (列出目录)
**-a参数:all,查看全部的文件,包括隐藏文件**
**-l参数:列出所有的文件,包括文件的属性和权限,没有隐藏文件**
**所有的Linux命令可以组合使用**,即 ***ls -al*** 就是查看全部文件,且列出所有的文件属性和权限。


> pwd显示当前用户所在的目录!
```bash[root@cyy ~]# pwd/root[root@cyy ~]# cd /bin[root@cyy bin]# pwd/bin```


> touch 创建一个文件
```bash[root@cyy home]# lsredis  test  www[root@cyy home]# touch do.txt#也可以没有后缀名[root@cyy home]# lsdo.txt  redis  test  www```




> mkdir 创建一个目录
```bash[root@cyy /]# cd home/#创建目录[root@cyy home]# lsredis  www[root@cyy home]# mkdir test[root@cyy home]# lsredis  test  www[root@cyy home]# cd test[root@cyy test]# cd ..[root@cyy home]# mkdir -p test1/test2/test3  #创建多级目录[root@cyy home]# cd test1[root@cyy test1]# lstest2[root@cyy test1]# cd test2/[root@cyy test2]# lstest3```



> rmdir 删除目录
rmdir仅能删除空的目录,如果下面存在文件,需要先删除文件,递归删除多个目录加  **-p**  参数即可


> cp(复制文件或者目录)
cp  原来的地方   拷贝到新的地方
```bashroot@cyy home]# lsredis  test  test.txt  www[root@cyy home]# cp test.txt test#拷贝文件至目录[root@cyy home]# lsredis  test  test.txt  www[root@cyy home]# cd test.txt -bash: cd: test.txt: Not a directory[root@cyy home]# cd test[root@cyy test]# lstest.txt```


> rm(移除或者目录!)
**-f** 忽略不存在的文件,不会出现警告,强制删除!
**-r** 递归删除目录!
**-i** 互动,删除询问是否删除
```bashrm -rf /* #系统中所有的文件就被删除了(非常危险!不要这样做)```
```bash[root@cyy test]# lstest.txt[root@cyy test]# cd ..[root@cyy home]# lsredis  test  test.txt  www[root@cyy home]# rm -rf test[root@cyy home]# lsredis  test.txt  www```
 
> mv 移动文件或者目录!(也可以重命名文件夹)
**-f**  强制
**-u** 只替换已经更新过的文件
```bash[root@cyy home]# lsredis  test.txt  www[root@cyy home]# mkdir test[root@cyy home]# rm test.txt testrm: remove regular empty file ‘test.txt’? yrm: cannot remove ‘test’: Is a directory[root@cyy home]# lsredis  test  www```
### 基本属性
> 看懂文件属性 
![image-20200630100940695](https://image.cha138.com/20210619/11842323e2f343159dfeded811d412e9.jpg)
在Liunx中第一个字符代表这个文件是目录、文件或连接文件等等:
- ==当为[d]则是目录==- ==当为[-]则是文件;==- ==若是[I]则表示为链接文档(link file);==- 若是[b]则代表为装置文件里面的可供储存的接口设备(可随机存取装置);- 若是[c]则表示为装置文件里面的串行端口设备,例如键盘鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
每个文件的属性由左边第一部分的10个字符来确定(如下图)。
![363003_1227493859FdXT](https://image.cha138.com/20210619/e9cf4b239e004e3b99374f192dcf92c9.jpg)
从左至右用0-9这些数字来表示。
第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限。
第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。


其中,**第1、4、7位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,则没有读权限;**
**第2、5、8位表示写权限,如果用"w"字符表示,则有写权限,如果用"-"字符表示没有写权限;第3、6、9位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用"-"字符表示,则没有执行权限。**


> 修改文件属性
1、**chgrp:更改文件属组**(一般不要改)
```chgrp -R 属组名  文件名```
2、**chown:更改文件属主,也可以同时更改文件属组**(一般不用改)
```chown -R 属主名 文件名chown -R 属主名:属主名 文件名```
==**3、chmod:更改文件9个属性**==(重点)
```chmod -r xyz 文件或目录```
Linux文件属性有两种设置方法,**一种是数字**(常用),一种是符号。
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
先复习一下刚刚上面提到的数据:文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
```r:4  w:2  x:1
chomd 777 文件所有用户可读可写可执行!```


### 文件内容查看
Linux系统中使用一下命令来查看文件的内容(命令 + 文件名):
- ==**cat 由第一行开始显示文件内容**==(最常用)- tac 从最后一行开始显示,可以看出tac是cat的倒着写!- **nl 显示的时候,顺道输出行号!**(常用)- **more一页一页的显示文件内容(用空格键翻页,Enter向下看一行,:f 显示当前所在行)**(常用)- ==**less与more类似,但是比more更好的是,他可以往前翻页!(用pageDown,pageUp键翻页,上下键移动行,退出q命令,查找字符串:    用   / + 字符串   这个是向下查询,  ? + 要查询的字符串  这个是向上查询 ;n向下搜寻,N向上搜寻)**==- head只看头几行,通过-n参数来控制显示前几行
```bash[root@cyy etc]# head -n 5 csh.login   #表示显示前5行# /etc/csh.login
# System wide environment and startup programs, for login setup
#add sbin directories to the path
```


- tail  与head类似,只不过是倒着看几行
网络配置目录:cd /home/etc/sysconfig/network-scripts
ifconfig命令查看网络配置!(windows系统是ipconfig)


> Linux 链接的概念 
Linux的链接分为两种:硬链接、软链接!
**硬链接:**A --B,假设B是A的硬链接,那么他们两个指向了同一个文件!允许一个文件拥有多个路径。
**软链接:**相当于Wind上的快捷方式,删除了源文件,快捷方式就访问不了了
创建链接用In命令
```ln + 源文件 + 生成文件    创建一个硬链接ln -s + 源文件 + 生成文件  创建一个软链接```


echo输出字符串
```bash[root@cyy home]# lsdo.txt  redis  test  www[root@cyy home]# ln do.txt do2#生成硬链接[root@cyy home]# lsdo2  do.txt  redis  test  www[root@cyy home]# ln -s do.txt do3   #生成软链接[root@cyy home]# lsdo2  do3  do.txt  redis  test  www[root@cyy home]# echo "I Love U" >> do2   #向do2里面输入字符串[root@cyy home]# cat do2  I Love U[root@cyy home]# cat do3I Love U```
删除do.txt后 
```bash[root@cyy home]# lsdo2  do3  do.txt  redis  test  www[root@cyy home]# rm -f do.txt [root@cyy home]# lsdo2  do3  redis  test  www[root@cyy home]# cat do2 #do2还可以正常查看(硬链接)I Love U[root@cyy home]# cat do3#do3不能查看(软链接)cat: do3: No such file or directory```


# Vim 编辑器
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。
但是目前我们使用比较多的是 vim 编辑器。
vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
连 vim 的官方网站 ([http://www.vim.org](http://www.vim.org/)) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
![](https://image.cha138.com/20210619/61b349fdd46f4f6a92369a445d1e59cf.jpg)


## vim 的使用
基本上 vi/vim 共分为三种模式,分别是**命令模式(Command mode)**,**输入模式(Insert mode)**和**底线命令模式(Last line mode)**。 这三种模式的作用分别是:
### 命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
- **i** 切换到输入模式,以输入字符。
![image-20200630121113717](https://image.cha138.com/20210619/50acbf19c4f54967bb15db3833cd1511.jpg)


- **x** 删除当前光标所在处的字符。- **:** 切换到底线命令模式,以在最底一行输入命令。(记得先退出编辑模式按Esc键退出)
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
### 输入模式
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
- **字符按键以及Shift组合**,输入字符- **ENTER**,回车键,换行- **BACK SPACE**,退格键,删除光标前一个字符- **DEL**,删除键,删除光标后一个字符- **方向键**,在文本中移动光标- **HOME**/**END**,移动光标到行首/行尾- **Page Up**/**Page Down**,上/下翻页- **Insert**,切换光标为输入/替换模式,光标将变成竖线/下划线- **ESC**,退出输入模式,切换到命令模式
### 底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
- q 退出程序- w 保存文件(**一般是wq配合使用**)
简单的说,我们可以将这三个模式想成底下的图标来表示:
![](https://image.cha138.com/20210619/b5ba327e60854003b18e49c76f89b9d6.jpg)
## vi/vim 按键说明
| 移动光标的方法                                               |                                                              || :----------------------------------------------------------- | ------------------------------------------------------------ || ==h 或 向左箭头键(←)==                                       | 光标向左移动一个字符                                         || ==j 或 向下箭头键(↓)==                                       | 光标向下移动一个字符                                         || ==k 或 向上箭头键(↑)==                                       | 光标向上移动一个字符                                         || ==l 或 向右箭头键(→)==                                       | 光标向右移动一个字符                                         || 如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可! |                                                              || [Ctrl] + [f]                                                 | 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)          || [Ctrl] + [b]                                                 | 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)           || [Ctrl] + [d]                                                 | 屏幕『向下』移动半页                                         || [Ctrl] + [u]                                                 | 屏幕『向上』移动半页                                         || +                                                            | 光标移动到非空格符的下一行                                   || -                                                            | 光标移动到非空格符的上一行                                   || ==数字 + 空格==                                              | 例如 20 < space > 则光标会向后面移动 20 个字符距离。         || 0 或功能键[Home]                                             | 这是数字『 0 』:移动到这一行的最前面字符处 (常用)           || $ 或功能键[End]                                              | 移动到这一行的最后面字符处(常用)                             || H                                                            | 光标移动到这个屏幕的最上方那一行的第一个字符                 || M                                                            | 光标移动到这个屏幕的中央那一行的第一个字符                   || L                                                            | 光标移动到这个屏幕的最下方那一行的第一个字符                 || G                                                            | 移动到这个档案的最后一行(常用)                               || nG                                                           | n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu) || gg                                                           | 移动到这个档案的第一行,相当于 1G 啊! (常用)                || ==数字+ < Enter >==                                          | 例如 3 <Enter>光标向下移动3行(常用)                          |
| 搜索替换                                                     |                                                              || :----------------------------------------------------------- | ------------------------------------------------------------ || ==/word==                                                    | 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用) || ==?word==                                                    | 向光标之上寻找一个字符串名称为 word 的字符串。               || ==n==                                                        | 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串! || ==N==                                                        | 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。 || 使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词! |                                                              || :n1,n2s/word1/word2/g                                        | n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(常用) || **:1,$s/word1/word2/g** 或 **:%s/word1/word2/g**             | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) || **:1,$s/word1/word2/gc** 或 **:%s/word1/word2/gc**           | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用) |
| 删除、复制与贴上                                             |                                                              || :----------------------------------------------------------- | ------------------------------------------------------------ || 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==                                                 | 重做,重做上一个动作。(常用)                                 || 这个 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 为止;(常用) || 上面这些按键中,在 vi/vim 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔! |                                                              || ==[Esc]==                                                    | 退出编辑模式,回到一般模式中(常用)                           |
### 第三部分:一般模式切换到指令行模式的可用的按钮说明
| 指令行的储存、离开等指令                                     |                                                              || :----------------------------------------------------------- | ------------------------------------------------------------ || :w                                                           | 将编辑的数据写入硬盘档案中(常用)                             || :w!                                                          | 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊! || :q                                                           | 离开 vi (常用)                                               || :q!                                                          | 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。    || 注意一下啊,那个惊叹号 (!) 在 vi/vim 当中,常常具有『强制』的意思~ |                                                              || ==: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 相反,为取消行号!                                 |


# 账号管理
在公司中,用的应该都不是root用户!
> 简介
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改。- 用户口令的管理。- 用户组的管理。


> 用户账号的管理
用户账号的管理工作只要涉及到用户账号的天加、修改和删除。
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。


> useradd 命令  添加用户
useradd -选项 用户名
-m: 自动创建这个用户的主目录
```bash[root@cyy home]# useradd -m Dawn 创建一个用户[root@cyy home]# lsDawn  redis  www```
理解一下本质 :Linux中一切皆文件,这里的添加用户说白了就是往莫一个文件中写入用户的信息(信息在/etc/passwd)


> 删除用户 userdel
userdel -r Dawn 删除用户的时候将用户的时候将他的目录也一并删除!
```bash[root@cyy home]# lsDawn  redis  www[root@cyy home]# userdel -r Dawn#删除用户[root@cyy home]# lsredis  www```


> 修改用户 usermod
修改用户 usermod 对应修改的内容 修改那个用户
```bash[root@cyy home]# usermod -d /home/cy dawn```
修改完毕后查看配置文件即可!
![image-20200630152256311](https://image.cha138.com/20210619/1bb6102bbde94c73820831f68fde2761.jpg)
> 切换用户
root用户
![image-20200630153517013](https://image.cha138.com/20210619/7caf7d8e72114d28ac1747b6b524d4d6.jpg)


1. 切换用户的命令为:su + 用户名2. 从普通用户切换到root用户,还可以使用命令:sudo su3. 在终端输入exit或sogout或使用快捷方式ctrl + d ,可以退回到原来用户,其实ctrl + d也是执行的exit命令4. 在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之前加-,例如 :[su - root]
$表示普通用户
#表示超级用户,也就是root用户
hostname 查看主机名
hostname + 用户名   修改主机名


> 用户的密码设置
我们一般通过root创建用户的时候!要配置密码!(Linux上输入密码,密码是不会显示的,不是你的电脑卡了哦~)
如果是超级用户的话用**passwd + 用户名** 修改用户密码
如果是普通用户直接**passwd** (然后输入旧密码,就可以输入新密码了)


> 锁定账户!(也就是所谓的冻结账户)
`passwd -l + 用户名`   锁定之后这个用户就不能登录了
`passwd -d + 用户名`-d是指不仅用户名冻结了,密码也删除了。
`passwd -u + 用户名` 解除锁定  


## 用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。**组的增加、删除和修改实际上就是对/etc/group文件的更新。**
> 创建一个用户组  groupadd
```bash[root@dawn home]# groupadd cc[root@dawn home]# cat /etc/group #查看用户组```
创建完用户组后可以得到一个组的id,这个是可以指定的   `-g 123`  ,  若不指定就是自增 1


> 删除用户组  groupdel
```bash[root@dawn home]# groupdel cc#删除用户组[root@dawn home]# cat /etc/group #查看用户组```


> 修改用户组的权限信息和名字  groupmod
![image-20200630164616221](https://image.cha138.com/20210619/9fb4df328f2149cfb778b8d4ebf068cf.jpg)
> 用户如果要切换用户组怎么办?
```bash$ newgrp root```


## 与用户账号有关的系统文件(拓展)
这个文件对所有用户都是可读的。它的内容类似下面的例子:
```# cat /etc/passwd
root:x:0:0:Superuser:/:daemon:x:1:1:System daemons:/etc:bin:x:2:2:Owner of system commands:/bin:sys:x:3:3:Owner of system files:/usr/sys:adm:x:4:4:System accounting:/usr/adm:uucp:x:5:5:UUCP administrator:/usr/lib/uucp:auth:x:7:21:Authentication administrator:/tcb/files/auth:cron:x:9:16:Cron daemon:/usr/spool/cron:listen:x:37:4:Network daemon:/usr/net/nls:lp:x:71:18:Printer administrator:/usr/spool/lp:sam:x:200:50:Sam san:/home/sam:/bin/sh```
从上面的例子我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
```用户名:口令(登录密码,我们不可见):用户标识号:组标识号:注释性描述:主目录:登录Shell```
 **1)"用户名"是代表用户账号的字符串。**
通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。
为了兼容起见,登录名中最好不要包含点字符(.),并且不使用连字符(-)和加号(+)打头。
**2)“口令”一些系统中,存放着加密后的用户口令字。**
虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux 系统(如SVR4)都使用了shadow技术,***把真正的加密后的用户口令字存放到/etc/shadow文件中***,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
**3)“用户标识号”是一个整数,系统内部用它来标识用户。**
一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
通常用户标识号的取值范围是0~65 535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。
**4)“组标识号”字段记录的是用户所属的用户组。**
它对应着/etc/group文件中的一条记录。
**5)“注释性描述”字段记录着用户的一些个人情况。**
例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux 系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。
 **6)“主目录”,也就是用户的起始工作目录。**
它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
 **7)用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。**
Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。
系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。
用户的登录Shell也可以指定为某个特定的程序(此程序不是一个命令解释器)。
利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。
**8)系统中有一类用户称为伪用户(pseudo users)。**
这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
# 磁盘管理
df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
语法:
> ```> df [-ahikHTm] [目录或文件名]> ```
选项与参数:
- -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;- -k :以 KBytes 的容量显示各文件系统;- -m :以 MBytes 的容量显示各文件系统;- ==**-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;**==- -H :以 M=1000K 取代 M=1024K 的进位方式;- -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;- -i :不用硬盘容量,而以 inode 的数量来显示
1. 将系统内所有的文件系统列出来!
```bash[root@dawn ~]# dfFilesystem     1K-blocks    Used Available Use% Mounted ondevtmpfs         1929724       0   1929724   0% /devtmpfs            1940084    1524   1938560   1% /dev/shmtmpfs            1940084     520   1939564   1% /runtmpfs            1940084       0   1940084   0% /sys/fs/cgroup/dev/vda1       41152812 4407496  34841608  12% /tmpfs             388020       0    388020   0% /run/user/0```
2. 将容量结果以易读的容量格式显示出来
```bash[root@dawn ~]# df -hFilesystem      Size  Used Avail Use% Mounted ondevtmpfs        1.9G     0  1.9G   0% /devtmpfs           1.9G  1.5M  1.9G   1% /dev/shmtmpfs           1.9G  520K  1.9G   1% /runtmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup/dev/vda1        40G  4.3G   34G  12% /tmpfs           379M     0  379M   0% /run/user/0```
3. 将系统内的所有特殊文件格式及名称都列出来
```bash[root@dawn ~]# df -aTFilesystem    Type 1K-blocks    Used Available Use% Mounted on/dev/hdc2     ext3   9920624 3823112   5585444  41% /proc          proc         0       0         0   -  /procsysfs        sysfs         0       0         0   -  /sysdevpts      devpts         0       0         0   -  /dev/pts/dev/hdc3     ext3   4956316  141376   4559108   4% /home/dev/hdc1     ext3    101086   11126     84741  12% /boottmpfs        tmpfs    371332       0    371332   0% /dev/shmnone   binfmt_misc         0       0         0   -  /proc/sys/fs/binfmt_miscsunrpc  rpc_pipefs         0       0         0   -  /var/lib/nfs/rpc_pipefs```
4. 将 /etc 底下的可用的磁盘容量以易读的容量格式显示
```bash[root@dawn ~]# df -h /etcFilesystem            Size  Used Avail Use% Mounted on/dev/hdc2             9.5G  3.7G  5.4G  41% /```


du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的,这里介绍Linux du命令。
语法:
```du [-ahskm] ```
- -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。- -h :以人们较易读的容量格式 (G/M) 显示;- -s :列出总量而已,而不列出每个各别的目录占用容量;- -S :不包括子目录下的总计,与 -s 有点差别。- -k :以 KBytes 列出容量显示;- -m :以 MBytes 列出容量显示;
1. 只列出当前目录下的所有文件夹容量(包括隐藏文件夹):
```bash[root@dawn ~]# du8       ./test4     #<==每个目录都会列出来8       ./test2....中间省略....12      ./.gconfd   #<==包括隐藏文件的目录220     .           #<==这个目录(.)所占用的总量```
2. 将文件的容量也列出来
```bash[root@www ~]# du -a12      ./install.log.syslog   #<==有文件的列表了8       ./.bash_logout8       ./test48       ./test2....中间省略....12      ./.gconfd220     .```
3. 检查根目录底下每个目录所占用的容量
```bash[root@www ~]# du -sm /*7       /bin6       /boot.....中间省略....0       /proc.....中间省略....1       /tmp3859    /usr     #<==系统初期最大就是他了啦!77      /var```
通配符 * 来代表每个目录。
与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据。
> Mac或者想使用Linux挂载我们的一些本地磁盘或者文件!
挂载 :mount
`[root@dawn ~]# mount /dev/dawn /mnt/dawn`外部设备挂载到dawn挂载到mnt目录下,来实现访问。
卸载 :umount -f  [挂载位置] 强制卸载




# 进程管理
> 什么是进程
1. 在Linux中,每一个程序是有自己的一个进程,每一个进程都有一个id号!2. 每一个进程,都会有一个父进程。3. 进程可以有两种存在方式:前台 , 后台运行。4. 一般的话服务都是后台运行的,基本的程序都是前台运行的。
> 命令
==**ps** 查看当前系统中正在执行的各种进程的信息。==
- -a 显示当前终端运行的所有的进程信息(当前的进程一个)- -u 以用户的信息进程- -x 显示后台运行进程的参数
```bash#ps -aux 查看所有的进程ps -aux|grep mysqlps -aux|grep redisps -aux|grep java
# | 在Linux这个叫做管道符 #grep 查找文件中符合条件的字符串```


**ps -ef**:可以查看到父进程的信息·
```bashps -ef|grep mysql # 看父进程我们一般可以通过目录树结构来查看!
#进程树pstree -pu #看的更直观-p 显示父id-u 显示用户组```
结束进程:等价与window结束任务
```bashkill -9 #后面一个参数为进程的id```




# 环境安装
安装软件一般有三种:rpm、解压缩、yum在线安装
## JDK 安装
1. 下载JDK rpm。去oralce官网下载即可2. 安装java环境
```bash#检测当前系统是否存在java环境(java -version)#如果有的话就需要卸载#rpm -qa|grep jdk  # 检测JDK版本信息#rpm -e --nodeps jdk_
#卸载完毕后即可安装jdk#rpm -ivk rpm包
#配置环境变量!```
如果存在可以体前卸载 :
![image-20200630221933421](https://image.cha138.com/20210619/357495ca61f2493fbe6f7e71670b83e8.jpg)
安装 :![image-20200630232712821](https://image.cha138.com/20210619/cfdf0f4f8eef4f26809590d3d5c37f35.jpg)
配置环境变量 :vim`/etc/profile`
在配置Java环境变量的时候,将下面四行代码放在这个文件末尾即可。但要注意自己的JDK版本号:
```textexport JAVA_HOME=/usr/lib/jdk1.8.0_241export JRE_HOME=${JAVA_HOME}/jre    export CLASSPATH=.:${JAVA_HOME}/lib:${JR```
![image-20200630235713736](https://image.cha138.com/20210619/0aec9765a415492f806bccf4c7b22eaf.jpg)
然后就可以通过 java -version命令查看java版本信息。
我们发布一个项目试试
```bash#开启防火墙端口filewall-cmd --zone==public --add-port==9000/tcp --permanent#9000是要开启的端口#重启防火墙systemctl restart filewalld.service#查看所有开启的端口,记得阿里云(其他的也要配置),需要配置安全组规则firewall-cmd --list-ports```
## Tomcat 安装
ssm war 就需要放到tomcat中运行
1. 下载tomcat,官网下载即可 2.  解压文件
```bashtar -zxvf apache-tomcat-9.0.36.tar.gz```
![image-20200701073022731](https://image.cha138.com/20210619/4a9a5fc776dc48fd8d138e986d965550.jpg)
3. 启动tomcat测试!./xxx.sh 脚本即可运行
```bash#执行 ./startup.sh#停止 ./shotdown.sh```
![image-20200701073411300](https://image.cha138.com/20210619/f8d37eca85554e55a7821e5aa3a20f03.jpg)
如果防火墙8080端口开了并且阿里云安全组也开放了这个时候就可以直接访问远程了。
```bash#查看firewall服务状态systemctl status firewalld
#开启、重启、关闭、firewalld.service服务#开启service firewalld start#重启service firewalld restart#关闭service firewlld stop
#查看防火墙规则firewall-cmd --list-all #查看全部信息firewall-cmd --list-ports #只看端口信息
#开启端口,选择直接要开启的端口开启端口命令 :firewall-cmd --zone=public --add-port=80/tcp --permanent 重启防火墙 :systemctl restart firewalld.service
命令含义 :--zone #作用域--add-port==80/tcp#添加端口,格式为 :端口/通讯协议--permanent #永久生效,没有此参数重启后失效```




## Docker(yum安装)


我们现在是在LInux下执行,一定要联网那,yum在线安装
1. 官网安装参考手册:https://docs.docker.com/install/linux/docker-ce/centos/2. 检测CentOS 7
```bash[root@dawn bin]# cat /etc/redhat-releaseCentOS Linux release 7.7.1908 (Core)```
3. 安装我们准备的环境
```bashyum -y install 包名    #yum install 安装命令```
4. 清除以前的版本
```bash$ sudo yum remove docker                   docker-client                   docker-client-latest                   docker-common                   docker-latest                   docker-latest-logrotate                   docker-logrotate                   docker-engine```
5. 安装需要的软件包
```bashsudo yum install -y yum-utils   device-mapper-persistent-data   lvm2```
6. 设置stable镜像仓库
   ```   # 错误   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   ```
7. 更新yum软件包索引
```yum makecache fast```
8. 安装Docker CE
```yum -y install docker-ce docker-ce-cli containerd.io```
9. 启动docker
```systemctl start docker```
10. 测试
```docker version
docker run hello-world
docker images```


以上是关于Linux入门的主要内容,如果未能解决你的问题,请参考以下文章

linux_docker入门

Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)

[linux][c/c++]代码片段01

Cg入门19:Fragment shader - 片段级模型动态变色

[linux][c/c++]代码片段02

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?