一.操作系统的内核
内核:内核作为应⽤连接硬件设备的桥梁,应⽤程序只需关⼼与内核交互,不⽤关⼼硬件的细节。
现代操作系统,内核⼀般会提供 4 个基本能⼒:
管理进程、线程,决定哪个进程、线程使⽤ CPU,也就是进程调度的能⼒;
管理内存,决定内存的分配和回收,也就是内存管理的能⼒;
管理硬件设备,为进程与硬件设备之间提供通信能⼒,也就是硬件通信能⼒;
提供系统调⽤,如果应⽤程序要运⾏更⾼权限运⾏的服务,那么就需要有系统调⽤,它是⽤户程序与操作系统之间的接⼝。
二.中央处理器CPU
CPU 是一台计算机的运算核心(Core)+控制核心( Control Unit),可以称得上是计算机的大脑。
CPU 主要包括两个部分:控制器+运算器。
CPU 的根本任务就是执行指令,对计算机来说最终都是一串由“0”和“1”组成的序列
三.CPUvs内核
操作系统的内核(Kernel)属于操作系统层面,而 CPU 属于硬件。
CPU 主要提供运算,处理各种指令的能力。内核(Kernel)主要负责系统管理比如内存管理,它屏蔽了对硬件的操作。
四.Linux VS Windows
五.Linux介绍
在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。 也就是说在 Linux 系统中有一个重要的概念:一切都是文件。
inode 是 linux/unix 文件系统的基础
inode 就是用来维护某个文件被分成几块、每一块在的地址、文件拥有者,创建时间,权限,大小等信息。
inode :记录文件的属性信息,可以使用 stat 命令查看 inode 信息。
block :实际文件的内容,如果一个文件大于一个块时候,那么将占用多个 block,但是一个块只能存放一个文件。(因为数据是由 inode 指向的,如果有两个文件的数据存放在同一个块中,就会乱套了)
六.Linux文件类型
普通文件(-) : 用于存储信息和数据, Linux 用户可以根据访问权限对普通文件进行查看、更改和删除。比如:图片、声音、PDF、text、视频、源代码等等。
目录文件(d,directory file) :目录也是文件的一种,用于表示和管理系统中的文件,目录文件中包含一些文件名和子目录名。打开目录事实上就是打开目录文件。
符号链接文件(l,symbolic link) :保留了指向文件的地址而不是文件本身。
字符设备(c,char) :用来访问字符设备比如键盘。
设备文件(b,block) : 用来访问块设备比如硬盘、软盘。
管道文件(p,pipe) : 一种特殊类型的文件,用于进程之间的通信。
套接字(s,socket) :用于进程间的网络通信,也可以用于本机之间的非网络通信
七.Linux目录树
ls /是查看当前目录下的文件
Linux的一切资源都挂在在这个/根节点下
~ 代表root目录
/bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。(不要动)
/boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。(不要动)
/dev : dev是Device(设备)的缩写, 存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。(挂载第三方)
/etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。(redis,java…配置文件)
/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。(不要动)
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。(存放突然关机的文件)
/media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。(挂载第三方)
/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。(安装软件)
/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。(不用管)
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/srv:该目录存放一些服务启动之后需要提取的数据。
/sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
/tmp:这个目录是用来存放一些临时文件的。(用完即扔)
/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/usr/bin: 系统用户使用的应用程序。
/usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src: 内核源代码默认的放置目录。
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。(经常修改的日志文件在这里)
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
www:存放服务器网站相关的资源
八.Linux基本命令
Linux 命令在线速查手册:https://www.w3xue.com/manual/linux/ 。
另外,shell.howopen in new window 这个网站可以用来解释常见命令的意思,对你学习 Linux 基本命令以及其他常用命令(如 Git、NPM)。
1.把内存数据写道磁盘中 sync
2.关机指令 shutdown
shutdown # 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:
shutdown –h 10 # 这个命令告诉大家,计算机将在10分钟后关机
shutdown –h now # 立马关机
shutdown –h 20:25 # 系统会在今天20:25关机
shutdown –h +10 # 十分钟后关机
shutdown –r now # 系统立马重启
shutdown –r +10 # 系统十分钟后重启
reboot # 就是重启,等同于 shutdown –r now
halt # 关闭系统,等同于shutdown –h now 和 poweroff
3.目录切换指令
cd usr: 切换到该目录下 usr 目录
cd …(或cd…/): 切换到上一层目录
cd /: 切换到系统根目录
cd ~: 切换到用户主目录
cd -: 切换到上一个操作所在目录
4.目录的操作命令(增删改查)
mkdir 目录名称: 增加目录。
rmdir 目录名称:删除一个空的目录(仅能删除空的目录)
ls/ll(ll 是 ls -l 的别名,ll 命令可以看到该目录下的所有目录和文件的详细信息):查看目录信息。
ls参数
-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用) ls -a
-l :长数据串列出,包含文件的属性与权限等等数据;(常用) ls -l
将目录下的所有文件列出来(含属性与隐藏档) ls -al~
find 目录 参数: 寻找目录(查)。示例:① 列出当前目录及子目录下所有文件和文件夹: find .;② 在/home目录下查找以.txt 结尾的文件名:find /home -name “.txt" ,忽略大小写: find /home -iname ".txt” ;③ 当前目录及子目录下查找所有以.txt 和.pdf 结尾的文件:find . ( -name “.txt" -o -name ".pdf” )或find . -name “.txt" -o -name ".pdf”。
mv 目录名称 新目录名称: 修改目录的名称(改)。注意:mv 的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作。mv 命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。后面会介绍到 mv 命令的另一个用法。
mv 目录名称 目录的新位置: 移动目录的位置—剪切(改)。注意:mv 语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作。另外 mv 与 cp 的结果不同,mv 好像文件“搬家”,文件个数并未增加。而 cp 对文件进行复制,文件个数增加了。
cp -r 目录名称 目录拷贝的目标位置: 拷贝目录(改),-r 代表递归拷贝 。注意:cp 命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r 递归。
rm [-rf] 目录 : 删除目录(删)。注意:rm 不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用rm -rf 目录/文件/压缩包。
rm -rf /千万不要执行,系统中所有文件都被删除了,俗称删库跑路
pwd 显示当前目录
5.文件的操作命令(增删改查)
touch 文件名称: 文件的创建(增)。
cat/more/less/tail 文件名称 :文件的查看(查) 。命令 tail -f 文件 可以对某个文件进行动态监控,例如 tomcat 的日志文件, 会随着程序的运行,日志会变化,可以使用 tail -f catalina-2016-11-11.log 监控 文 件的变化 。
cat 由第一行开始显示文件内容(用来读文章或配置文件)(很重要)
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl显示的时候,顺便输出行号
more一页一页的显示文件内容
less与more类似,但是比more更好的是,它可以往前翻页
/字串 :向下搜寻『字串』的功能;
?字串 :向上搜寻『字串』的功能;
head只看头几行
tail只看尾巴几行
vim 文件: 修改文件的内容(改)。vim 编辑器是 Linux 中的强大组件,是 vi 编辑器的加强版在实际开发中,使用 vim 编辑器主要作用就是修改配置文件,下面是一般步骤: vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q! (输入 wq 代表写入内容并退出,即保存;输入 q!代表强制退出不保存)。
rm -rf 文件: 删除文件(删)。
echo输入字符串 echo “I am f1 file” >>f1
6.压缩文件的操作命令
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 下:tar -xvf test.tar.gz -C /usr(- C 代表指定解压的位置)
九.Linux的权限命令
ls -l命令显示一个文件的属性以及文件所属的用户和组
第一列的内容的信息解释如下:
三个权限的位置写读执行不会改变,没有改权限就会出现减号
文件的类型:
d: 代表目录
-: 代表文件
l: 代表软链接(可以认为是 window 中的快捷方式)
对文件和目录而言,读写执行表示不同的意义。
对于文件:
权限名称 可执行操作
r 可以使用 cat 查看文件的内容
w 可以修改文件的内容
x 可以将其运行为二进制文件
对于目录:
权限名称 可执行操作
r 可以查看目录下列表
w 可以创建和删除目录下文件
x 可以使用 cd 进入目录
需要注意的是: 超级用户可以无视普通用户的权限,即使文件目录权限是 000,依旧可以访问。
在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。
所有者(u) :一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者,用 ls ‐ahl 命令可以看到文件的所有者 也可以使用 chown 用户名 文件名来修改文件的所有者 。
文件所在组(g) :当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组用 ls ‐ahl命令可以看到文件的所有组也可以使用 chgrp 组名 文件名来修改文件所在的组。
其它组(o) :除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。
修改文件属性
1、chgrp:更改文件属组
chgrp [-R] 属组名 文件名
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
2、chown:更改文件属主,也可以同时更改文件属组
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
3、chmod:更改文件9个属性(必须要掌握)
chmod [-R] xyz 文件或目录
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
使用数字来代表各个权限,各权限的分数对照表如下:
r:4 w:2 x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:[-rwxrwx—] 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= — = 0+0+0 = 0
chmod u=rwx,g=rw,o=r aaa.txt 或者 chmod 764 aaa.txt
补充一个比较常用的东西:
假如我们装了一个 zookeeper,我们每次开机到要求其自动启动该怎么办?
新建一个脚本 zookeeper
为新建的脚本 zookeeper 添加可执行权限,命令是:chmod +x zookeeper
把 zookeeper 这个脚本添加到开机启动项里面,命令是:chkconfig --add zookeeper
如果想看看是否添加成功,命令是:chkconfig --list
十.Linux用户管理
Linux 用户管理相关命令:
useradd 选项 用户名:添加用户账号
选项-m 使用者目录如不存在则自动建立。
userdel 选项 用户名:删除用户帐号
常用的选项是 -r,它的作用是把用户的主目录一起删除。
usermod 选项 用户名:修改帐号
passwd 用户名:更改或创建用户的密码
passwd -S 用户名 :显示用户账号密码信息
passwd -d 用户名: 清除用户密码
Linux下如何切换用户
1.切换用户的命令为:su username 【username是你的用户名哦】
2.从普通用户切换到root用户,还可以使用命令:sudo su
3.在终端输入exit或logout或使用快捷方式ctrl+d,可以退回到原来用户,其实ctrl+d也是执行的exit命令
4.在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之间加-,例如:【su - root】
十一.Linux系统用户组的管理
Linux 系统用户组的管理相关命令:
groupadd 选项 用户组 :增加一个新的用户组
groupdel 用户组:要删除一个已有的用户组
groupmod 选项 用户组 : 修改用户组的属性
切换组 newgrp 用户组:如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。
十二.其他常用命令
sudo + 其他命令:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
grep 要搜索的字符串 要搜索的文件 --color: 搜索命令,–color 代表高亮显示
ps -ef/ps -aux: 这两个命令都是查看当前系统正在运行进程,两者的区别是展示格式不同。如果想要查看特定的进程可以使用这样的格式:ps -aux|grep redis (查看包括 redis 字符串的进程),也可使用 pgrep redis -a。
ps -ef查看父进程信息
注意:如果直接用 ps((Process Status))命令,会显示所有进程的状态,通常结合 grep 命令查看某进程的状态。
kill -9 进程的pid: 杀死进程(-9 表示强制终止。)
先用 ps 查找进程,然后用 kill 杀掉
网络通信命令:
查看当前系统的网卡信息:ifconfig
查看与某台机器的连接情况:ping
查看当前系统的端口使用:netstat -an
防火墙
查看firewall服务状态
systemctl status firewalld
开启、重启、关闭、firewalld.service服务
开启
service firewalld start
重启
service firewalld restart
关闭
service firewalld stop
查看防火墙规则
firewall-cmd --list-all # 查看全部信息
firewall-cmd --list-ports # 只看端口信息
开启端口
开端口命令:firewall-cmd --zone=public --add-port=80/tcp --permanent
重启防火墙:systemctl restart firewalld.service
命令含义:
–zone #作用域
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
十三.磁盘管理
Linux磁盘管理常用命令为 df、du。
df :列出文件系统的整体磁盘使用量
du:检查磁盘空间使用量
与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据
磁盘挂载与卸除
根文件系统之外的其他文件要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”,此目录即为“挂载点”,解除此关联关系的过程称之为“卸载”
Linux 的磁盘挂载使用mount命令,卸载使用umount命令。
十四.Linux环境变量
按照作用域来分,环境变量可以简单的分成:
用户级别环境变量 : /.bashrc、/.bash_profile。
系统级别环境变量 : /etc/bashrc、/etc/environment、/etc/profile、/etc/profile.d。
上述配置文件执行先后顺序为:/etc/enviroment –> /etc/profile –> /etc/profile.d –> ~/.bash_profile –> /etc/bashrc –> ~/.bashrc
如果要修改系统级别环境变量文件,需要管理员具备对该文件的写入权限。
建议用户级别环境变量在 ~/.bash_profile中配置,系统级别环境变量在 /etc/profile.d 中配置。
按照生命周期来分,环境变量可以简单的分成:
永久的:需要用户修改相关的配置文件,变量永久生效。
临时的:用户利用 export 命令,在当前终端下声明环境变量,关闭 shell 终端失效
十五.读取环境变量
通过 export 命令可以输出当前系统定义的所有环境变量。
env 命令也可以列出所有环境变量。
echo 命令可以输出指定环境变量的值。
输出当前的PATH环境变量的值
echo $PATH
输出当前的HOME环境变量的值
echo
H
O
M
E
环境变量修改通过
e
x
p
o
r
t
命令可以修改指定的环境变量。不过,这种方式修改环境变量仅仅对当前
s
h
e
l
l
终端生效,关闭
s
h
e
l
l
终端就会失效。修改完成之后,立即生效。
e
x
p
o
r
t
C
L
A
S
S
P
A
T
H
=
.
/
J
A
V
A
H
O
M
E
/
l
i
b
;
HOME 环境变量修改 通过 export命令可以修改指定的环境变量。不过,这种方式修改环境变量仅仅对当前 shell 终端生效,关闭 shell 终端就会失效。修改完成之后,立即生效。 export CLASSPATH=./JAVA_HOME/lib;
HOME环境变量修改通过 export命令可以修改指定的环境变量。不过,这种方式修改环境变量仅仅对当前shell终端生效,关闭shell终端就会失效。修改完成之后,立即生效。exportCLASSPATH=./JAVAHOME/lib;JAVA_HOME/jre/lib
通过 vim 命令修改环境变量配置文件。这种方式修改环境变量永久有效。
vim ~/.bash_profile
如果修改的是系统级别环境变量则对所有用户生效,如果修改的是用户级别环境变量则仅对当前用户生效。
修改完成之后,需要 source 命令让其生效或者关闭 shell 终端重新登录。