cyfuer

Dec 24, 2016

Linux

 

1 Linux

1.1 定义

开源免费的操作系统(用于管理计算机软件、硬件资源的系统软件)。安全性、稳定性、高并发处理能力较好,但没有优异的可视化界面(可视化界面功能比较单薄,多数是终端命令行操作)
 

1.2 发行版本

  • linus在1991年开发linux内核程序(大部分的功能都在内核里实现了,其他软件组织和公司在内核基础之上开发出了不同版本)
  • Ubuntu(乌班图)
  • RedHat(红帽)
  • CentOS
  • Debian(蝶变)
  • Fedora
  • SuSE
  • OpenSUSE
  • 红旗Linux(国产)
 

1.3 安装Linux

  • 安装虚拟机
  • 下载Linux系统镜像
  • 新建Linux(CentOS)虚拟机
    • notion image
       

1.4 Linux目录

Linux没有炫目的可视化操作界面,它的操作大部分都是直接执行命令,而可执行文件都是保存在相应的目录中的,所以我们对linux的操作大多数时候都是查找和执行这些可执行文件的。
linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。
在Linux世界里,一切皆文件。
notion image
  1. root : 该目录为系统管理员目录,root是具有超级权限的用户。
  1. bin->usr/bin : 存放系统预装的可执行程序,这里存放的可执行文件可以在系统的任何目录下执行。
  1. usr是linux的系统资源目录,里边存放的都是一些系统可执行文件或者系统依赖的一些文件库。
  1. usr/local/bin:存放用户自己的可执行文件,同样这里存放的可执行文件可以在系统的任何目录下执行。
  1. lib->usr/lib: 这个目录存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库。
  1. boot : 这个目录存放启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
  1. dev:dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,Linux中的设备也是以文件的形式存在。
  1. etc: 这个目录存放所有的系统管理所需要的配置文件。
  1. home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名以用户的账号命名,叫作用户的根目录;用户登录以后,默认打开自己的根目录。
  1. var : 这个目录存放着在不断扩充着的东西,我们习惯将那些经常被修改的文件存放在该目录下,比如运行的各种日志文件。
  1. mnt : 系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容
  1. opt: 这是给linux额外安装软件所存放的目录。比如你安装一个Oracle数据库则就可以放到这个目录下,默认为空。
  1. tmp: 这个目录是用来存放一些临时文件的。

2 Linux远程操作

2.1 Linux的远程操作

服务器通常部署在公司Linux系统上的,由各开发小组共享的,因此程序员需要远程登录到centos进行项目管理或者开发。远程登录客户端有Xshell、Xftp等多种工具 , 我们学习使用Xshell和Xftp , 其它的远程工具大同小异。

2.2 Xshell

Linux的终端模拟软件,支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。
notion image
 

2.3 Xftp

是一个基于windows平台的功能强大的SFTP、FTP文件传输软件。
notion image
 
 

3 Linux系统管理

3.1 vi 和 vim

linux中的文本编辑器,可以创建、查看、编辑文件,vim是vi的增强版。
# 创建文件夹 mkdir testDir # 进入文件夹 cd testDir # 使用vim创建并打开文件 vim test.txt
 
vim编辑文件存在三种模式:
  • 一般模式:vim打开文件默认就是一般模式,只能查看
  • 编辑模式:在一般模式下,按i或者a进入编辑模式,可以编辑文件内容
  • 命令行模式:在一般模式下,按: 进入命令行模式
    • 输入q! 不保存强制退出编辑器
      输入q 退出编辑器
 
vi和vim常用快捷键:
输入wq 保存并退出编辑器
notion image
notion image

3.2 Linux用户管理

linux系统安装时默认创建系统管理员账号(root账户),root账户可以管理其他账户。以管理员身份登录可以执行以下命令:
# 1.添加用户,在/home目录下创建对应用户名的目录,如果不指定组,会生成一个与用户名同名的组,新用户归属到该组 useradd 用户名 # 添加用户并自定义目录名 useradd -d /home/目录名 用户名 # 2.给用户设置密码 passwd 用户名 # 3.删除用户 userdel 用户名 # 删除用户并清理主目录 userdel -r 用户名 # 4.查看用户信息 id 用户名 # 5.切换用户(switch user),权限高的用户切换到权限低的用户不需要密码 # 另:exit命令可以回到原来的用户 su 用户名
 

3.3 Linux组管理

linux中的组相当于角色的概念,可以对有共性的用户进行统一管理;每个用户至少属于一个组。创建用户时如果不指定组,会默认创建一个跟用户名相同的组,并且把新创建的用户分配到组中,root用户默认属于root组。
# 添加组 groupadd 组名 # 删除组 groupdel 组名 # 把用户添加到组中,-a表示add gpasswd -a 用户名 组名 # 把用户从组中移除 gpasswd -d 用户名 组名 # 添加用户时,指定所属的组(主组),避免自动创建组 useradd -g 组名 用户名
 

3.4 Linux系统操作命令

# 立即关机 shutdown now # 定时关机 shutdown -h xxx shutdown -h 1 # 1小时后会关机了 # 立即重启 shutdown -r now # 重启 reboot # 把内存的数据同步到磁盘 sync
 

3.5 Linux帮助命令

# 查看对应命令的帮助信息,e.g. man ls,查看ls命令的帮助信息 man 命令 # 查看命令的内置帮助信息,e.g. help cd,查看cd的内置帮助信息 help 命令
 

3.6 目录操作命令

# 查看当前所在的目录:pwd pwd # 查看指定目录下所有子目录或文件列表:ls 指定目录 # 可选参数:-l(以列表形式展示)、-a(展示所有子目录,包括虚拟目录) ls /home # 查看home目录的子目录 ls # 查看当前目录下的子目录 # 切换目录:cd 目录名 # 目录分两种: # 绝对目录:以盘符开始的目录叫绝对目录,从盘符开始查找目标目录。 # ~是特殊的绝对目录,代表当前用户的根目录 # 相对目录:以目录名开始的目录叫相对目录,从当前目录开始查找目标目录 # ..代表当前目录的上一级目录 # .代表当前目录 cd /opt/test # 创建目录:mkdir 目录名 mkdir /opt/test/test1 # 在/opt/test下创建test1 mkdir test2 # 在当前目录下创建test2 mkdir -p /opt/test/test3/test4 # -p表示递归创建,在test中创建test3,并在test3中创建test4 # 删除空目录:rmdir 目录名 rmdir test2
 

3.7 文件操作命令

# 创建文件:touch 文件名列表(文件名用空格隔开) touch t1.txt t2.txt t3.txt # 复制文件:cp source(源) dest(目标) cp t1.txt test2 # 把当前目录的文件t1.txt复制到test2目录下 cp test2 test5 # 把当前目录的目录test2复制到test5目录下,如果test2有子目录,将失败,需要添加-r(递归)参数 # 删除文件:rm 文件名或目录名 rm t1.txt rm -f t1.txt # 强制删除,force rm -r test2 # 删除目录test2,如果test2里面有子目录,必须添加参数-r(递归) # 移动文件:mv source(源) dest(目标) mv t1.txt test1 mv test1 test2 mv t3.txt t33.txt # 把t3.txt的内容剪切到t33.txt,相当于重命名 # 查看文件:cat 文件名 cat t1.txt cat -n t1.txt # 显示行号 # 查看文件头10行:head [选项] 文件名 head t1.txt # 默认查看文件头10行内容 head -m 5 t1.txt # 查看文件头5行内容,5可以是任意行数 # 查看文件后10行:tail [选项] 文件名 tail t1.txt tail -m 5 t1.txt
 
more指令:基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
# 分页查看文件:more 文件名,一次性加载文件所有内容到内存,分页显示,按回车翻一行,按空格翻一页 more t1.txt
notion image
 
less指令:与more指令类似,但在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
# 分页查看文件:less 文件名,分页加载文件所有内容到内存,分页显示,按回车翻一行,按空格翻一页 less t1.txt
notion image
 
 
 
vi或vim用在脚本中作为创建文件的命令无法生效; vi或vim每次只能创建一个文件
 

3.8 Linux多用于脚本的命令

# echo指令 # 查看系统变量或常量:echo [选项] [输出内容] echo $PATH echo $SHELL echo HELLO WORLD # >指令 # 向指定文件中填写前一个命令的输出结果:命令 > 文件名 ls > result.txt # 把ls执行后的输出内容填写进result.txt这个文件,文件不存在则新建 cat result.txt > result2.txt # 输出result.txt的内容并填写进result2.txt,相当于把result.txt的内容复制到result2.txt # >>指令 # 查看指令 >> 目标文件 # 功能说明:将前一个查看指令中的结果追加写入到目标文件中,如果目标文件不存在,则新建 cal >> dd.txt # 把日历追加写到文件dd.txt中 ls >> dd.txt # 把文件列表追加写到文件dd.txt中
 

3.9 Linux关于日期的命令

#查看日期 date # 查看当前完整时间 date +%Y # 查看当前年份 date +%m # 查看当前月份 date +%d # 查看当前日期 date '+%Y-%m-%d %H:%M:%S' # 按格式显示当前日期 # 设置系统时间 date -S '2020-10-20 10:20:30' # 查看系统日历 cal # 查看当月日历 cal 2020 # 查看指定年份全年日历
 

3.10 Linux关于搜索的命令

# 搜索文件或者目录:find 关键字 # - 默认按名称搜索(-name) # - 按文件大小搜索(-size) # - 按文件所有者搜索(-user) find readme.md # 在当前目录查找文件,find不能模糊搜索,需要用正则 find *.md # 在当前目录下查找所有.md后缀的文件 find /etc *.txt # 搜索/etc目录下所有.txt的文件 find /etc -size +5M # 搜索/etc目录下所有大于5M的文件 find /etc -size -2k # 搜索/etc目录下所有小于2k的文件 # 搜索文件:locate 文件名 # 不访问磁盘,直接根据名称搜索文件数据库内存中的目录树,效率更高,而且是搜索整个文件系统 # 但是目录树的同步跟磁盘里的文件不是即时的,所以可能搜不到一个刚创建的文件,如果要确保目录树最新,需要先执行updatedb命令 locate readme.md # 搜索过滤命令:搜索命令 |grep 过滤条件 find *.txt|grep new # 搜索当前目录下,所有名称包含new的.txt文件 cat t1.txt|grep beijing # 查看t1.txt包含beijing这个字符串的行 cat t1.txt|grep -i beijing # 忽略大小写
 

3.11 压缩与解压缩命令

# 压缩或解压单个文件 gzip 文件名 # 压缩生成.gz压缩包,并删除源文件 gunzip .gz压缩包 # 解压压缩包,并删除压缩包 # 压缩或解压多个文件和目录: # zip 目标压缩包名称(xxx.zip/.gz) 文件或目录列表 zip test.zip t1.txt t2.txt t3.txt unzip test.zip # 解压至当前目录 unzip test.zip -d test3 # 解压至指定目录,-d即directory # 压缩或解压多个文件和目录:tar [选项] 目标压缩包名称(xxx.tar.gz) 文件或目录列表 # 选项: # -c: 产生.tar.gz打包文件 # -v: 显示详细信息 # -f: 指定压缩后的文件名 # -z: 打包同时压缩 # -x: 解压.tar.gz文件 # -C: 解压到指定目录 tar -zcvf xxx.tar.gz 文件或目录列表 # 打包并压缩文件 tar -zxvf xxx.tar.gz # 解压
 

3.12 文件与组(这里的文件泛指文件和目录)

3.12.1.权限管理基础
在linux中,每一个用户都至少属于一个组,用户不能独立于组存在,一个用户可以属于多个组。
在linux中,每一个文件也必须属于一个组,而且只能属于一个组。
文件或者目录通过组来控制哪些用户可以对它进行特定权限的操作。
 
在文件看来,linux系统中所有用户分为三类:
  • 所有者:默认是创建者
  • 同组用户:跟文件属于同一个组的用户
  • 其它组用户:挤不上文件所有者,也不是同组用户
 
所有者相关操作命令
# 查看所有者 ls -l # 修改所有者,chown即change own chown cyfuer t1.txt # 修改t1.txt的所有者为cyfuer chown cyfuer:dev t1.txt # 修改t1.txt的所有者为cyfuer,所在组改为dev chown -R cyfuer:dev test1 # -R表示递归修改,修改test1及其所有子文件
所在组相关操作命令
# 修改文件所在组 chgrp dev t1.txt chgrp -R dev test1
 
3.12.2.文件的三种权限:读(Read)、写(Write)、执行(Execute)
对于文件而言:
:可以读取、查看文件的内容,如:cat、more、less、head、tail等。
:可以修改文件的内容,如:vi或者vim等。
执行:如果该文件是可执行文件(如.sh文件),需要有执行权限才能直接运行,如:./xxx.sh等
对于目录而言:
:可以读取、查看目录下面的内容,如:ls等。
:可以修改目录中的内容,创建子目录、删除子目录、重命名目录、创建文件、删除文件、重命名文件
执行:可以进入该目录,比如:cd等。
 
3.12.3.文件的权限控制
在linux中,任何文件都有三部分权限:所有者权限、同组用户权限、其它组用户权限:
(1)第一部分权限(2~4位):所有者权限,所有者对该文件所拥有的的权限,使用r、w、x分别表示读、写、执行的权限。比如:rwx:拥有读写执行的权限,r-x:拥有读和执行的权限,r--:只拥有读的权限,---:没有任何权限。
(2)第二部分权限(5~7位):同组用户权限,同组的用户对该文件所拥有的权限,表示方式同第一部分。
(3)第三部分权限(8~10位):其它组用户权限,其它组用户对该文件所拥有的权限,表示方式同第一部分。
举例,如下图所示中
notion image
第一个文件Gemfile ,第一列-rw-rr—-r-- 表示文件的访问权限:
第1位表示文件类型:- 表示文件;d 表示目录
第2~4位表示第一部分访问权限,即所有者权限:rw- 表示可读可写,当前用户为Rworld,即文件所有者(所有者看第三列),所以当前用户的权限根据第一部分访问权限
第5~7位表示第二部分访问权限,即同组用户权限(文件所属组看第四列,通过id 用户名 查看当前用户名所属组)
第8~10位表示第三部分访问权限,即其它组用户权限
root只是拥有管理用户的根权限,在文件读写时,与其他用户遵循一样的规则
 
3.12.4.查看文件的权限
ls -aul # a:all,全部 l:list,列表形式 u:human,人性化
 
3.12.5.修改文件的权限:chmod
用r、w、x分别表示读、写、执行的权限
用u、g、o、a分别表示给所有者、同组用户、其它组用户、所有用户修改权限
用+、-、=分别表示给指定的用户增加、减少、设置对应的权限
chmod g-w,o+w t5.txt # 文件t5.txt的同组用户减少写权限,其它组用户增加写权限 chmod g=rwx t5.txt # 文件t5.txt的同组用户权限改为rwx chmod a-r t5.txt # 文件t5.txt的所有用户减少读权限
 
3.12.6.使用数字的方式修改文件的权限
rwx可以用一组二进制数111 表示,r、w、x分别用第二位、第一位、第零位表示,
即r、w、x存在时分别对应值4、2、1。比如一部分权限为r-x,即二进制数101,值为5
chmod 777 t5.txt # 修改全部权限为rwx
 

3.13 网络配置

  1. 在linux中找到配置文件:/etc/sysconfig/network-scripts/ifcfg-ens33
  1. 修改以下字段的值
    1. BOOTPROTO="static" ONBOOT="yes" IPADDR=192.168.11.128 GATEWAY=192.168.11.2 DNS=192.168.11.2
  1. 重启linux:reboot(最好的方式是直接重启网络服务,在下面会介绍)
 

3.14 进程管理

线程:一个程序的不同线路
进程:一个程序的执行,一个进程占用一个端口
 
进程相关命令:
# 查看进程 ps # 只显示应用级别的进程 ps -e # 显示所有进程 ps -ef # 以全格式显示所有进程,f即format ps -ef|grep mysql # 过滤进程,只查看名称包含mysql的进程 # 关闭进程 kill -9 <PID>
 

3.15 服务管理

1)、服务是支持Linux运行的一些必要程序,本质上也是进程,叫守护进程。比如sshd、防火墙等。
 
2)、服务相关命令:systemctl [start、stop、restart、reload、status、enable] 服务名称
systemctl status firewalld # 查看防火墙运行状态 systemctl stop firewalld # 关闭防火墙 systemctl start firewalld # 开启防火墙 systemctl enable firewalld # 设置防火墙开机启动
 
老版的linux或发行版本,操作服务使用service命令
 

3.16 软件包管理

1)RPM包管理
RPM是Linux常用的软件包打包(上网找RPM打包工具用来打包)和安装工具,它操作的软件包都是.rpm结尾。类似于windows里的exe。
使用RPM:rpm命令
# 查看当前系统已安装的rpm软件包 rpm -qa rpm -qa|grep firefox # 卸载rpm软件包 rpm -e firefox # 安装rpm包 # -i=install 安装 # -v=verbose 提示 # -h=hash 进度条 rpm -ivh xxx.rpm
 
2)YUM包管理
Yum是一个Shell前端软件包管理器,基于RPM包管理,能够从指定服务器自动下载PRM包并安装,可以自动处理软件包之间的依赖关系,并且一次安装所有依赖的软件包。
# 查看已安装的rpm软件包 yum list installed # 卸载rpm包 yum remove firefox.x86_64 # 安装rpm包 yum install firefox
 
 

4 Linux搭建JaveEE运行环境

4.1 安装JDK

第一步:将安装包通过xftp5上传到服务器的目录/opt下
第二步:解压缩安装包
第三步:配置环境变量的配置文件 vim /etc/profile
JAVA_HOME=/opt/jdk1.7.0_79 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/lib export JAVA_HOME PATH CLASSPATH
notion image
第四步:使配置文件生效
source profile
第五步:测试是否安装成功
java -version
 

4.2安装tomcat

第一步:将安装包通过xftp5上传到服务器的目录/opt下
第二步:解压到当前目录
第三步:启动tomcat
 

4.3 安装mysql

第一步:检查是否安装了mariadb
检查linux是否安装了mariadb数据库,mariadb是mysql的分支,是免费开源的,会与mysql冲突。首先要检查并卸载掉。
# 检查mariadb yum list installed|grep mariadb # 卸载命令,如果卸载失败,去掉-y后执行,手动确认是否卸载 yum -y remove mariadb-libs.x86_64
第二步:上传mysql安装包到/opt下
第三步:解压mysql安装包
tar -zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C ../
第四步:修改根目录名
mv mysql-5.7.18-linux-glibc2.5-x86_64 mysql-5.7.18
第五步:创建数据文件夹data
data文件夹是mysql用来存放数据库文件的,默认没有,可以手动在mysql-5.7.18文件夹下创建data文件夹
cd mysql-5.7.18 mkdir data
第六步:创建用来执行mysqld命令的Linux用户
创建用户,用来执行MySQL的命令mysqld,一般用户名用mysql
groupadd mysql useradd -g mysql mysql
第七步:初始化mysql
切换到mysql-5.7.18/bin目录
执行命令把data文件夹设置为存放数据库文件目录
# -initialize 初始化mysql,生成用于登录mysql的root账号密码 # -user 指定执行mysqld命令的linux用户 # -datadir:指定mysql数据的存放位置 # -basedir:指定mysql安装程序的目录 ./mysqld --initialize --user=mysql --datadir=/opt/mysql-5.7.18/data=/opt/mysql-5.7.18
notion image
执行后生成mysql的root账号
第八步:启用安全功能
生成RSA秘钥对,对在服务器与客户机之间来回传输的所有数据进行加密。
notion image
第九步:修改mysql安装目录权限
把权限指定给创建的linux用户mysql
notion image
第十步:启动mysql
在mysql的bin目录里
# 启动mysql服务,&表示后台启动,这样不会占用一个终端界面 ./mysqld_safe & # 关闭mysql ./mysqladmin -uroot -p shutdown
 

Copyright © 2025 cyfuer

logo