Linux初步学习系列

Linux初步学习系列

稚嫩的开始,学习Linux基础

这一部分是最早的以标题为Day1-Day8的博客,实际上是开始简单的学习Linux系统,其中Day7和Day8都没有写什么内容,因为很多涉及到实践操作,在学习了这一部分之后,就开始学Python了。看看当时稚嫩的开始吧。

Day1 计算机及网络基础

这一部分是计算机理论基础和网络基础。基础的进制转换和原码补码已经比较清楚了。

网络部分的七层以及相关内容没有仔细看过。程序员的四大浪漫(编译原理,操作系统,计算机图形学,计算机网络)每一个都不简单。这部分的讲义在这里

  1. 应用层
  2. 表示层
  3. 会话层
  4. 传输层
  5. 网络层
  6. 数据链路层
  7. 物理层
物理层 用来发送电信号

数据链路层
用来分组电信号,后来形成了以太网协议。
以太网协议:
一组电信号构成一个数据包,叫做帧
每一数据帧分成:报头Head 和 数据 Data
报头固定18个字节,包含发信地址,目标地址,数据类型。 数据包含:最短46字节,最长1500字节。(似乎是MTU)数据包里就是数据的具体内容。
Head+Data 最短64字节,最长1518字节,超过就分片发送。
发信和目标地址用Mac地址进行标记。Mac地址为48位的2进制。通常由12位16进制数表示。
发包的时候在局域网内部通过广播的方式,收到包的机器会检查目标地址,如果不是自己则丢掉。但是如果跨局域网通信,采用广播的方式,则数据压力太大,数据链路层无法解决这个问题。

网络层
网络层定义了IP协议,IPv4指定网络地址由32位2进制表示,范围0.0.0.0-255.255.255.255,通常写成四段十进制数。
IP地址分成两部分:标识子网和标识主机。然后还有子网掩码,用来判断两个IP地址是否在同一个子网络内。
IP数据包也分为Head 和Data。Head部分记录来源Ip和目标Ip,data内为数据。IP的整个包实际上要被封到以太网包的数据部分,由物理层传输。
在传输的时候如何预先知道别人的Mac地址呢,是采用ARP协议的方式,将自身的Mac地址广播到局域网内。广播地址就是FF:FF:FF:FF:FF:FF,这表示需要获得对应IP地址的Mac,机器在收到之后发回mac地址,就知道了这个局域网里所有机器的Mac地址。

传输层
传输层这一层解决的是找到计算机之后,如何知道数据包交给哪个程序。传输层通过TCP和UDP协议,建立端口到端口的通信。
端口是一个虚拟概念,从0-65535,其中0-1023是系统占用端口。
TCP协议:可靠传输,按照以太网头 IP头 TCP头 数据的方式组织传输,TCP包的数据可以无限长,但一般不超过IP包的长度,避免浪费时间分割。
UDP协议,不可靠传输,报头一共只有8个字节。总长度不超过65535。
TCP会在端口之间进行握手来建立稳定传输,由于TCP和UDP的协议很复杂,所以抽象出了一个Socket(套接字)用于封装TCP和UDP,在之后的python编程中,就面向Socket编程,不用深入底层的协议。

应用层
就是应用程序在传输数据之上对于数据格式的进一步协议.比如电子邮件应该以什么样的格式发送,接收软件也采用相同的格式,就能够再将电子邮件正常显示出来.
大部分网络传输都有标准格式,比如HTTP,FTP,电子邮件等,在开发程序的时候要熟悉对应的标准格式.如果是非标准格式,则自己的软件需要完成将数据封装和解包读取的功能。

学完感觉计算机网络不愧四大浪漫之一,绝对不简单,随便一本TCP协议入门的书都大概两块砖头厚.不过目前只需要了解网络的基本结构。
记得自己有一本图解HTTP,还需要再翻一翻了。

Day2 复习计算机基础和介绍编码

复习的内容不用说了,就是第一天的计算机硬件以及基础网络知识.我找了点关于基础网络的书列出来,有空可以一点一点看了.

今天的内容的原地址在这里.字符编码也是编码的一种,提到编码,当然是大名鼎鼎的《编码》一书了,这书我仔细读过两遍,也成为我能够啃下来计算机基础要素这书前五章的基础,确实是一本计算机入门的好书,以后估计也会给女儿读一读.也推荐给所有想了解面前的这台东西是怎么工作的人.

计算机最早采用ASCII码来映射字符与二进制数的对应关系,这就叫做字符编码.

现在针对字符编码,广泛使用的是Unicode中的UTF-8标准,只要是按照Unicode编码的程序,在世界上所有支持Unicode的计算机上都能正常显示原来的字符.

说到这里,我想起很小的时候我玩游戏,很多游戏需要Applocal这个程序,或者是将Big5码转成简体(我记得还有曹操传和三国志7等等游戏),当时各个语言的编码集还没有统一,需要转编码的工具.如今大部分软件都支持Unicode,可以很简单的做到多语言支持.还没有Unicode的时候,有很多人尝试将汉字应用到计算机中,还出现了汉卡这个硬件用来装载汉字字库,针对我们的汉字,也有GB2312等标准,后来在发展出Unicode 的时候,Unicode组织的编码依然基于各个主要语言的早期编码标准.

贴点看到的计算机书籍收集的网站:
http://it-ebooks.flygon.net/(已失效)
http://www.simple000.com/index.php

Day3 Linux基础

这次采用最小化安装来安装一次Centos7的1804版本,然后升级内核到最新的4.18内核,参考了来自这里这里的文章。

在安装文字界面,将网卡的名称改回eth0,新版的centos7改成了ens33,看着比较吃力,改回eth0比较方便。

位于 Install Centos 7 那一行的时候按下Tab键显示安装选项,然后输入:

net.ifnames=0 biosdevname=0

之后关闭KVDUMP和安全策略,选择最小化安装和前三个组件即可。
安装完之后,正常情况下,物理机可以ping通虚拟机,但虚拟机ping不通物理机,原因是windows防火墙没有开启文件和打印机共享(回显请求ICMPv4-in)。
到控制面板–windows defender 防火墙–入站规则–开启文件和打印机共享(回显请求ICMPv4-in)专用公用即可,属于域的不需要开启。

简单的一些命令:
date 显示当前时间,带有格式化输出功能 +%Y/%m/%d/%H/%M/%S
ls -al 以详情方式显示当前目录包含隐藏的全部文件
locale 显示本地化设置,其中LANG只与输出有关。LC_ALL是基础设置,建议设置为en_US.UTF-8
cal 显示日历,可以传参数 month year 例如 cal 3 2018
bc 计算器程序,启动之后是进入bc的工作环境中。 +加 -减 *乘 /除 ^幂 %模 scale=3 设置小数点显示3位 quit 退出bc环境
who 线上登录的用户
netstat -a 当前的网络状态
ps-aux 显示后台程序

与关机相关:
sync 将资料写入硬盘
shutdown 默认一分钟后关机 -k只发送警告信息,不会关机 -r停止系统服务后重新开机 -h停止系统服务后关机 -c 取消正在进行的shutdown
reboot hAlt poweroff 重新启动

centos7中的systemctl 用于控制系统相关动作,不再使用init 0-6的级别,只是为了保留兼容性

常用按键:
tab 命令补齐:不输入任何指令直接按两次tab,会提示显示所有命令。 跟在命令后连按两下tab,显示所有相关命令。 在命令选项和参数后按tab,为补齐路径和文件名。centos中自动装了一个 bash-completion 软件,和默认的补齐会有不同。
ctrl+c 中断当前命令执行
ctrl+d 键盘输入结束,相当于输入exit离开或者logout注销登录
shift+pagedown/up 上下翻页,对于长输出可以前后查看
man page的使用,相当于教学帮助,在其中按下 /word 可以向上关键字,输入 ?word可以向下搜索关键字,然后按n 或 N正向 反向搜索。 Home 第一页 End 最后一页

操作系统提供服务是靠内核系统调用接口.程序向通过系统调用,可以进入内核态(权限更高)来完成工作,不向操作系统申请调用则是用户态.

安装Cent Os 已经装了好几次了,了解了Linux 的磁盘设置和安装过程.

Linux的历史上故事很多.创始人 Linus Torvalds的自传《只是为了好玩》打算有空看看,就好比去看Python的创始人Guido喜欢的Monty Python’s Flying Circus可以加深你对python的了解(误)一样.

Linux命令由 命令名 选项 参数 组成,其中选项可以用-加简略命令,或者用–加上选项全称来使用.
这次学的Linux命令:

ls列目录,常用的选项是-la

init 0
关机命令,其实是改变系统6个target的状态,类似的还有shutdown -h now 这些关机命令只能由root用户使用

exit返回

whoami查看自己身份,在命令行最前也有提示

who列出所有登陆的用户

date查看时间,可以用date 月日时分年的方式修改系统时间,用hwclock -s同步硬件 -w同步系统

cal月 年 显示月历

clear清除屏幕,可以用快捷键ctrl+l代替

su切换用户,向root用户切换需要知道root用户密码.一般我们会设置一个登陆用户,在需要的时候通过su -来获得root权限.注意要带-,这样会将root的环境配置一并带过来,否则有可能出错

useradd增加用户

passwd修改用户密码

man + 命令获得命令帮助

--help大部分命令可以使用,获得命令帮助

Linux的目录
Linux的目录和windows一样采用树形结构,不同的是Linux的目录只有一棵树,从根目录/开始,将所有的设备都映射成文件或者目录.
Linux根目录下的一些主要目录有:
bin 存放可执行文件
sbin 存放系统的执行文件
home 存放各个非root用户的默认工作目录
root 超级管理员工作目录
dev 设备文件目录
etc 配置文件目录
mnt 挂载点目录

Linux 的目录用/作为目录分隔符,一般都使用绝对路径.
.表示当前目录
..表示上一级目录

目录的一些操作:

cd后边加上路径名,切换当前目录到指定路径

mkdir建立目录, 默认是单独建立一个,无法建立目录树.加上-p 即可递归建立目录

cp复制文件或目录,命令格式为cp 选项 参数 原路径 目标路径,可以理解为windows 的copy+rename.没有目录的时候不会创建.-r 递归复制全部,-f 不询问,强制覆盖.单独copy目录,除非空,否则无法单独copy一个目录

mv移动及修改目录和文件名,可以理解为windows的cut+rename

touch可以直接递归的建立文件

rm默认有提示,-f强制删除

rmdir删除目录,用rm -r也可以删除目录

cat查看文本文件

head加选项-n显示从头开始的n行,默认是10

tail加选项-n显示从尾部开始倒数n行,默认是10.特别的,tail -f可以实时显示文件的变化,一般用来查看日志

more分页查看内容,用回车翻页

less也是分页查看内容

基础命令学完了,至少对于系统本身,现在不会茫然了.

SecureCRT可以使用SFTP 与linux传文件,在已经连接的选项卡上点击开启SFTP,然后看这里的命令

想把一个文件夹传上去就用
put -r 文件夹名
就可以了,这样可以很方便的更新整个目录

Day4 Linux用户,群组及权限

用户和权限是Linux作为服务器非常重要的部分.
Linux用户不仅是用户,用户还从属于组,这样就产生了用户,用户所属的组,组外用户的三种权限.
针对每一个文件,都有上述三种情况对应的权限,如果设置不当,文件可能遭破坏或者软件运行出现问题.

用户和密码保存在/etc/passwd /etc/shadow和/etc/group中.
passwd保存了每个用户的信息,密码则保存在shadow中
用户名:密码(x表示有,空表示无):UID(用户ID,为0表示为root管理员):GroupID(组ID):用户描述信息:用户目录:是否能登陆操作系统(为bash可以登陆,nologin不允许登陆)
shadow中成对保存了用户名及密码,密码是经md5算法之后的结果
UID 500以前的都由系统占用,自己添加的账号都是从500开始的.如果将一个用户的UID改成0,则这个用户就是root用户.
用户组保存在/etc/group,其中的组id是和passwd其中一样的
这三个文件保存了所以用户以及组的基本信息.
组的密码在 /etc/gshadow, 组一般不设密码.
在新建立用户的时候,还会在/home目录下生成用户的文件夹,以及在/var/spool/mail下生成用户的邮件目录.
如果要将目录一起删除,在userdel的时候记得-r.

useradd 用户名 组名 ,如果不加组名,则通过上边的文件可以看到,会新建一个组,只包含这个用户.

用户与组的相关命令主要有:

  • useradd
  • 增加用户,常用格式为 -u指定UID,-g指定群主,-d指定home目录,-c备注,-s指定用户所用的shell
  • usermod
  • 修改用户账户,-G将用户添加进组,其他与useradd命令类似.-L为锁住用户,一般不用.一个用户可以属于多个组.
  • userdel
  • 删除的时候一般用-r参数将用户相关的目录一起删除.
  • groupadd
  • 新建一个群组
  • groupmod
  • 修改群组,一般常用-g修改GID,-n修改名称
  • groupel
  • 删除群组

在了解了用户,组的关系和操作以后,开始学习最重要的权限.
权限简单的说因为Linux一切皆文件,权限就是某一个用户对某一个文件能够进行的操作,分为,是否可读®,是否可写(w),是否可执行(x)三个主要权限,还有其他一些配置.
先来看rwx三个权限.

用ls -l 列出详细信息的时候,详细信息按照如下的顺序排列:
权限信息x|xxx|xxx|xxx|x,没有分隔符|
硬链接数
属主:代表被哪个用户拥有
属组:属于哪一个组
大小:用字节表示的文件大小
创建时间
文件名

其中最重要的就是权限信息,属主和属组

最后的一个点.代表是在selinux开启的情况下创建的.这玩意一般都关闭,在实际生产环境中很少用到.

剩下的权限信息有10位:
第1位代表文件类型,-代表为普通的文本文件,d代表目录,l代表软链接(相当于windows的快捷方式),b代表block设备文件,p代表管道文件

虽然有权限,但root用户不受权限设置,可以对所有文件进行操作.
实际上,对于文件的拥有者来说,也是不受权限限制的.

剩下9位3位一组:
2-4位:用户权限
5-7位:用户组权限
8-10位:组外用户权限

修改权限的命令:chmod,用u代表属主,g代表属组,o代表其他(other)
使用方法:
chmod u+rx a.txt
chmod u=rwx o=- a.txt

修改属主和属组的方式
chown

运行一个文件的方式
.
./
sh
bash

除了用字母表示,也可以用一个数字代替3位权限,r=4,w=2,x=1,就可以用数字来取代chmod中权限的赋值,以后就不会看不懂chmod命令里的数字啦.

Day5 Linux 启动与进程查看

文件操作,利用重定向输出符号.
> 表示替代
>> 表示追加
|表示将前一个命令的结果当做后边一个命令的操作对象

例如用cat 合并文件 cat a.txt b.txt > new.txt

文件归档,用tar命令,tar命令同时还可以生成gzip和bzip2,其实就不太用单独的压缩命令了.
-c 创建新的tar文件
-t 列出目录内容
-x 抽取文件内容
前三个命令只能同时存在一个
-f 指定输出设备或者文件,一般都要选
-v 显示详细信息
-z 采用gzip算法压缩
-j 采用bzip2算法压缩

单独使用gzip gunzip bzip2 bunzip2 也可以,但一般在打包的时候同时使用最方便.

vim 编辑器的使用,这快成一个IDE了,很多专门的书.主要还是用的多才能熟练.不再详述.

下边要学Linux系统的启动,主要是在系统出问题的时候可以有效恢复.
开机顺序:
加电本身也是一个很复杂的过程,针对开发来说,主要要知道最开始是BIOS里有固定的程序,然后BIOS程序会寻找启动盘,然后读取MBR主引导记录.
在linux下,这个MBR记录会继续去执行Boot Loader,Linux的boot loader 是 Grub,也就是Linux操作系统的引导程序.
Linux操作系统的第一个程序是init,进程id 1,从init开始装入内核.

用Top命令查看进程,top命令会先列出来一些信息,包括系统使用时间,负载,进程统计等,然后会动态刷新的列出所有进程.默认每隔5秒刷新一次.

标识意义
PID是进程的身份证,唯一标识
USER用户
PR 和NI描述优先级,NI是nice,nice越高,优先值越低.
VIRT虚拟内存
RES占用物理内存
SHR占用共享内存
S表是否睡眠sleep,还是在运行run
%CPUCPU占用率
%MEM占用内存百分比
TIME+运行时间
COMMAND进程命令名
一般不用top命令来监控系统,因为开销比较大.

用free命令查看内存.
-h以G为单位,-m以兆为单位.

ps命令,用于查看某个具体进程的信息.
用kill pid命令来结束进程.kill -9 强制干掉进程.
grep ‘过滤内容’ 用来过滤要显示的东西,经常用在管道符号上, -v表示反向,即满足条件的不显示.
jobs 查看当前的运行环境
然后用 fg bg %工作号,可以将程序在前台和后台切换(即是否占用命令行界面)

没想到在淘宝上竟然可以买到鸟哥的第四版书,不知道是不是影印版,问了老板竟然还送光盘.Linux的书基本都是大部头,这本书听买过的人说也是很厚一本,当基础教程更合适.然后看物流,是从广东那边快递过来,难道真的是正版书?
目标还是向着搭建自己的开发环境前进了.

2023年的更新,这个书是影印版,搬家的时候把几乎大部分盗版的开发书籍都扔掉了,在几年的时间里这些书也几本翻了一遍,照片拍摄于9月16日:
微信图片_20231008140622.jpg

Day6 Linux的磁盘管理与软硬链接

这一部分其实主要涉及fdisk的操作,然后讲了文件系统的inode,之后是软硬链接,这一部分也需要用到的时候去查了,听过一遍,马上继续前进到简单配置服务器的阶段.
硬盘的分区不是很重要,关键是文件系统.
fdisk命令用于磁盘管理.

操作系统的逻辑是有一个block,一个block = 8*(扇区)512字节也就是4Kb的内容.操作系统每次操作硬盘的时候,最小读写单位就是block.
块存储:块的概念起源于操作系统,对应的是一块硬盘,相当于一块大的硬盘.有物理的概念,存储到哪个盘,哪个物理设备.
文件存储:相当于按照文件夹存储,不再区分磁盘的概念.直观感受是文件,就是文件系统,就类似于linux的文件系统,并不区分物理硬盘的概念.
对象存储:类似于网盘一样,不能直接基于文件级别的存储,按照对象进行索引和取用,避免重复.类似于把文件存储套了一层数据库来使用.
fdisk的分区可以简单了解一下.
dev下边的是设备的物理映射文件,需要将设备挂载到某个文件夹才可以使用.mount 源文件 挂载点 来进行操作,之后到挂载点目录下进行操作,就是在那个设备的文件系统里操作了.
df查看文件系统信息.

Day7 Linux的网络配置

这一部分是经常用到的,linux的一大好处现在感觉就是逼着你去了解一下相关的基础知识,然后运用到实践中来.

Linux的网络配置

Day8 Linux安装软件及ssh,apache等服务开启

这一章讲到了centos 下用yum安装软件,系统自带的ssh连接方式,以及我们linux用作服务器的一个最基础的提供web服务的方法.

如开头所述,Day7和Day8的东西太多,而且需要在实践中操作,实际上在后来自己配置服务器,学习Web开发的过程中,已经都会操作了。

这一系列的文章先后发布于2018-05-07 23:59:57 至 2018-05-18 10:27:28,看了一下日历是前后两个星期的时间,算是正式开始折腾服务器和Web开发的开始,也是正式学习高级语言的开始。

回想起来学习开发的原因,有一个原因应该是从2017年到2020年末呆在新湖的这段时间上班事情非常少,压力很小,生活也很安逸,有大把的时间可以研究开发。之后就再也没有这么舒服的工作了,尤其是从2020年末跳槽去了央企,一下进到狼性文化了,加上当时房子卖了又搬家,心情一度非常沮丧,后来也是逃跑似的离开了那里,找到现在的公司,虽然算不上好,但总算安定一些,不过最近还是逃不出干个老会计的泥潭,所以现在的心态基本上也是等退休了。

LICENSED UNDER CC BY-NC-SA 4.0
Comment