Linux学习笔记
1.window和linux区别
Window 适合民用,娱乐。有强大的日志系统和桌面应用。但是容易卡(持续不断的进行日志和持续不断的进行桌面应用渲染)
Linux 正规开发一般是用linux
正规项目部署在linux上
2.linux历史
Linux诞生在90年代,是仿制unix而来。Unix是商业版,需要收费。Unix免费版功能比较少。一般公司用unix都是用商业版,付费。
Unix有的功能linux都有,linux比unix还强大。linux正在逐渐替代unix。Unix不是开源的,Linux是开源的,免费的。
Linux使用场景,服务器操作系统,移动设备(安卓手机,平板电脑安卓系统),安卓操作系统底层是linux,无线路由器(wifi),交换机,智能家居,java程序开发慢慢移植到linux上
3.linux版本
Linux内核版本:linux内核运维开发小组。 相当于 苹果6 苹果7
内核版本源码在一定程度上不是开源的
Linux发行版本:由各大互联网/软件公司定制 相当于 苹果6绿色的手机壳,苹果7彩色的手机壳
外围的样式源码完全开放。
一个内核版本是由多种多样的发行版本。
Ubuntu:以强大的桌面应用为主,吸收了不少windows用户。因为桌面应用会在一定程度上大量占用系统资源,开发。服务器部署上,不会优先选择ubuntu
CentOs:对服务器性能进行了一定程度的优化,性能比较高,比较稳定。
服务器操作系统的优选CentOs
4.虚拟机
虚拟机:是一台虚拟的计算机(由软件虚拟出来的计算机)
虚拟记事本:记事本软件(虚拟的记事本)
虚拟机安装:
将杀毒软件关闭,将防火墙关闭。 22端口。
使用管理员权限安装
5个服务需要启动
5.Linux安装
Linux有一个超级管理员,用户名root,密码安装的时候设置
6.CRT远程连接Linux
远程连接。
CRT是远程连接linux工具。
鼠标右键 粘贴
文件上传 alt+p 上传窗口
Linux桌面 /root,上传的文件可以在 root目录中寻找。
7.Linux命令
Java程序员只用几个目录
/ 根目录
etc 系统配置文件存放目录。防火墙,网络设置文件,jdk环境配置文件,mysql配置文件,redis配置文件。
usr 应用程序存放目录。jdk,tomcat,mysql,redis,nginx
root 系统管理员root的家目录。
每个用户都有一个家目录。只需记住超级管理员root家目录是 /root,相当于window的桌面,所有的操作都是从root目录开始的,~代表家目录。
以上的建议并不是强制性约束。
Linux中的参数一般是无序的 如 ls -al 、 ls -la 特殊情况下除外。
Ifconfig查看ip
ls命令
ls(查看目录)
ls -a或者-all(展示出所有的文件,有隐藏的文件,带点的是隐藏文件或者隐藏文件夹)
ls -l(竖着展示列表) 简写为 ll
ls -al
ls –lah 简写为ll -h(比较友好的展示,比如单位字节变成K)
需求:想要查看 /etc下的内容 ll -h /etc
d表示目录(文件夹) -表示文件夹 l表示 链接
cd命令
cd ../(或者cd ..) (向上一层目录)
cd /(切换到linux的根目录)
cd /目录名 切换到指定目录中 /目录名 是linux的绝对路径
cd ~(直接切换到当前用户的家目录中,root用户的家目录是 root目录)
cd -(切换到上一次目录)
Linux绝对路径(一般用这个):cd /etc/x1 (先切换到/目录,然后在/目录中找到etc,在etc中找到子目录x1),在任意目录都可以用这个命令进行切换
Linux相对路径:cd x1/x2 在当前目录中找子目录x1,在x1中找子目录x2.必须确定在当前目录下有子目录x1.
pwd命令
pwd(显示工作目录)
makdir t1(创建目录)
需求:需要在/root/t1 目录下创建t2目录
位置:/root
命令:mkdir t1/t2 (相对路径)
mkdir /root/t1/t2(绝对路径)
需求:需要在 /root/t3 目录下创建一个t4目录
位置:/root
条件:t3和t4都不存在
命令:mkdir -p t3/t4(父目录不存在的时候自动创建父目录)
mkdir -p 文件夹名称(以后就这么玩)
rmdir 文件夹名称,不常用(删除空目录)
文件浏览命令
日志文件,xml文件,properties文件
cat 文件名(快捷查看当前文件的内容)适合查看少量信息的文件
more 文件名 (分页显示文件内容,还支持直接跳转行等功能。)适合查看大文件
操作:
Enter 向下n行,需要定义。默认1行。
空格键 向下滚动一屏 或 ctrl+F
B 返回上一屏 或 ctrl+B
q 退出more
less -mN 文件名 (可以分页查看文件内容,标志每行的行号) 适合大文件查看
参数:
-m 显示类似more命令的百分比
-N 显示每行的行号。
tail -数字 文件名 可以查看文件后几行的内容。
tail -10 文件名 查看文件的后10行内容
文件操作命令
文件复制
cp (复制文件或者复制目录)
cp 需要复制的文件 复制的位置
需求:把/root/Demo1.java文件 复制到 /root/t1 目录中
位置:/root
命令:cp Demo1.java t1(这种玩法是相对目录的玩法)
cp /root/Demo1.java /root/t1(这种玩法是绝对路径玩法)
需求:把/root/Demo1.java文件 复制到 /root/t1 目录中,改名为ddd.java
位置:/root
命令:cp Demo1.java t1/ddd.java(这种玩法是相对目录的玩法)
cp /root/Demo1.java /root/t1/ddd.java(这种玩法是绝对路径玩法)
复制目录
cp -r(r参数是递归处理)需要复制的目录 复制的位置
需求:把/root/t5 目录 复制到 /root/t1 目录中
位置:/root
命令:cp -r t5 t1 (相对路径玩法)
cp -r /root/t5 /root/t1(绝对路径玩法)
mv命令
文件/目录 移动
mv 需要移动的文件 移动的位置
需求:把/root/t5 目录 移动到 /root/t3 目录中
位置:/root
命令:mv t5 t3
需求:把/root/t5 目录 移动到 /root/t3 目录中(不询问,直接覆盖)
位置:/root
已知:/root/t3目录中 已经有一个t5目录了
命令:mv -f t5 t3
文件/目录的更名操作
需求:把/root/Demo1.java 改名为 here.java
位置:/root
命令:mv Demo1.java here.java
文件删除
删除文件
rm 文件名
rm -f 文件名(不询问)
删除目录
rm -rf 目录名(删除目录下的所有目录)(r是递归处理,f是不询问)
需求:删除 /root/t5 目录
位置:/root
已知:t5目录下有子目录或者文件
命令:rm -rf t5
注意:rm -rf *(删除当前目录下的所有内容)
rm -rf /*(删除linux系统根目录下所有内容)
find命令(查找命令)
find 目录名 -name ‘需要查找的字符串’
find /root -name ‘ins*’
需求:查找 /root目录下 所有以ins开头的文件或者目录
位置:/root
命令:find /root -name ‘ins*’
文件编辑
Window有记事本
Linux也有类似记事本的功能
vim 命令
一般模式:可以浏览文件内容,可以进行文本快捷操作。单行复制,多行复制,单行删除,多行删除。。。(按i键可以进入插入模式,按:可以切换到底行模式)
插入模式:可以编辑文件内容。按(esc键切回一般模式)
底行模式:可以进行强制退出操作。q!(这个不保存)
可以进行保存并退出。Wq
grep和管道
grep是正则表达式,可以字符串的搜索工作。
格式:grep 需要搜索的字符串 搜索的文件名
符合规则就会返回符合规则的行。
grep -i 忽略大小写查询数据
管道命令:可以连接多个Linux命令
| shift+\
命令1 | 命令2 |命令3
需求:查询当前目录中所有带ins的行数据
位置:/root
思考:查询当前目录 ll
查询字符串,返回字符串所在行 grep
命令: ll | grep ins
压缩、解压命令【重要】
Linux压缩包 *.tar(打包,大小不会进行压缩)
*.tar.gz(打包并压缩文件的大小)
压缩:
tar -zcvf 压缩包名字.tar.gz 需要压缩的内容
例如:tar -zcvf hehe.tar.gz * 将当前目录下所有内容进行打包压缩,生成压缩文件 hehe.tar.gz
解压
tar -zxvf 需要解压的压缩包名称 解压到当前目录
tar -zxvf 需要解压的压缩包名称 -C 指定压缩目录 解压到指定目录中
需求:需要把/root/t5/hehe.tar.gz 压缩包 解压到指定目录中。指定目录是/root/t5/t5
位置:/root/t5
命令:tar -zxvf hehe.tar.gz -C /root/t5/t5
tar -zxvf hehe.tar.gz -C t5
系统命令
查看系统进程
ps -ef
需求:查看进程中和 vim相关的进程
命令:ps -ef | grep -i vim
杀死进程
kill -9 pid号
需求:查看进程 和 vim相关的进程有哪些,并将vim进程杀死
命令:ps -ef | grep -i vim
kill -9 pid号
Ifconfig(查看网络配置)
ping ip地址(测试和目标的连通性)会持续不断一直测试,ctrl+c退出
reboot(重启CentOs)
halt(直接关机)
其他命令
网络设置 setup 建议使用CRT运行 setup 这个会显示中文
文件权限
第一部分:第一位,文件的类型(d目录,-普通文件,|超链接文件)
第二部分:所属用户权限。文件属于哪个用户 u
第三部分:所属组权限。 所属用户所在组别 g
第四部分:其他用户权限。 文件不属于该用户,不属于该用户所在组。 O
所有用户 a
r read 读取权限
w write 写入权限
x 执行权限
- 没有权限
权限更改
chmod 权限设置 需要更改权限的文件名
更改Demo1.java 所属用户的权限为所有权限 chmod u=rwx Demo1.java
更改Demo1.java 所属组 用户权限为r-x chmod g=rx Demo1.java
更改Demo1.java 所有用户 用户权限为r chmod a=r Demo1.java
更改文件夹权限
chmod -R 权限设置 需要更改权限的目录名
更改t1文件夹中所有文件的权限。所属用户的权限 r-- chmod -R u=r t1
Linux安装jdk,mysql,jdk
1.准备工作
Window 控制面板 添加/卸载程序
进行程序安装、更新、卸载、查看。
Setup.exe
rpm命令:相当于winow的添加/卸载程序
进行程序的安葬、更新、卸载、查看。
本地程序的安装:rpm -ivh 程序名
本地程序查看: rpm -qa
本地程序卸载:rpm -e --nodeps 程序名
yum命令:相当于可以联网的rpm命令
相当于先联网下载程序安装包、程序的更新包
自动执行rpm命令
rpm -qa(q是查询,a是所有) 查看(linux系统安装的程序)
rpm -qa | grep -i java
java –version
rpm -qa | grep -i java
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
java –version
Linux安装JDK
#set java environment
JAVA_HOME=/usr/local/java/jdk1.7.0_79
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
source /etc/profile
Linux安装Mysql
/usr/bin/mysqladmin -u root password '123456'
chkconfig --add mysql(加入到系统服务中)
chkconfig mysql on(开启自动启动)
chkconfig mysql off(关闭自动启动)
grant all privileges on *.* to 'root' @'%'identified by '123456';
flush privileges;
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save
Linux安装tomcat
./是当前目录
./startup.sh
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
/etc/rc.d/init.d/iptables save
Linux安装redis
关系型数据库(SQL)
Mysql,oracle
特点:数据和数据之间,表和字段之间,表和表之间是存在关系的。
例如:部门 001部门 员工表 001
用户表,用户名、密码
分类表 和商品表,一对多关系。
优点:1)数据之间有关系,进行数据的增删改查时非常方便的。
2)关系型数据库,有事务操作。保证数据的完整性。
缺点:1)因为数据和数据之间是有关系的,关系是由底层大量算法保证的。
大量算法会拉低系统的运行速度
大量算法会消耗系统资源
2)海量数据的增删改查会显得无能为力。某些操作很可能宕机
3)海量数据环境 下对数据表进行维护,也会变得无能为力。
适合处理一般量级的数据,数据安全。(钱)
非关系型数据库(NOSQL)
为了处理海量数据,需要将关系型数据库的关系 去掉。
非关系型数据库设计之初 是为了替代 关系型数据库的。
Redis
优点:1)海量数据的增删改查非常轻松应对。
2)海量数据的维护非常轻松。
缺点:1)数据和数据之间没有关系,所以不能一目了然。
2)非关系型数据库,没有关系,没有强大的事务保证数据的 完整和安全。
适合处理海量数据,有效率,数据不一定安全。(统计数据(不重要的数据),奥运健儿奖牌总数)查询频繁。
关系型数据库+非关系型数据库===》项目
| |
重要数据 海量操作数据,数据不重要
Redis的使用环境
1)关系型数据库的缓存存在。
2)可以作任务队列
3)大量数据运算
4)排行榜(微博热搜)redis非常擅长做大量数据的排行榜
NoSQL
安装redis
tar -zxvf redis-3.0.7.tar.gz
cd
make(编译)
make PREFIX=/usr/local/redis install(安装)
前端启动(了解,无法部署集群)
命令:./bin/redis-server
集群{[1][2][3][4]}4个计算机连在一起
运行redis客户端
./bin/redis-cli -h 127.0.0.1 -p 6379
Redis后端启动
daemonize yes(redis.conf)
./bin/redis-server ./redis.conf
./bin/redis-cli shutdown(客户端启用shutdown命令)
Redis数据类型
redis使用键值对保存数据(map)
key全部都是字符串
value有5种数据类型:
key名字是自定义的
注意:key名不要过长,否则影响使用效率
Key不要过短,最好是有意义。
二进制安全和数据安全是没有关系的。
Mysql关系型数据库,二进制不安全【乱码丢失数据】
Redis二进制数据安全。
赋值
incrby num1 10
decrby num1 10
String使用环境:
主要用于保存json格式的字符串。
hset hash1 uname zhangsan
hget hash1 uname
hmset hash2 uname zhangsan age 18 sex man
hmget hash2 uname age
hgetall hash2
del hash2
hincrby hash1 age 10(只能操作数字)
hexists hash1 uname(判断uname是否存在)
hlen hash1(hash1有多少个字段)
hkeys hash1 (返回所有的key)
hvals hash1 (返回所有的values)
keys *
Redis有什么命令,jedis就有什么方法。
Jedis jedis=new Jedis(“192.168.236.123”,6379);
Jedis连接池
抽取连接池工具
Redis-LinkedList【重点】
Java list:数组ArrayList
链表LinkedList
为什么redis选取了链表?
Redis操作中,最多的操作是进行元素的增删。
使用环境:1)做大数据的增删。
2)做任务队列
lpush list2 a b c d
rpush list2 a b c d
lrange list1 0 3
lrange list1 0 -1
llen list2
扩展命令:
Set
Java HashSet 无序,不重复。
Redis操作中,涉及到两个大数据集合的并集,交集,差集运算
扩展命令
有序set集合:有序,不重复
小明,小红,小张 每个元素都需要手动赋予一个分数。
5000 小明 1000小红 500小张
集合 500 小张
1000 小红
5000 小明
集合倒序:
5000 小明
1000 小红
500 小张
有序set集合,专门用来做排行榜。
通用命令
keys ????? (匹配4位)
默认时间是永久时间
订阅新闻,新闻的发布
move username 1(把当前username移动到1号数据库中)
清空当前数据库:flushdb
清空redis中所有数据库:flushall