Linux的学习随笔
Linux学习随笔
什么是Linux
为什么要学习Linux
Linux在开发领域越来越受欢迎,作为后端程序员,必须掌握Linux.。找工作的门槛。
#### 概述
Linux是一种自由和开源的类似UNIX操作系统,改操作系统的内核是由林纳斯·托瓦兹在1991年10月5日首次发布,在加上用户空间和应用程序之后,成为Linxu操作系统。Linxu也是自由软件和开放源码软件发展中最著名的例子。只要遵循GNU通用许可证(GPL),任何人任何机构都可以子有使用Linux的底层源码。也可以自由的修改和再次发布。大多数Linux系统还报错像GUI的X Window之类的程序。
历史
##### 创立
1991年,林纳斯·托瓦兹在赫尔辛基大学上学时,对操作系统很好奇[16]。他对MINIX只允许在教育上使用很不满(在当时MINIX不允许被用作任何商业使用),于是他便开始写他自己的操作系统,这就是后来的Linux内核。
林纳斯·托瓦兹开始在MINIX上开发Linux内核,为MINIX写的软件也可以在Linux内核上使用。[17]后来使用GNU软件代替MINIX的软件,因为使用从GNU系统来的源代码可以自由使用,这对Linux的发展有益。使用GNU GPL协议的源代码可以被其他项目所使用,只要这些项目使用同样的协议发布。为了让Linux可以在商业上使用,林纳斯·托瓦兹决定更改他原来的协议(这个协议会限制商业使用),以GNU GPL协议来代替。[18]之后许多开发者致力融合GNU元素到Linux中,做出一个有完整功能的、自由的操作系统。[13]
命名
Linux的第一个版本在1991年9月被大学FTP server管理员Ari Lemmke发布在Internet上,最初Torvalds称这个内核的名称为"Freax",意思是自由("free")和奇异("freak")的结合字,并且附上"X"这个常用的字母,以配合所谓的类Unix的系统。但是FTP服务器管理员嫌原来的命名“Freax”的名称不好听,把内核的称呼改成“Linux”,当时仅有10000行代码,仍必须运行于Minix操作系统之上,并且必须使用硬盘引导;随后在10月份第二个版本(0.02版)发布,同时这位芬兰赫尔辛基的大学生在comp.os.minix上发布一则消息
Hello everybody out there using minix- I'm doing a (free) operation system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones.
Linux的标志和吉祥物是一只名字叫做Tux的企鹅,标志的由来有一说是因为Linus在澳洲时曾被一只动物园里的企鹅咬了一口,便选择企鹅作为Linux的标志,但更容易被接受的说法是:企鹅代表南极,而南极又是全世界所共有的一块陆地。这也就代表Linux是所有人的Linux。
版本
Kali linux 做安全渗透的
安装Linux(centOS)
与Windos的区别
在VMware中安装CentOS
基本配置
去官网下载一个镜像centOS(我是用的是centOS7)
安装VMware(我这里使用的15版本,用最新的可以到官网拿,360一键安装也可以)
也可到https://pan.baidu.com/s/1AsvVRFHgGFsIx-PaXMzJqA 提取码dbh1里有注册码
安装完成后打开软件有如下界面:
安装CentOS
下面就是无脑的下一步
成功后
然后选择编辑虚拟机设置
然后就启动这个虚拟机
成功后
ctrl+Alt 将聚焦退出虚拟机
远程连接
1.可以前往360下载(不需要破解)
2.使用xshell连接
成功后
xshell基本操作
Ctrl+鼠标滚轮,放大和缩小字体
上传文件使用xftp
需要上传的话只需要托过去久好了
linux的基本命令
-
关机与重启
-- 关机 shutdown -h now -- 立即关机 shutdown -h +1 --一分钟后关机 poweroff 立即停止系统,并关闭电源 -- 重启 reboot -- 重启 shutdown -r now --立即重启 shutdown -r +1 --一分钟后重启哦 -- 注销 logout exit crtl +d
-
和$提示的区别
表示用户有root权限,一般的root登陆#,$为普通用户
-
-
查看ip
ifconfig ipaddr eno1: 代表由主板bios内置的网卡 ens1:代表主板bios内置的PCI_E网卡 enp2s0: PCI-E独立网卡 eth0: 如果以上都不用,则返回默认的网卡名
- 切换用户
su 用户名
-
cd
cd 目录名 进入目录 cd .. 返回上一层 cd ~进入当前用户的home目录
-
目录查看
ls 显示当前目录下的所有文件与以及子目录 ll 详细的显示目录下的文件以及目录 dir 显示目录下的文件夹 pwd 显示当前路径 clear 清空显示屏
- 查看文件内容
cat 查看内容不能编辑 vi或vim可以查看可编辑
-
创建目录以及文件
mkdir 文件夹名字 语法: mkdir -选项 -参数 选项: -m 创建目录时同时设置文件的权限 -p 如果上级目录没有创建,即创建输入路径上的所有目录 touch 创建文件
-
复制和移动
cp 文件 +复制后的文件名
-
解压
命令格式: tar [参数] 文件 常用参数: x: 从压缩的文件中提取文件 (解压) c: 建立新的压缩文件(加压) t:显示压缩的文件 v: 显示操作过程 z: 通过gzip指令来处理备份文件 示例: tar -czvf test.tar.gz a.c 作用: 压缩 a.c文件为test.tar.gz tar -tzvf test.tar.gz 作用: 列出test.tar.gz中包含的文件。 tar -xzvf test.tar.gz 作用: 解压文件 tar --exclude=abc/1.txt -zcvf abc.tgz abc 作用: 将文件 abc 进行压缩时,排除1.txt,压缩后的文件名为 abc.tgz
-
同步数据
sync
-
查找可执行文件的位置
which 软件名 -- 例子: which vim
-
查找文件的位置
whereis 文件名
-
find
查找文件或目录
格式: find [位置] [选项] 文件名 -print
示例:- 查找etc目录中,所有文件名以host开头的文件。 find /etc -name 'host*' - 查找当前用户的home目录中所有的log文件 find ~ -name "*.log" -print - 查找当前目录及子目录中文件名以一个大写字母开头的文件 find . -name "[A-Z]*" -print - 从根目录查找文件名为test开头的所有文件 find / -name "test*" -print - 当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件 find . -perm 755 -print - 在$HOME目录中查找文件属主为test的文件 find ~ -user test -print - 查找属主帐户已经被删除的文件,可以使用-nouser选项。在/home目录下查找所有的这类文件 find /home -nouser -print - 在/apps目录下查找属于gem用户组的文件 - 查找没有有效所属用户组的所有文件 find / -nogroup -print - 从根目录开始查找5天内被更改的文件 find / -mtime -5 -print - 在目录/etc中查找3日之前更改的文件 find /etc -mtime +3 -print - 在/etc目录下查找所有的目录 find /etc -type d -print - 在/etc目录下查找所有的符号链接文件 find /etc -type l -print
-
chmod更改文件权限
-
首先认识一下文件 ll查看文件信息
r: 4
w:2
x:1
-
chmod的基本语法
命令格式: chmod [options] mode files mode: u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是 表示增加权限、- 表示取消权限、= 表示唯一设定权限 r 表示可读取,w 表示可写入,x 表示可执行 options: -c : 若该文件权限确实已经更改,才显示其更改动作 -f: 文件权限无法修改,不显示错误信息 -r: 对当前目录下的所有文件和子目录进行递归修改 示例: 给file文件的所有者增加可执行权限 chmod u+x file 给file的所有者分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限 第一种方式: chmod 751 file 第二种方式: chmod u=rwx, g=rx, o=x file 为所有用户分配读权限 chmod =r file chmod a-wx, a+r file 这两种命令作用相同 递归地给directory目录下所有文件和子目录的所有者分配读的权限 chmod -r u+r directory
-
-
grep文本搜索
-
-o 只输出匹配的文本行 VS -v 只输出没有匹配的文本行
-
-
-c 统计文件中包含文本的次数
grep -c “text” filename
-
-
-n 打印匹配的行号
-
-i 搜索时忽略大小写
-
-l 只打印文件名
-- 基本语法 r递归 grep '搜索的关键字' -r -element(参数) --匹配单个加递归 grep "class" -r -n --匹配多个加递归 grep -e "log" -e "class" -r -n --管道(如果相加多个选项的话,可以直接使用|) ps -ef |grep tomcat | ps -u root --查看进程里面的内容为tomcat用户为root的内容
-
-
wc统计行和字符的工具
$wc -l file // 统计行数 $wc -w file // 统计单词数 $wc -c file // 统计字符数
切换linux为国内源
-
备份linux自带的源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
-
生成阿里源
cd /etc/yum.repos.d wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
-
清空缓存
yum clean all
-
重新生成缓存
yum makecache
Linux目录解释
-
目录 作用 /usr 全称(Unix Software Resource),该目录用于存放软件资源,FHS建议开发者,将软件产品的数据合理放在该目录的子目录下,有点类似于Windows中的c:\windows,与c:\Program files的综合体 /usr/bin/ 存放系统命令,普通用户和超级用户都可以执行 /usr/sbin/ 存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用 /usr/lib/ 应用程序调用的函数库保存位置 /usr/local/ 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置 /usr/share/ 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录 /usr/src/ 源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里, (也可以按照自己的习惯,将手动下载的源码包放在/usr/local/src, 内核源码放在/usr/src/linux中) /usr/include C/C++ 等编程语言头文件的放置目录 /var 用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等 /var/lib/ 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在 /var/lib/mysql/ 目录中 /var/log/ 登陆文件放置的目录 /var/run/ 一些服务和程序运行后,它们的 PID(进程 ID)保存位置 /var/spool/ 里面主要都是一些临时存放,随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务 /var/www/ RPM 包安装的 Apache 的网页主目录 /var/tmp 一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再行删除 /home 用户家目录,以每个用户的名称命名,存放每个用户的数据 /dev/ 设备文件保存位置 /etc/ 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 /opt/ 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。按照个人习惯也可以放在 /usr/local/ /root/ root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下 /sbin/ 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看 /srv/ 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 /tmp/ 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据
安装jdk tomacat mysql redis
jdk的安装和配置环境变量
-
首先在/home创建一个文件夹 (这里用的是tools)
然后官网下载jdk和tomcat并把它上传到tools文件夹
然后在解压缩
-
安装jdk
-
首先检查是否已经存在
java -version -- 如果有的话就需要卸载 rpm -qa|grep jdk //查看jdk相关 rpm -e --nodeps 上一个命令查出的东西
-
安装
配置环境变量
1)vi /etc/profile 2)在最后面配置JDK环境变量: #java environment export JAVA_HOME=/home/tools export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export PATH=$PATH:${JAVA_HOME}/bin 3)设置环境变量生效 source /etc/profile 4)检查JDK环境变量 java -version
安装成功后
-
tomcat配置环境变量
-
首先上传到home/tools目录,解压缩
-
修改 /etc/profile
export TOMCAT_HOME=Tomcat解压路径 source /etc/profile
3.启动tomacat
到你的tomacat的解压目录下的bin目录启动
./startup.sh 启动
./shutdown.sh 关闭
想要别人看到的话需要开启端口。tomcat默认的端口是8080
firewall-cmd --zone=public --add-port=8080/tcp --permanent --开启端口
firewall-cmd --reload -- 重启防火墙
创建启动脚本
将tomcat目录下bin中的catalina.sh拷贝到/etc/init.d下,重命名为tomcat,为所有用户增加可执行权限。
#将catalina.sh拷贝到init.d目录下
cp /opt/apache-tomcat-8.5.20/bin/catalina.sh /etc/init.d
#在init.d目录下为catalina.sh重命名
mv catalina.sh tomcat
#为所有用户赋可执行权限
chmod a+x tomcat
#编辑tomcat
vi /etc/init.d/tomcat
#进入编辑界面,加入如下内容,注意根据自己的环境配置
#!/bin/sh
JAVA_HOME=/usr/local/java/jdk1.8.0_151
CATALINA_HOME=/opt/apache-tomcat-8.5.20
#测试启动脚本
service tomcat status #查看服务状态,q键退出
service tomcat start #启动服务
service tomcat restart #重启服务
service tomcat stop #停止服务
service --status-all #查看服务列表 q键退出
配置tomcat随服务器自动启动
#编辑/etc/init.d/tomcat
vi /etc/init.d/tomcat
#加入如下注释,注意是注释,#
#chkconfig: 23456 10 90
#description: tomcat service
使用chkconfig --add命令添加服务:
chkconfig -add tomcat
完成可以查看是否添加成功
chkconfig --list
关于chkconfig命令
-- 语法
chkconfig --list [name]
chkconfig --add name
chkconfig --del name
chkconfig [--level levels] name <on|off|reset>
chkconfig [--level levels] name
chkconfig --list :显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。
chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。
chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。
chkconfig [--level levels] name <on|off|reset>:设置某一服务在指定的运行级是被启动,停止还是重置。例如,要在3,
[root@localhost /]# cd /usr/local/mysql/bin
[root@localhost bin]# ./mysqld --initialize --user=mysql --datadir=/home/tools/mysql/data --basedir=/home/tools/mysql
-- 重启虚拟机,通过
systemctl status tomcat 查看运行状态
安装Mysql(离线安装)
首先要准备源码的包
可以去官网下载自己想在的版本
把文件上传到虚拟机上(一般放到/usr/local)
-
查看mariadb是否安装(有的话卸载,会引起冲突)
rpm -qa|grep mariadb--查看是否有mariadb rpm -e --nodeps 文件名--卸载
-
创建mysql用户组,并添加用户
groupadd mysql --创建名为mysql的用户组 useradd -g mysql mysql --增加一个用户为mysql组
-
在/usr/local创建一个文件来装解压的内容
mkdir mysql --创建mysql文件夹 tar -xvf -C mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar mysql --加压文件并到mysql目录(前提是你在/usr/local文件夹,不然mysql需要全名 /usr/local/mysql)
-
安装
--安装前先检查是否安装libaio,如果未安装请先安装之后再装server源 rpm -qa |grep libaio
--如果上述操作可以执行安装 rpm -ivh mysql-community-common-5.7.23-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.23-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.23-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.23-1.el7.x86_64.rpm --安装完成后初始化 mysqld --initialize --初始化后就可以启动服务了 systemctl start mysqld -- 可能会报失败 /var/lib/mysql没有权限导致启动失败!!! -- 更改mysql数据库目录的所属用户及其所属组 chown mysql:mysql /var/lib/mysql -R -- mysql目录授权 cd /var/lib chmod -R 777 mysql --然后就可以启动服务了 systemctl start mysqld systemctl status mysqld--查看状态 systemctl stop mysqld--关闭 systemctl restart mysqld--重启
-
登陆
查看随机生成的密码
grep 'password' /var/log/mysqld.log
然后通过
mysql -u root -p
-
设置密码
-- 使用初始密码登录,然后修改为自己的密码, mysql默认对密码是有要求的,不能简单的设置为1234等,自己的测试库不用太复杂,可以关闭密码检查 set global validate_password_policy=0; set global validate_password_length=1; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
-
赋值外网可连权限
mysql> grant all privileges on *.* root@'%' identified by '123456'; mysql> flush privileges; mysql> exit
-
添加3306端口到防火墙
firewall-cmd --zone=public --add-port=3306/tcp --permanent --添加 firewall-cmd --reload --重启
-
使用sqlyog连接
如果想要mysql开机自启的话
systemctl enable mysqld
systemctl daemon-reload
mysql在线安装
1)下载MySql源安装包
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
2)安装MySql源
yum localinstall mysql57-community-release-el7-8.noarch.rpm
3)安装MySql
yum install mysql-community-server
4)启动MySql服务
systemctl start mysqld
5)查看MySql启动状态
systemctl status mysqld 或 service mysqld restart
6)开机自启动
systemctl enable mysqld
systemctl daemon-reload
7)修改root本地登录密码(查看生成的随机密码)
grep 'password' /var/logs/mysqld.log
8)使用随机密码登录MySql
mysql -u root -p
注:输入随机密码
9)重置密码
set password=password('1234');
10)授权外网登录账户(zking/1234)
grant all privileges on *.* to 用户名@'%' identified by '密码';
11)刷新修改配置
flush privileges;
Redis简介
Redis是开源免费的,遵守BSD协议,内存中的数据结构存储系统,他可以作为数据库,缓存和消息中间件。
特点:
-
支持数据的持久化,可以将内存中得到数据保存到硬盘,在重启后再次加载使用
-
支持的数据结构丰富,String ,List,Set,Zset,Hash...
-
支持数据备份,master-slave模式进行数据备份
优势
- 性能高,Redis能读的速度是110000次/s,写的速度是81000次/s
- 数据类型丰富
- 原子性,redis中的所有操作多是原子的,并且多个操作也支持原子性
- 丰富的特性,如通知,key过期时间.....
Redis离线线安装
首先安装redis需要准备3个软件apt-get gcc和make,为了方便安装可以将用户切换导root(或者sudo)
-
查看gcc和make是否安装
which apt-get which gcc which make --如果这个个软件存在,就不需要下载。不存在请执行下面命令 yum install apt-get apt-get install make apt-get install gcc
关于gcc和make
Gcc(GNU Cimpiler Collection,GNU编译器套件),是由GNU开发的编译语言编辑器。它是以GPL许可证发行的自由软件,也是GNU计划的关键部分。Gcc是Linux下重要的编译工具
make工具的定义是通过编写的makefile脚本文件描述整个工程的编译,链接规则;通过脚本文件,对于过于复杂的工程也可以通过一个命令完成整个编译过程。类似于java中的maven
-
下在redis5
2.1到下载redis的linux版本
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
2.2对下载下来的gz包解压
tar -zxvf redis-5.0.3.tar.gz -C 你需要安装的目录
2.3编译-安装(进入你放置的redis解压目录的文件夹)
#编译 make #安装 make install
编译成功输出
安装完成输出
![img](linux.assets/Image [1].png)
也可以查看编译完成的reids命令文件
文件 作用 /usr/local/bin/redis-benchmark 性能测试工具 /usr/local/bin/redis-check-aof 更新日志检查 /usr/local/bin/redis-check-dump 本地数据文件检查 /usr/local/bin/redis-cli 命令行操作工具 /usr/local/bin/redis-server 服务器程序 在执行编译后,安装之前,可以选择性的执行make test,我们下载的一般都是release版本,该步骤是可选的(该步骤运行所有的单元测试代码,需要较长的时间),如果执行时报:You need tcl 8.5 or newer in order to run the Redis test,则需要先安装tcl,可以使用:
wget https://nchc.dl.sourceforge.net/project/tcl/Tcl/8.6.8/tcl8.6.8-src.tar.gz执行安装。2.4修改配置文件
vim 你redis安装的路径/redis.conf
配置文件需要做如下修改:
- #bind 127.0.0.1 改行限制redis只能本机访问,需要注释掉
- port 6379 设置redis的访问端口,一般保存为默认值6379即可
- protected-mode no 关闭保护模式,如果开启则需要将可以访问redis的机器IP地址配置到bind属性中,同时为redis设置访问密码
- daemonize yes 开启守护进程模式。在该模式下,redis会在后台运行,并将pid写入到redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。
- requirepass 123456 设置访问密码,如果protected-mode设置为yes,则必须设置密码
- pidfile /var/run/redis_6379.pid,如果使用默认端口则保持默认值即可。
- logfile /usr/local/redis/redis-5.0.3/redis_log.log 设置redis日志
- dir redis位置,默认为./ 当前目录,保持默认值。
2.5启动服务
redis-server 安装目录/redis.conf
启动成功后可以通过如下命令查看:
ps -aux|grep redis
![img](linux.assets/Image [2].png)
关闭
redis-cli shutdown
-
服务自启动
3.1如果是是跟着我的上述操作,会在安装目录下有一个utils目录
3.2进入utils目录,并指向install_server.sh脚本
./install_server.sh
第一个确实是你6379直接回车
第二个是你的安装路径+redis.conf
第三个是你的日志 至直接回车
第四个是你的数据目录 直接回车
该命令是交互式的,需要交互式的输入port, redis.conf,log文件等。
成功后
3.3执行了./install_server.sh脚本后会在你的etc/init.d目录下可以看到redis_6379这个自启动的脚本文件
也可以通过chkconfig --list查看
如果是需要被外部主机访问的话需要将6379添加到防火墙
firewall-cmd --zone=public --add-port=6379/tcp --permanent --添加
firewall-cmd --reload --重启