操作系统是负责整个系统最基本功能和系统管理,包括内核、设备驱动程序、启动引导程序、命令行shell或其它种类的用户界面、基本的文件管理工具和系统工具。
用户界面是操作系统的外在表象,内核是操作系统的内在核心。
内核由一系列程序组成,包括负责响应中断的中断服务程序、负责管理多个进程从而分享处理器时间的调度程序、负责管理地址空间的内存管理程序、网络、进程间通信的系统服务程序等。内核负责管理系统的硬件设备。
内核空间表示内核拥有的内存空间,用户空间表示用户程序执行时的内存空间。
内核拥有直接访问硬件设备的所有权限,用户程序不能直接访问硬件设备,因此用户程序通过系统调用和内核通信来运行。
Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长(也就是单个 CPU 指令可以处理数据的最大长度)的处理器,地址空间的范围也不同。
用户态切换到内核态的三种方式:
当应用程序进程创建并开始运行时,都处于用户态。当需要用到磁盘、网络读写等操作时候调用操作系统提供接口(系统调用)来进入内核态,然后执行完毕后返回用户态,在这里,一般的应用程序不能随意操作内核态数据,具有一定的保护作用。
内存映射,其实就是将虚拟内存地址映射到物理内存地址。为了完成内存映射,内核为每个进程都维护了一张页表,记录虚拟地址与物理地址的映射关系。
页表实际上存储在 CPU 的内存管理单元 MMU 中,这样,正常情况下,处理器就可以直接通过硬件,找出要访问的内存。而当进程访问的虚拟地址在页表中查不到时,系统会产生一个缺页异常,进入内核空间分配物理内存、更新进程页表,最后再返回用户空间,恢复进程的运行。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程
和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Unix: 最早的多用户、多任务操作系统 。按照操作系统的分类,属于分时操作系统。Unix 大多被用在服务器、工作站,现在也有用在个人计算机上。它在创建互联网、计算机网络或客户端/服务器模型方面发挥着非常重要的作用。
1991年,芬兰的业余计算机爱好者林纳斯·托瓦兹 (Linus Torvalds)编写了一款类似Minix的系统(基于微内核架构的类Unix操作系统)被ftp管理员命名为Linux 加入到自由软件基金的GNU计划中;
Linux的诞生显得充满了偶然。林纳斯经常要用他的终端仿真器(Terminal Emulator)去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这些在后来成为了Linux第一个内核的雏形。当时,他年仅21岁 。
Linux根据原生程度,分为两种:
Linux内核版本
Linux不是一个操作系统,严格来讲,Linux只是一个操作系统中的内核。内核是什么?内核建立了计算机软件与硬件之间通讯的平台,内核提供系统服务,比如文件管理、虚拟内存、设备I/O等
官网: www.kernel.org
Linux发行版本
一些组织或公司在内核版基础上进行二次开发而重新发行的版本。Linux发行版本有很多种(ubuntu和CentOS用的都很多,初学建议选择CentOS),如下图所示:
#查看linux版本信息
[root@redis ~]# uname -a
Linux redis 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@redis ~]# cat /proc/version
Linux version 3.10.0-862.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018
[root@redis ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
参考: https://blog.csdn.net/babyxue/article/details/80970526
centos7下载地址:
链接:https://pan.baidu.com/s/1iBzBwp9M3M4eQteMrqI1fQ 提取码:8z5v
VM下载地址:
链接:https://pan.baidu.com/s/1ZP7SKWif8cqSgpnGakirug 提取码:yyl8
VMware三种网络配置方式:
NAT网络地址转换模式: 在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。 在这种模式下宿主机成为双网卡主机,同时参与现有的宿主局域网和新建的虚拟局域网,但由于加设了一个虚拟的NAT服务器,使得虚拟局域网内的虚拟机在对外访问时,使用的则是宿主机的IP地址,这样从外部网络来看,只能看到宿主机,完全看不到新建的虚拟局域网。
编辑网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
虚拟网卡配置文件说明:
(不要复制这份配置,代码块导致格式有问题)
TYPE=Ethernet
#dhcp 动态IP static 静态IP
BOOTPROTO=static
DEVICE=ens33
#在系统启动时是否激活网卡
ONBOOT=yes
#设置虚拟机ip地址
IPADDR=192.168.3.10
#设置子网掩码
NETMASK=255.255.255.0
#设置虚拟机网关
GATEMAY=192.168.3.2
#设置虚拟机DNS,8.8.8.8为Google提供的免费DNS服务器的IP地址
DNS1=8.8.8.8
复制以下配置修改
TYPE=Ethernet
BOOTPROTO=static
DEVICE=eno16777736
ONBOOT=yes
IPADDR=192.168.3.100
NETMASK=255.255.255.0
GATEWAY=192.168.3.2
DNS1=8.8.8.8
#修改主机名
hostnamectl set-hostname xxx
#关闭防火墙
systemctl stop firewalld # 临时关闭防火墙
systemctl disable firewalld # 禁止开机启动
#重启网络服务
service network restart
ping www.baidu.com
#查看ip和网卡信息
ifconfig
配置文件格式问题造成联网失败:
[root@localhost ~]# ping www.baidu.com
ping: unknown host www.baidu.com
#问题排查
[root@localhost ~]# ping 8.8.8.8
connect: Network is unreachable
#查看路由表
[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.3.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
。。。
在Linux操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。也就是说在Linux系统中有一个重要的概念:一切都是文件。
Linux的目录结构如下:
Linux文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
常见目录说明:
下面只是给出了一些比较常用的命令。推荐一个Linux命令快查网站,非常不错,大家如果遗忘某些命令或者对某些命令不理解都可以在这里得到解决。
Linux命令用法一般用man命令可以查看其帮助信息
中文Linux命令帮助大全:http://man.linuxde.net/
man ls
ls --help
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录;
cd … 返回上级目录(若当前目录为“/“,则执行完后还在“/";"…"为上级目录的意思);
cd …/… 返回上两级目录;
cd !$ 把上个命令的参数作为cd参数使用。
mkdir命令
用来创建目录
#指定要创建的目录列表,多个目录之间用空格隔开。
mkdir test test2
#-p 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录
mkdir -p test/abc
ls命令
用来显示目标列表
#显示当前目录下非隐藏文件与目录
ls
#显示当前目录下包括隐藏文件在内的所有文件列表
ls -a
#输出长格式列表 简写ll
ls -1
find命令
用来在指定目录下查找文件
#在/root目录下查找以.txt结尾的文件名
find /root -name *.txt
#匹配文件路径或者文件
find /usr/ -path local
mv命令
用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中
mv test.txt demo.txt
#移动文件到另一个目录
mv demo.txt …/bcd/
cp命令
用来将一个或多个源文件或者目录复制到指定的目的文件或目录 。-r代表递归拷贝
#下面的命令将指定文件复制到当前目录下:
cp …/mary/homework/assign .
#将文件file复制到目录/usr/men/tmp下,并改名为file1
cp file /usr/men/tmp/file1
#将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中
cp -r /usr/men /usr/zh
rm命令
可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
注意:使用rm命令要格外小心 ,千万不要出现 rm -rf /* (注意: rm -rf / 验证,不会执行)
#-f:强制删除文件或目录;
#-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
rm -rf ./*
注意:命令 tail -f 文件 可以对某个文件进行动态监控,例如tomcat的日志文件, 会随着程序的运行,日志会变化,可以使用tail -f catalina-2019-11-11.log 监控文件的变化
vim编辑器是Linux中的强大组件,是vi编辑器的加强版,vim编辑器的命令和快捷方式有很多,这里列出一些常用命令。
在实际开发中,使用vim编辑器主要作用就是修改配置文件和编写shell脚本,下面是一般步骤:
vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q! (输入wq代表写入内容并退出,即保存;输入q!代表强制退出不保存。)
命令模式
用vim 打开一个文件刚开始进入的就是命令模式,在这个模式下我们可以控制光标的移动,字符,字或者行的删除,移动复制某段区域,在该模式下可以进入插入模式也可以进入底行模式。
插入模式
在插入模式下才可以插入文字,按Esc进入底行模式.
底行模式
在底行模式下保存文件或者退出vim
1).移动光标
1.vim 可以使用小写英文字母 h j k l 分别控制光标左 下 上 右移动,也可以使用箭头
2.Ctrl+b 屏幕往后移动一页
3.Ctrl+f 屏幕往前移动一页
4.Ctrl+u 屏幕往后移动半页
5.Ctrl+d 屏幕往前移动半页
6.Shift+g == G 移动到文章的最后
7.Shift+4 == $ 移动到光标所在行的行尾
8.Shift+6 == ^ 移动到光标所在行的行首
9.w 光标跳到下个字的开头
10.e 光标跳到下个字的字尾
11.b 光标回到上个字的开头
12.#l 例如:5l ,56l 光标移动到该行的第’#'个位置
13.gg 进入到文本的开始
2).删除文字
1.x 每按一次删除光标所在位置的一个字符
2.#x 例子:6x 删除光标所在位置的"后面"(包含自己在内)6个字符
3.Shift+x == X 每按一次,删除光标所在位置的前一个字符
4.Shift+#x == #X 例子 20X 删除光标所在位置的前面20个字符
5.dd 删除光标所在行
6.#dd 例子 6dd 从光标所在行开始删除6行
3).复制
1.yw 将光标所在之处到字尾的字符复制到缓冲区中
2.#yw 例子 6yw 复制6个字符到缓冲区
3.yy 复制光标所在行到缓冲区
4.#yy 例子 6yy 拷贝从光标所在的该行"往下数"6行文字
5.p 将缓冲区内的字符贴到光标所在位置
注意:所有与y有关的复制命令都必须与p配合才能完成复制粘贴功能
4).替换
1.r 替换光标所在处的字符
2.R 替换光标所到之处的字符,知道按下Esc键为止.
5).撤销上一次的操作
u 回到上一个操作,按动多次’u’可以执行多次恢复
6).更改
1.cw 更改光标所在处的字到字尾处
2.c**#w** 例子 c3w 表示更改三个字
7).跳至指定行
1.Ctrl+g 列出光标所在行的行号
2.#G 例子 15G 表示移动光标到文章的第15行行首
同目录删除:熟记 rm -rf 文件 即可
1)打包并压缩文件:
Linux中的打包文件一般是以.tar结尾的,压缩的文件一般是以.gz结尾的。
而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般.tar.gz。 命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件 其中:
z:调用gzip压缩命令进行压缩
c:打包文件
v:显示运行过程
f:指定文件名
比如:加入test目录下有三个文件分别是 :aaa.txt bbb.txt ccc.txt,如果我们要打包test目录并指定压缩后的压缩包名称为test.tar.gz可以使用命令:
tar -zcvf test.tar.gz aaa.txt bbb.txt ccc.txt
tar -zcvf test.tar.gz /test/
2)解压压缩包:
命令:tar [-xvf] 压缩文件
其中:x:代表解压
示例:
#将/test下的test.tar.gz解压到当前目录下可以使用命令
tar -xvf test.tar.gz
#将/test下的test.tar.gz解压到根目录/usr下
#(- C代表指定解压的位置)
tar -xvf xxx.tar.gz -C /usr
zip和unzip命令
#zip 命令
#将 test.txt 文件压缩为 test.zip ,当然也可以指定压缩包的目录,例如 /root/test.zip
zip test.zip test.txt
#默认将文件解压到当前目录,如果要解压到指定目录,可以加上 -d 选项
unzip test.zip
操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制,在Linux中权限一般分为读(readable)、写(writable)和执行(excutable),分为三组。分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。
通过 ls -l (缩写ll)命令我们可以 查看某个目录下的文件或目录的权限
每一列的内容的信息解释如下:
文件的类型:
后面的9位分为3组,每3位置为一组,分别代表属主的权限,与当前用户同组的用户的权限,其他用户的权限
x:代表权限是可执行,x也可以用数字1表示
文件和目录权限的区别:
对文件和目录而言,读写执行表示不同的意义。
对于文件:
权限名称 | 可执行操作 |
---|---|
r | 可以使用cat查看文件的内容 |
w | 可以修改文件的内容 |
x | 可以将其运行为二进制文件 |
对于目录:
权限名称 | 可执行操作 |
---|---|
r | 可以查看目录下列表 |
w | 可以创建和删除目录下文件 |
x | 可以使用cd进入目录 |
在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念。
所有者
一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者,用ls ‐l命令可以看到文件的所有者,也可以使用chown 用户名 文件名来修改文件的所有者 。
chown [–R] 属主名 文件名
文件所在组
其它组
修改文件/目录的权限的命令:chmod
示例:修改/test下的aaa.txt的权限为属主有全部权限,属主所在的组有读写权限,其他用户只有读的权限
chmod u=rwx,g=rw,o=r aaa.txt
上述示例还可以使用数字表示:chmod 764 aaa.txt
语法
chkconfig [–add][–del][–list][系统服务] 或 chkconfig [–level <等级代号>][系统服务][on/off/reset]
参数:
chkconfig --list
chkconfig telnet on
chkconfig telnet off
zookeeper开机自动启动:
新建一个脚本zookeeper
为新建的脚本zookeeper添加可执行权限,命令是:chmod +x zookeeper
把zookeeper这个脚本添加到开机启动项里面,命令是:chkconfig --add zookeeper
如果想看看是否添加成功,命令是:chkconfig --list
zookeeper脚本内容:
#!/bin/sh
zk_path=/usr/local/soft/zookeeper-3.4.9/bin/
case $1 in
start) su root ${zk_path}/zkServer.sh start;;
stop) su root ${zk_path}/zkServer.sh stop;;
status) su root ${zk_path}/zkServer.sh status;;
restart) su root ${zk_path}/zkServer.sh restart;;
*) echo "require start|stop|status|restart";;
esac
/etc/rc.d/init.d
目录下cd /etc/rc.d/init.d
cp ~/shell/zookeeper zookeeper
chmod +x zookeeper
#添加脚本到开机自动启动项目中
cd /etc/rc.d/init.d
chkconfig --add zookeeper
chkconfig zookeeper on
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
Linux用户管理相关命令:
useradd命令用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.也可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文中。该文件内容的解释:用户名:密码:用户id:组id:用户说明:用户的主目录:用户使用的shell环境(默认为bash)
passwd命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
Linux系统用户组的管理相关命令:
注意:如果直接用ps((Process Status))命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。
先用ps查找进程,然后用kill杀掉
yum常用命令
安装完Centos后,它默认的是安装了VI编辑器,VIM是没有安装的,所以我们在使用vim test.txt时会提示: vim command not found
vim编辑器需要安装三个包:
vim-enhanced-7.0.109-7.el5
vim-minimal-7.0.109-7.el5
vim-common-7.0.109-7.el5
#查看一下你本机已经存在的包,确认一下你的VIM是否已经安装: 如何vim已经正确安装,则会显示上面三个包的名称
rpm -qa|grep vim
yum -y install vim-enhanced
#如果上面三个包一个都没有显示,则直接输入命令:
yum -y install vim*
查看是否已经安装JDK:rpm -qa | grep -i java
若有则删除:rpm -e --nodeps java-xxx,删除所有相关的java
下载jdk8安装包,将gz压缩文件放到指定目录如/usr/local,解压:tar -zxvf jdk-8u181-linux-x64.tar.gz
设置全局变量:vim /etc/profile,追加
export JAVA_HOME=/usr/local/jdk1.8.0_181
export CLASSPATH=$JAVA_HOME/lib/
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin
source /etc/profile
java -version
检索yum中有没有java1.8的包:yum list java-1.8*
yum install java-1.8.0-openjdk* -y
#使用env命令显示所有的环境变量
env
#显示环境变量PATH
echo $PATH
export LANG=en_CN.UTF-8
更多面试题关注B哥公众号:java2b(微信搜索)