Linux
1.Linux简介
1.1历史
- UNIX:UNIX 操作系统由肯•汤普森(Ken Thompson)和丹尼斯•里奇(Dennis Ritchie)发明。
- LINUX:Linux 内核由芬兰人林纳斯·托瓦兹(Linus Torvalds)编写的。Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX的多用户、多任务、⽀支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳
定的多用户网络操作系统。
1.2 发行版本
⽬目前市⾯面上较知名的发⾏行行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
1.3 Linux操作系统的组成
UNIX或者Linux系统⼤大致可以分为以下⼏几个部分:最底层的硬件,以及和硬件交互的操作系统内核;中间层是shell层;最外层是应⽤用层。
内核层:
内核层是 UNIX/Linux 系统的核心和基础,它直接附着在硬件平台之上,控制和管理理系统内各种资源(硬件资源和软件资源),有效地组织进程的运⾏,从而扩展硬件的功能,提⾼高资源的利用效率,为⽤户提供⽅便、高效、安全、可靠的应⽤环境。
Shell层
Shell 层是与用户直接交互的界面。用户可以在提示符下输入命令行,由 Shell 解释执行并输出相应结果或者有关信息,所以我们也把 Shell 称作命令解释器,利用系统提供的丰富命令可以快捷⽽简便地完成许多工作。
1.4 Linux文件系统目录
在linux中,一切皆为文件。文件分为下面的一些类型
- 普通文件
- 目录文件
- 链接文件
- 设备文件
- 管道文件
Linux文件系统目录结构和熟知的windows系统有较大区别,没有各种盘符的概念。根目录只有一个/,采用层级式的树状目录结构。
- /:根目录,所有的目录、文件、设备都在/之下,/就是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的安装包就可以放在该目录。
2. Linux命令操作
2.1 高频实用基础命令
pwd 【显示当前目录路径】
ls 【list directory contents,显示当前文件夹下的目录或文件】
常用选项:
-a 显示所有的文件夹和文件,包括隐藏文件
-l 以详细的形式显示
cd 【进入⼀个路径或者目录,绝对路径或者相对路径都可以】
用法: cd [路径],⽐如 cd ~(代表进入家目录)
cd . 【当前目录】
cd … 【进入上一级目录】
cd /home 【进入绝对路径home目录下】
2.2 Linux文件与目录管理
Linux的目录结构为树状结构,最顶级的目录为根目录 /。需要先知道什么是绝对路径与相对路径。
绝对路径:路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。
相对路径:路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:cd …/man
2.2.1 目录文件
mkdir:创建一个新的目录
rmdir:删除一个空的目录
[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
-a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
-d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
-f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l:进行硬式连结(hard link)的连结档创建,⽽非复制文件本身;
-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
-r:递归持续复制,用於目录的复制行为;(常用)
-s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
-u:若 destination 比 source 旧才升级 destination !
rm: 移除⽂件或目录
-f :就是 force 的意思,忽略不存在文件,不会出现警告信息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
mv: 移动文件与目录,或修改文件与目录的名称
[root@www ~]# mv [-fiu] source destination
-f :force 强制的意思,如果⽬目标⽂文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会升级 (update)
可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp。
2.2.2 普通文件
创建文件命令
touch: 创建一个新的空文件
查看文件命令
cat: 以只读的方式打开一个文件。可以加 -n 表示带上行号(适合查看文件内容比较少的)
more: 和cat功能类似,不过是以分⻚的形式一页一⻚显示数据。最基本的指令就是按空白键(space)
就往下一⻚显示,按 b 键就会往回(back)⼀页显示。
+n :从笫n行开始显示
-c :从顶部清屏,然后显示
less: 也⽤来分页显示数据,但是功能比more强大。并不会⼀次性将全部文件读取才显示,⽽是根据显示的需要加载对应的数据。
-f :强迫打开特殊⽂件,例如外围设备代号、⽬录和二进制文件
-m :显示类似more命令的百分⽐
-N :显示每行的行号
操作命令
b 向后翻⼀页
d 向后翻半页
h 显示帮助界⾯
q 退出less 命令
u 向前滚动半页
y 向前滚动⼀行
head: 查看一个⽂件,取开头的一部分内容。head filename,或者添加选项: head -5 filename
tail:查看⼀个⽂件的尾部内容。tail -5 filename,查看文件的最后五行
常⻅用法:tail -f filename,尾部持续不断地输出内容。Control + c退出。
例如:tail -5f filename
重定向和追加
echo: 输出内容到控制台。⽐如输出Linux的环境变量到控制台
echo $PATH
.>指令:输出重定向(会将原来的内容覆盖)
.>>指令:追加(不会覆盖原⽂件的内容,追加到底部)
echo hello > a.txt
ls -l >> a.txt
cat a.txt > b.txt(文件可以存在,可以不存在,不存在就新建输入)
压缩与解压
tar是用来建⽴,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
tar
-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软件
sudo apt-get install zip
sudo apt-get install unzip
2.2.3 文本编辑
Ubuntu默认没有安装vim,需要先安装vim工具。
sudo apt-get install vim
vim有三种模式:命令模式(Command mode)、插入模式(Insert mode)、末行模式(Last Linemode)。
2.2.3.1 命令模式(Command mode)
通过指令vim filename 进入命令模式。除此之外,还有一些其他的参数,比如:
-r: 恢复上次vim打开时崩溃的文件
-R: 把指定的文件以只读的方式放入vim编辑器中
+: 打开文件,并把光标置于最后⼀行的首部
+n: 打开文件,并把光标置于第n行的首部
命令模式快捷键:
删除
x: 删除光标所在位置的字符
dd: 删除光标所在行
ndd: 删除当前行后n行⽂本(包括此行)
dG: 删除光标所在行⼀直到文件末尾的所有内容
D: 删除光标位置到⾏尾的所有内容
删除的内容此时并没有被真正删除,⽽是在剪切版中,按下p 键,可以将删除的内容粘贴回来。
移动
w: 光标移动⾄下一个单词首
e: 光标移动至下一个单词尾
b: 光标移动至上一个单词首
gg: 光标移动到⽂件开头
G: 光标移动至⽂件末尾
nG: 光标移动到第n行,n为数字
0或^:光标移动⾄当前⾏的⾏⾸
$: 光标移动⾄当前行的行尾
2.2.3.2 插入模式(Command mode)
在命令模式下,通过按下i、I、a、A、o、O这6个字母进入插入模式,不同的字母代表不同的进入方式。
i: 在当前光标位置前面插入随后输入的文本,光标后的文本相应向右移动
o: 在光标所在行下⾯插入新的⼀行,然后光标停在空⾏首,等待输入文本
O: 在光标所在⾏上面插入新的⼀行,然后光标停在空⾏首,等待输入文本
a: 在当前光标位置后面插入随后输入的⽂本,光标后的文本相应向右移动
A: 在光标所在行的行尾插入随后输入的⽂本
按下ESC键离开插入模式,进入命令模式
2.2.3.3 末行模式(Command mode)
在命令模式下,按下 : 键进入末行模式。在该模式下,可以使用⼀系列的指令,完成保存、离开vim编辑器器等功能。
:wq 保存并退出vim编辑器
:wq! 保存并强制退出vim编辑器
:q 不保存退出
:q! 不保存强制退出
:w 保存不退出
:w! 强制保存不退出
:w filename 另存到filename文件
ZZ 直接退出
2.3 用户管理
Linux系统是⼀个多用户、多任务的操作系统。多⽤户是指在linux操作系统中可以创建多个用户,⽽这些多⽤户又可以同时执⾏各⾃不同的任务,⽽互不影响。
在Linux系统中,会存在着以下几个概念,
1.用户名:用户的名称
2.用户所属的组:当前用户所属的组。
3.用户的家目录:当前账号登录成功之后的目录,就叫做该用户的家目录。
2.3.1 添加用户
sudo useradd [选项] 用户名
eg:创建一个用户,用户名 test
sudo useradd test
注意这种方式创建出来的没有家目录,我们创建的时候需要带参数
sudo useradd -m test : -m 表示在 /home目录下创建一个家目录
sudo useradd -m -s /bin/bash test : 表示指定shell版本是我们熟悉的bash
给用户添加密码:
sudo passwd [⽤户名]
切换用户:
su [⽤户名]
2.3.2 删除用户
sudo userdel [用户名]
-r: 不仅会删除该用户,还会删除该用户对应的家⽬录
2.4 组管理
添加组: groupadd [groupname]
创建用户的时候加入组: useradd -m -s /bin/bash -g [groupname] [username]
查看用户及组信息:id 用户名
修改用户所属组: usermod -g [groupname] [username]
2.5 权限管理
2.5.1 文件权限
查看
前面10个符号表示文件的一些基本信息。
第1位:-表示是一个普通的文件;d表示是一个目录;(最常用)
rwx:Read、Write、Execute,读、写、执行权限,这个顺序不会变,如果没有权限的话就用-代替
第2-4位:表示文件所有者的权限
第5-7位:文件所在组的拥有的权限
第8-10位:文件其他组用户拥有的权限
修改
通过 chmod 指令,可以修改文件或者目录的权限
[方式一]
chmod u=rwx,g=rw,o=r filename
u:所有者 g:所有组 o:其他组,a代表全部
[方式二]
r=4,w=2,x=1 rwx = 4 + 2 + 1 = 7
chmod 751 等价于 u=rwx,g=rx,o=x
2.5.2 案例
Linux无间道:
- 新建一个police组和⼀个gang组
- police组新增一个成员叫刘小磊,另⼀个成员小警,gang组新增一个成员叫张⼤松,另⼀个成员强哥
- 将刘小磊和张大松的分组对调
- 刘小磊创建一个文件,写下:葵涌码头,⻰⿎滩收货。该文件权限自己可以读写,同组其他人员没有权限读写,其他组可以查看
- 张大松创建一个文件,写下:有内鬼,终止交易。该文件权限⾃⼰可以读写,同组其他人员没有权限读写,其他组可以读写
- 将刘小磊的账号销毁
#第一步
sudo groupadd police
sudo groupadd gang
#第二步
sudo useradd -m -s /bin/bash -g police liuxiaolei
sudo useradd -m -s /bin/bash -g police xiaojing
sudo useradd -m -s /bin/bash -g gang zhangdasong
sudo useradd -m -s /bin/bash -g gang qiangge
#给定密码
sudo passwd liuxiaolei
sudo passwd xiaojing
sudo passwd zhangdasong
sudo passwd qiangge
#第三步 卧底
sudo usermod -g police zhangdasong
sudo usermod -g gang liuxiaolei
#第四步 卧底传递情报
su liuxiaolei
sudo echo "葵涌码头,龙鼓滩收货" > liuxiaolei.txt
chmod 704 liuxiaolei.txt
su zhangdasong
sudo echo "有内鬼,终止交易" > zhangdasong.txt
chmod 706 zhangdasong.txt
#第五步 读取文件,刘小磊暴露,销毁刘⼩磊用户
2.6 进程管理
2.6.1 查看进程
Linux系统中查看进程使用情况的命令是ps指令
常⻅选项:
-e:显示所有进程
-f:全格式 a:显示终端上的所有进程 u:以用户的格式来显示进程信息 x:显示后台运行的进程 ⼀般常用格式为ps -ef或者ps aux两种。显示的信息大体⼀致,略有区别。
带[*]表示重要
UID:用户ID
*PID:进程ID
*PPID:父进程ID C:CPU用于计算执行优先级的因子。数值越⼤,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间 TTY:完整的终端名称 TIME:CPU时间
*CMD:完整的启动进程所用的命令和参数
USER:用户名称
*PID:进程号
*%CPU:进程占用CPU的百分⽐
*%MEM:进程占用物理内存的百分比 VSZ:进程占用的虚拟内存⼤小(单位:KB) RSS:进程占用的物理理内存⼤小(单位:KB) TT:终端名称(缩写),若为?,则代表此进程与终端⽆关,因为它们是由系统启动的
*STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有⽐普通优先级更低的 优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停⽌等 STARTED:进程的启动时间
TIME:CPU时间,即进程使用CPU的总时间 COMMAND:启动进程所⽤的命令和参数,如果过长会被截断显示
两者区别:
如果想查看进程的CPU占用率和内存占⽤率,可以使用aux
如果想查看进程的父进程ID和完整的COMMAND命令,可以使用ef
如果想在进程列表中进一步筛选出想查询的进程,可以使用管道符
#搜索匹配进程
ps -ef | grep [搜索内容]
2.6.2 终止进程
kill [选项] 进程号
参数:
-9:操作系统从内核级别强制杀死一个进程
-15:可以理解为操作系统发送一个通知告诉应用主动关闭
3.6.3 服务管理
服务本质上来说也是一个进程,只不过是在后台运行。监听着某一端口,等待该端口的请求到来,⽐如ssh服务,监听着22端口;mysql服务,监听着3306端口;
tomcat服务,监听着80或者8080端口。
指令:(管理服务器的启动、停止、状态等)
systemctl start/stop/restart/status/reload 服务名称
例如:
#⽐如关闭ssh服务
systemctl stop sshd
2.7 网络管理
2.7.1 查看网络设置
ifconfig
3.7.2 查看网络端口占用情况
netstat
-a:显示全部
-n:以数字的形式显示
-p:显示该连接被哪个应⽤程序占用PID
eg:
netstat -anp | grep 3306
第二种⽅式:
lsof -i: [端口号]
3.7.3 查看网络是否正常
ping [⽬的ip或者域名]