1.liunx简述
1.1 linux操作系统的组成
内核层
内核层用来与硬件进行直接的交互。
系统调用
Shell
Shell 层是与用户直接交互的界面。用户可以在提示符下输入命令行,由 Shell 解释执行并输出相应结果或者有关信息,所以我们也把 Shell 称作命令解释器,利用系统提供的丰富命令可以快捷而简便地完成许多工作。
库函数
1.2 linux文件系统目录
根目录只有一个/,采用层级式的树状目录结构。
- /:是linux系统的根目录。
- /bin:bin是二进制(binary)英文缩写。系统需要的命令位于此目录。
- /boot:放linux内核和引导系统程序所需要的文件目录
- /dev:dev是设备(device)的英文缩写,是一个访问外部设备的端口。
- /home:用户的主目录。
- /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
- /opt:额外安装软件存放的目录。比如mysql的安装包就可以放在该目录。
-
/mnt:可供系统管理员使用,手动挂载一些临时设备媒体设备的目录。
-
/media:是自动挂载的目录。当把U盘插入到系统中,会自动挂载到该目录下。比如插入一个U盘,会自动到/media目录中挂载。
1.3 Liunx实操
1.3.1 如何登录服务器?
需要用到SSH协议以及SFTP协议。回顾一下应用层协议。
Linux服务器需要安装SSH相关服务。
首先执行sudo apt-get install openssh-server指令。接下来用xshell连接。
在服务器上执行./startup.sh启动Tomcat,看到Tomcat started的时候Tomcat不一定启动成功了,需要通过去看日志来判断当前Tomcat的情况。
1.3.2 linux高频实用指令
1.cd、ls、pwd
cd:change directory。
用法: cd [路径],比如cd ~(代表家目录)
绝对路径:(从/开始)cd /home/zsquirrel/Documents
相对路径:(比如当前在家目录)cd Documents
cd . 当前目录
cd .. 上一级目录
ls: list directory contents
用法: ls [选项] [目录或者文件]
常用选项:
-a 显示所有的文件夹和文件,包括隐藏文件
-l 以详细的形式显示
-lh 以更加容易阅读的方式显示
pwd: print name of current/working directory
2.man
man [指令名称]
比如man ls。退出方式 q
是manual的简写,manual是手册的意思,man加上指令名字可以显示出这个指令的用法。
3.mkdir、rmdir
mkdir:用于创建目录
用法: mkdir [选项] 要创建的目录
选项: -p 用来创建多级目录
mkdir -p 2019/12
rmdir:删除空目录
如果希望删除非空目录,那么则执行以下代码
rm -rf 目录
递归删除目录,非常危险,谨慎执行。
4.touch
用来创建一个空文件
touch 文件名1 文件名2(可以创建多个文件)
5.cp、mv、rm
cp:用来复制文件,把文件复制到指定位置
用法:cp 文件 目录/
如果需要递归复制一个目录下所有文件,则
cp -r 目录1 目录2/
mv(move files):移动文件/文件夹或者重命名
mv old-filename new-filename(重命名,同一目录下)
mv 文件原来的名字 文件新的名字
mv file2 /Users/chenzhenwei/Desktop (移动文件,移动xx文件到xx目录)
rm:删除对应的文件或者文件夹
用法:rm [选项] 文件夹
选项:
-r 递归删除整个文件夹
-f 强制删除不提示
rm -rf 文件夹
4.cat、more、less、head、tail
cat:以只读的方式打开一个文件。可以加 -n 表示显示文件的行号(适合查看文件内容比较少的)
more:和cat功能类似,不过是以分页的形式一页一页显示数据。
快捷键(win):
Enter键:向下1行数据。
Ctrl + F :向下滚一屏
Ctrl + B :向上滚一屏
快捷键(mac) :
Enter键:向下1行数据。
空格键:向下滚一屏
按b:向上滚一屏,linux区分大小写,按B不顶用
less:也用来分页显示数据,但是功能比more强大。并不会一次性将全部文件读取才显示,而是根据显示的需要加载对应的数据。
Pg UP,Pg Dn:向上,向下分页查看;
上下方向键:向上,向下按行移动;
mac:
b向前翻一页
d 向后翻半页
上下方向键:向上,向下按行移动;
head:查看一个文件,取开头的一部分内容。
head filename,或者添加选项: head -5 filename
tail:查看一个文件的尾部内容。
tail filename 或者添加选项 tail -5 filename,以及更加普遍的一个用法:
tail -f filename,-f 选项使 tail 在到达文件末尾时不会停止,而是等待其他追加的数据显示在输入中,意思就是用-f的时候,即使显示的东西到了文件尾部也不停止,而是等待追加的输出,如果再次发请求,就有新的数据的输出,此时就可以看这个数据了,常用于查看实时的日志,用来查看tomcat日志。
5.echo、重定向和追加
echo:输出内容到控制台。比如输出Linux的环境变量到控制台:
echo $PATH
或者 echo “hello”
>指令:输出重定向(会将原来的内容覆盖)
>>指令:追加(不会覆盖原文件的内容,追加到底部)
比如:
echo hello > a.txt
ls -l >> a.txt
cat a.txt > b.txt(文件可以存在,可以不存在)
6.tar
6.1 压缩
既可以打包又可以解压。用法:
tar [选项] xxx.tar.gz 文件
选项:
-c:产生.tar文件
-v:显示详细信息
-z:打包同时压缩
-f:指定压缩后的文件名
-x:解压.tar文件
将多个文件打包到一个压缩包中
tar -zcvf combine.tar.gz 1.txt 2.txt 3.txt (combine.tar.gz是压缩包)
将一个目录下的所有文件压缩到一个压缩包中
chenzhenwei@MacBook-Pro Desktop % tar -zcvf tu.tar.gz /Users/chenzhenwei/Desktop(将桌面上的所有文件都压缩到了tu.tar.gz里)
6.2 解压
tar -zxvf tu.tar.gz -C /Users/chenzhenwei/Downloads/(解压缩的目录必须是存在的)
7.find、grep、管道符
find指令,可以用来查找文件,用法:
find ~ -name *.java
在当前家目录下查找java文件
限制查找的文件的大小,大于1M、小于1M、等于1M的写法
grep:过滤查找。
用法:grep [选项] 查找内容 源文件
选项:
-n 显示匹配的行及行号
-i 不区分大小写
管道符:|,表示将前一个命令处理的结果传递给后面的命令处理。
cat HelloWorld.java | grep -n HelloWorld
1.3.3 文本编辑
Vim有三种模式:命令模式(Command mode)、插入模式(Insert mode)、末行模式(Last Line mode)。vim filename进入命令模式,vim filename 打开或者新建一个文件,并将光标至于第一行的首部。
1.3.3.1 命令模式
Vim打开一个文件(文件可以存在,也可以不存在),默认就是进入命令模式。在该模式下,输入的字符会被当做指令,而不会被当做要输入的文字。在该模式下,可以使用指令进行跳至文章开头、文章结尾、删除某行、复制、粘贴等内容。
查找abc,从光标所在位置直接向前查找字符串abc,直接输入/abc
删除abc,按x删除光标所在位置的字符,dd删除光标所在的行。不论是按x还是按dd,被删除的内容还在剪切板中,按下p键(将内容粘贴到光标后面),可以将删除的内容粘贴回来。P(大写)将内容粘贴到光标前。
复制文本:
y复制已选中的文本到剪贴板
yy将光标所在行复制到剪贴板,此命令前可以加数字n,可复制n行
移动光标:
(单词)
有时候可能需要快速移动至一行中某个位置 ,可以以单词为单位来移动
w:光标移动至下一个单词的单词首
b:光标移动至上一个单词的单词首
e:光标移动至下一个单词的单词尾
(行首行尾)
0或者^移动到行首
$移动到行尾
(文件首尾)
光标移动到指定行(如何显示行号 :set number)
gg:文件头
G:到达文件尾
nG:到达文件的第几行(如何显示行号 :set number,输入冒号set number再按enter)
1.3.3.2 插入模式
在命令模式下,通过按下i、I、a、A、o、O这6个字母进入插入模式,不同的字母代表不同的进入方式,通常用i比较多。按下ESC键离开插入模式,进入命令模式。
1.3.3.3 末行模式
在命令模式下,按下:键进入末行模式。在该模式下,可以使用一系列的指令,完成保存、离开vim编辑器等功能。
:wq 保存并退出vim编辑器
1.4 用户管理
Linux系统是一个多用户、多任务的操作系统。多用户是指在linux操作系统中可以创建多个用户,而这些多用户又可以同时执行各自不同的任务,而互不影响。和windows系统有很大区别。
在Linux系统中,会存在着以下几个概念,
1.用户名:用户的名称
2.用户所属的组:当前用户所属的组。
3.用户的家目录:当前账号登录成功之后的目录,就叫做该用户的家目录。
系统安装好默认的root用户是没有密码的,需要给root设置一个密码
sudo passwd root.
1.4.1 添加用户
指令为:sudo useradd [选项] 用户名
如果没有添加选项,则默认不会再/home目录下添加家目录。如何知道添加用户成功呢?
通过指令 cat /etc/passwd查看
给ming用户添加密码:sudo passwd ming。
更换其他用户:su ming;或者更换为root用户:su即可。
用默认生成的账号登录linux服务器,由于ming没有家目录,则无法远程登录。
Useradd -m ming新建用户成功之后,会建立家目录,但是此时有问题
1.4.2 删除用户
指令为:sudo userdel ming。其中一定要保证ming用户已经注销。之后再次通过 cat /etc/passwd来验证。
sudo userdel -r ming,不仅会删除该用户,还会删除对应的家目录。
1.4.3 组管理
添加组:groupadd 组名
创建用户的时候加入组:useradd -m -s /bin/bash -g 组名 用户名
查看用户及组信息:id 用户名
修改用户所属组:usermod -g 组名 用户名
1.4.4权限管理
1.4.4.1 更改文件所属者
(更改文件所属者):chown 用户名 文件名
(更改文件所属组):chgrp 用户名 文件名
更改文件所有者,但是文件所属的组这个时候并没有发生变更,这点需要特别注意。
1.4.5文件权限
前面10个符号表示文件的一些基本信息。
第1位:-表示是一个普通的文件;d表示是一个目录;(最常用)
第2-4位:表示文件所有者的权限,rw-,表示有读写权限。
第5-7位:文件所在组的其他用户拥有的权限,r--,表示仅有读权限
第8-10位:文件其他组用户拥有的权限,r--,表示有读权限
rwx:读写执行权限。
针对是目录还是文件,有不同的表现行为:
目录:(r权限决定了用户是否可以ls出目录内容,而x权限决定了用户是否可以cd到该目录)
- read: 表示有读取目录内容的权限,即可以使用ls命令查看该目录的内容列表
- write: 表示有更改目录的权限,即可以在此目录下新建文件或子目录、删除文件或子目录、重命名文件或子目录、挪动该目录内的文件或子目录等
- execute: 表示可以进入该目录,即可以使用cd命令进入该目录
文件:(针对文件内容,而不是针对文件本身)
- read:可以读取文件内容,打开文件
- write:可以编辑该文件内容,增删改文件内容
- execute:执行文件
1.4.6 修改文件权限
通过chmod指令,可以修改文件或者目录的权限。
方式一:
u:所有者 g:所有组 o:其他组,a代表全部
- chmod u=rwx,g=rw,o=r filename
- chmod o + w
- chmod a – w
方式二:
r=4,w=2,x=1 rwx = 4 + 2 + 1 = 7
chmod 751 等价于 u=rwx,g=rx,o=x
chmod 777 tomcat
1.5 进程管理
1.5.1 查看进程
Linux系统中查看进程使用情况的命令是ps指令
常见选项:
-e:显示所有进程
-f:全格式
a:显示终端上的所有进程
u:以用户的格式来显示进程信息
x:显示后台运行的进程
一般常用格式为ps -ef或者ps aux两种。显示的信息大体一致,略有区别。
USER:用户名称
PID:进程号
%CPU:进程占用CPU的百分比
%MEM:进程占用物理内存的百分比
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
TT:终端名称(缩写),若为?,则代表此进程与终端无关,因为它们是由系统启动的
STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
STARTED:进程的启动时间
TIME:CPU时间,即进程使用CPU的总时间
COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
UID:用户ID
PID:进程ID
PPID:父进程ID
C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:完整的启动进程所用的命令和参数
两者区别:
如果想查看进程的CPU占用率和内存占用率,可以使用aux
如果想查看进程的父进程ID和完整的COMMAND命令,可以使用ef
如果想在进程列表中进一步筛选出想查询的进程,可以使用管道符
ps -ef | grep java
1.5.2 终止进程
kill [选项] 进程号
选项:
-9:表示强迫进程必须终止
将当前登录该linux操作系统的终端账号踢下线
1.5.3 服务管理
服务本质上来说也是一个进程,只不过是在后台运行。监听着某一端口,等待该端口的请求到来,比如ssh服务,监听着22端口;mysql服务,监听着3306端口;tomcat服务,监听着80或者8080端口。
指令:(管理服务器的启动、停止、状态等)
systemctl start/stop/restart/status/reload 服务名称
比如关闭ssh服务,systemctl stop sshd
再次通过shell连接linux就无法连接。
重新开启:systemctl start sshd
如何查看linux机器中服务的名称呢???
systemctl list-units,从中找出ssh.service
1.6 网络管理
1.6.1 查看网络设备
ifconfig
1.6.1 查看网络端口
netstat命令,查看当前linux系统中网络端口情况
选项
-a:显示全部
-n:以数字的形式显示
-p:显示该连接被哪个应用程序占用PID
1.6.2 监测网络是否连通
ping 目的ip