Linux 知识整理01

Author Avatar
cuteximi 11月 01, 2017
  • 在其它设备中阅读本文章

linux 学习记录01

要注意的地方

时刻提醒自己!

  • 保持记笔记的习惯,按照统一(md)的格式可以每节课结束记一次,中午吃完饭总结上午学的东西,记录一次。下午学完总结下午所学的知识。晚上总结全天的学习记录。
  • 周总结可以使用md、思维导图
  • 不要让自己懒,想办法让自己保持专注,借助外力或者内在的暗示。
  • 要有提前意识,预习,准备简历,准备笔试面试。
  • 多与老师交流,先思考,再去问问题、
  • 学习资料在网上找,或者找前辈要
  • 白天听老师将一遍,晚上可以看别的机构的老师讲的内容,作为补充,此时视频可以为多倍速播放
  • 回顾java的基础部分和Java web开发的知识点
  • 多练习,多总结,要扎实基础。
  • 记住节奏很快的,不要装懂。

今日学习目标

  • Linux系统的认识以及部署安装
  • 认识Linux文件系统结构
  • 实际操作文件和文件夹等
  • vi 编辑器的使用
  • 文件传输
  • host

日间阶段总结

MORNING

6:00 - 8:00

Linux centos的官方问答:网址

镜像地址:地址

8:00 - 10:00

概述学习的内容,其实主要是 hadoop 和spark ,这两部分都要扎扎实实的学习。Linux 和 Nginx 都要熟练,这是基础。

NOON

10:00 - 12:00

介绍Linux系统以及安装Linux系统。(pass)
安装版本为 centos 6.5 的 mini 版本。

AFTERNOON

14:00 - 16:00

文件系统,对文件的操作。
涉及到创建,复制,删除,重命名。对于文件和文件件差不多。注意的是,对文件夹进行删除或者复制操作的时候,要使用参数 -r ( 或 -R )。

文件的创建有很多种方式,比如 touch, vi, echo 等都可以创建一个文件。使用 echo 的时候可以使用 > 对文件的内容进行覆盖或者可以使用 >> 对文件的内容进行追加。删除文件的时候要注意参数的时候,使用 -f 参数可以强制删除文件。

命令有很多,记不住的时候,可以百度,google或者使用man 命令查看,最小化安装的 centos 是没有这个 man 命令的,可以使用 yum install man 来进程安装,加上参数 -y 可以自动同意一些 yes/no的安全性提示。

man cp 就会出现 cp 这个命令的说明手册。

16:00 - 17:00

一些 vi 的命令记录:

vi filename 直接新建或者打开一个文件,鼠标停在第1行行首。

vi +4 filename 如上,只不过光标停在第四行行首。

vi + filename 如上,只不过光标停留在最后一行行首。

vi /tsl filename 打开文件,并将光标定位到 tsl 这个字符那里。

vi /正则表达式 filename

进入底部命令行模式:

:set nu 或者 :set number

ctrl + g 是显示光标所在的位置。

替换:

:s/str1/str2/ 单行替换第一个匹配的字符

:s/str1/str2/g 全行替换

:%s/str1/str2/g 全文替换

复制粘贴删除:

yy

p

P

dd

ndd

:,\$-1d 删除当前行到倒数第一行。

o 在下一行插入

O 在上一行插入。

I 行首

A 行末

图形化编辑器,能干的事情, vi 也能完成相应的功能。
vi编辑器,其实我很早就在是使用了这个编辑器了,因为用来这么长时间,也一直是那几个常用的命令。工具是用来生产的,这就足够了。一般模式,插入模式,底部命令行模式。

vim 是 vi 的高级版。

学习进度

linux(5/12)

一天总结

学习 linux 记住一句话,“一切皆文件”,什么都好办了。

很多人一说到Linux, 就会说自由。但是你真的而理解这种自由吗?这种自由是一种权力,能够决定你的计算机干什么,获取这种自由的唯一方式就是知道你的计算机在做什么。自由就是你的计算机没有任何秘密,你可以从计算机那里了解一切,只要你用心去寻找。

Linux 的作者 linus 是一个很牛逼的大神,昨天还看了2005年他在 Google 做讲座的视频,那时他在宣传 git (一个分布式的版本控制系统),大神就是大神,整场都在 diss svn 以及 cvs 模式的版本控制工具,甚至还骂在坐的 Google 工程师蠢货…。因为他们问的问题要么太蠢,要么是质疑 git 为什么要采用分布式,习惯了使用集中式方式的他们简直被 linus 骂成了猪。黑客与画家,创造者等词联系在一起就不会那么难理解了吧。我们凡人是不懂得。。:frowning:

黑客崇尚自由,这与 Linux 系统特别匹配,对这个系统你得负责,你得知道你在干什么。

扯那么多…开始正题,记录一下 linux 的学习过程。

环境说明:

  • Macbook Pro 10.14版本
  • VMware Fusion 10.1.3
  • centos 6.5

环境搭建

1.安装 VMware Fusion略。

2.安装 centos 系统: 开头跳过检查(skip)。

3.配置网卡。

编辑网卡: vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.235.100 #设置 IP 地址
NETMASK=255.255.255.0 #设置子网掩码
GATEWAY=192.168.235.2
DNS1=114.114.114.114

重启网卡:

network restart

在这也可以配置DNS:

vi /etc/resolv.conf
nameserver 网关

4.关闭防火墙.

iptables -F

5.配置 host 以及hostname

host映射是在 /etc/hosts文件下进行配置:
初始是这样的,记录着本地回环地址与host的映射。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  • # 可以自己添加,比如
    192.168.1.11 node1
    192.168.1.12 node2
    

hostname是主机的标识,在 /etc/sysconfig/networking 中进行配置:

NETWORKING=yes
HOSTNAME=node01

认识 Linux文件系统

1.目录结构

首先得清楚 linux 系统都有那些约定俗成的目录,各自的目录都一般放什么文件。

bin: 存放二进制可执行文件(ls,cat,mkdir等)

sbin: 存放二进制文件,只有root用户才能访问

dev: 存放设备文件

usr: 存放系统应用程序,其中 /usr/local 是本地管理员软件安装目录

etc: 存放配置文件

lib: 存放一些共享类库和内核模块

tmp: 存放一些临时文件

var: 用于存放运行时需要改变数据的文件

boot: 存放开机所需的文件,开机时载入开机管理程序(bootloader),并映射到内存中。

home: 存放用户的东西

mnt:挂载目录

opt: 额外安装的可选软件的目录

文件的类型:

普通文件、目录文件、设备文件、链接文件、管道文件、套接字文件。

操作文件系统

孰能省巧,多练几遍

vi 编辑器

孰能省巧,多练几遍

host配置

配置 host 以及hostname

host映射是在 /etc/hosts文件下进行配置:
初始是这样的,记录着本地回环地址与host的映射。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  • # 可以自己添加,比如
    192.168.1.11 node1
    192.168.1.12 node2
    

hostname是主机的标识,在 /etc/sysconfig/networking 中进行配置:

NETWORKING=yes
HOSTNAME=node01

遇到的问题以及解决方案

问题1

【问题描述】

mac 下如何保存ssh的连接信息,实现自动登录。

【问题思路】

在 windows 下有一款比较好用的 xshell 工具,但是 mac 下没有对应的替代品。但是有一款优秀的客户端 iTerm2

【解决方案】

1.可以在【偏好设置】里面对应的【Profiles】页点击+号增加新的 profile 。

2.封装一个脚本,如下:

#!/usr/bin/expect -f
set timeout 60 # 设置超时时间
set username [lindex $argv 0] # 设置用户名
set password [lindex $argv 1] # 设置密码
set host [lindex $argv 2] # 设置ip或者域名
set port [lindex $argv 3] # 设置端口号
spawn ssh -p $port $username@$host # 启动一个的新的线程

# 模式 判断
expect {
        "*yes/no" { send "yes\r";exp_continue }
        "*password:" { send "$password\r" }
}
expect "$*" { send "pwd\r" }
interact

其中,Expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。提供了 send , expect , spawn ,interact 等命令。

  • send:用于向进程发送字符串
  • expect:从进程接收字符串
  • spawn:启动新的进程
  • interact:允许用户交互

说明:spawn 是用来启动一个进程的,在它之后的expect 和 send 都是与该进程交互的。interact 起到干预的作用。

3.在1步骤中的新建的 profile 中新增命令行的内容:

expect ~/.ssh/config_big_data/node01 root 123**4 cq.x***.te*h 4**2

因为上述连接涉及安全信息,故部分字符串被 * 代替。

依次为:expect 脚本 username@password host port

4.总结,这种方式应该是比较有效的方式了,其实还可以把公钥传到服务器,采用秘钥的验证方式登录。

参考文章:

1.expect原理详解

2.expect脚本传参

问题2

【问题描述】

克隆虚拟机之网卡配置

【问题思路】

网卡的 mac 地址冲突。修改一下 mac 地址即可。

【解决方案】

方案1:

  1. vi /etc/udev/rules.d/70-persistent-net.rules

注释掉eth0,然后将下面的eth1改名为eth0,复制下此eth0的mac地址

  1. 将此 mac 地址跳到 ifcfg-eth0 中即可。
  2. 重启服务器 reboot -h now或者 intit 6

方案2:

rm -rf /etc/udev/rules.d/70-persistent-net.rules
intit 0
修改网卡ip即可。

问题3

【问题描述】

服务器之间如何实现免密登录,以及原理

【问题思路】

SSH以非对称加密实现身份验证,所以它是比较安全的。

身份验证有多种途径,例如①其中一种方法是使用自动生成的公钥-私钥对来简单地加密网络连接,随后使用密码认证进行登录;②另一种方法是人工生成一对公钥和私钥,通过生成的密钥进行认证,这样就可以在不输入密码的情况下登录。任何人都可以自行生成密钥。公钥需要放在待访问的电脑之中,而对应的私钥需要由用户自行保管。认证过程基于生成出来的私钥,但整个认证过程私钥本身中不会传输到网络中。

【解决方案】

如何新建密钥对呢?

1.查是否已存在密钥对,打开终端(Terminal):

输入:ls -al ~/.ssh

查看是否输出密钥对,如果有的话,会输出如下文件信息:id_rsa 和 id_rsa.pub

-rw——- 1 taoshilei staff 1679 Jun 25 22:34 id_rsa
-rw-r–r– 1 taoshilei staff 403 Jun 25 22:34 id_rsa.pub

2、如果没有,则需要我们手动创建

输入:ssh-keygen -t rsa -b 4096 -C "your_email"

ssh-keygen 是生成秘钥的工具之一。

SSH supports several public key algorithms(公开秘钥算法) for authentication keys.

1.rsa - A key size of at least 2048 bits is recommended for RSA; 4096 bits is better.

2.dsa - DSA in its original form is no longer recommended.(不推荐使用)

3.ecdsa - Only three key sizes are supported: 256, 384, and 521 (sic!) bits.(大多数ssh客户端支持)

4.ed25519 - Support for it in clients is not yet universal. (还没有普及)

The algorithm is selected using the -t option and key size using the -b option.

-t 参数指定加密算法,-b 参数指定长度

用法如下:

ssh-keygen -t rsa -b 4096

3.将公钥发送到服务器

使用 ssh-copy-id 工具。

用法:

ssh-copy-id -i 公钥位置 user@host

之后会提示输入密码进行认证。

在这之后,公钥就会被添加到 服务器上的 ~/.ssh/authorized_keys 文件了里面。

一旦在服务器上配置了公钥,服务器会允许任何具有私钥的客户端进行连接用户登录,在登录的过程中,客户端会通过数字签名交换来证明拥有私钥。

免密登录图解

创建密钥并添加到服务器上。

image.png | left

登录认证流程

值得注意的是:服务端的 .ssh目录权限必须是700(rwx——),authorized_keys文件的权限是600(rw——-)

image1.png | left

部分参考
https://www.ssh.com/ssh/keygen/#sec-What-Is-ssh-keygen

This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:http://blog.cuteximi.com/linux01/