别向这个世界认输,因为你还有牛逼的梦想。
一、Linux概述
Linux操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:Unix操作系统、Minix操作系统、GNU计划、POSIX标准和Internet网络。
UNIX
1973年,C语言之父 Dennis M. Ritchie 了解到 UNICS 系统并对其非常看好,但汇编语言有致命的缺点(需要针对每一台不同架构的服务器重新编写汇编语言代码,才能使其使用 UNICS 系统内核)。这样不仅麻烦而且使用门槛极高。于是 Dennis M. Ritchie 便决定使用C语言重新编写一遍UNICS系统,让其具备更好的跨平台性,更适合被广泛普及。于是开源且免费的UNIX系统由此诞生。
但是在1979年,贝尔实验室的上级公司 AT&T 看到了 UNIX 系统的商业价值和潜力,不顾贝尔实验室的反对声音,依然坚决做出了对其商业化的决定,并在随后收回了版权,逐步限制UNIX系统源代码的自由传播,渴望将其转化成专利产品而大赚一笔。崇尚自由分享的黑客面对冷酷无情的资本力量心灰意冷,开源社区的技术分享热潮一度跌入谷底。此时,人们也不能再自由地享受科技成果了,一切都以商业为重。
Minix
20世纪80年代,由于 AT&T 所有的UNIX版权的限制(闭源收费),荷兰的一位大学教授 Andrew S. Tanenbaum(历史中被遗忘的大神)为了能给学生上课,仿照UNIX系统编写出了一款名为 Minix 的操作系统。但当时他只是用于课堂教学,根本没有大规模商业化的打算,所以实际使用Minix操作系统的人数其实并不算多,但好在它是开源的。(后来这位鲍姆教授跟我们Linux之父因理念不同相爱相杀许久)
GNU/Linux
GNU本来有一个官方的内核,称为GNU Hurd,遗憾的是GNU Hurd还没有准备好可以作为产品使用。幸运的是,另一个内核已经可以取得。在1991年,Linus Torvalds开发了一个与Unix兼容的内核并称之为Linux。大约在1992年,将Linux与不是非常完整的GNU系统相结合产生了一个完整的自由软件操作系统,我们今天因此可以实际运行一个GNU系统的版本,称之GNU/Linux。
- 自由软件之父-Richard Stallman。(理查德·马修·斯托曼)
- 1983年发起自由软件运动/GNU项目。(全称:GNU’s Not Unix,也叫革奴计划)
- 1985年创立了自由软件基金会FSF。
- GPL协议。
Linux
林纳斯·托瓦兹(Linus)在赫尔辛基大学上学时,对操作系统很好奇。在吸收了MINIX精华的基础上,Linus于1991年写出了属于自己的Linux操作系统,版本为Linux0.01,是Linux时代开始的标志。他利用Unix的核心,去除繁杂的核心程序,改写成适用于一般计算机的x86系统,并放在网络上供大家下载,1994年推出完整的核心Version1.0,至此,Linux逐渐成为功能完善、稳定的操作系统,并被广泛使用。
Linux内核
Linux内核:https://www.kernel.org/
我们所说的Linux指的是内核(kernel),而只有内核它并不是一个完整的操作系统,还需要很多能够解决各种需求的应用程序。
Linux系统的组成及特点
Linux系统的组成:
-
Linux系统=Linux内核+GNU组件(比如 GCC编译器、Emcas编译器、glibc库、Shell等)+各种应用程序;
-
内核主要实现硬件驱动管理、软件程序管理、文件系统管理、进程管理;
-
应用程序:
- 不同风格的图形化界面程序(例如 GNOME、KDE、XFace等)
- 运行在桌面端的应用程序(例如 IntelliJ IDEA、Chrome/Firefox等)
- 运行在服务端的应用程序(JDK、MySQL、Tomcat、Nginx等)
Linux系统的特点:
-
开放源代码、自由传播的类Unix。
-
支持Intel X86系列的CPU 。 (x86指的是CPU架构)
-
支持多任务、多线程、多CPU、多用户。
-
完善的图形化界面:GNOME、KDE、XFace。
-
完善的开发平台:Java\Python\Go\C/C++。
-
支持主流的数据库:MySQL、Oracle、PostgreSQL。
Linux系统的发行版(基于内核版进行升级改造)
Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。
- Ubuntu,以桌面应用为主。
- CentOS,RedHat的社区版、免费。(好像有的版本也要停止维护了)
- 红旗Linux,北京中科红旗软件技术有限公司开发。
- RedHat(红帽),应用最广泛、收费。
- openSUSE,对个人完全免费、图形界面华丽多彩。
- Fedora,功能完备、快速更新、免费。
- CentOS是基于RHEL源码编译而来的,仅仅去掉了RHEL源码的商标以及非自由软件的部分。
- Fedora就是RHEL测试版,包含了最新的特性,待稳定以后就会集成到RHEL中。
Linux系统的应用场景
- 服务器领域
- 桌面系统领域(Ubuntu)
- 嵌入式设备(手机、平板、工业机器人、汽车电子、航空航天、家用电器等)
- 嵌入式操作系统(Android、HarmonyOS)
- 超级计算机(神威天湖之光、天河二号、IBM Sequoia)
- 云计算领域
- 大数据领域
扩展:大数据杀熟。
二、Linux安装
基于VMware虚拟机安装CentOS7.9
1. VMware下载
VMware Workstation Pro下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html
vm16安装成功后检查一下的网卡,看看是否存在vm1与vm8这两张网卡,缺少这两张网卡任意一张以后要不就是不能够与windows通讯,要不就是不能够上外网 。(解决办法: 卸载重装vm,如果还不行,换vm的版本)
2. CentOS7.9下载
CentOS官网地址:http://www.centos.org
CentOS7.9阿里云镜像的下载地址:http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/
- CentOS-7-x86_64-Minimal-2009.iso 最小安装版(建议有经验的人用,比如 Linux运维)
- CentOS-7-x86_64-Everything-2009.iso 完整版(建议没有经验的人使用)
- CentOS-7-x86_64-DVD-2009.iso 标准版光盘安装 (推荐使用)
3. 使用VMWare创建虚拟机
1、创建新的虚拟机
2、选择配置类型
3、安装客户机操作系统
4、选择客户机操作系统
5、设置虚拟机名称和安装路径
6、指定磁盘容量
7、自定义硬件
8、指定系统安装的镜像
9、完成虚拟机的创建
4. 安装CentOS7.9
1、启动虚拟机
2、安装CentOS7
3、选择安装系统的语言
4、设置日期和时间
5、选择自动配置分区
6、 软件选择"基本网页服务器",(因为也不需要用桌面,基于SSH客户端连接)
或者选择 [基础设施服务器]
7、配置网卡
8、点击开始安装
9、设置Root(超级用户)密码
10、等待系统组件安装完成以后点击重启
5. VMWare快照和克隆的使用
5.1 VMWare快照的使用
拍照以后关机,然后VMware会自动保存快照,之后如果系统崩了可以通过节点来恢复系统。
5.2 VMWare克隆虚拟机
注意:关机状态下才能克隆
克隆方式:完整克隆和链接克隆都可以,看个人喜好,如果想给别人用或搭集群创建完整克隆即可。
5.3 SSH远程登录
如果是运维人员不能整天都在听服务器睡觉,我们可以通过SSH远程访问虚拟机(端口号:22)。
常用的SSH客户端工具如下:
- Xshell
- SecureCRT(挺古老的SSH客户端软件)
- MobaXterm
- FindShell
我们这里以MobaXterm为例远程访问虚拟机:
5.4 配置静态ip地址
我们安装的操作系统一般默认都是动态获取ip地址(dhcp), 这样ip地址会经常发生变化 , 如果我们在这台电脑上安装了MySQL数据库,那岂不是每次启动后都得去查看它的ip地址然后再去连接 ,这样就有点麻烦, 所以我们希望他的ip是不变的 ,这时候就需要看看如何去配置静态ip地址(ip地址是固定)。
DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围(3~254),客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。
操作步骤如下:
1、查看当前虚拟机网段或者网关(记住这个网关,后面使用)
子网ip:192.168.203.0(特殊的ip有: .0、.1、.255,我们给虚拟机分配ip时避免使用这些ip)
子网掩码:255.255.255.0
2、使用 ip addr
或者 ifconfig
查看要修改的网卡:
ip地址:192.168.203.128
3、使用Xshell通过ip远程连接虚拟机。
ssh 192.168.203.128
--- 输入用户名、密码即可。
4、使用find命令查找ens33网卡文件位置。
find / -name *ens33* #全盘查找
/etc/sysconfig/network-scripts/ifcfg-ens33
5、使用vim/vi编辑器,修改ens33网卡配置。(BOOTPROTO改成静态获取,配置静态ip、子网掩码、网关、dns服务器)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
按 i 从命名模式进入插入模式,修改及添加信息如下:
BOOTPROTO=static
IPADDR=192.168.xxx.123 # 静态ip地址
GATEWAY=192.168.xxx.2 # 网关
NETMASK=255.255.255.0 #子网掩码
DNS1=8.8.8.8 #dns服务器
DNS2=114.114.114.114 #dns服务器
编辑完成后,按esc键,从插入模式退回命令模式,然后shift+zz 保存退出即可。(或者:wq)
扩展内容:
- IPADDR:配置你想用的静态ip,只要这个ip在某区段中的没有被占用就能使用,我们的ip地址只修改最后两位即可。
- 最后一位取值范围为:3~254。(xxx.1或xxx.2给网关用)。
- 倒数第二位是网段地址,需要自己查看电脑在那个网段中,修改这个网段即可。
- NETMASK:子网掩码一般使用255.255.255.0。
- GATEWAY:网关,如192.168.203.2。(桥接、NAT)
- DNS服务器:作用是将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
- Google:8.8.8.8、8.8.4.4。
- 阿里:223.5.5.5、223.6.6.6。
- 老牌的114DNS,全国三网通用高速,纯净无劫持:114.114.114.144、114.114.115.115。
6、重启网卡服务
systemctl restart network
重启网卡服务后Xshell就断开连接了,然后我们在虚拟机上查看ip地址,看看是否修改成功。
7、查看是否能访问外网
ping www.baidu.com
扩展:ipv4地址没有显示的解决方案
-
方案1:进入虚拟机之后,开启network网卡,依次执行如下三条命令
-
systemctl stop NetworkManager
-
systemctl disable NetworkManager
-
systemctl start network
-
-
方案2:打开vmware的虚拟网络编辑器,选中vmnet8网卡,还原默认设置,就能够显示了。
三、Linux目录结构
在Linux系统中,也是存在目录的概念的,但是Linux的目录结构和Windows的目录结构是存在比较多的差异的 在Windows目录下,是一个一个的盘符(如 C盘、D盘、E盘等),目录是归属于某一个盘符的。Linux系统中的目录有以下特点:
/
是所有目录的顶点。(根目录)- 目录结构像一颗倒挂的树。
Linux和Windows的目录结构对比:
Linux的目录结构:
根目录下各个目录的作用及含义说明:
目录 | 含义 |
---|---|
/ | 根目录,整个文件系统的起始点 |
/bin | 存放二进制可执行文件 如常用的命令(ls、cp、rm等) |
/boot | 包含启动Linux系统所需的文件,如内核和引导加载程序 |
/dev | 设备文件目录,包含与硬件设备和外部设备的连接 |
/etc | 存放系统配置文件, 比如:安装完毕jdk,安装maven、配置环境变量 |
/home | 用户的主目录,存放用户的个人资料的,每个用户都有一个以用户名命名的子目录。。比如:linux是一个多用户的操作系统,创建了zhangsan用户,那么在home目录里面有zhangsan文件夹。 |
/lib | 存放程序运行所需的共享库和内核模块 |
/opt | 用于安装第三方软件的目录,通常将软件包安装到/opt/目录下。 |
/root | 超级用户(root)的主目录。 |
/sbin | 存放系统管理员使用的系统管理命令 |
/tmp | 临时目录,用于存放临时文件。 |
/usr | 存放用户程序和文件的目录,类似于Windows系统中的Program Files目录。 |
/var | 存放运行时需要改变数据的文件,如日志文件、数据库文件等。 |
/mnt | 临时挂载目录,用于挂载其他文件系统或网络共享。 |
常用目录:
- etc,存放系统的配置文件,比如:安装jdk、maven都需要配置系统的环境变量。
- home,用户的主目录, 比如:每创建一个用户,都会在该目录有对应的用户的文件夹。
- root,超级管理员的用户主目录。
- usr,以后我们安装软件都存储在该目录中。
四、Linux目录管理
目录通俗来讲就是文件夹的意思;
Linux系统的哲学思想:一切皆文件,目录也是文件,即目录文件;
1. pwd命令
pwd命令是显示当前目录的绝对路径。
[root@baidou987 ~]# pwd #查看root用户登录之后的家目录
/root
[baidou@baidou987 ~]$ pwd #查看普通用户登录之后的家目录
/home/baidou
-
[baidou@baidou987 ~]$ 表示命令提示符,$表示普通用户 ,#表示管理员
-
baidou表示用户
-
baidou987 表示主机名
家目录概述:
- 家目录就是用户登录之后所在的目录;
- 例如 root用户登录之后的家目录就是
/root
; - 普通用户登录之后的家目录是
/home/{username}
,如 /home/baidou;
2. cd命令
Linux系统的目录结构是单根结构,使用/表示根目录,没有C盘、D盘的概念。
cd命令用来切换目录:
- cd … 返回上一级目录
- cd xxx 切换到xxx目录里
- cd / 切换到根目录
- cd - 切换到上一个目录
- cd ~ 切换到家目录,光输入cd也是回家。
- cd /xxx 切换到/xxx目录
3. ls命令
ls命令列出目录,用来显示当前目录下载的内容(文件和目录),而且该命令可以结合选项和参数使用,实现以不同的方式显示目录内容。
语法格式如下:
- ls [选项] [文件] #[] 表示可选项
常用参数如下:
参数 | 描述 |
---|---|
-a | 显示所有文件及目录 (包括以"."开头的隐藏文件) |
-l | 使用长格式列出文件及目录信息 |
-r | 将文件以相反次序显示(默认依英文字母次序) |
-t | 根据最后的修改时间排序 |
-A | 同 -a ,但不列出 “.” (当前目录) 及 “…” (父目录) |
-S | 根据文件大小排序 |
-R | 递归列出所有子目录 |
-h | 带单位显示文件大小 |
[root@baidou987 ~]# ls #查看root用户的家目录下文件列表(不包含隐藏文件)
anaconda-ks.cfg 公共 视频 文档 音乐
initial-setup-ks.cfg 模板 图片 下载 桌面
在Linux中以.
开头的文件表示隐藏文件,例如 .bash_profile
,它等价于Windows中的环境变量配置。
[root@baidou987 ~]# ls -a #查看root用户的家目录下文件列表(包含隐藏文件)
. .bash_history .bash_profile .cache .cshrc .mongorc.js .tcshrc
.. .bash_logout .bashrc .config .dbshell .ssh .viminfo
Linux系统文件详细信息说明:
第一个字符表示文件类型:
- [d]:目录
- [-]:普通文件
- [l]:连接档
- [b]:设备文件中可供存储的接口设备
- [c]:设备文件中串行接口设备
后九个字符每三个为一组:
- 第一组:文件所有人的权限;
- 第二组:同组群对此文件的权限;
- 第三组:其他用户对此文件的权限;
![img](Linux.assets/295207-20191121152227991-1844645215.png)
[root@baidou987 ~]# ls -l #查看root用户的家目录下文件列表的详细信息,文件大小以字节显示
总用量 8
-rw-------. 1 root root 1849 4月 25 19:51 anaconda-ks.cfg
-rw-r--r--. 1 root root 1897 4月 26 07:23 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 4月 26 08:35 公共
drwxr-xr-x. 2 root root 6 4月 26 08:35 模板
drwxr-xr-x. 2 root root 6 4月 26 08:35 视频
drwxr-xr-x. 2 root root 6 4月 26 08:35 图片
drwxr-xr-x. 2 root root 6 4月 26 08:35 文档
drwxr-xr-x. 2 root root 6 4月 26 08:35 下载
drwxr-xr-x. 2 root root 6 4月 26 08:35 音乐
drwxr-xr-x. 2 root root 6 4月 26 08:35 桌面
[root@baidou987 ~]# ls -lh #查看root用户的家目录下文件列表的详细信息,友好的方式显示文件大小
总用量 8.0K
-rw-------. 1 root root 1.9K 4月 25 19:51 anaconda-ks.cfg
-rw-r--r--. 1 root root 1.9K 4月 26 07:23 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 4月 26 08:35 公共
drwxr-xr-x. 2 root root 6 4月 26 08:35 模板
drwxr-xr-x. 2 root root 6 4月 26 08:35 视频
drwxr-xr-x. 2 root root 6 4月 26 08:35 图片
drwxr-xr-x. 2 root root 6 4月 26 08:35 文档
drwxr-xr-x. 2 root root 6 4月 26 08:35 下载
drwxr-xr-x. 2 root root 6 4月 26 08:35 音乐
drwxr-xr-x. 2 root root 6 4月 26 08:35 桌面
[root@baidou987 ~]# ll #等价与1s -l
总用量 8
-rw-------. 1 root root 1849 4月 25 19:51 anaconda-ks.cfg
-rw-r--r--. 1 root root 1897 4月 26 07:23 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 4月 26 08:35 公共
drwxr-xr-x. 2 root root 6 4月 26 08:35 模板
drwxr-xr-x. 2 root root 6 4月 26 08:35 视频
drwxr-xr-x. 2 root root 6 4月 26 08:35 图片
drwxr-xr-x. 2 root root 6 4月 26 08:35 文档
drwxr-xr-x. 2 root root 6 4月 26 08:35 下载
drwxr-xr-x. 2 root root 6 4月 26 08:35 音乐
drwxr-xr-x. 2 root root 6 4月 26 08:35 桌面
[root@baidou987 ~]# ls -la #显示root用户的家目录下文件列表的详细信息(包含隐藏文件) #简便写法ll -a
总用量 52
dr-xr-x---. 14 root root 4096 4月 28 14:02 .
dr-xr-xr-x. 17 root root 224 4月 25 19:50 ..
-rw-------. 1 root root 1849 4月 25 19:51 anaconda-ks.cfg
-rw-------. 1 root root 33 4月 26 08:39 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
drwx------. 13 root root 277 4月 26 08:36 .cache
drwxr-xr-x. 14 root root 4096 4月 26 08:36 .config
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
drwx------. 3 root root 25 4月 25 20:12 .dbus
-rw-------. 1 root root 16 4月 26 08:35 .esd_auth
-rw-------. 1 root root 310 4月 26 08:35 .ICEauthority
-rw-r--r--. 1 root root 1897 4月 26 07:23 initial-setup-ks.cfg
drwx------. 3 root root 19 4月 26 08:35 .local
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-------. 1 root root 55 4月 28 14:02 .Xauthority
drwxr-xr-x. 2 root root 6 4月 26 08:35 公共
drwxr-xr-x. 2 root root 6 4月 26 08:35 模板
drwxr-xr-x. 2 root root 6 4月 26 08:35 视频
drwxr-xr-x. 2 root root 6 4月 26 08:35 图片
drwxr-xr-x. 2 root root 6 4月 26 08:35 文档
drwxr-xr-x. 2 root root 6 4月 26 08:35 下载
drwxr-xr-x. 2 root root 6 4月 26 08:35 音乐
drwxr-xr-x. 2 root root 6 4月 26 08:35 桌面
[root@baidou987 ~]# ls -lah #显示root用户的家目录下文件列表的详细信息,文件大小以单位展示 #简便写法 ll-ah
总用量 52K
dr-xr-x---. 14 root root 4.0K 4月 28 14:02 .
dr-xr-xr-x. 17 root root 224 4月 25 19:50 ..
-rw-------. 1 root root 1.9K 4月 25 19:51 anaconda-ks.cfg
-rw-------. 1 root root 33 4月 26 08:39 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
drwx------. 13 root root 277 4月 26 08:36 .cache
drwxr-xr-x. 14 root root 4.0K 4月 26 08:36 .config
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
drwx------. 3 root root 25 4月 25 20:12 .dbus
-rw-------. 1 root root 16 4月 26 08:35 .esd_auth
-rw-------. 1 root root 310 4月 26 08:35 .ICEauthority
-rw-r--r--. 1 root root 1.9K 4月 26 07:23 initial-setup-ks.cfg
drwx------. 3 root root 19 4月 26 08:35 .local
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-------. 1 root root 55 4月 28 14:02 .Xauthority
drwxr-xr-x. 2 root root 6 4月 26 08:35 公共
drwxr-xr-x. 2 root root 6 4月 26 08:35 模板
drwxr-xr-x. 2 root root 6 4月 26 08:35 视频
drwxr-xr-x. 2 root root 6 4月 26 08:35 图片
drwxr-xr-x. 2 root root 6 4月 26 08:35 文档
drwxr-xr-x. 2 root root 6 4月 26 08:35 下载
drwxr-xr-x. 2 root root 6 4月 26 08:35 音乐
drwxr-xr-x. 2 root root 6 4月 26 08:35 桌面
[root@baidou987 ~]# ls / #查看根目录下的文件列表
bin data etc lib log media opt qcloud_init run srv tmp var
boot dev home lib64 lost+found mnt proc root sbin sys usr
[root@baidou987 ~]# ls -ltr s* #查看当前工作目录下所有名称是 “s” 开头的文件
[root@baidou987 ~]# ls -lR /bin #查看/bin 目录下文件列表的详细信息
lrwxrwxrwx. 1 root root 7 4月 25 19:34 /bin -> usr/bin
[root@baidou987 ~]# ls -AS #查看当前工作目录下文件列表并以文件的大小进行排序
4. mkdir和rmdir命令
mkdir命令
mkdir用于创建目录的:
mkdir aaa
,在当前目录下创建aaa目录。mkdir -p /aa/bb
,在aa目录下创bb目录 。(创建多级目录)
[root@baidou987 ~]# mkdir java # 在当前目录下创建一个java目录
[root@baidou987 ~]# ls
anaconda-ks.cfg java 模板 图片 下载 桌面
initial-setup-ks.cfg 公共 视频 文档 音乐
[root@baidou987 ~]# mkdir -p java/java8 java/java11 # 在java下创建多级子目录
[root@baidou987 ~]# ls
anaconda-ks.cfg java 模板 图片 下载 桌面
initial-setup-ks.cfg 公共 视频 文档 音乐
[root@baidou987 ~]# ls java #查看java目录下的文件
java11 java8
rmdir命令
rmdir用来删除空目录:
用法:rmdir 目录名
,删除空目录。
rmdir test
,删除test空目录。rmdir *java
: 删除当前目录下以java开头的目录。rmdir java*
: 删除当前目录下以java结尾的目录。
5. du : 查看文件或目录的大小
- du -sh
五、Linux文件管理
每天一个linux命令目录(博客园):https://www.cnblogs.com/peida/archive/2012/12/05/2803591.html
1. touch命令
touch命令用来创建文件的。(空文件)
用法1: 创建一个文件
[root@baidou987 /]# mkdir data
[root@baidou987 /]# cd /data
[root@baidou987 data]# touch java.txt
[root@baidou987 data]# ll
总用量 0
-rw-r--r--. 1 root root 0 4月 28 15:19 java.txt
用法2: 创建多个文件 (文件名与文件名用空格隔开)
[root@baidou987 data]# touch c.txt py.txt html.txt
[root@baidou987 data]# ll
总用量 0
-rw-r--r--. 1 root root 0 4月 28 15:22 c.txt
-rw-r--r--. 1 root root 0 4月 28 15:22 html.txt
-rw-r--r--. 1 root root 0 4月 28 15:19 java.txt
-rw-r--r--. 1 root root 0 4月 28 15:22 py.txt
另外一种创建文件的方式:
[root@baidou987 data]# >js.txt
[root@baidou987 data]# ll
总用量 0
-rw-r--r--. 1 root root 0 4月 28 15:22 c.txt
-rw-r--r--. 1 root root 0 4月 28 15:22 html.txt
-rw-r--r--. 1 root root 0 4月 28 15:19 java.txt
-rw-r--r--. 1 root root 0 4月 28 15:25 js.txt
-rw-r--r--. 1 root root 0 4月 28 15:22 py.txt
2. mv命令
mv命令用于移动文件(相当于Windows剪切操作)或改名操作。
常用参数:
-i | 若存在同名文件,则向用户询问是否覆盖 |
---|---|
-f | 覆盖已有文件时,不进行任何提示 |
-b | 当文件存在时,覆盖前为其创建一个备份 |
-u | 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作 |
mv命令的几种应用场景:
- mv 文件 目录 ,将文件移动到指定目录中。
- mv 文件 目录/文件名 ,将文件移动到指定目录中并且重命名。
- mv 文件 文件名,将文件重命名。
- mv 目录 指定目录,将目录移动到指定的目录(前提是被指定目录已存在,若不存在则把当前目录改名)。
3. cp命令
cp命令用于复制文件或目录。(通常是为了文件备份)
语法格式:cp [参数] [文件]
常用参数:
参数 | 描述 |
---|---|
-f | 若目标文件已存在,则会直接覆盖原文件 |
-i | 若目标文件已存在,则会询问是否覆盖 |
-p | 保留源文件或目录的所有属性 |
-r | 递归复制文件和目录 (常用),例如 cp -r jdk8/ /root |
-d | 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录 |
-l | 对源文件建立硬连接,而非复制文件 |
-s | 对源文件建立符号连接,而非复制文件 |
-b | 覆盖已存在的文件目标前将目标文件备份 |
-v | 详细显示cp命令执行的操作过程 |
-a | 等价于 “dpr” 选项 |
示例:
cp *.txt /temp # 将以txt为后缀名的文件 拷贝到temp目录中
cp Hello.java Hello1.java # 拷贝Hello.java文件并重名为Hello1.java
cp -r java8/ /root # 以递归的方式把java8目录复制到root用户的家目录中
4. cat、more、less、tail命令
cat、more、less、tail这四个命令都是用于查看文件内容的,虽然都是查看文件内容但是细节方面上不太一样。
cat命令
cat 命令适合查看内容较少的、纯文本的文件。
用法:cat [参数] 文件
常用参数:
-n | 显示行数(空行也编号) |
---|---|
-s | 显示行数(多个空行算一个编号) |
-b | 显示行数(空行不编号) |
-E | 每行结束处显示$符号 |
-T | 将TAB字符显示为 ^I符号 |
-v | 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外 |
-e | 等价于”-vE”组合 |
-t | 等价于”-vT”组合 |
-A | 等价于 -vET组合 |
–help | 显示帮助信息 |
–version | 显示版本信息 |
示例:使用cat命令查看密码文件
[root@baidou987 ~]# cat /etc/shadow # 使用cat命令查看密码文件的内容
root:$6$xsggXrTV8yfNXDd.$C2a4ydqD2GxI5LerXmyIuuYCQzIJP3QUSrEPqROdcg7eioNqiFKfTcIVHmRa1HFEMzD3qQRcRWzC0xTLnNcEy/::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
lp:*:18353:0:99999:7:::
sync:*:18353:0:99999:7:::
shutdown:*:18353:0:99999:7:::
halt:*:18353:0:99999:7:::
mail:*:18353:0:99999:7:::
operator:*:18353:0:99999:7:::
games:*:18353:0:99999:7:::
ftp:*:18353:0:99999:7:::
nobody:*:18353:0:99999:7:::
systemd-network:!!:19107::::::
dbus:!!:19107::::::
polkitd:!!:19107::::::
libstoragemgmt:!!:19107::::::
colord:!!:19107::::::
rpc:!!:19107:0:99999:7:::
saned:!!:19107::::::
gluster:!!:19107::::::
saslauth:!!:19107::::::
abrt:!!:19107::::::
setroubleshoot:!!:19107::::::
rtkit:!!:19107::::::
pulse:!!:19107::::::
radvd:!!:19107::::::
chrony:!!:19107::::::
unbound:!!:19107::::::
qemu:!!:19107::::::
tss:!!:19107::::::
sssd:!!:19107::::::
usbmuxd:!!:19107::::::
geoclue:!!:19107::::::
ntp:!!:19107::::::
gdm:!!:19107::::::
rpcuser:!!:19107::::::
nfsnobody:!!:19107::::::
gnome-initial-setup:!!:19107::::::
sshd:!!:19107::::::
avahi:!!:19107::::::
postfix:!!:19107::::::
tcpdump:!!:19107::::::
baidou:$6$z/jsYKOWQSq..nxH$UEJozjLbpCax3bl/jStYfg1AtU5noM5Sesy6yq0NIJ49Q21J/ELNUVNXtCiABv7jg5K/jDJlcCpC1c7G2uA7t.::0:99999:7:::
示例:使用cat命令查看密码文件并显示行数
[root@baidou987 ~]# cat -n /etc/shadow
1 root:$6$xsggXrTV8yfNXDd.$C2a4ydqD2GxI5LerXmyIuuYCQzIJP3QUSrEPqROdcg7eioNqiFKfTcIVHmRa1HFEMzD3qQRcRWzC0xTLnNcEy/::0:99999:7:::
2 bin:*:18353:0:99999:7:::
3 daemon:*:18353:0:99999:7:::
4 adm:*:18353:0:99999:7:::
5 lp:*:18353:0:99999:7:::
6 sync:*:18353:0:99999:7:::
7 shutdown:*:18353:0:99999:7:::
8 halt:*:18353:0:99999:7:::
9 mail:*:18353:0:99999:7:::
10 operator:*:18353:0:99999:7:::
11 games:*:18353:0:99999:7:::
12 ftp:*:18353:0:99999:7:::
13 nobody:*:18353:0:99999:7:::
14 systemd-network:!!:19107::::::
15 dbus:!!:19107::::::
16 polkitd:!!:19107::::::
17 libstoragemgmt:!!:19107::::::
18 colord:!!:19107::::::
19 rpc:!!:19107:0:99999:7:::
20 saned:!!:19107::::::
21 gluster:!!:19107::::::
22 saslauth:!!:19107::::::
23 abrt:!!:19107::::::
24 setroubleshoot:!!:19107::::::
25 rtkit:!!:19107::::::
26 pulse:!!:19107::::::
27 radvd:!!:19107::::::
28 chrony:!!:19107::::::
29 unbound:!!:19107::::::
30 qemu:!!:19107::::::
31 tss:!!:19107::::::
32 sssd:!!:19107::::::
33 usbmuxd:!!:19107::::::
34 geoclue:!!:19107::::::
35 ntp:!!:19107::::::
36 gdm:!!:19107::::::
37 rpcuser:!!:19107::::::
38 nfsnobody:!!:19107::::::
39 gnome-initial-setup:!!:19107::::::
40 sshd:!!:19107::::::
41 avahi:!!:19107::::::
42 postfix:!!:19107::::::
43 tcpdump:!!:19107::::::
44 baidou:$6$z/jsYKOWQSq..nxH$UEJozjLbpCax3bl/jStYfg1AtU5noM5Sesy6yq0NIJ49Q21J/ELNUVNXtCiABv7jg5K/jDJlcCpC1c7G2uA7t.::0:99999:7:::
more命令
more 命令用于查看大文件,当查看大文件的时候可以分页显示,能查看文件的百分比,并且支持在显示时定位关键字。
用法:more [参数] [文件]
常用参数:
-num | 指定每屏显示的行数 |
---|---|
-l | more在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性 |
-f | 计算实际的行数,而非自动换行的行数 |
-p | 先清除屏幕再显示文本文件的剩余内容 |
-c | 与-p相似,不滚屏,先显示内容再清除旧内容 |
-s | 多个空行压缩成一行显示 |
-u | 禁止下划线 |
+/pattern | 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示 |
+num | 从第 num 行开始显示 |
more常用按键:
- 回车键(Enter):向下n行,需要定义,默认向下滚动一行。
- 空格键:向下滚动一屏。
- b键:返回上一屏。
- Ctrl+C 或 q键:退出more命令。
- 斜线符\:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
- h键:显示帮助屏。
- = : 输出当前的行号。
- :f :输出文件名和当前的行号。
- v:调用vi编辑器。
- !:调用Shell,并执行命令。
less命令
用less命令显示文件时,PageUp键向上翻页,PageDown键向下翻页,要退出less程序,应按Q键或Ctrl+C即可。
less的作用与more十分相似,不同点为less命令允许用户向前或向后浏览文件,而more命令只能向前浏览 。
用法: less [参数] [文件]
常用参数:
-b | 置缓冲区的大小 |
---|---|
-e | 当文件显示结束后,自动离开 |
-f | 强迫打开特殊文件,例如外围设备代号、目录和二进制文件 |
-g | 只标志最后搜索的关键词 |
-i | 忽略搜索时的大小写 |
-m | 显示类似more命令的百分比 |
-N | 显示每行的行号 |
-o | 将less 输出的内容在指定文件中保存起来 |
-Q | 不使用警告音 |
-s | 显示连续空行为一行 |
-S | 在单行显示较长的内容,而不换行显示 |
-x | 将TAB字符显示为指定个数的空格字符 |
less常用按键:
- b 向后翻一页
- d 向后翻半页
- h 显示帮助界面
- Q 退出less 命令
- u 向前滚动半页
- y 向前滚动一行
- 空格键 滚动一页
- 回车键 滚动一行
tail命令 (重点)
tail 命令用于从文件尾部查看文件内容,默认显示后10行;
tail -f filename 会把filename里最尾部的内容显示在屏幕上,并且不断刷新,用于查看系统日志。
语法格式:tail [参数] 文件
常用参数:
- -n 输出文件的尾部n行内容。
- -f 持续显示文件最新追加的内容。
示例:循环查看文件内容
# 生成动态日志文件(会话窗口1)
[root@baidou987 test]# ping baidu.com > info.txt
# 实时查看日志信息(会话窗口2)
[root@baidou987 ~]# tail -f /test/info.txt
示例:查看指定文件的后20行内容
[root@baidou987 ~]# tail -n 20 /test/User.java
5. rm命令
rm 命令用于删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。
但是删除操作需要谨慎(生产环境和测试环境建议备份防止误删)。
用法:rm [参数] [文件]
常用参数:
-f | 强制删除(不询问) |
---|---|
-i | 删除前会询问用户是否操作,y同意删除、n取消删除 |
-r | 递归删除 |
-v | 显示指令的详细执行过程 |
示例:删库跑路👻
rm -rf * # 清空当前目录下的所有的文件
rm -rf /* # 清空系统中所有的文件
rm和rmdir的区别:rmdir只能删除空目录,rm功能更加强大。
6. find、grep命令
find、grep都是查找命令,find用于查找指定文件、grep用户查找指定文件的内容。
find命令
find命令 在指定目录下查找文件。(支持正则)
语法格式:find 路径 -option 查找的文件。
- -name,按照名字查找。
示例:在当前目录及其子目录下查找以.java
结尾的文件。
find . –name *.java
示例:查找/etc目录下的ens33网卡文件
find /etc -name *ens33*
示例:从根目下查找profile文件 (全盘搜索)
find / -name profile
grep
grep命令 从指定文件中查找指定的文本内容。
语法格式:grep 待查找内容 fileName。
- -n,显示内容出现的行数。
- -i,忽略大小写。(ignore)
示例:在ifcfg-ens33文件中查找dhcp
[root@localhost network-scripts]# grep dhcp ifcfg-ens33
BOOTPROTO=dhcp
六、Linux文件编辑和打包压缩
1. Linux文件编辑
vi编辑器是Linux系统字符界面下最常用的文本编辑器(类似window中的记事本),vim是vi的增强版(vim支持颜色显示)。
vim安装:(我们系统自带vim编辑器,别的发行版有的需要手动安装)
yum install vim
---安装过程会提示是否继续,输入y然后回车即可。
vi/vim编辑器有3种工作模式:命令模式、插入模式、末行模式。
命令模式常用操作:(命令模式,不可编辑内容,可以对行(line)进行操作)
- nk ,使光标向上移动n行
- nj ,使光标向下移动n行
- H ,使光标移动到屏幕的顶部
- M , 使光标移动到屏幕的中间
- L ,使光标移动到屏幕的底部
- $ , 使光标移动到光标所在的行尾
- 0 , 使光标移动到光标所在的行首
- ctrl+b ,使光标向上移动一页
- ctrl+f ,使光标向下移动一页
- dd ,删除光标所在行
- ndd,删除当前光标所在行及之后的n行数据。(n代表数字)
- d$ ,删除光标到行尾的内容(包含光标所在处的字符)
- yy , 复制当前行
- p , 粘贴
- u , 撤销上一个操作
- U , 取消所有操作
- ctrl + g ,列出光标所在行号。
- shift+zz , 保存并退出。
- gg,定位到文本内容的第一行。
- G,定位到文本内容的最后一行。
进入插入模式的命令:
命令 | 功能 |
---|---|
i | 从光标当前所在位置之前开始插入 |
a | 从光标当前所在位置之后开始插入 |
I | 在光标当前所行的行首插入 |
A | 在光标当前所行的行尾插入 |
o | 在光标所在行的下面新开一行插入 |
O | 在光标所在行的上面新开一行插入 |
s | 删除光标位置的一个字符,然后进入插入模式 |
S | 删除光标所在行,然后进入插入模式 |
末行模式常用命令:
- :/str/ 查找字符
- :!command 运行shell
- :w 保存文件
- :wq 保存退出
- :q 退出
- :q!强制退出
- :set number (简写set nu) , 显示行号 (只对本次有效,)
- set nonumber (简写 set nonu),取消行号
- :set readonly 设置文件只读状态
VIM键盘图:
2. Linux文件打包和解包
为什么要文件打包?
在日常办公中我们通常会把许多文件放到一个文件夹(目录)中,弊端就是不利于文件的传输和复制。
我们可以将多个文件打成一个文件,即tar包,此时虽然是一个文件,但是文件的体积没有压缩,因此文件的体积不会发生变化。
文件压缩也是将多个文件压缩成一个文件,即gz包,此时文件的体积会变小,因为会对多个文件进行处理。
Linux系统文件打包解包和压缩解压缩都是使用tar命令来搞定的。
tar命令的打包解包
打包命令:tar -cvf 文件/目录
- -c 创建新文件 (必选)
- -v 显示操作过程 (可选)
- -f 文件名由命令行设置(必选)
示例:将/tmp目录下以*.log为后缀名的文件进行打包(包名为test.tar),并移动到/test目录中
[root@baidou987 tmp]# tar -cvf test.tar *.log # 将日志文件打成一个tar包
anaconda.log
ifcfg.log
packaging.log
program.log
sensitive-info.log
storage.log
yum.log
[root@baidou987 tmp]# mkdir /test # 创建目录
[root@baidou987 tmp]# mv test.tar /test # 移动文件
解包命令:tar -xvf 文件
- -x 取出文件内容 (必选)
- -v 显示操作过程 (可选)
- -f 文件名由命令行设置(必选)
示例:将/test目录中的test.tar解包
[root@baidou987 test]# tar -xvf test.tar
anaconda.log
ifcfg.log
packaging.log
program.log
sensitive-info.log
storage.log
yum.log
[root@baidou987 test]# ls -lh
总用量 20K
-rw-r--r--. 1 root root 1.2K 4月 26 07:23 anaconda.log
-rw-r--r--. 1 root root 415 4月 26 07:21 ifcfg.log
-rw-r--r--. 1 root root 0 4月 25 20:12 packaging.log
-rw-r--r--. 1 root root 0 4月 25 20:12 program.log
-rw-r--r--. 1 root root 0 4月 25 20:12 sensitive-info.log
-rw-r--r--. 1 root root 0 4月 25 20:12 storage.log
-rw-r--r--. 1 root root 10K 5月 4 10:23 test.tar
-rw-------. 1 root root 0 4月 25 19:33 yum.log
3. Linux文件压缩和解压缩
压缩:tar -zcvf 文件 /目录
- -z 加上了就会压缩,没有就是打包
- -x 取出文件内容 (必选)
- -v 显示操作过程 (可选)
- -f 文件名由命令行设置(必选)
解压缩:tar -zxvf 文件
- -z 加上了就会解压缩,没有就是解包
- -x 取出文件内容 (必选)
- -v 显示操作过程 (可选)
- -f 文件名由命令行设置(必选)
- -C 解压到指定目录
tar命令常用参数如下:
-A | 新增文件到以存在的备份文件 |
---|---|
-B | 设置区块大小 |
-c | 建立新的备份文件 |
-C <目录> | 仅压缩指定目录里的内容或解压缩到指定目录 |
-d | 记录文件的差别 |
-x | 从归档文件中提取文件 |
-t | 列出备份文件的内容 |
-z | 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz |
-Z | 通过compress指令处理备份文件 |
-f<备份文件> | 指定备份文件 |
-v | 显示指令执行过程 |
-r | 添加文件到已经压缩的文件 |
-u | 添加改变了和现有的文件到已经存在的压缩文件 |
-j | 通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2 |
-v | 显示操作过程 |
-l | 文件系统边界设置 |
-k | 保留原有文件不覆盖 |
-m | 保留文件不被覆盖 |
-w | 确认压缩文件的正确性 |
-p | 保留原来的文件权限与属性 |
-P | 使用文件名的绝对路径,不移除文件名称前的“/”号 |
-N <日期格式> | 只将较指定日期更新的文件保存到备份文件里 |
– -exclude=<范本样式> | 排除符合范本样式的文件 |
– -remove-files | 归档/压缩之后删除源文件 |
七、Linux进程管理
Linux是一个多任务的操作系统,系统上可以同时运行多个进程,正在执行的一个或多个相关的进程称为一个作业,用户可以同时运行多个作业,并在需要时可以在作业之间进行切换。
在Linux系统中进程有:交互式进程、批处理进程、守护进程。
- 交互式进程:是一个由shell启动并控制的进程,交互式进程即可以在前台,也可以在后台运行。
- 批处理进程:与终端无关,安排在指定时刻完成的一系列进程。
- 守护进程:在引导系统时启动,以执行即时的操作系统任务,比如 crond、rsyslogd、named等等。
1. 查看系统进程信息
ps命令(或者top命令)
ps -ef #系统的所有的进程都展示出来
ps -aux # 显示不带控制台终端的进程
ps命名参数:
- a:显示当前终端的所有进程信息。
- u:以用户的形式显示进程信息 。
- x:显示后台进程运行的参数。
- e: 显示所有进程。
- f :全格式。
- UID:用户ID。
- PID:进程ID。
2. 杀死线程
如果要关闭某个应用程序可以通过杀死线程的方式实现。
kill命令:
- 语法格式:kill 选项 进程号
- kill -9 进程号 (强制杀死)
- kill -2 进程号 (温和杀死)
示例:杀死编辑stu.txt文件的vim进程
kill -9 40003
查看进程树pstree
pstree [选项] ,可以更加直观的来看进程信息。
常用的选项:
-
p :显示进程的PID 。
-
u :显示进程的所属用户。
# 安装psmisc
yum -y install psmisc
--------------------------------------
pstree -pu
3. 管道符号
管道符的作用: 把上一个命令的结果提供给下一个命令去使用。
例如:查看vim进程,ps -ef | grep vim。
八、Linux防火墙配置
Linux系统为了安全考虑,防火墙默认是开启的,这就导致所有的端口对外都是不可访问的(远程连接SSH端口22除外)。
那么我们如何在Windows访问虚拟机Linux上的MySQL、Tomcat软件呢?
- 第一种方式:直接关闭防火墙,释放所有的端口,允许外界去访问全部的端口 , 方便省心,弊端不安全。
- 第二种方式:在防火墙上开放指定端口。(例如:tomcat8080、mysql3306)
防火墙类似于一个关卡检查人员,当你访问其他人的电脑,或者其他人访问你的电脑,都要进行拦截并进行处理,有的阻止,有的放行,有的转发。默认情况下防火墙在开机以后就自动启动了。
开发中,防火墙是必须有的,由运维人员维护的,运维人员一般不用系统自带的防火墙,都会使用专门的防火墙(配置策略)。
1. 防火墙服务相关命令 (firewalld)
操作防火墙服务相关命令如下:
- 开启防护墙:systemctl start firewalld
- 关闭防护墙:systemctl stop firewalld
- 开机自启动(默认状态):systemctl enable firewalld
- 关闭开机自启:systemctl disable firewalld
- 查看防火墙状态:systemctl status firewalld
centos7上对系统服务的操作命令如下:
- systemctl [start|stop|status|enable|disable|restart] 服务名称
- 例如 开启mysql服务器 systemctl start mysqld
示例:查看防火墙状态
systemctl status firewalld
示例:关闭防火墙状态
systemctl stop firewalld
示例:开启防火墙状态
systemctl start firewalld
2. 端口配置 (firewall-cmd)
centos7中默认使用的防火墙是firewalld,centos5和centos6中默认使用防火墙是iptables。
如果外网或内网的小伙伴要连接当前系统内的程序进行操作,需要在Linux系统开放指定程序端口号,否则无法访问。
防火墙端口管理操作命令:
-
开放xxx端口 :firewall-cmd --zone=public --add-port=xxx/tcp --permanent
-
更新(重载)防火墙规则:firewall-cmd --reload
-
查看开放端口:
- firewall-cmd --zone=public --query-port=xxx/tcp
- firewall-cmd --zone=public --list-ports
- firewall-cmd --list-all
-
删除开放端口:firewall-cmd --zone=public --remove-port=xxx/tcp --permanent
常用端口号:8080 tomcat、80 http协议、443 https协议、22 ssh远程连接(默认开启)、3306 mysql、6379 redis、27017 mongodb。
firewall-cmd命令参数详解:
--zone=public
:开放哪个网络,默认是public。- public,类似window中的公用网络。
- internal,类似window中的家庭网络。
--add-port=端口/tcp
:将指定端口号添加到防火墙中,对外是开放的。--remove-port=端口/tcp
:从防火墙的规则中删除端口号。--permanent
:永久添加规则。--list-all
:显示现有的规则,展示所有开放端口。--reload
:重新加载规则,让新加的端口号起作用,重启防火墙的服务 systemctl restart firewalld。
示例:开放8080端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
示例:更新防火墙规则,让开放的8080端口生效。
firewall-cmd --reload
示例:查看8080端口是否生效
firewall-cmd --zone=public --query-port=8080/tcp
示例:删除8080端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
日常开发中,要么把防火墙关掉,要么为指定软件开放端口号。
九、Linux权限控制
linux系统是一个多用户的操作系统,并且针对每一个用户,Linux会严格的控制操作权限。接下来,我们就需要介绍一下Linux系统的权限控制。
-
chmod(change mode,更改模式),chmod命令是控制用户对文件或者目录的权限的命令。
-
Linux中的权限分为三类 :读®、写(w)、执行(x)。
-
Linux文件权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
-
只有文件的所有者和超级用户可以修改文件或目录的权限。
-
要执行Shell脚本需要有对此脚本文件的执行权限(x),如果没有则不能执行。
Linux系统中权限描述如下:
示例:
chmod命令可以使用八进制数来指定权限(0 - 代表无 , 1 - 执行x , 2 - 写w , 4 - 读r):
值 | 权限 | rwx |
---|---|---|
7 | 读 + 写 + 执行 | rwx |
6 | 读 + 写 | rw- |
5 | 读 + 执行 | r-x |
4 | 只读 | r– |
3 | 写 + 执行 | -wx |
2 | 只写 | -w- |
1 | 只执行 | –x |
0 | 无 | — |
示例:
# 为所有用户授予读、写、执行权限
chmod 777 bootStart.sh
# 为文件拥有者授予读、写、执行权限,同组用户和其他用户授予读、执行权限
chmod 755 bootStart.sh
# 为文件拥有者授予写权限,同组用户授予执行权限,其他用户没有任何权限
chmod 210 bootStart.sh
-
三个数字分别代表不同用户的权限:(以755为例)
- 第1位表示文件拥有者的权限。(拥有者7,可读可写可执行)
- 第2位表示同组用户的权限。 (同组用户5,可读可执行)
- 第3位表示其他用户的权限。 (其他用户5,可读可执行)
也可以使用符号来设定权限:
语法格式: chmod [ugoa] [+-=] [rwx] dirname/filename
- u:拥有者
- g:所属群组
- o:其他人
- a:所有人
- +:添加权限
- -:移除权限
- =:设定权限
# 示例:为.bashrc文件的所有用户添加写权限。
chmod a+w .bashr
十、Linux软件安装
1. 软件安装方式
在Linux系统中,软件安装主要有四种安装方式:
- 二进制发布包安装:软件已经针对具体平台编译打包发布,只要解压,修改配置即可 。(如 JDK、Tomcat、Maven等)
- rpm安装:软件已经按照redhat的包管理规范进行打包,使用rpm命令进行安装,需要手动解决库依赖问题。
- yum安装:种在线软件安装方式,本质上还是rpm安装,自动下载安装包并安装,安装过程中自动解决库依赖问题(安装过程需要联网)。
- 源码编译安装:软件以源码工程的形式发布,需要自己编译打包。(如 Nginx、Redis等)
在Linux中可以使用wget命令下载网上的软件:(wget是Linux的下载工具)
wget url
# 示例 使用wget下载linux版本的jdk
wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
# 如果显示找不到这个wget命令,使用yum下载wget工具即可
yum -y install wget
2. 安装JDK
1、在根目录下创建一个soft目录,然后切换到这个soft目录。
mkdir /soft
cd /soft
2、使用wget命令,将jdk下载到soft目录。(当然用ftp工具上传到Linux也是可以的,哈哈我就偷懒啦)
wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
3、将jdk压缩包解压到/usr/local
目录下:(/usr/local用于存放安装的软件)
tar -xvf jdk-8u202-linux-x64.tar.gz -C /usr/local/
4、查看/usr/local下是否有jdk的解压目录
ll /usr/local
5、配置环境变量
[root@localhost ~]# vim /etc/profile # /etc/profile针对所有用户, ~/.bashrc针对当前用户的
# 将光标移动到底部G,然后按o另起一行,复制以下内容
export JAVA_HOME=/usr/local/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
# 最后按<ESC>键进入末行模式,输入:wq 保存退出(或者shift+zz保存退出)
6、将配置文件立即生效
source /etc/profile
7、验证JDK是否配置成功
java -version
javac -version
jps # 显示所有正在运行的java进程 (前面的数字数进程id)
3. 安装小猫咪Tomcat
Apache Tomcat 官网地址:https://tomcat.apache.org/
Apache Tomcat 下载地址:https://archive.apache.org/dist/tomcat/
Apache Tomcat 国内镜像下载地址:https://mirrors.cnnic.cn/apache/tomcat/
1、去官网找小猫 ,文件是tar.gz包,然后下载到/soft目录
wget --no-check-certificate https://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.5.84/bin/apache-tomcat-8.5.84.tar.gz
2、小猫解压到指定目录/usr/local下
tar -xvf apache-tomcat-8.5.84.tar.gz -C /usr/local/
3、进入/usr/local/apache-tomcat-8.5.84/bin目录,启动Tomcat:
启动方式1: ./startup.sh
启动方式2: sh startup.sh
4、将防火墙关掉(或者开放8080端口)
systemctl stop firewalld # 停止防火墙服务
systemctl disable firewalld # 不让他开机启动
5、在Windows上打开浏览器访问Linux的8080端口(http://ip:端口号)
6、停止tomcat
# 第一种方式: 在tomcat的bin目录下执行
sh shutdown.sh
./shutdown.sh
# 第二种方式: 查看tomcat进程id,然后kill -9 强制杀掉进程
注意:虽然上面两种方式都可以停止Tomcat服务,但是推荐使用第一种方式(./shutdown.sh或sh shutdown.sh)执行脚本来关闭tomcat服务,如果通过第一种方式停止不了tomcat了,我们就可以考虑使用第二种方式强制杀死进程。
4. 安装MySQL
RPM方式安装MySQL
**RPM:**全称为 Red-Hat Package Manager,RPM软件包管理器(相当于windows的软件管家),是红帽Linux用于管理和安装软件的工具。
rpm常用命令:
-
rpm -qa 查询
-
rpm -e --nodeps 卸载
-
rpm -ivh 安装
-
rpm -U 更新
1、卸载系统自带的mariadb数据库(MySQL的分支版本)
# 查询当前系统是否安装mariadb
rpm -qa | grep mariadb
# 卸载mariadb数据库
rpm -e --nodeps 软件名
如果不把它卸载掉,后面的rpm包是安装不成功的。
2、去官网下载 Linux版的MySQL5.7.25,下载到 /soft目录(下载地址:https://downloads.mysql.com/archives/community/)
cd /soft
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar
3、解压mysql到指定目录
mkdir mysql
tar -xvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar -C ./mysql
cd mysql
4、安装这6个rpm包
按照依赖顺序依次安装rpm包,依赖关系为common->libs->devel->libs-compat->client->server
rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm
注意:因为rpm安装方式,是不会自动处理依赖关系的,需要我们自己处理,所以对于上面的rpm包的安装顺序不能随意修改。
- 若安装过程中提示缺少net-tools依赖,使用yum安装下(yum install net-tools)
5、启动mysql服务
# 启动MySQL服务
systemctl start mysqld # 扩展命令 service mysqld start
# 查看MySQL服务状态
systemctl status mysqld # 扩展命令 service mysqld status
6、查看mysql默认生成的初始密码
对于rpm安装的mysql,在mysql第一次启动时,会自动帮我们生成root用户的访问密码,并且输出在mysql的日志文件 /var/log/mysqld.log中。
cat /var/log/mysqld.log | grep password
7、用这个临时密码登录MySQL服务器
mysql -uroot -pte.NkShFC2fq
8、修改root用户密码(设置最低位数、将密码安全等级调低)
# 在mysql命令窗口执行
# 1.设置密码长度最低位数
set global validate_password_length=4;
# 2.将密码安全等级调低
set global validate_password_policy=LOW;
# 3. 将root用户的密码设置为123456
set password = password('123456');
9、用修改后的密码登录MySQL服务器
mysql -uroot -p123456
ok,密码已经修改成功了。
10、设置root账户允许远程登录访问(在mysql命令窗口执行)
# 设置root账户允许远程登录访问
grant all on *.* to 'root'@'%' identified by '123456';
# 刷新权限
flush privileges;
- 在mysql上设置用户,且允许指定电脑使用此用户名密码(%表示任意电脑访问),且给用户设置所有操作指定数据库表的权限。
- grant all on 数据库名.表名 to ‘用户名’@‘主机名或ip’ identified by ‘密码’;
ok,已经可以远程访问linux上mysql啦🐳。
解决:远程连接还是无法访问题(关闭防火墙或者开放3306端口)
- 方式一:开放3306端口,操作步骤如下:
- 开放3306端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent
- 更新防火规则:firewall-cmd --reload
- 方式二:关闭防火墙,操作步骤如下:
- 关闭防火墙:systemctl stop firewalld
- 设置开机禁用防火墙:systemctl disable firewalld
- 查看防火墙状态:systemctl status firewalld
5. 安装Maven
1、下载maven到本地(https://dlcdn.apache.org/maven/maven-3/3.5.4/binaries/)
2、将maven压缩包上传到Linux服务器上的/soft目录
3、将maven压缩包解压到/usr/local目录下。
tar -xvf apache-maven-3.5.4-bin.tar.gz -C /usr/local/
4、把maven添加到环境变量中:
vim /etc/profile
# Maven环境
export MAVEN_HOME=/usr/local/apache-maven-3.5.4
export PATH=$MAVEN_HOME/bin:$PATH
# 让配置的环境变量立即生效
source /etc/profile
5、验证maven是否配置成功
mvn -v
6、修改maven的settings.xml配置文件(设置阿里云镜像和本地仓库)
cd /usr/local/apache-maven-3.5.4/conf
vim settings.xml
配置本地仓库:
<localRepository>/usr/local/repo</localRepository>
配置阿里云镜像:
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
:wq保存退出。
6. 安装Git
通过yum命令在线安装Git:
yum list git #列出git安装包
yum install git #使用yum在线安装git
git --version #查看本地git的版本
windows中git用户名密码处理:
控制面板- - -用户帐户- - -凭据管理器- - -windows凭证:
linux中git用户名密码处理:
1、清除保存的用户名和密码:git config --global --unset credential.helper
2、保存用户名和密码:git config --global credential.helper store
7. 安装1Panel
1Panel 是新一代的 Linux 服务器运维管理面板。
官网地址:https://1panel.cn/
# 安装
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
十一、Linux项目部署
1. 手动部署项目
1、将springboot项目打jar包
<!--父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!--springmvc的启步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<!--打完jar包之后的名字-->
<finalName>helloworld</finalName>
<plugins>
<!--打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--跳过单元测试-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
2、将jar包丢到我们的Linux上
3、启动SpringBoot程序
java -jar helloworld.jar
注意:如果端口被占用的话,SpringBoot程序是不能启动的,把之前的tomcat服务关掉即可。
4、测试访问: http://192.168.203.103:8080/hello
5、停止SpringBoot项目
我们可以通过ps或者jps指令,查看到系统的进程,然后强制杀掉即可。
扩展:后台运行项目
当前这个demo工程我们已经部署成功了,并且我们也可以访问项目了。但是这个工程目前是存在问题的,就是当前我们项目启动的这个窗口被霸屏占用了(前台运行),如果我们把这个窗口关闭掉(或ctrl+c),当前服务也就访问不到了。
要想让我们部署的项目进行后台运行,我们需要使用到Linux中的 nohup 命令(nohup :no hang up,不挂断),它可以不挂断地运行指定命令,退出终端不会影响程序的运行。
nohup命令语法格式:nohup Command [ Arg … ] [&]
-
参数说明:
-
Command:要执行的命令。
-
Arg:一些参数,可以指定输出文件。
-
&:让命令在后台执行,终端退出后命令仍旧执行。
-
-
示例:后台运行 java -jar 命令,并将日志输出到helloworld.log文件
nohup java -jar helloworld.jar &> helloworld.log &
如果直接使用 nohup java -jar helloworld.jar & 命令,他会自动生成hub.log,并将日志输出到该文件中。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z4zCxEeT-1673334997558)(Linux.assets/image-20230108203844703.png)]
如果是这样日志表示我们的项目就已经启动成功了。
- 上面那个命令简写:
nohup java -jar helloworld.jar > helloworld.log &
。 - 一个重定向符号
>
表示覆盖,如果>每次启动会先把原来的日志清空。 - 两个>号,即>>表示追加,例如:
nohup java -jar helloworld.jar >> helloworld.log &
。
2. 基于Shell脚本自动部署
前面介绍的项目部署是手动部署,也就是部署过程中的每一步操作都需要我们手动操作。接下来,我们再介绍一下项目的自动部署,来简化项目部署的操作。
操作步骤如下:
- 在Gitee上创建远程仓库,并将本地的项目代码推送到远程仓库中。
- 在Linux中安装Git,克隆代码。
- 在Linux中安装maven。
- 编写Shell脚本(拉取代码、编译、打包、启动)。
- 为用户授予执行Shell脚本的权限。
- 执行Shell脚本。
1、在Gitee上创建远程仓库、并将本地的项目代码推送到远程仓库中。(别忘忽略文件.gitignore)
### Example user template template
### Example user template
# IntelliJ project files
.idea
*.iml
out
gen
target
开启版本控制:(然后将项目添加到暂存区、然后commit)
推送到远端:
2、在Linux中安装Git(Linux上自带Git),在/usr/local目录下使用Git克隆代码:
# 通过yum命令在线安装Git(忽略此处)
yum list git 列出git安装包
yum install git 在线安装git
# 克隆代码
git clone https://gitee.com/aopmin/helloworld.git
因为是私有库,所以克隆或拉取的时候都需要输入用户名和密码,这样操作比较麻烦,我们可以这样做:
- 方案1: 将远程仓库改成公共的库。
- 方案2: 保存用户名和密码,git config --global credential.helper store。
3、在Linux中安装maven。
4、编写Shell脚本:
Shell脚本(shell script),是一种Linux系统中的脚本程序。使用Shell脚本编程跟 JavaScript、Java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
在/usr/local/目录下创建一个sh目录,并创建一个shell脚本。
mkdir -p /usr/local/sh
cd /usr/local/sh
vim bootStart.sh
bootStart.sh脚本内容:
#!/bin/sh
echo =================================
echo 自动化部署脚本启动
echo =================================
echo 停止原来运行中的工程
APP_NAME=helloworld
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
echo 准备从Git仓库拉取最新代码
cd /usr/local/helloworld
echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成
echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`
cd target
echo 启动项目
nohup java -jar helloworld.jar &> helloworld.log &
echo 项目启动完成
5、为shell脚本授权(权限全开)
chmod 777 bootStart.sh
6、执行脚本
sh bootStart.sh
注意: 在执行maven指令进行打包时,第一次执行可能会耗时比较长,因为在进行maven工程的打包时,需要到中央仓库下载工程依赖的jar包和插件(可以在settings.xml中配置阿里云私服加速下载)。
启动完成之后, 我们可以查看java进程:
jps -l
测试访问:
十二、数据库备份还原
可以使用命令方式备份还原,也可以通过一些客户端进行备份还原。
备份命令: (在cmd窗口中运行命令)
mysqldump -u用户名 -p密码 需要备份的数据库名称>本地磁盘sql文件的路径
示例: 备份(客户端里叫转存sql文件)
mysqldump -uroot -p1234 ssm_db>e:/backup.sql
还原命令: (先登陆目标数据库,若不存在,需要手动创建下,然后再去执行命令)
source 本地磁盘sql文件的路径
示例:还原(创建ssm_db数据库,将数据还原这个数据库中)
mysql -h192.168.203.103 -P3306 -uroot -p123456
>create database ssm_db default charset utf8mb4;
>use ssm_db
>source e:/backup.sql