Linux 基础入门篇
1 安装VMware 和 CentOS
1.1 安装VMware
-
去官网下载VMware软件。
-
双击安装包,一直下一步,直至完成。
-
有些电脑还需要去BIOS里面修改设置开启虚拟化设备支持。
1.2 安装CentOS
-
去CentOS官网下载需要的镜像文件(若网不好可先下载种子文件,再用迅雷下载)。
-
镜像下载完后打开VMware,按下
ctrl+n
键,在弹出的向导页面中选择典型,然后下一步,选择稍后安装操作系统,再下一步,然后选择Linux,版本选择centos 8 64位,然后下一步,名称和位置视具体情况决定,磁盘大小选择10G,并且选择将虚拟磁盘存储为单个文件,然后下一步,点击自定义硬件,内存和处理器不变(因为不安装桌面)-->
网络适配器选择NAT模式-->
新CD / DVD(IDE)选择使用ISO映像文件,点击浏览找到下载好的镜像文件-->
删除打印机和USB控制器,点击关闭,点击完成。 -
点击开启此虚拟机,选择
Install CentOS Linux 8
,language中选择中文,点击继续,在本地化选项中,“键盘”中点击“+”,添加英语(美国),“语言支持”中,添加English(United States)
,“时间和日期”中,选择亚洲上海。在软件选项中,“安装源”中,输入mirrors.aliyun.com/centos/8/BaseOS/x86_64/os
,在“软件选择”中,基本环境选择最小安装,额外环境勾选:虚拟机代理、标准安装、开发工具、网络服务器、安全性工具、系统工具。在系统选项中,“安装目的地”中,勾选本地标准磁盘下面的那块磁盘,“网络和主机名”中,点击配置下的IPv4设置,选择手动,然后输入IP地址等信息,最后点击保存。在用户设置选项中,设置根密码后,再创建一个用户。最后点击开始安装。 -
启动此系统后,点击最上面的菜单栏中的虚拟机,再点击安装VMware tools。
-
右击库中安装好的CentOS虚拟机,选择设置,选择选项,在共享文件夹栏中,选择总时启用,然后在下面的文件夹中添加一个(CentOS中的共享文件夹目录是/mnt/hgfs,需要挂载)。
-
挂载hgfs目录。首先创建此目录
mkdir /mnt /hgfs
,然后挂载vmhgfs-fuse .host:/ /mnt/hgfs
,因为每次开机都需要输入一次,所以下面将创建一个开机自启sh脚本。首先,因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权:chmod +x /etc/rc.d/rc.local
,然后赋予脚本可执行权限(此时脚本的位置为/root/autostart_share.sh):chmod +x /root/autostart_share.sh
,最后打开/etc/rc.d/rc.local文件,在末尾增加如下内容:/root/autostart_share.sh
。
在Linux下:
在Windows下: -
安装过程全部结束。
2 远程登陆 Linux 系统
2.1 为什么要远程登陆
因为Linux服务器是开发小组共享的,并且正式上线的项目是运行在公网上的,因此需要远程登陆到服务器进行项目的管理或开发。
2.2 远程登陆具体流程
openssh服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行“systemctl start sshd.service
”即可按默认配置启动sshd服务,包括root在内的大部份用户(只要拥有合法的登录shell)都可以远程登录系统。
sshd服务的配置文件是:/etc/ssh/sshd_config,ssh服务名称:sshd, sshd服务使用的默认端口号为22(Port 22),必要时建议修改此端口号,并指定监听服务的具体IP地址(ListenAddress 192.168.10.1),以提高在网络中的隐蔽性。
SSH协议的版本选用V2比V1的安全性要更好,禁用DNS反向解析(UseDNS no)可以提高服务器的响应速度。
sshd服务的用户登录控制,通常就禁止root用户或密码为空(PermitRootLogin no、PermitEmptyPasswords no )的用户登录。另外,可以限制登录验证的时间(默认为2分钟:LoginGraceTime 2m )及最大重次数(MaxAuthTries 3),若超过限制后仍未登录则断开连接。
如果只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置,两者用法类似(不能同时使用)。
AllowUsers aliyun test@192.168.1.1
# 允许 aliyun 和从 192.168.1.1 登录的 test 帐户通过 SSH 登录系统。
-
下载并安装XShell和Xftp软件。
-
打开XShell后点击文件下的新建,在弹出的窗口中依次填写:名称和主机,然后点击连接。
-
若正确连接,则下一步是输入用户名和密码,之后就连接上了Linux。
<!--特别说明:如果希望安装好 XShell 5 就可以远程访问 Linux 系统的话,需要有一个前提,就是--> <!--Linux 启用了 SSHD 服务,该服务会监听 22 号端口。-->
-
若连接不了,原因是虚拟机没有默认勾选下面这个选项
默认情况下root用户是可以通过ssh访问服务器,为了安全起见,应该禁止root用户使用ssh远程连接,正确做法是开放普通用户ssh服务,然后通过普通用户切换到root用户
突然遇到一个问题,关机前还能正常链接ssh,关机后,ping都不行了,网上找了半天的教程都不行:
点一下这里,包治百病!!!
另外一种解决方法(重点):
另外一种解决方法:
1、查看虚拟机NAT的网关和子网的地址
2、查看宿主机的VMnet8对应的网卡的IP地址:
IP地址随便设一个,设置完成后,还需要重启网卡!
或者自动获取也可以
<!--同样可以解决问题-->
有时候本来正常的,换个网络就不行了,这时候,只需要把VM8那个网卡禁止然后启用即可解决问题
2.3 ssh登录验证方式
1、密码验证
具体不做讲解,因为很简单,直接输入账户和密码即可登录,以服务器中本地系统用户的登录名称、密码进行验证。从客户机角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力较弱。
2、密钥对(公钥和私钥)验证
要求提供相匹配的密钥信息才能通过验证。通常先在客户中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大增强了远程管理的安全性。公钥(Public Key)与私钥(Privtae Key)的关系如下:
公钥与私钥是成对生成,这两个密钥互不相同,可以互相加密与解密。不能根据一个密钥来推算出另一个密钥。公钥对外公开,私钥只有私钥的持有人才知道。
公钥与私钥要配对使用,如果用公钥对数据进行加密,只有用相对就的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。
当密码验证与密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用, 只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可启用。
其中,公钥库文件用来保存各客户机上传的公钥文本,以便与客户机本地的私钥文件进行匹配。下面重点说怎么弄密钥对:
1、修改配置文件:
PasswordAuthentication yes # 启用密码验证
PubkeyAuthentication yes # 启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys # 指定公钥库数据文件
<!--.ssh/authorized_keys 的位置为:/root/.ssh/authorized_keys-->
2、生成密钥对
其中:id_rsa 是私钥,而 id_rsa.pub 是公钥,下面需要做的是把私钥复制到Windows中,还是使用Xftp登录root用户,因为不能显示隐藏文件,所以把私钥先复制到/root目录下,然后就能显示了,再拖到Windows桌面即可:
然后将公钥移动并改名为:
cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
然后用XShell进行连接,却报错了:
应该是这个文件
原因竟然是因为错吧公钥当私钥复制了,shit,复制错了,应该复制私钥的!!!!
在Linux命令行使用ssh进行远程登录到root用户下:
在Windows上使用ssh远程登录到root用户下:
假如改了端口的话,还可以加上 -p 选项来指定一个端口:
ssh -p 2345 student@192.168.75.158
<!--注意:格式是 ssh [-p port] user@remote-->
scp远程复制:
使用scp命令可以利用SSH安全连接与远程主机相互复制文件。使用scp命令时,除了必须指定复制源、目标外,还应指定目标主机地址、登录用户,执行后提示验证口令即可。
如果要复制文件夹的话,需要加上 -r 选项:“-r Recursively copy entire directories.”
在Linux命令行使用ssh进行远程登录到root用户下(使用密钥对):
此过程需要准备两台虚拟机,或则克隆原来的虚拟机!
-
使用 ssh-keygen 生成密钥对:
<!--注意,此时的 passphrase 没有任何内容,直接回车-->
<!--也可以使用:ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ''-->
可以man ssh-keygen一下,看看具体参数代表的作用
-t dsa | ecdsa | ed25519 | rsa | rsa1: Specifies the type of key to create. The possible values are “rsa1” for protocol version 1 and “dsa”, “ecdsa”, “ed25519”, or “rsa” for protocol version 2. -f filename:Specifies the filename of the key file -N new_passphrase:Provides the new passphrase.
-
使用 ssh-copy-id 将公钥复制到远程欲登录机器中:
ssh-copy-id -i .ssh/id_rsa.pub username@192.168.x.xxx
<!--注意:使用 ssh-copy-id 复制到远程root时,需要输入远程主机root的密码-->
-
使用 ssh username@192.168.x.xxx 登录到欲登录机器,不再输入密码
-
使用 ssh 做端口转发:
请这个面试题:点我
3 Linux的目录结构
3.1 基本介绍
linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录,总之记住一句话:在Linux世界里,一切皆为文件。
3.2 具体介绍
3.2.1 Bash提示符
【】:提示符的分隔符号,没有特殊含义
root:显示当前的登录用户
@:分隔符号,没有特殊含义
~:代表当前所在的目录
#:命令提示符,超级用户是#,普通用户是$
注意:系统全局的提示符修改位置在:/etc/bash.bashrc,每个用户还有单独的配置文件在用户家目录(/home/用户名)下的‘.bashrc’文件中,其中修改‘.bashrc’文件内容会直接覆盖/etc/bash.bashrc文件的内容
3.2.2 Linux下的目录
1. /bin、/sbin、/usr/bin、/usr/sbin、/usr/local
bin是**binary**的简写,
- /bin ---目录存放着**普通用户和超级用户**都会用到的必要的命令,如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。
- /sbin --- 目录存放着**系统管理员**使用的必要的来管理系统的命令,s 就是 **Super User** 的意思,是 **Superuser Binaries** (超级用户的二进制文件) 的缩写。
- /usr/bin --- 目录主要放置一些**应用软件工具**的必备执行档,如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 zip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。
- /usr/sbin --- 目录主要放置一些**管理用的必备程序**例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等。
- /usr/local --- 目录是另外一个给主机额外**安装软件**的目录,一般安装的是通过编译源码方式安装的程序。
<!--如果这是用户和管理员必备的二进制文件,就会放在/bin。如果这是系统管理员必备,但是一般用户根本不会用到的二进制文件,就会放在 /sbin。-->
<!--相对而言。如果不是用户必备的二进制文件,多半会放在/usr/bin;如果不是系统管理员必备的工具,多半会放在/usr/sbin。-->
2. /home
用于存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录是以用户的账户名命名。
3. /root
该目录为系统管理员的主目录。
4. /boot
是引导分区,也就是引导操作系统启动的程序所在的分区,存放的是**启动Linux**时使用的一些核心文件,包括一些连接文件以及镜像文件。
5. /proc
**processes**的缩写,这个目录是一个虚拟的目录,它是系统内存的映射,可以访问这个目录来获取系统信息。
6. /srv
**service**的缩写,该目录存放一些服务启动之后需要提取的数据。
7. /sys
**system**的缩写,存放内存中的数据,如内核、文件系统等。
8. /tmp
**temporary**的缩写这个目录是用来存放一些临时文件的。
9. /dev
**device**的缩写,类似于window的设备管理器,把所有的硬件用文件的形式存储。
10. /media
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
11. /mnt
**mount**的缩写,系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
12. /opt
**optional**的缩写,这是给主机额外**安装软件**所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
13. /usr
**unix system resources** 的缩写,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
14. /usr/src
**source**的缩写,内核源代码默认的放置位置。
15. /var
**variable**的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
16. /run
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
17. /selinux
这个目录是 **Redhat/CentOS 所特有的目录**,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
注意:以后在启动apache等服务后可能会经常关闭selinux,命令为:setenforce 0,然后查看一下:getenforce
4 Linux常用命令
4.1 文件方面命令
- 目录处理
- ls -- 显示目录文件
大
- mkdir -- 创建新目录
- mkdir -- 创建新目录
- cd -- 切换目录
- pwd -- 显示当前目录
- cp -- 复制文件或目录
- mv -- 剪切文件、改名
- rm -- 删除文件
- echo -- 输出内容到控制台
- 文件处理
- touch -- 创建空文件
- cat -- 显示文件内容
- tac -- 倒序显示文件内容
- more -- 分页显示文件内容
- less -- 分页显示文件内容(可向上翻页)
- head -- 显示文件前几行
- tail -- 显示文件后几行
- chattr --
- 重定向和追加
- alias -- 查看别名
- stat -- 显示文件或文件系统的详细信息
- wc -- 用于计算字数
- cut --
- awk工具
- sed工具
- 链接处理
命令为:ln,ln的英文原意为:link
-
创建软连接
-
创建硬链接
- 文件搜索
- find -- 文件搜索
- locate -- 在文件资料库中查找文件
- which -- 搜索命令所在目录及别名信息
- whereis -- 搜索命令所在目录及帮助文档路径
- grep -- 在文件中搜寻字串匹配的行并输出
- history -- 查看过往使用过的命令
- | -- 管道命令
- 压缩&解压
- gzip -- 压缩文件
- gunzip -- 解压".gz"文件
- tar -- 打包目录
- zip -- 压缩文件或目录
- unzip -- 解压.zip文件
- bzip2 -- 压缩文件
- bunzip2 -- 解压.bz2文件
4.2 网络方面命令
- 配置文件
- hostname -- 临时主机名配置
- hostnamectl set-hostname 新主机名 -- 永久设置主机名
- write -- 给用户发信息
- wall -- 发广播消息
- ping -- 测试网络连通性
- ifconfig -- 查看和设置网卡信息
- ip addr -- 获取网络地址
- last -- 列出目前与过去登入系统的用户信息
- lastlog -- 检查某特定用户上次登录的时间
- traceroute -- 显示数据包到主机间的路径
- curl -- 查看网页
- w3m -- 显示网页
- netstat -- 显示网络相关信息
- route -n -- 查看网关信息
- setup -- 配置网络
4.3 帮助方面命令
- man -- 获取帮助信息
- help -- 获取Shell内置命令的帮助信息
- info -- 一套完整的资料
4.4 时间方面命令
- date -- 时间日期
- cal -- 查看日历
4.5 关/开/重启方面命令
- shutdown -- 停止、关机、重启
- halt -- 停止、关机、重启
- poweroff -- 停止、关机、重启
- reboot -- 停止、关机、重启
- init 6 -- 重启
- init 0 -- 关机
- logout -- 退出登录