Linux历史及发行版本
Linux发行版
1991年Torvalds在GPL框架下发布类Unix的内核,可以运行Unix软件及GNU软件,由于可以免费使用,在网络上迅速的流行开来。完整的Linux操作系统由Linux内核和GNU工具组成,Linux是一款完整的类Unix操作系统。
Linux发行版都是在Linux内核基础上进行二次编译后发布的版本
主要发行版 | 代表操作系统 | 不同点 |
---|---|---|
Slackware | SUSE | 商业版 ,小众专业服务器系统 |
Debian | Ubuntu | Ubuntu更新较快,GUI优异,易于使用 |
Redhat | RHEL | 商业版,更新较慢,注意稳定, |
CentOS | RHEL社区版,企业主要使用 | |
Fedora | Fedora相当于RHEL的测试版,6个月更新 | |
Android | 安卓手机 | kernel+busybox(工具集)+Java虚拟机 |
LFS | 自制系统 | 根据LFS文档自制Linux操作系统 |
安装Centos7.6
centos配置
使用VMware Workstation Pro 15软件安装系统,VMare软安装及创建Centos7.6虚拟机的过程不再描述,centos系统配置如下:
名称 | 大小 | 备注 |
---|---|---|
内存 | 1G | |
硬盘 | 200G | |
/ | 100G | mount /sda1 |
/boot | 1G | mount /sda2 |
swap | 2G | mount /sda3 |
/data | 500G | mount /sda5 |
安装过程
1、点击开启此虚拟机,出现如下画面,点击Install CentOS 7 进入安装程序。
2、本系统默认使用English进行安装,以下界面默认选择English ,点击Continue 继续安装
3、进入如下界面,依次点击相关设置
3.1、点击DATE & TIME ,设置Region为Asia , City 为Shanghai,点击Done确认
3.2、点击SOFTWARE SELECTION ,选择GNOME Desktop
3.3、 点击INSTALLATION DESTINATION ,进入后如下图,选择I will configure partitioning ,确认Done 后进入分区设置
3.4点击+ ,选择Standard Partition
3.5挂载点 Mount Point选择/,Desired Capacity 输入大小100G
3.6挂载点 Mount Point选择/boot,Desired Capacity 输入大小1G
3.7挂载点 Mount Point选择swap,Desired Capacity 输入大小2G
3.8挂载点 Mount Point输入/data,Desired Capacity 输入大小50G
3.9设置完成后如下图,选择Done确认
3.10选择Accept Change ,将分区写入磁盘
4、点击KDUMP,不选中Enable kdump ,点击Done
5、点击NETWORK & HOSTNAME , hostname处修改为Centos7.localdomain,Ethernet 点击为ON
6、其余设置保持默认设置,点击Begin Installation 进行安装
7、安装过程中点击ROOT PASSWORD 设置root密码,点击USER CREATION 新增用户wang及密码,安装完成后点击Reboot 重启系统
8、重启系统后进入界面如图,点击LICENSE INFORMATION
8.1、进入后选中I accept the license agreement,点击Done,返回后点击 FINISH CONFIGURATION 完成系统安装
history命令
系统会保存用户输入的历史命令,保存在~/.bash_history文件中
登录shell时,系统会自动读取~/.bash_history中的命令
登录shell后新执行的命令只会记录在缓存中,用户退出时系统会自动追加至~/.bash_history中
在shell中输入history可以查看历史命令,默认为编号+命令
[root@localhost ~]#history
1 cd /etc/sysconfig/network-scripts/
2 ls
3 ifconfig
4 vim ifcfg-ens34
5 systemctl restart network
6 ifconfig
7 init 0
8 cd /etc/sysconfig/network-scripts/
history的常用参数
参数 | 涵义 | 举例 |
---|---|---|
-c | 清空历史命令 | history -c |
-d | 清除指定的历史命令 | history -d num/comd |
n | 显示最近的n条 | history 10 |
调用history方法
命令 | 涵义 |
---|---|
↑ | 重复上一条命令 |
!! | 重复上一条命令 |
!-1 | 重复上一条命令 |
Ctrl+p | 重复上一条命令 |
!:0 | 执行前一条命令(去除参数) |
!n | 执行history命令输出对应序号n的命令 |
!-n | 执行history历史中倒数第n个命令 |
history环境变量
环境变量 | 涵义 | 默认 |
---|---|---|
HISTSIZE | 命令历史记录的条数 | 1000 |
HISTFILESIZE | 命令历史文件记录历史的条数 | 1000 |
HISTCONTROL | ignoredups | 忽略重复的命令 |
HISTTIMEFORMAT=“%F %T “ | 显示时间 | |
HISTFILE | 历史命令存放文件 | ~/.bash_history |
HISTCMD | 当前历史命令条数 |
[root@localhost ~]#echo $HISTCMD
539
[root@localhost ~]#echo $HISTCONTROL
ignoredups
[root@localhost ~]#echo $HISTFILE
/root/.bash_history
[root@localhost ~]#echo $HISTFILESIZE
1000
[root@localhost ~]#echo $HISTSIZE
1000
修改history环境变量,将HISTTIMEFORMAT=“%F %T “写入在/etc/profile 或 ~/.bash_profile以.sh结尾的文件中,执行history时可以看见执行时间
[root@localhost ~]#nano /etc/profile.d/env.sh
[root@localhost ~]#cat /etc/profile.d/env.sh
HISTTIMEFORMAT='%F %T '
[root@localhost ~]#. /etc/profile.d/env.sh
[root@localhost ~]#history 10
504 2020-04-14 21:18:44 ln -s ../data/mysql /etc/myql.lin
505 2020-04-14 21:18:53 ll -i /etc/myql.lin
506 2020-04-14 21:19:13 rm mysql.lin
507 2020-04-14 21:19:19 rm mysql.link
508 2020-04-14 21:19:24 rm myql.lin
509 2020-04-14 22:16:08 init 0
510 2020-04-15 19:43:58 history
511 2020-04-15 19:44:22 cat /etc/profile.d/env.sh
512 2020-04-15 19:45:34 history -10
513 2020-04-15 19:45:40 history 10
[root@localhost ~]#echo $HISTTIMEFORMAT
%F %T
Linux哲学思想
一切都是一个文件(包括硬件)
小型,单一用途的程序
链接程序,共同完成复杂的任务
避免令人困惑的用户界面
配置数据存储在文本中
完成比完善更重要
1、一切都是一个文件:是 Unix/Linux 的基本哲学之一。不仅普通的文件,硬件在 Unix/Linux 中也是以文件的形式存在;通过修改文件进行配置
2、小型,单一用途的程序:程序和可执行文件不要太复杂,这样才能保证了linux内核的高效运行
3、连接程序,共同完成复杂功能:复杂的任务可以通过连接多个简单的程序实现复杂的功能。对于复杂的功能linux通过许多简单程序的组合等方式实现,在保证简单功能的高效性的同时,复杂的程序也必然是高效性的
4、避免令人困惑的用户界面:Linux一般使用CLI界面进行配置系统,Linux底层运行的是内核,其他所有应用都跑在内核上,包括图形桌面(图形界面也会占用大量系统资源),win系统桌面死机就只有重启系统,Linux桌面系统死机可以切换到CLI界面进行处理,一切都是简洁明了为基础为了电脑的性能。
5、配置数据存储在文本中:linux所有的配置都存放在系统配置文件当中,无论什么配置修改都只需修改其配置文件即可。
6、 完成比完善更重要:先完成任务再想办法进行优化
基本命令
echo
echo
功能:显示字符
语法:echo [-neE][字符串]
说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号,可以打印出变量值
参数 | 涵义 |
---|---|
-E | (默认)不支持 \ 解释功能 |
-n | 不自动换行 |
-e | 启用 \ 字符的解释功能(识别颜色) |
[root@localhost ~]#echo -e "my hostname is \e[1;34m`hostname`\e[\0m"
my hostname is localhost.localdomain
[root@localhost ~]#echo "my hostname is \e[1;34m`hostname`\e[\0m"
my hostname is \e[1;34mlocalhost.localdomain\e[\0m
[root@localhost ~]#echo `hostname`
localhost.localdomain
[root@localhost ~]#echo -n `hostname`
localhost.localdomain[root@localhost ~]#
[root@localhost ~]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
screen
创建一个会话,让使用该系统的用户可以其加入该会话
命令 | 涵义 |
---|---|
screen –S [SESSION] | 创建新screen会话 |
screen –x [SESSION] | 加入screen会话 |
exit | 退出并关闭screen会话 |
Ctrl+a,d | 剥离当前screen会话 |
screen -ls | 显示所有已经打开的screen会话 |
screen -r [SESSION] | 恢复某screen会话 |
[root@localhost ~]#screen -S help
[root@localhost ~]#screen -ls
There is a screen on:
3539.help (Attached)
1 Socket in /var/run/screen/S-root.
[root@localhost ~]#screen -x help
[detached from 3539.help] Ctrl+a,d 剥离当前会话,screen -x help重新加入
date
显示和设置系统时间
Usage: date [OPTION]... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] 设置时间
命令参数
-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u:显示GMT;
--help:在线帮助;
--version:显示版本信息。
日期格式字符串列表
%H 小时(以00-23来表示)。
%I 小时(以01-12来表示)。
%K 小时(以0-23来表示)。
%l 小时(以0-12来表示)。
%M 分钟(以00-59来表示)。
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%T 时间(含时分秒,小时以24小时制来表示)。
%b 月份英文名的缩写。
%B 月份的完整英文名称。
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%F 显示YY-MM-DD 。
%j 该年中的第几天。
%m 月份(以01-12来表示)。
%W 一年的第几个星期(00..53,星期一为第一天)
%X 相当于%HH%MM%SS。
%y 年份(以00-99来表示)。
%Y 年份(以四位数来表示)。
MM 月份(必要)
DD 日期(必要)
hh 小时(必要)
mm 分钟(必要)
ss 秒(选择性)
[root@localhost ~]#date
2020-04-15 21:09:22
[root@localhost ~]#date -s "20210415"
2021-04-15 00:00:00
[root@localhost ~]#date -d "2 days"
2021-04-17 00:02:55
[root@localhost ~]#date -d "-2 days"
2021-04-13 00:02:59
clock/hwclock
显示硬件时间
-s, --hctosys 以硬件时钟为准,校正系统时钟
-w, --systohc 以系统时钟为准,校正硬件时钟
[root@localhost ~]#clock
Wed 15 Apr 2020 08:41:54 PM EDT -0.585530 seconds
[root@localhost ~]#date 041610302021.00
Fri Apr 16 10:30:00 EDT 2021
[root@localhost ~]#date
Fri Apr 16 10:30:15 EDT 2021
[root@localhost ~]#clock -s
[root@localhost ~]#date
Wed Apr 15 20:42:53 EDT 2020
[root@localhost ~]#date +'%F %T'
2020-04-15 20:43:13
ifconfig
查看系统网络信息
[root@localhost ~]#ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.13 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 240e:330:35b7:6800:d2fd:f442:f258:9263 prefixlen 64 scopeid 0x0<global>
inet6 fe80::ba4f:7148:1a7c:3ba prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:4e:42:bf txqueuelen 1000 (Ethernet)
RX packets 182 bytes 18044 (17.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 216 bytes 20626 (20.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
export
用于设置或显示环境变量
[root@localhost ~]#export
declare -x DISPLAY="localhost:10.0"
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
eclare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PWD="/root"
declare -x SELINUX_LEVEL_REQUESTED=""
declare -x SELINUX_ROLE_REQUESTED=""
declare -x SELINUX_USE_CURRENT_RANGE=""
declare -x SHELL="/bin/bash"
定义环境变量
[root@localhost ~]#export NUM=7
[root@localhost ~]#echo $NUM
7
[root@localhost ~]#bash
[root@localhost ~]#echo $NUM
7
关机命令
关机: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: 绝对时间表示,指明具体时间
[root@localhost ~]#shutdown -r +3
Shutdown scheduled for Wed 2020-04-15 21:09:34 EDT, use 'shutdown -c' to cancel.
[root@localhost ~]#
Broadcast message from [email protected] (Wed 2020-04-15 21:06:34 EDT):
The system is going down for reboot at Wed 2020-04-15 21:09:34 EDT!
[root@localhost ~]#shutdown -c
Broadcast message from [email protected] (Wed 2020-04-15 21:06:46 EDT):
The system shutdown has been cancelled at Wed 2020-04-15 21:07:46 EDT!
init
命令 | 涵义 |
---|---|
init 0 | 关机 |
init 6 | 重启 |
init 3 | 切换为CLI |
init 5 | 切换为GUI |
init 1 | 切换为救援模式(单机模式) |
[root@localhost ~]#runlevel
N 5
[root@localhost ~]#init 3
[root@localhost ~]#runlevel
5 3
[root@localhost ~]#init 1
Broadcast message from [email protected] on pts/0 (Wed 2020-04-15 21:10:51 EDT):
The system is going down to rescue mode NOW!
hash
系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率
hash 显示hash缓存
hash –l 显示hash缓存,可作为输入使用
hash –d name 清除name缓存
hash –r 清除缓存
enable
查看内部命令
help 内部命令列表
enable cmd 启用内部命令
enable –n cmd 禁用内部命令
enable –n 查看所有禁用的内部命令
[root@localhost /data]#enable
enable .
enable :
enable [
enable alias
enable bg
enable bind
enable break
enable builtin
enable caller
enable cd
enable command
enable compgen
[root@localhost /data]#enable -n break
[root@localhost /data]#enable
enable .
enable :
enable [
enable alias
enable bg
enable bind
enable builtin
enable caller
enable cd
enable command
enable compgen
[root@localhost /data]#enable -n
enable -n break
alias
定义和显示别名
alias NAME='VALUE'
[root@localhost /data]#alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost /data]#alias e=hostname
[root@localhost /data]#e
localhost.localdomain
如果想永久有效,要定义在配置文件中
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
撤消别名:unalias
unalias [-a] name [name ...]
-a 取消所有别名
如果别名同原命令同名,如果要执行原命令,可使用
\ALIASNAME