计算机(Computer)简述:俗称电脑,是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动、高速地处理,然后把处理结果输出的现代化智能电子设备,计算机发展历史:
第一代计算机(1946-1957) 电子管时代
第二代计算机(1958-1964) 晶体管时代
第三代计算机(1965-1970) 集成电路时代
第四代计算机(1971以后) 大规模集成电路时代
1946年,世界上第一台计算机ENIAC(electronic numerical integrator and calculator)在美国宾州大学诞生,是美国奥伯丁武器试验场为了满足计算弹道需要而研制成的。使用了17468只电子管,占地170平方米,重达30吨,耗电174千瓦,耗资40多万美元。每秒可进行5000次加法或减法运算。
计算机组成:计算机由硬件(Hardware)系统和软件(Software)系统两大部分组成。
冯·诺依曼体系结构: 1946年数学家冯·诺依曼于提出,计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成
操作系统
OS: Operating System,通用目的的软件程序,硬件驱动、进程管理、内存管理、网络管理、安全管理、文件管理;
OS分类:
服务器OS: RHEL、CentOS、Windows Server、AIX
桌面OS: Windows 10、Windows 7、Mac OS、Fedora
移动设备OS: Andriod、IOS、YunOS
服务器三大操作系统:
Windows;
Linux(GNU/Linux)
Unix(1969年Ken Thompson):
System:Bell Lab、AIX(IBM)、Solaris (SUN)、HP-UX (HP)
BSD(BSRG)(Berkeley System Distribution):NetBSD、OpenBSD、FreeBSD
UNIX简史
1965前后Multics,贝尔实验室,麻省理工,通用电气发起
1969 Unix雏形UNICS,Ken Thompson 汇编语言 B语言
1973 正式命名为Unix,Dennis Ritchie C语言
1977 BSD,Berkeley Software Distribution 伯克利大学
1979 System V架构 版权声明,HP-UNIX IBM AIX “不对学生提供源码” 收回版权
1984年Minix操作系统,Andrew S. Tanenbaum荷兰阿姆斯特丹自由大学计算机科学系
Linux起源
1991年的10月5日,Linus Torvalds在comp.os.minix新闻组上发布消息,正式向外宣布他自行编写的完全自由免费的内核诞生(Freeminix-like kernel sources for 386-AT)—FREAX,含义是怪诞的、怪物、 异想天开
类Unix的内核,在GPL下发布,官网:www.kernel.org
Linux可划分为以下四部分:
1、Linux内核:主要负责以下四种功能:系统内存管理、软件程序管理、硬件设备管理、文件系统管理
2、GNU工具:GNU(GNU is Not Unix),1984年由Richard Stallman发起并创建,目的主旨在于为Unix系统管理员设计出一套类似于Unix的环境。这个目标促使该项目移植了很多常见的Unix系统命令行工具。供Linux系统使用的这组核心工具被称为coreutils(coreutilities)软件包。
GNU coreutils软件包由三部分构成:
用以处理文件的工具
用以操作文本的工具
用以管理进程的工具
这三组主要工具中的每一组都包含一些对Linux系统管理员和程序员至关重要的工具。
GNU官方网站: http://www.gnu.org
GPL(GNU General Public License)通用公共许可证
自由软件基金会: Free Software Foundation允许用户任意复制、传递、修改及再发布,基于自由软件修改再次发布的软件,仍需遵守GPL
LGPL(Lesser General Public License),LGPL相对于GPL较为宽松,允许不公开全部源代码
GNU操作系统: Hurd Hird of Unix-Replacing Daemons
3、图形化桌面环境
4、应用软件
Linux实际只是一个操作系统内核,不是一个完整的操作系统,结合大量的开源软件及GNU系统才构成了完整的操作系统即GNU/Linux。每一部分在Linux系统中各司其职。但就单个部分而言,其作用并不大。如下图展示了各部分是如何协作起来构成整个Linux系统的。
Linux 与UNIX的关系
UNIX是历史悠久的商业通用操作系统,Linux的思想源于UNIX,最早是由芬兰人Linus Torvalds设计,并于1991年的10月5日发布;UNIX系统大多是与硬件配套的,而Linux则可运行在多种硬件平台上;UNIX是商业软件 ,而Linux是自由软件、免费、开源的;
Linux哲学思想
一切都是一个文件(包括硬件)
提供小型,单一用途的程序
连接程序,共同完成复杂的任务
避免令人困惑的用户界面
配置数据存储在文本中
Linux发行版本
Linux内核版本号说明:
Linux发行版
目前比较流行的三大发行版为:
slackware:
SUSE Linux Enterprise:和红帽商业版类似,德国公司制作的,SUSE系列比较有特色的是YAST2,就是用来设置Linux的界面,对初级管理员比较方便。
SUSE:SUSE的免费版本
debian:
Debian:完全免费,社区维护的Linux版本,有很大的用户群;
Ubuntu:由一个基金提供支持的免费Linux版本,继承自Debian,界面很友好
Mint:基于ubuntu,提供了更加丰富的预装应用,以减少用户搜索并安装应用的麻烦。其使用的应用版本比较新,可能不是很稳定。
redhat:
Red Hat Enterprise:企业级的linux,主要面向服务器。作为商业版,有比较好的配套软件和技术支持。RH的教材也堪称经典。每18个月发行一个新版本
Fedora:由社区维护,去除了一些商业软件。红帽实际上赞助了这个项目,以便以此作为技术测试平台。每6个月发行一个新版本
CentOS:这个版本不来自红帽的公司,是收集红帽公开的源码组成的免费版本,由社区维护,和红帽完全兼容。版本号升级较慢,但有持续的技术支持,所以适合于不愿意频繁升级的情形。兼容RHEL的格式
此外还有如下一些版本:
ArchLinux:轻量简洁,遵循K.I.S.S.原则(keep it simple and stupid)
Gentoo:极致性能,不提供传统意义的安装程序,下载源代码在本机上编译安装软件
LFS:Linux From scratch 自制Linux
Android:kernel+busybox(工具集)+java虚拟机
Linux分支参考网站:
http://www.mindpin.com/d3js-demo/linux/
vmware workstation安装CentOS7.6系统
创建虚拟机:
按下一步,往下的步骤根据自己的需求进行配置,到最后虚拟机硬件配置如下:
点击完成,进入如下界面
至此虚拟机的创建完成了
2、安装Centos7.6系统,系统iso文件下载:https://mirrors.aliyun.com/centos/7/isos/x86_64/
将下载好的iso文件插入到虚拟机光驱,如下
点击确定后,开启此虚拟机,进入如下界面:
如果是刚下载的ISO文件可以检测下光盘,选择Test this media & install CentOS7选项,我这直接使用install CentOS 7选项,进入如下安装界面:
设置语言,选择自己喜欢的语言,选择Continue,进入如下界面:
分别点击上面4个选项进行设置,从上往下分别是:日期时区设置、图形界面设置、磁盘分区、网络设置
日期时区设置不详述了,图形界面设置如下:
选择GNOME Desktop,然后点击Done
进入磁盘分区设置
选择I will config partitioning,进入手动分区,如下:
分区类型有4种,一般使用Standard Partition标准分区或LVM逻辑分区,具体使用看各人喜好,下面是我的分区表
对磁盘分好区后进入如下安装界面
在上面可以root的口令密码,添加一个普通用户,添加普通用如下:
设置完后静静等待几分钟,系统便安装完成了,点击Reboor,如下
重启后,会进入到如下设置界面:
点击 LICENSE INFORMATION,如下
勾选accept,点击Done,最后点击 finish,到此系统使用可以使用了,下面为登录界面:
至此系统安装完成并可以使用了。
系统用户类型:
root 用户:一个特殊的管理帐户,也被称为超级用户,root已接近完整的系统控制,对系统损害几乎有无限的能力,除非必要,不要登录为 root
普通( 非特权 )用户:权限有限,造成损害的能力比较有限
系统终端terminal
设备终端:键盘、鼠标、显示器等
物理终端( /dev/console ):控制台console
串行终端( /dev/ttyS# ):ttyS
虚拟终端tty:teletypewriters, /dev/tty#,tty 可有n个,Ctrl+Alt+F#
图形终端( /dev/tty7 ) startx, xwindows
CentOS 6: Ctrl + Alt + F7
CentOS 7: 在哪个终端启动,即位于哪个虚拟终端
伪终端( pty:pseudo-tty , /dev/pts/# ):pty, SSH远程连接
查看当前的终端设备:tty
什么是shell
Shell 是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,shell也被称为LINUX的命令解释器(command interpreter),shell是一种高级程序设计语言
各种Shell:sh (Steve Bourne ),csh,tcsh,ksh (korn),bash (bourn again shell)GPL,zsh 等
bash shell:GNU Bourne-Again Shell(bash)是GNU计划中重要的工具软件之一,目前也是 Linux标准的shell,与sh兼容,CentOS默认使用
显示当前使用的shell:echo ${SHELL}
显示当前系统使用的所有shell:cat /etc/shells
主机名示例:bj-yz-k8s-node1-100-10.magedu.com
基本命令:
命令提示符:[root@localhost ~]#
# 表示管理员
$ 表示普通用户
注:在一般情况下是可以这么认为,但这个是可以人为进行设置的
显示提示符格式:[root@localhost ~]#echo $PS1
修改提示符格式
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]" PS1="\[\e[1;32m\][\[\e[0m\]\t \[\e[1;33m\]\u\[\e[36m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"
\e 控制符\033 \u 当前用户
\h 主机名简称 \H 主机名
\w 当前工作目录 \W 当前工作目录基名
\t 24小时时间格式 \T 12小时时间格式
\! 命令历史数 \# 开机后命令历史数
示例:
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$\[\e[0m\]"
直接在命令行中设置,仅对当前shell进程有效,想要永久有效需写入文件
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
或在/etc/profile.d/文件中写入到shell文件,后缀必须为.sh
编辑配置给出的新配置不会立即生效,需要重新读取配置文件
source /path/to/config_file 重读配置文件
. /path/to/config_file
tab键:命令补全按键
命令补全:用户给定的字符串只有一条惟一对应的命令,使用tab键,直接补全,否则,再次Tab会给出列表
路径补全,把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名,如果惟一:则直接补全,否则:再次Tab给出列表
在shell中可执行的命令有两类
内部命令:由shell自带的,而且通过某命令形式提供
help 内部命令列表
enable cmd 启用内部命令
enable –n cmd 禁用内部命令
enable –n 查看所有禁用的内部命令
外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令,在文件系统路径下有对应的可执行程序文件
查看路径:which -a |--skip-alias ; whereis
查看命令类型:type cmd
命令格式:COMMAND [OPTIONS...] [ARGUMENTS...]
选项:用于启用或关闭命令的某个或某些功能
短选项:-c 例如:-l, -h
长选项:--word 例如:--all, --human-readable
参数:命令的作用对象,比如文件名,用户名等
注意:
多个选项以及多参数和命令之间使用空白字符分隔
取消和结束命令执行:Ctrl+c,Ctrl+d
多个命令可以用;符号分开
一个命令可以用\分成多行
用户登录信息查看命令:
whoami: 显示当前登录有效用户
who: 系统当前所有的登录会话
w: 系统当前所有的登录会话及所做的操作
nano 文本编辑
常用开关机命令
关机:halt, poweroff
重启:reboot
-f: 强制,不调用shutdown
-p: 切断电源
关机或重启:shutdown
shutdown [OPTION]... [TIME] [MESSAGE]
-r: reboot
-h: halt
-c:cancel
TIME:无指定,默认相当于+1(CentOS7)
now: 立刻,相当于+0
+m: 相对时间表示法,几分钟之后;例如 +3
hh:mm: 绝对时间表示,指明具体时间
日期和时间相关命令:
Linux的两种时钟
系统时钟:由Linux内核通过CPU的工作频率进行的
硬件时钟:主板
相关命令:
date 显示和设置系统时间
date +%s
date -d @1509536033
hwclock,clock: 显示硬件时钟
-s, --hctosys 以硬件时钟为准,校正系统时钟
-w, --systohc 以系统时钟为准,校正硬件时钟
时区:/etc/localtime
显示日历:cal –y
echo命令:显示字符
语法:echo [-neE][字符串]
说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行号
命令选项:
-E (默认)不支持 \ 解释功能
-n 不自动换行
-e 启用 \ 字符的解释功能
显示变量
echo "$VAR_NAME” 变量会替换,弱引用
echo '$VAR_NAME’ 变量不会替换,强引用
启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
\a 发出警告声
\b 退格键
\c 最后不加上换行符号
\e escape,相当于\033
\n 换行且光标移至行首
\r 回车,即光标移至行首,但不换行
\t 插入tab
\\ 插入\字符
\0nnn 插入nnn(八进制)所代表的ASCII字符
echo -e '\033[43;31;5mmagedu\e[0m'
\xHH插入HH(十六进制)所代表的ASCII数字(man 7 ascii)
命令行扩展、被括起来的集合
命令行扩展:$( ) 或 ``,把一个命令的输出打印给另一个命令的参数
echo "This system's name is $(hostname) "
This system's name is server1.example.com
echo "i am `whoami` "
i am root
括号扩展:{ }
打印重复字符串的简化形式
echo file{1,3,5} 结果为:file1 file3 file5
rm -f file{1,3,5}
echo {1..10}
echo {a..z}
echo {000..20..2}
Hash缓存表
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率
hash常见用法:
hash 显示hash缓存
hash –l 显示hash缓存,可作为输入使用
hash –p path name 将命令全路径path起别名为name
hash –t name 打印缓存中name的路径
hash –d name 清除name缓存
hash –r 清除缓存
history命令
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
命令选项:
-c: 清空命令历史
-d offset: 删除历史中指定的第offset个命令
n: 显示最近的n条历史
-a: 追加本次会话新执行的命令历史列表至历史文件
-r: 读历史文件附加到历史列表
-w: 保存历史列表到指定的历史文件
-n: 读历史文件中未读过的行到历史列表
-p: 展开历史参数成多行,但不存在历史列表中
-s: 展开历史参数成一行,附加在历史列表后
执行历史中某条命令
!n 执行history命令输出对应序号n的命令
!-n 执行history历史中倒数第n个命令
命令历史相关环境变量
HISTSIZE:命令历史记录的条数
HISTFILE:指定历史文件,默认为~/.bash_history
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT=“%F %T “ 显示时间
HISTIGNORE=“str1:str2*:… “忽略str1命令,str2开头的历史
示例:
HISTTIMEFORMAT="%F %T " 设置时间格式然后history查看,可以查看到执行命令的具体时间:
控制命令历史的记录方式:
环境变量:HISTCONTROL
ignoredups 默认,忽略重复的命令,连续且相同为“重复”
ignorespace 忽略所有以空白开头的命令
ignoreboth 相当于ignoredups, ignorespace的组合
erasedups 删除重复命令
export 变量名="值“
存放在 /etc/profile 或 ~/.bash_profile
alias命令
alias 显示当前shell进程所有可用的命令别名
alias NAME='VALUE' 定义别名NAME,其相当于执行命令VALUE
在命令行中定义的别名,仅对当前shell进程有效,如果想永久有效,要定义在配置文件中
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
编辑配置给出的新配置不会立即生效,需要重新读取配置文件
source /path/to/config_file 重读配置文件
. /path/to/config_file
撤消别名:unalias
unalias [-a] name [name ...]
-a 取消所有别名
如果别名同原命令同名,如果要执行原命令,可使用
\ALIASNAME
“ALIASNAME”
‘ALIASNAME’
command ALIASNAME
/path/command
screen命令:
创建新screen会话: screen –S [SESSION]
加入screen会话: screen –x [SESSION]
退出并关闭screen会话: exit
剥离当前screen会话 Ctrl+a,d
显示所有已经打开的screen会话 screen -ls
恢复某screen会话 screen -r [SESSION]
export 命令
设置或显示环境变量,在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。
命令格式:export [-fnp][变量名称]=[变量设置值]
参数说明:
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
示例:
export -p //列出当前的环境变量值
export MYENV //定义环境变量
export MYENV=7 //定义环境变量并赋值
ifconfig命令
用于显示或设置网络设备,设置网络设备的状态,或是显示目前的设置。
参数说明:
add<地址> 设置网络设备IPv6的IP地址。
del<地址> 删除网络设备IPv6的IP地址。
down 关闭指定的网络设备。
<hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
io_addr<I/O地址> 设置网络设备的I/O地址。
irq<IRQ地址> 设置网络设备的IRQ。
media<网络媒介类型> 设置网络设备的媒介类型。
mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。
metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。
mtu<字节> 设置网络设备的MTU。
netmask<子网掩码> 设置网络设备的子网掩码。
tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
up 启动指定的网络设备。
-broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。
-pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。
-promisc 关闭或启动指定网络设备的promiscuous模式。
[IP地址] 指定网络设备的IP地址。
[网络设备] 指定网络设备的名称。
示例:
显示网络设备信息: ifconfig
启动关闭指定网卡
ifconfig eth0 down
ifconfig eth0 up
为网卡配置和删除IPv6地址
ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡设置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址
用ifconfig修改MAC地址
ifconfig eth0 up //启动网卡
ifconfig eth0 down //关闭网卡
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
ifconfig eth1 hw ether 00:1D:1C:1D:1E //关闭网卡并修改MAC地址
配置IP地址
ifconfig eth0 192.168.1.56
配置IP地址,并加上子掩码
ifconfig eth0 192.168.1.56 netmask 255.255.255.0
配置IP地址,加上子掩码,加上个广播地址
ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255
启用和关闭ARP协议
ifconfig eth0 arp //开启
ifconfig eth0 -arp //关闭
设置最大传输单元
ifconfig eth0 mtu 1500 //设置能通过的最大数据包大小为 1500 bytes
bash的快捷键
Ctrl + l 清屏,相当于clear命令
Ctrl + o 执行当前命令,并重新显示本命令
Ctrl + s 阻止屏幕输出,锁定
Ctrl + q 允许屏幕输出
Ctrl + c 终止命令
Ctrl + z 挂起命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + f 光标向右移动一个字符
Ctrl + b 光标向左移动一个字符
Alt + f 光标向右移动一个单词尾
Alt + b 光标向左移动一个单词首
Ctrl + xx 光标在命令行首和光标之间移动
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Alt + r 删除当前整行
Ctrl + w 从光标处向左删除至单词首
Alt + d 从光标处向右删除至单词尾
Ctrl + d 删除光标处的一个字符
Ctrl + h 删除光标前的一个字符
Ctrl + y 将删除的字符粘贴至光标后
Alt + c 从光标处开始向右更改为首字母大写的单词
Alt + u 从光标处开始,将右边一个单词更改为大写
Alt + l 从光标处开始,将右边一个单词更改为小写
Ctrl + t 交换光标处和之前的字符位置
Alt + t 交换光标处和之前的单词位置
Alt + N 提示输入指定字符后,重复显示该字符N次
注意:Alt组合快捷键经常和其它软件冲突