Linux是一个开源免费的操作系统,和我们的Window一样,主要用来安装到服务器上,运行各种软件和服务。
Linux之父 - 林纳斯(linus)
Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机。
有 redhot-红帽linux、centos、乌班图(linux中的windows)等发行版。
windows与linux的设计理念有根本性的区别:
1、windows:用户想要做什么,不需要自己知道如何去实现,也不明白自己怎么去实现的,更不打算为自己的行为负责,因为Windows已经将这些功能所封装好了。
windows将所有操作都隐藏起来,只给用户提供封装好的功能,用户只能在操作系统限制的范围内操作,如果是普通用户,会觉得很windows很舒服,因为不需要思考。只需要按照指示去操作。但对于开发人员而言,这种设计理念是无法接受的,一旦要做出一些超越封装好的功能之外的事情,就会出现各种难以意料的情况,而且很多情况下,这些问题是无解的。或者只能用极其蹩脚扭曲的方式去勉强处理,然后瑟瑟发抖地期待着程序能正常运行。因为一旦程序崩溃,你也会为之崩溃。在windows下作开发,那种体验就好比在陪伴一个任性的女朋友,虽然长得清秀靓丽,但喜怒无常,她开心时,彼此相安无事,她不开心时,就直接哭闹,你问她:怎么了?她也不说原因,只是一直哭。你只能试着用各种方式去哄她开心,即使这次能哄好她,并不意味着下次同样的方法能奏效。这样的相处方式,很累。不是她不好,而是彼此不适合。即使终日相伴,却依然对其一无所知。
2、 linux:用户知道自己想要什么,也明白自己在做什么,并且会为自己的行为负责。
linux将所有操作权都交给了用户,她相信用户是理性的聪明的,忠实地执行用户的指令,向用户暴露所有的细节。用户在拥有自主权的同时也拥有了破坏力,因此普通用户根本无法驾驭,可能一个指令就把操作系统弄崩溃了。对于开发者而言,linux的开放与自由给了我们无限的可能性,我们能看到程序是如何运行的,运行报错也会有友好的提示。根据报错指引往往能将问题解决。与之相处,好比与一个成熟的女性相处,历经风雨,已经不再关注浮夸的外表,而是关注内在的涵养。刚接触时,可能会觉得她高冷,慢慢地,会发现她很善解人意,心情不好时她会跟你说是什么原因造成的,彼此商量如何解决这个问题,而不是无来由地崩溃。与之相处,会感到很舒服,彼此坦诚,无需套路,你在想什么,我都知道。我在念什么,你也明白。
因此,我选择linux的原因在于自由、舒服,简言之:爽!原文地址:
Linux内核是Linux操作系统bai创始人主持的网站du www.kernel.org 上发布的操作系统的最基本的那些东西。Linux发行版则是前述那些东西的基础上添加了一些工具软件的基础上构成的一套庞大复杂的操作系统。虽然内核都是一样的,但添加部分各不相同,这就构成了不同的发行版本。Linux本身指的是一个操作系统内核,只有内核是无法直接使用的。我们需要的,可以使用的操作系统是一个包含了内核和一批有用的程序的的一个集合体,这个就是Linux发行版。其中,Ubuntu、centOS、RedHat就是Linux的不同的发行版。
简单来说,内核就好比汽车的发动机,而发行版就是汽车。
window系统 -> VMware虚拟管理软件 -> 创建虚拟机(VM) -> 在虚拟机中安装CentOS 7(linux的发行版)
傻瓜式安装,如何不懂,自行百度。
因为我们的开发完成的项目,往往都是部署在远程的服务器中的,所以需要使用远程连接的方法来操作服务器,我们不可能每当需要做一些服务器的更改的时候,跑到机房器操作服务器。
远程连接工具:xshell、finalshell、ssh…
/bin:
bin是Binary的缩写, 这个目录存放着最经常使用的命令。
/boot:
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :
dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc:
这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:
这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/opt:
这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root:
该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin:
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux:
这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv:
该目录存放一些服务启动之后需要提取的数据。
/sys:
这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。 该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp:
这个目录是用来存放一些临时文件的。
/usr:
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
/usr/bin:
系统用户使用的应用程序。
/usr/sbin:
超级用户使用的比较高级的管理程序和系统守护程序。
**/usr/src:**内核源代码默认的放置目录。
/var:
这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
在linux系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。
值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而**/sbin, /usr/sbin** 则是给root使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。
ifconfig
ifconfig
注意Windows系统的
ipconfig
查看当前的网络信息(ip地址)
ping ip地址
ping www.baidu.com
ping 14.215.177.38
检测主机网络
who am i
who am i
查看当前的登录用户
su [账号名称]
su jerome
切换用户,如果直接输su,表示切换到root账号
pwd
pwd
打印输出当前的工作路径(打印当前在什么位置)
cd
cd 文件夹名/文件夹名
cd ../ 返回上一级目录
cd / 返回跟路径
cd ./ 执行当前路径下的文件
进入某一个文件夹
cd后面可以跟绝对路径,也可以跟相对路径,如果是相对路径需要注意命令执行的位置
ll & ls
ls -l |grep 筛选条件
ll -l
打印当前目录下的所有内容(子目录、子文件…)
参数:
-l 打印当前目录的详细信息
-a 打印当前目录的隐藏文件夹
clear
clear
清空命令行
命令的小技巧:
1、通过方向键 上/下 找到曾经输入过的命令
2、通过tab键可以对文件夹/文件进行补全
mkdir -p 文件夹名/文件夹名
mkdir -p a/b/c
创建文件夹
参数:
-p 表示级联创建
mv
mv 源文件的路径 目标文件的路径
文件夹/文件的剪切,可以起到改名的效果
cp
cp -r 源文件的路径 目标文件的路径
文件夹/文件的复制
注意:复制文件夹时,需要添加**-r参数**,但是剪切不需要,
rm
rm -r 文件夹名
rm -f 文件名
rm -rf 文件夹名或文件名
删除文件/文件夹;在linux没有回收站,在试用rm命令的时候,一定要小心些,删除之后就无法再恢复了。
参数:
-r 表示删除文件夹
-f 表示强制删除,不用确认
vi & vim
vi 文件名
vim 文件名
创建并且编译文件
touch xxx
touch 文件名
创建文件,但是不打开文件编辑
cat XXX
cat 文件名
查看文件的所有内容,但是不能修改
more xxx
more 文件名
查看文件部分内容,逐步展示
head -n xxx
head -5 文件名
查看文件开头n行
tail -n xxx
tail -5 文件名
参数:
-f
i - 当前光标前面输入
a - 当前光标后面输入
I - 行首输入
A - 行尾输入
o - 换行输入
O - 上一行输入:wq - 保存退出
:q! - 不保存强制退出:set number - 显示文件的行数
:set nonumber - 显示文件的行数
gg - 回到文件头部
G - 回到文件尾部
y[n]y + p - 行复制
dd - 行删除
x - 删除一个字符
u - 撤销
ctrl + r - 反撤销/关键词 - 搜索关键词,n往下找,shift + n往上找
:n,$s/旧内容/新内容/g - 文件内容替换
打包压缩命令
tar -zcf xxxx.tar.gz 待压缩文件…
tar -zcf 待压缩的文件名 ... 可以多个文件一起打包压缩
tar -zcf file.tar.gz file1.txt file2.txt
解压缩的命令
tar -zxf xxxx.tar.gz
tar -zxf 待解压的文件名 可以解压多个文件
tar -zxf file.tar.gz
Linux的用户分类
超级用户 - root
普通用户 - id(500 ~ 60000)
伪用户 - id(1~499) :伪用户不能登录系统,也不会在/home下创建响应的文件夹,主要是执行一些系统命令
用户组
一个用户组可以包含多个用户
一个用户必须属于一个用户组
用户相关的配置信息
/etc/passwd 用户信息文件
/etc/shadow 保存密码信息
/etc/group 用户组信息
/etc/gshadow 用户组密码信息
Linux用户组的操作
创建用户组
groupadd 组名
修改用户组名
groupmod -n 新组名 旧组名
删除用户组
groupdel 组名
显示当前用户所在的组
groups
Linux用户的操作
添加用户
useradd -g 组名 用户名
修改用户
usermod [选项] 用户名
删除用户
userdel [选项] 用户名
设置用户密码
passwd 用户名
文件权限描述符
lrwxrwxrwx
第1位:文件类型,d目录 -文件 l软链接
第2~4位:所属用户权限
第5~7位:同组用户权限
第8~10位:非同组用户权限r - read可读权限
w - write可修改权限
x - 可执行权限
授权
字符授权法:
chmod {u/g/o}{+/-/=}{r/w/x} xxxxx
数字授权法:
chmod 777 xxxxxx
r - 4
w - 2
x - 1r - 4
w - 2
x - 1参数:
-R 递归授权
poweroff 关机
systemctl poweroff
reboot 重启
systemctl reboot
uname -a 查看linux的内核的版本
uname -a
free 查看内存的使用情况
free -h
参数:-h ,homan
df 查看硬盘的使用情况
df
top 类似window的任务管理器
top
查看哪些端口号已启用
netstat -anp
netstat -anp |grep 3306
netstat -anp |grep
即可显示当前服务器上所有端口及进程服务,于grep结合可查看某个具体端口及服务情况
netstat -ntlp //查看当前所有tcp端口
netstat -ntulp |grep 80 //查看所有80端口使用情况
netstat -an | grep 3306 //查看所有3306端口使用情况
查看一台服务器上面哪些服务及端口
netstat -lanp
查看一个服务有几个端口。比如要查看mysqld
ps -ef |grep mysqld
查看某一端口的连接数量,比如3306端口
netstat -pnt |grep :3306 |wc
查看某一端口的连接客户端IP 比如3306端口
netstat -anp |grep 3306
查看网络端口
netstat -an
使用lsof -i :port就能看见所指定端口运行的程序,同时还有当前连接。
使用lsof -i:3306需要安装lsof
# yum install lsof
lsof -i :port
nmap 端口扫描
netstat -nupl (UDP类型的端口)
netstat -ntpl (TCP类型的端口)
netstat -anp 显示系统端口使用情况
自行百度:阿里云申请链接
网络的概念
IP地址 - 网络中的一个标识(内网ip、外网ip),ip地址本质上是一个int类型的整数
子网掩码 - 网段的匹配工具(255.255.255.0 和 请求的ip地址,做一个按位与的运算) & | > <
网关 - 真正能够上网设备的ip地址
DNS服务器 - 域名解析服务器
域名 - ip地址的包装
桥接模式 - 虚拟机和宿主机共用同一个网段
nat模式 - 虚拟机和宿主机形成一个独立的小型局域网
仅主机模式
配置虚拟机的静态ip(重要)
vim /etc/sysconfig/network-scripts/ifcfg-网卡名称
相关命令
ps -aux [| grep xxxx] -查看当前进程信息(瞬间状态)
ps -aux |grep mysql
kill [-9] 进程pid - 杀死对应的pid进程
kill -9 进程的PID
top - 实时监控进程的状态信息
top
什么是服务?
服务的相关命令
systemctl start/stop/restart/status/reload 服务器的名称 - 操作相关的服务
systemctl start/stop/restart/status/reload mysqld
systemctl start/stop/restart/status/reload firewall
systemctl enable/disable 服务器的名称 - 开启/关闭服务的开机自启动
systemctl enable/disable 服务的名称
setup - 图形化界面操作服务
setup
F12退出服务监控页面,再利用方位键退出图形化界面
系统防火墙
操作防火墙状态
systemctl start/stop/restart/status firewalld
设置防火墙的端口
修改配置文件:
vim /usr/lib/firewalld/services/ssh.xml
开放端口:在ssh.xml文件中设置(虚拟机上)
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
<port protocol="tcp" port="22"/>
<port protocol="tcp" port="3306"/>
<port protocol="tcp" port="8080"/>
</service>
什么是RPM?
rpm全称为RedHat Package Manager(RedHat软件包管理工具),是一种软件包的打包及安装工具,能够使用与大部分Linux发行版中
RPM的相关命令
rpm -qa | grep xxx - 搜索本地安装过什么软件
rpm -qa |grep mysql
rpm -e [–nodeps] xxxx - 卸载指定软件
rpm -e --nodeps mysql
rpm -ivh xxxxxx - 安装指定的rpm软件包
rpm -ivh mysql的rpm包名
什么是YUM?
yum是一个软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,而且可以自动处理依赖性关系,并且一次性安装所有依赖的软件包
YUM的相关命令
yum list | grep xxxx - 查看远程服务器的指定软件安装版本
yum list |grep mysql
yum install -y xxxxx - yum安装某个软件
yum install -y 软件安装包的名称
yum remove -y xxxxx - yum卸载某个软件
yum remove -y 软件安装的名称
-y 表示同意,不必再询问
可能遇到的问题
#下载安装源
wget http://repo.mysql.com/mysql57-community-release-el6-8.noarch.rpm
#安装rpm包
rpm -ivh mysql57-community-release-el6-8.noarch.rpm
#修改安装源
vim /etc/yum.repos.d/mysql-community.repo
将[mysql55-community]的enabled设置为1,[mysql57-community]的enabled设置为0
#安装mysql:
yum -y install mysql-server mysql
#-----解决yum锁问题------
rm -f /var/run/yum.pid
1)源码安装(将源码包放到/usr/local/software目录下)
解压缩源码
tar -zvxf jdk-8u171-linux-x64.tar.gz
改名(相当于剪切,原文件将不再存在)
mv jdk1.8.0_171 jdk8
配置环境变量,在/etc路径下的profile文件中
编辑环境变量
vim /etc/profile
内容如下:
#jdk8
export JAVA_HOME=/usr/local/software/jdk8
export PATH=$PATH:$JAVA_HOME/bin
#环境变量生效
source /etc/profile
2)rpm包安装(无需配置JAVA_HOME等环境变量,如果之前配置了环境变量,需要注意路径问题)
rpm -ivh jdk-8u191-linux-x64.rpm
同上安装JDK,但是必须先安装JDK
yum安装(这种安装方式比较方便)
1)检查yum源,是否有mysql-server 5.7的版本
yum list | grep mysql
2)安装修改yum源
#下载安装源
wget http://repo.mysql.com/mysql57-community-release-el6-8.noarch.rpm
#安装yum源
rpm -ivh mysql57-community-release-el6-8.noarch.rpm
#修改yum源
vim /etc/yum.repos.d/mysql-community.repo
#将5.7的源路径/etc/yum.repos.d/mysql-community.repo中的6改成7
33 baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
3)执行命令安装MySQL
yum install -y mysql-community-server.x86_64
4)启动MySQL服务
systemctl start mysqld
5)查看第一次随机密码,并且重置密码
#查看随机密码
grep 'password' /var/log/mysqld.log |head -n 1
#进入数据库
mysql -uroot -p随机密码
#修改密码
set password = password('新密码');
6)开放远程连接权限
#连接mysql
mysql -uroot -pxxxx
#定位到mysql系统库
use mysql
#查看用户信息
select User,Host, xxxxxxx from user;
#修改root账号的权限
update user set Host='%' where User='root';
#退出mysql
exit
#重启mysql
systemctl restart mysqld
7)修改字符集(进入数据库之后)
#mysql查看字符集
show variables like '%char%'
#修改mysql配置文件
vim /etc/my.cnf
#设置属性
[mysqld]
character-set-server=utf8
#重启服务
systemctl restart mysqld
#卸载数据库,卸载之前注意将数据库中的备份,数据来之不易
yum -y remove mysql
8)使用sqlyum远程连接项目中连接服务器中数据库的配置
#程序怎么连接虚拟机中的mysql
jdbc.properties
jdbc.url=jdbc:mysql://192.168.195.188:3306/xxx
jdbc.username=root
jdbc.password=root
jdbc.driver=xxxxxxxxx
1、在启动虚拟机的时候,可能会碰到一个VT-x的错误,这个错误的意思是因为CPU没有开启虚拟化。
解决方案:重启笔记本,进入BIOS系统,打开VT。
2、更多linux的基础知识:传送门:https://www.w3cschool.cn/linux/7l3tjf21.html