Linux学习笔记

 

Linux 基础入门篇


1 安装VMware 和 CentOS

1.1 安装VMware

  1. 官网下载VMware软件。

  2. 双击安装包,一直下一步,直至完成。

  3. 有些电脑还需要去BIOS里面修改设置开启虚拟化设备支持

1.2 安装CentOS

  1. CentOS官网下载需要的镜像文件(若网不好可先下载种子文件,再用迅雷下载)。

  2. 镜像下载完后打开VMware,按下ctrl+n键,在弹出的向导页面中选择典型,然后下一步,选择稍后安装操作系统,再下一步,然后选择Linux,版本选择centos 8 64位,然后下一步,名称和位置视具体情况决定,磁盘大小选择10G,并且选择将虚拟磁盘存储为单个文件,然后下一步,点击自定义硬件,内存和处理器不变(因为不安装桌面) --> 网络适配器选择NAT模式 --> 新CD / DVD(IDE)选择使用ISO映像文件,点击浏览找到下载好的镜像文件 --> 删除打印机USB控制器,点击关闭,点击完成

  3. 点击开启此虚拟机,选择Install CentOS Linux 8,language中选择中文,点击继续,在本地化选项中,“键盘”中点击“+”,添加英语(美国),“语言支持”中,添加English(United States),“时间和日期”中,选择亚洲上海。在软件选项中,“安装源”中,输入mirrors.aliyun.com/centos/8/BaseOS/x86_64/os,在“软件选择”中,基本环境选择最小安装,额外环境勾选:虚拟机代理标准安装开发工具网络服务器安全性工具系统工具。在系统选项中,“安装目的地”中,勾选本地标准磁盘下面的那块磁盘,“网络和主机名”中,点击配置下的IPv4设置,选择手动,然后输入IP地址等信息,最后点击保存。在用户设置选项中,设置根密码后,再创建一个用户。最后点击开始安装

  4. 启动此系统后,点击最上面的菜单栏中的虚拟机,再点击安装VMware tools

  5. 右击库中安装好的CentOS虚拟机,选择设置,选择选项,在共享文件夹栏中,选择总时启用,然后在下面的文件夹中添加一个(CentOS中的共享文件夹目录是/mnt/hgfs,需要挂载)。

  6. 挂载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下:

  7. 安装过程全部结束。

2 远程登陆 Linux 系统

2.1 为什么要远程登陆

因为Linux服务器是开发小组共享的,并且正式上线的项目是运行在公网上的,因此需要远程登陆到服务器进行项目的管理或开发。

2.2 远程登陆具体流程

openssh服务器由opensshopenssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行“systemctl start sshd.service”即可按默认配置启动sshd服务,包括root在内的大部份用户(只要拥有合法的登录shell)都可以远程登录系统。

sshd服务的配置文件是:/etc/ssh/sshd_config,ssh服务名称:sshd, sshd服务使用的默认端口号为22Port 22,必要时建议修改此端口号,并指定监听服务的具体IP地址(ListenAddress 192.168.10.1),以提高在网络中的隐蔽性。

SSH协议的版本选用V2比V1的安全性要更好,禁用DNS反向解析(UseDNS no可以提高服务器的响应速度。

sshd服务的用户登录控制,通常就禁止root用户或密码为空PermitRootLogin noPermitEmptyPasswords no )的用户登录。另外,可以限制登录验证的时间(默认为2分钟:LoginGraceTime 2m )最大重次数(MaxAuthTries 3),若超过限制后仍未登录则断开连接。

如果只允许或禁止某些用户登录时,可以使用AllowUsersDenyUsers配置,两者用法类似(不能同时使用)。

AllowUsers    aliyun test@192.168.1.1            
# 允许 aliyun 和从 192.168.1.1 登录的 test 帐户通过 SSH 登录系统。
  1. 下载并安装XShell和Xftp软件。

  2. 打开XShell后点击文件下的新建,在弹出的窗口中依次填写:名称主机,然后点击连接

  3. 若正确连接,则下一步是输入用户名密码,之后就连接上了Linux。

    <!--特别说明:如果希望安装好 XShell 5 就可以远程访问 Linux 系统的话,需要有一个前提,就是--> <!--Linux 启用了 SSHD 服务,该服务会监听 22 号端口。-->

  4. 若连接不了,原因是虚拟机没有默认勾选下面这个选项

     

默认情况下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用户下(使用密钥对):

此过程需要准备两台虚拟机,或则克隆原来的虚拟机!

  1. 使用 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.

     

  2. 使用 ssh-copy-id公钥复制到远程欲登录机器中:

    ssh-copy-id -i .ssh/id_rsa.pub username@192.168.x.xxx

    <!--注意:使用 ssh-copy-id 复制到远程root时,需要输入远程主机root的密码-->

    1. 使用 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 文件方面命令

  • 目录处理
  1. ls -- 显示目录文件

  1. mkdir -- 创建新目录
  2. mkdir -- 创建新目录
  3. cd -- 切换目录
  4. pwd -- 显示当前目录
  5. cp -- 复制文件或目录
  6. mv -- 剪切文件、改名
  7. rm -- 删除文件
  8. echo -- 输出内容到控制台
  • 文件处理
  1. touch -- 创建空文件
  2. cat -- 显示文件内容
  3. tac -- 倒序显示文件内容
  4. more -- 分页显示文件内容
  5. less -- 分页显示文件内容(可向上翻页)
  6. head -- 显示文件前几行
  7. tail -- 显示文件后几行
  8. chattr --
  9.  重定向和追加
  10. alias -- 查看别名
  11. stat -- 显示文件或文件系统的详细信息
  12. wc -- 用于计算字数
  13. cut --
  14. awk工具
  15. sed工具
  • 链接处理 

命令为:ln,ln的英文原意为:link

  1. 创建软连接

  2. 创建硬链接

  • 文件搜索
  1. find -- 文件搜索
  2. locate -- 在文件资料库中查找文件
  3. which -- 搜索命令所在目录及别名信息
  4. whereis -- 搜索命令所在目录及帮助文档路径
  5. grep -- 在文件中搜寻字串匹配的行并输出
  6. history -- 查看过往使用过的命令
  7. | -- 管道命令
  • 压缩&解压
  1. gzip -- 压缩文件
  2. gunzip -- 解压".gz"文件
  3. tar -- 打包目录
  4. zip -- 压缩文件或目录
  5. unzip -- 解压.zip文件
  6. bzip2 -- 压缩文件
  7. 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 -- 退出登录
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值