文章目录
- Linux
-
- Linux操作系统的组成
- Linux的文件系统
- [Linux vs Windows](#Linux vs Windows)
- [NAT vs 桥接模式 vs 仅主机](#NAT vs 桥接模式 vs 仅主机)
- [Linux Shell命令](#Linux Shell命令)
Linux
Linux操作系统的组成
UNIX或者Linux系统⼤致可以分为以下⼏个部分
- 硬件交互的操作系统内核
- 中间层是shell层
- 最外层是应⽤层
- 内核层: 内核层是 UNIX/Linux 系统的核⼼和基础,它直接附着在硬件平台之上,控制和管理系统内各种资源 (硬件资源和软件资源),有效地组织进程的运⾏,从⽽扩展硬件的功能,提⾼资源的利⽤效率,为⽤户提供⽅便、⾼效、安全、可靠的应⽤环境。
- Shell层: Shell 层是与⽤户直接交互的界⾯。⽤户可以在提示符下输⼊命令⾏,由 Shell 解释执⾏并输出相应结果或者有关信息,所以我们也把 Shell 称作命令解释器,利⽤系统提供的丰富命令可以快捷⽽简便地完成许多⼯作。
Linux的文件系统
Linux操作系统中的文件类型
在linux中,⼀切皆为⽂件。
- ⽂件分为下⾯的⼀些类型:
- 普通文件(
-
) - 目录文件(
d
) - 链接文件(
l
) - 设备文件(
b/c
) - 管道文件(
p
)
- 普通文件(
Linux操作系统的组织结构
- 没有各种盘符的概念
- 根⽬录只有⼀个
/
,采⽤层级式的树状⽬录结构
/
:根⽬录,所有的⽬录、⽂件、设备都在/之下,/就是Linux⽂件系统的组织者,也是最上级的领导者。/bin
:bin 就是⼆进制(binary)英⽂缩写。在⼀般的系统当中,都可以在这个⽬录下找到linux常⽤的命令。系统所需要的那些命令位于此⽬录。/boot
:Linux的内核及引导系统程序所需要的⽂件⽬录。/dev
:dev 是设备(device)的英⽂缩写。这个⽬录对所有的⽤户都⼗分重要。因为在这个⽬录中包含了所有linux系统中使⽤的外部设备。但是这⾥并不是放的外部设备的驱动程序。这⼀点和常⽤的windows,dos操作系统不⼀样。它实际上是⼀个访问这些外部设备的端⼝。可以⾮常⽅便地去访问这些外部设备,和访问⼀个⽂件,⼀个⽬录没有任何区别。/home
:如果建⽴⼀个⽤户,⽤户名是"xx",那么在/home⽬录下就有⼀个对应的/home/xx路径,⽤来存放⽤户的主⽬录。/lib
:lib是库(library)英⽂缩写。这个⽬录是⽤来存放系统动态连接共享库的。⼏乎所有的应⽤程序都会⽤到这个⽬录下的共享库。因此,千万不要轻易对这个⽬录进⾏什么操作,⼀旦发⽣问题,系统就不能⼯作了。/proc
:存储的是当前内核运⾏状态的⼀系列特殊⽂件,⽤户可以通过这些⽂件查看有关系统硬件及当前正在运⾏进程的信息,甚⾄可以通过更改其中某些⽂件来改变内核的运⾏状态。此外还有/srv /sys三个⽬录,内核相关⽬录,不要动。/root
:Linux超级权限⽤户root的家⽬录。/sbin
:这个⽬录是⽤来存放系统管理员的系统管理程序。⼤多是涉及系统管理的命令的存放,是超级权限⽤户root的可执⾏命令存放地,普通⽤户⽆权限执⾏这个⽬录下的命令,sbin中包含的都是root权限才能执⾏的。/usr
:这是linux系统中占⽤硬盘空间最⼤的⽬录。⽤户的很多应⽤程序和⽂件都存放在这个⽬录下。 Unix software resource usr。类似windows系统的program files/usr/local
:这⾥主要存放那些⼿动安装的软件,即不是通过或apt-get安装的软件。它和/usr⽬录具有相类似的⽬录结构。/usr/share
:系统共⽤的东⻄存放地,⽐如 /usr/share/fonts 是字体⽬录,/usr/share/doc和/usr/share/man帮助⽂件。/etc
:管理所有的配置⽂件的⽬录,⽐如安装mysql的配置⽂件my.conf/mnt
:可供系统管理员使⽤,⼿动挂载⼀些临时设备媒体设备的⽬录。/media
:是⾃动挂载的⽬录。当把U盘插⼊到系统中,会⾃动挂载到该⽬录下。⽐如插⼊⼀个U盘,会⾃动到/media⽬录中挂载。/opt
:额外安装软件存放的⽬录。⽐如mysql的安装包就可以放在该⽬录
Linux vs Windows
NAT vs 桥接模式 vs 仅主机
- NAT模式默认情况下是DHCP模式,是自动获取IP的,导致每次虚拟机开启之后获取的IP可能会变化
- 假如项目中后续连接的是虚拟机上面的MySQL,那么MySQL的HOST地址可能会经常改变,这就需要我们经常去改项目中的MySQL的连接地址,比较麻烦
- 所以需要改为静态IP,也就是每次开机之后IP不会变,这样才能方便我们后面项目的开发。
Linux Shell命令
- 绝对路径: 路径的写法,由根⽬录
/
写起- 例如: /usr/share/doc 这个⽬录。
- 相对路径:路径的写法,不是由 / 写起
- 例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:
cd ../man
或cd man
- 例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:
-
设置静态IP
- 查看虚拟机本地的IP地址,执行命令
shell# 查看本地IP地址 ifconfig # 如果提示没有找到这个命令,那么首先需要安装工具 sudo apt install net-tools
-
pwd :显示当前⽬录路径
-
ls :(list directory contents)显示当前⽂件夹下的⽬录或⽂件
- 常⽤选项:
-a
显示所有的⽂件夹和⽂件,包括隐藏⽂件-l
以详细的形式显示
- 常⽤选项:
-
cd : 进⼊⼀个路径或者⽬录,绝对路径或者相对路径都可以
cd [路径]
:⽐如 cd ~(代表进⼊家⽬录)cd .
:进入当前⽬录cd ..
:进⼊上⼀级⽬录cd /home
:进⼊根目录下的home⽬录~
:代表当前用户的家目录
Linux⽂件与⽬录管理相关指令
目录文件
-
mkdir: 创建新目录
shellmkdir 目录的相对路径或绝对路径
-
rmdir : 删除空目录
shellrmdir 目标目录的相对路径或绝对路径
-
rm: 移除⽂件或⽬录
shell-f :就是 force 的意思,忽略不存在的⽂件,不会出现警告信息; -i :互动模式,在删除前会询问使⽤者是否动作 -r :递归删除啊!最常⽤在⽬录的删除了!这是⾮常危险的选项!!!
-
cp: 复制文件或目录
shellcp [-adfilprsu] 来源档(source) ⽬标档(destination) -a:相当于 -pdr 的意思,⾄于 pdr 请参考下列说明;(常⽤) -d:若来源档为连结档的属性(link file),则复制连结档属性⽽⾮⽂件本身 -p:连同⽂件的属性⼀起复制过去,⽽⾮使⽤默认属性(备份常⽤) -r:递归持续复制,⽤於⽬录的复制⾏为;(常⽤)
-
mv: 移动⽂件与⽬录,或修改⽂件与⽬录的名称
shellmv [-fiu] source destination -f :force 强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖; -i :若⽬标⽂件 (destination) 已经存在时,就会询问是否覆盖! -u :若⽬标⽂件已经存在,且 source ⽐较新,才会覆盖 (update)
我们可以使⽤
man [命令]
来查看各个命令的使⽤⽂档,如 :man cp
。
普通文件
-
touch:创建文件
shelltouch 目标文件的相对路径或绝对路径
-
查看文件内容
-
cat命令: 以只读的⽅式打开⼀个⽂件。可以加 -n 表示带上⾏号(适合查看⽂件内容⽐较少的)
-
more命令:和cat功能类似,不过是以分⻚的形式⼀⻚⼀⻚显示数据
shellcat [选项] 目标文件 选项: +n: 从笫n⾏开始显示 -c: 从顶部清屏,然后显示 分页查看命令: 空格: 向后翻一页 b: 键就会往回(back)⼀⻚显示
-
less: 也⽤来分⻚显示数据,但是功能⽐more强⼤。并不会⼀次性将全部⽂件读取才显示,⽽是根据显示的需要加载对应的数据。
shellless [选项] 目标文件 选项: -f :强迫打开特殊⽂件,例如外围设备代号、⽬录和⼆进制⽂件 -m :显示类似more命令的百分⽐ -N :显示每⾏的⾏号 分页查看命令: f 向后翻⼀⻚ d 向后翻半⻚ h 显示帮助界⾯ q 退出less 命令 u 向前滚动半⻚ y 向前滚动⼀⾏
-
head: 查看⼀个⽂件,取开头的⼀部分内容
shellhead -n 目标文件,表示查看目标文件的前n行内容,比如 head -5 a.txt
-
tail:查看⼀个⽂件的尾部内容
shelltail -n 目标文件,查看⽂件的最后n行内容,比如 tail -5 a.txt tail -f filename,尾部持续不断地输出内容。Control + c退出 例如:tail -5f filename
-
-
重定向和追加
-
echo: 输出内容到控制台。
shellecho $PATH 输出Linux的环境变量到控制台
-
>命令:输出重定向(会将原来的内容覆盖)
shellecho hello > a.txt 将字符串hello, 写入a.txt文件 ls -l > a.txt 将目录信息,写入a.txt文件 cat a.txt > b.txt(⽂件可以存在,可以不存在) 将a.txt文件内容写入b.txt文件中
-
>>命令:追加(不会覆盖原⽂件的内容,追加到底部)
shellecho hello >> a.txt 将字符串hello, 追加 写入到a.txt文件 ls -l >> a.txt 将目录信息,追加 写入a.txt文件 cat a.txt >> b.txt(⽂件可以存在,可以不存在) 将a.txt文件内容写入b.txt文件中
-
-
压缩与解压缩
tar是⽤来建⽴,还原备份⽂件的⼯具程序,它可以加⼊,解开备份⽂件内的⽂件。
shelltar -c:产⽣.tar⽂件 -v:显示详细信息 -z:打包同时压缩 -f:指定压缩后的⽂件名 -x:解压.tar⽂件 压缩: tar -zcvf combine.tar.gz 1.txt 解压: tar -zxvf combine.tar.gz -C java/ -C 表示解压到指定⽬录
如果需要解压和压缩为
.zip
格式的⽂件,那么需要安装zip和unzip命令
文本编辑
Ubuntu默认没有安装vim,需要先安装vim⼯具。
shell
sudo apt install vim
vim有三种模式:命令模式(Command mode)、插⼊模式(Insert mode)、末⾏模式(Last Linemode)。
-
命令模式
shell通过指令 vim filename 进⼊命令模式。除此之外,还有⼀些其他的参数,⽐如: -R: 把指定的⽂件以只读的⽅式放⼊vim编辑器中 +: 打开⽂件,并把光标置于最后⼀⾏的⾸部 +n: 打开⽂件,并把光标置于第n⾏的⾸部 命令模式快捷键: 删除: x: 删除光标所在位置的字符 dd: 少出光标所在⾏ ndd: 删除当前⾏后n⾏⽂本(包括此⾏) dG: 删除光标所在⾏⼀直到⽂件末尾的所有内容 D: 删除光标位置到⾏尾的所有内容 删除的内容此时并没有被真正删除,⽽是在剪切版中,按下 p 键,可以将删除的内容粘贴回来。 光标移动: w: 光标移动⾄下⼀个单词⾸ e: 光标移动⾄下⼀个单词尾 b: 光标移动⾄上⼀个单词⾸ gg: 光标移动到⽂件开头 G: 光标移动⾄⽂件末尾 nG: 光标移动到第n⾏,n为数字 0或^:光标移动⾄当前⾏的⾏⾸ $: 光标移动⾄当前⾏的⾏尾
-
插入模式
shell在命令模式下,通过按下i、I、a、A、o、O这6个字⺟进⼊插⼊模式,不同的字⺟代表不同的进⼊⽅式。 i: 在当前光标位置前⾯插⼊随后输⼊的⽂本,光标后的⽂本相应向右移动 I: 在光标所在⾏的⾏首插⼊随后输⼊的⽂本 o: 在光标所在⾏下⾯插⼊新的⼀⾏,然后光标停在空⾏⾸,等待输⼊⽂本 O: 在光标所在⾏上⾯插⼊新的⼀⾏,然后光标停在空⾏⾸,等待输⼊⽂本 a: 在当前光标位置后⾯插⼊随后输⼊的⽂本,光标后的⽂本相应向右移动 A: 在光标所在⾏的⾏尾插⼊随后输⼊的⽂本
按下ESC键离开插⼊模式,进⼊命令模式
-
末行模式
shell在命令模式下,按下: 键进⼊末⾏模式。 在该模式下,可以使⽤⼀系列的指令,完成保存、离开vim编辑器等功能。 :wq 保存并退出vim编辑器 :wq! 保存并强制退出vim编辑器 :q 不保存退出 :q! 不保存强制退出 :w 保存不退出 :w! 强制保存不退出 :w filename 另存到filename⽂件 ZZ 直接退出
三种模式之间的关系:
用户管理
Linux系统是⼀个多⽤户、多任务的操作系统。多⽤户是指在linux操作系统中可以创建多个⽤户,⽽这些多⽤户⼜可以同时执⾏各⾃不同的任务,⽽互不影响
在Linux系统中,会存在着以下⼏个概念:
- 用户名: 每个用户在操作系统中,都具有唯一用户名
- ⽤户所属的组:多个用户可以属于同一个用户组。
- ⽤户的家⽬录:在/home目录下,与该用户的用户名一致的目录。
添加用户
-
sudo useradd [选项] ⽤户名
shellsudo useradd test 注意这种⽅式创建出来的没有家⽬录,我们创建的时候需要带参数 sudo useradd -m test: -m 表示在 /home⽬录下创建⼀个家⽬录 sudo useradd -m -s /bin/bash test: 表示指定shell版本是我们熟悉的bash
-
设置用户密码
shellsudo passwd [⽤户名]
-
切换用户
shellsu [⽤户名]
删除用户
-
sudo userdel [⽤户名]
-r
: 不仅会删除该⽤户,还会删除该⽤户对应的家⽬录
用户组管理
-
添加组
shellgroupadd [groupname] 创建⽤户的时候加⼊组: useradd -m -s /bin/bash -g [groupname] [username]
-
查看⽤户及组信息
shellid ⽤户名
-
修改用户所属组
shellusermod -g [groupname] [username]
文件权限管理
权限及命令
shell
ls -l
total 40
#⽂件信息 ⽂件数 ⽤户 组名 ⼤⼩ ⽉份 ⽇期 时间 ⽂件名
drwxr-xr-x 2 xxxxxxxx xxxxxxxx 4096 Aug 2 23:52 coo1heisenberg
prw-r--r-- 1 xxxxxxxx xxxxxxxx 0 Aug 2 23:43 fifo_file
-rw-r--r-- 1 xxxxxxxx xxxxxxxx 26825 Aug 3 00:25 main.txt
-rw-r--r-- 1 xxxxxxxx xxxxxxxx 33 Aug 3 00:37 test.txt
drwxr-xr-x 3 xxxxxxxx xxxxxxxx 4096 Aug 3 01:27 xxx
前10位字符的说明:
- 第1位:
-
表示是⼀个普通的⽂件;d
表示是⼀个⽬录; rwx
:分别代表Read、Write、Execute即读、写、执⾏权限,这个顺序不会变,如果没有权限的话就⽤-代替- 第2-4位:表示⽂件所有者的对于文件所具有的权限
- 第5-7位:表示和文件所有者同组的其他用户对文件所具有的权限
- 第8-10位:⽂件其他组⽤户拥有的权限
我们可以使用chmod命令,手动修改文件权限
-
第一种方式
shellchmod u=rwx,g=rw,o=r filename u:所有者 g:所有组 o:其他组,a代表全部,没有就用空格替代
-
第二种方式
shellr=4,w=2,x=1 rwx = 4 + 2 + 1 = 7 chmod 751 等价于 u=rwx,g=rx,o=x
进程管理
查看进程
- Linux系统中查看进程使⽤情况的命令是
ps
命令,但是ps
命令一般都不会单独使用
shell
常⻅选项:
-e:显示所有进程
-f:全格式
a:显示终端上的所有进程
u:以⽤户的格式来显示进程信息
x:显示后台运⾏的进程
⼀般常⽤格式为ps -ef
或者ps aux
两种。显示的信息⼤体⼀致,略有区别
eg:
shell
UID:⽤户ID
PID:进程ID
PPID:⽗进程ID
C:CPU⽤于计算执⾏优先级的因⼦。数值越⼤,表明进程是CPU密集型运算,执⾏优先级会降低;数值越
⼩,表明进程是I/O密集型运算,执⾏优先级会提⾼
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:完整的启动进程所⽤的命令和参数
shell
USER:⽤户名称
PID:程号
%CPU:进程占⽤CPU的百分⽐
%MEM:进程占⽤物理内存的百分⽐
VSZ:进程占⽤的虚拟内存⼤⼩(单位:KB)
RSS:进程占⽤的物理内存⼤⼩(单位:KB)
TT:终端名称(缩写),若为?,则代表此进程与终端⽆关,因为它们是由系统启动的
STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有⽐普通优先级更低的
优先级,R-正在运⾏,D-短期等待,Z-僵死进程,T-被跟踪或者被停⽌等
STARTED:进程的启动时间
TIME:CPU时间,即进程使⽤CPU的总时间
COMMAND:启动进程所⽤的命令和参数,如果过⻓会被截断显示
ps -ef 与 ps -aux的区别:
- 如果想查看进程的⽗进程ID和完整的CMD命令 ,可以使⽤
ef
- 如果想查看进程的CPU占⽤率和内存占⽤率 ,可以使⽤
aux
进一步筛选想要查询的目标进程信息:
shell
#搜索匹配进程
ps -ef | grep [搜索内容]
终止进程
- kill [选项] 进程号
shell
选项:
-9:操作系统从内核级别强制杀死⼀个进程
-15:可以理解为操作系统发送⼀个通知告诉应⽤主动关闭
服务管理
-
服务本质上来说也是⼀个进程,只不过是在后台运⾏。监听着某⼀端⼝,等待该端⼝的请求到来,⽐如ssh服务监听着22端⼝,mysql服务监听着3306端⼝;
-
systemctl start/stop/restart/status/reload 服务名称
shell#⽐如关闭ssh服务 systemctl stop sshd
网络管理
查看网络设置
shell
ifconfig
查看⽹络端⼝占⽤
-
netstat
shell-a:显示全部 -n:以数字的形式显示 -p:显示该连接被哪个应⽤程序占⽤PID eg: netstat -anp | grep 3306
-
lsof -i: 端⼝号
测试网络是否正常
shell
ping [⽬的ip或者域名]