1、Linux-服務(wù)+網(wǎng)絡(luò)端口號(hào)
服務(wù):一般在后臺(tái)運(yùn)行
centos6有7種運(yùn)行級(jí)別,系統(tǒng)啟動(dòng)時(shí)會(huì)按照配置的一個(gè)運(yùn)行級(jí)別啟動(dòng),然后使用init.d再根據(jù)此運(yùn)行級(jí)別去判斷服務(wù)是否在此級(jí)別中啟動(dòng)。到centos7時(shí)只保留了3和5
1.1 在centos6中如何管理服務(wù)(centos7也兼容6的服務(wù)管理命令)
1-? chkconfig? --list? ? :查看服務(wù)運(yùn)行級(jí)別
2-? service? firewalld? status? 查詢服務(wù)的狀態(tài)
3-? service firewalld start? 啟動(dòng)服務(wù)
4- service? firewalld? stop? 停止服務(wù)
防火墻,端口號(hào)一般都被防火墻過(guò)濾掉,只暴露22端口號(hào)
5-? ll? /etc/init.d/? 查看init進(jìn)程管理的服務(wù)文件夾
6-? chkconfig --level 2 network off? 設(shè)置指定的服務(wù)在指定運(yùn)行級(jí)別關(guān)閉
7- chkconfig --level 2 network on? ? 設(shè)置指定服務(wù)在指定運(yùn)行級(jí)別啟動(dòng)
1.2 在centos7中管理服務(wù)(centos7天字第一號(hào)進(jìn)程是systemd,只有3和5兩個(gè)運(yùn)行級(jí)別)
1- systemctl list-unit-files? 查看所有的服務(wù)列表
ctrl+c 退出列表
查詢指定的服務(wù):systemctl? list-unit-files |grep firewalld
2- systemctl status 服務(wù)名 :查看服務(wù)器的狀態(tài)
3- systemctl start 服務(wù)名? :?jiǎn)?dòng)指定服務(wù)
4- systemctl? stop 服務(wù)名:停止服務(wù)
5- systemctl? diable 服務(wù)名:設(shè)置服務(wù)開(kāi)機(jī)禁止啟動(dòng)
6- systemctl enable 服務(wù)名: 設(shè)置服務(wù)開(kāi)機(jī)自啟
7-? systemctl get-default : 查看當(dāng)前系統(tǒng)的運(yùn)行級(jí)別
8- systemctl set-default? multi-user.target/graphical.target: 設(shè)置系統(tǒng)的運(yùn)行級(jí)別
1.3? 網(wǎng)絡(luò)端口號(hào)查詢
netstat? -anp | grep? 端口號(hào)
將springboot項(xiàng)目上傳到虛擬機(jī)的/opt目錄下
java -jar xxxx.jar?
主機(jī)瀏覽器訪問(wèn):http://虛擬機(jī)ip地址:8080/hello
如果虛擬機(jī)控制臺(tái)沒(méi)有報(bào)錯(cuò),虛擬機(jī)防火墻將請(qǐng)求攔截了
netstat -anp|grep 8080
kill -9 1490 :殺死占用端口號(hào)的進(jìn)程
2、Linux-用戶權(quán)限命令(了解)
id? 用戶名: 查看用戶
useradd? 用戶名:新增用戶
通過(guò)useradd的方式添加的用戶都是普通用戶,所有的用戶的家目錄都會(huì)創(chuàng)建在/home目錄下
passwd? 用戶名:設(shè)置密碼
whoami: 查看當(dāng)前正在使用系統(tǒng)的用戶
who am i :查看登錄的用戶
su 用戶名:? 切換用戶
從超級(jí)管理員切換到普通用戶不用輸入密碼
從普通用戶到root需要輸入密碼
userdel -r? 用戶名:刪除用戶和他的/home目錄下的家目錄文件
groupadd? 組名: 創(chuàng)建用戶組
usermod -g? 組名? 用戶名: 將用戶添加到組中
useradd -g 組名? 新用戶名:新創(chuàng)建用戶并分配到組中
groupdel 組名:刪除組
groupmod -n 新組名 舊組名:修改組名
/etc/passwd :存儲(chǔ)用戶的信息
/etc/shadow:存儲(chǔ)用戶的影子信息[密碼]
/etc/group :組
權(quán)限:
列表中的第一列代表文件類型權(quán)限
代表權(quán)限的第一列除了.,剩下10位
第一位:代表文件類型? d代表文件夾,-代表文件, l代表鏈接
第2~4位: u 代表文件擁有者的權(quán)限
rwx:? ? 如果使用-代表其中一個(gè),就表示沒(méi)有這個(gè)權(quán)限(r-x? 可讀可執(zhí)行? 不能寫)
r:read? 讀權(quán)限? , w:write寫權(quán)限 , x:excute執(zhí)行權(quán)限
第5~7位: g 代表文件擁有者所在組的成員擁有的權(quán)限
第8~10位:o 代表和文件擁有者不再同一個(gè)組的其他成員的權(quán)限
修改文件夾的權(quán)限:
第一種(不推薦):直接使用? rwx表示權(quán)限進(jìn)行設(shè)置
chmod? g=rx? laohan? :添加權(quán)限
chmod g-rx? laohan:刪除laohan文件夾的組的權(quán)限
第二種(推薦):將權(quán)限使用數(shù)字描述
r=4? w=2? x=1
chmod 750? laohan : 第一組權(quán)限全部設(shè)置,第二組權(quán)限設(shè)置rx,第三組沒(méi)有權(quán)限
第三列代表文件的擁有者
第四列代表文件擁有者所在的組
chgrp? 組名? 文件夾名:修改文件夾所在組
chown -R? 用戶名? 文件夾名:遞歸修改文件夾和他內(nèi)部所有文件的擁有者
3、Linux-安裝卸載命令
3.1 本地安裝
rpm? -qa |grep? -i? firewalld? :查詢已安裝的程序,并忽略大小寫篩選結(jié)果
rpm -e? 安裝包名:? 卸載已安裝的程序
rpm -ivh? 安裝包名: 安裝程序
安裝操作系統(tǒng)時(shí),系統(tǒng)壓縮包自帶了非常多的應(yīng)用,可以在光驅(qū)加載的ISO鏡像中找到火狐瀏覽器的安裝包(/run/media/root/CentOS 7 x86_64/Packages)
cd? /run/media/root/CentOS 7 x86_64/Packages
?
rpm -ivh firefox-52.2.0-2.el7.centos.x86_64.rpm
3.2 遠(yuǎn)程聯(lián)網(wǎng)安裝
centos提供了中央軟件庫(kù),可以通過(guò)yum命令遠(yuǎn)程連接下載程序自動(dòng)安裝
yum? list |grep? -i? firefox:? 聯(lián)網(wǎng)搜索指定的程序安裝包
yum? install? firefox.x86_64? : 安裝指定的程序
4、Linux-開(kāi)發(fā)環(huán)境搭建
4.1 jdk
1、拷貝課件中的已經(jīng)下載好的jdk到虛擬機(jī)的/opt目錄下
2、切換到opt目錄下,解壓縮壓縮包
tar -zxvf? 壓縮包名 :解壓縮所有的壓縮包
jdk解壓可用,無(wú)需安裝,但是jdk的命令在bin目錄下[/opt/jdk1.8.0_152/bin]
在控制臺(tái)執(zhí)行jdk的命令時(shí),系統(tǒng)默認(rèn)從path環(huán)境變量中查找對(duì)應(yīng)的命令,我們自己解壓的jdk沒(méi)有配置到環(huán)境變量中,所以不能使用
3、將自己解壓的jdk的bin目錄配置到linux系統(tǒng)的環(huán)境變量中
vim /etc/profile
在文件最后:shift+g
JAVA_HOME=/opt/jdk1.8.0_152
PATH=/opt/jdk1.8.0_152/bin:$PATH
exportJAVA_HOME PATH
source /etc/profile:重新加載環(huán)境變量
====? 啟動(dòng)tomcat時(shí)
4.2 mysql
1、檢查是否存在已安裝的mysql
[root@atguigu bin]# rpm -qa|grep -i maria
mariadb-libs-5.5.56-2.el7.x86_64
2、卸載已安裝的mysql[mysql安裝時(shí)會(huì)安裝其他的多個(gè)依賴]
rpm -e --nodeps mariadb-libs
3、檢查mysql以后要使用的文件夾的權(quán)限[/tmp]
chmod 777 /tmp
4、安裝mysql
cd /opt/MySQL/
rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
5、檢查是否安裝成功
rpm -qa|grep -i mysql
6、使用mysql客戶端連接mysql服務(wù)端
? 如果報(bào)以下錯(cuò)誤,表示mysql服務(wù)沒(méi)有啟動(dòng)
systemctl start mysql
ps -aux|grep -i mysql
//連接mysql,初始化安裝mysql沒(méi)有密碼
mysql -hlocalhost -P3306 -uroot -p
7、修改mysql編碼
//連接mysql后,查看mysql的字符編碼
show variables like '%char%';
//mysql默認(rèn)編碼為latin1,需要修改為UTF-8
//mysql安裝后,配置文件保存在 /usr/share/mysql/my-huge.cnf
linuxmysql啟動(dòng)時(shí),優(yōu)先在/etc下查找my.cnf配置文件作為mysql的配置,如果/etc下沒(méi)有此文件,mysql再到/usr/share/mysql/my-huge.cnf.
//將my-huge配置文件拷貝到/etc下一份,并改名為my.cnf
cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
//修改/etc/my.cnf,設(shè)置mysql的編碼格式為utf-8
在17行[client]下添加
default-character-set=utf8
在26行[mysqld]下添加
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
在138行[mysql]添加
default-character-set=utf8
保存退出
重啟mysql服務(wù)加載修改后的配置文件
service? mysql restart
mysql -uroot -p
8、修改mysql密碼
mysql5.5 密碼存在mysql 庫(kù)中的user表中
mysql保存用戶信息時(shí)存在mysql.user表中
host代表ip地址,user代表賬號(hào),password代表密碼,xxx_priv 代表權(quán)限
訪問(wèn)mysql時(shí),mysql識(shí)別用戶是通過(guò) 登錄賬號(hào)+登錄時(shí)的ip地址組合判斷賬號(hào)
root@localhost
刪除localhost? root以外的其他用戶: delete語(yǔ)句+條件刪除
修改用戶密碼:
select host ,user,password , select_priv? from mysql.user;
update mysql.user set password = password('123123');
或者 set password=password('123456');
?
修改后需要重啟mysql服務(wù): service mysql restart
9、遠(yuǎn)程連接mysql[主機(jī)使用sqlyog去連接虛擬機(jī)中的mysql]
原因: mysql? user表中,只有l(wèi)ocalhost地址才可以使用root用戶連接mysql服務(wù)
修改user表中的root@localhost用戶,將host修改為%(通配符,統(tǒng)配所用)
重啟mysql,再次使用sqlyog遠(yuǎn)程連接
10、安裝web測(cè)試工具? ab
使用yum安裝: yum install -y? httpd-tools
使用:
ab --help
ab -n8000 -c800? http://192.168.1.130:8080/hello
5、Nosql數(shù)據(jù)庫(kù)簡(jiǎn)介
6、redis簡(jiǎn)介
redis之前的版本只支持linux
只有l(wèi)inux才能最優(yōu)化的使用redis
7、redis安裝+啟動(dòng)停止
7.1 將redis安裝包拷貝到 虛擬機(jī)的/opt目錄下
7.2 解壓縮redis的壓縮包:tar -zxvf redis.tar.gz
7.3 查看redis的文件夾發(fā)現(xiàn)解壓之后的src是redis的源碼,需要先編譯才能安裝
redis是使用c語(yǔ)言開(kāi)發(fā)的,需要使用c語(yǔ)言的編譯命令
在redis目錄下執(zhí)行:make命令時(shí),報(bào)錯(cuò),原因:系統(tǒng)中沒(méi)有安裝c語(yǔ)言的環(huán)境
1、安裝c語(yǔ)言和c++的語(yǔ)言環(huán)境
yum install -y gcc
yum install -y gcc-c++
gcc -v
g++ -v
2、刪除上次make產(chǎn)生的錯(cuò)誤文件
make distclean
3、再執(zhí)行make進(jìn)行編譯
4、再執(zhí)行安裝命令: make install
5、如果執(zhí)行? redis-server? 能夠看到redis的啟動(dòng)界面,就代表redis安裝成功
ctrl+c? 可以關(guān)閉redis-server
redis安裝之后,命令存放在usr/local/bin下,命令可以在任意的地方執(zhí)行
redis-server? :redis服務(wù)端啟動(dòng)命令
redis-cli? :redis客戶端啟動(dòng)的命令
8、修改redis為后臺(tái)啟動(dòng)
redis默認(rèn)前臺(tái)啟動(dòng)(阻塞啟動(dòng))
8.1 在/下創(chuàng)建存放redis配置文件的文件夾
mkdir? /myredis
8.2 拷貝redis的配置文件到/myredis目錄下
? ? ? cp /opt/redis-4.0.0/redis.conf /myredis/
8.3 編輯 /myredis/redis.conf? 設(shè)置后臺(tái)啟動(dòng)
vim? /myredis/redis.conf
136行設(shè)置daemonize? 改為yes
保存退出
8.4 指定配置文件啟動(dòng)redis服務(wù)
redis-server /myredis/redis.conf
服務(wù)端默認(rèn)端口號(hào):6379
8.5 redis客戶端連接redis?
redis-cli? 默認(rèn)連接本機(jī)的6379端口號(hào)的redis服務(wù)端
ctrl+c退出redis-cli連接
redis-cli -h 127.0.0.1 -p 6379 :連接指定ip指定端口的redis服務(wù)
8.6 關(guān)閉redis服務(wù)
在redis-cli的連接中,ctrl+c只會(huì)關(guān)閉redis客戶端
方式1: 在linux命令中執(zhí)行? redis-cli? -h 127.0.0.1 -p 6379 shutdown
方式2:如果在redis-cli的連接中? shutdown
方式3: 可以通過(guò)redis進(jìn)程id殺死進(jìn)程? kill? 進(jìn)程id
8.7 redis簡(jiǎn)單使用+特點(diǎn)
redis默認(rèn)有16個(gè)庫(kù)。一般使用默認(rèn)的索引為0的庫(kù):select 0
dbsize? :查看redis存儲(chǔ)數(shù)據(jù)的條數(shù)
flushdb? : 清空當(dāng)前庫(kù)(慎用)
flushall:? 清空redis所有的庫(kù)
內(nèi)存數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)都是在內(nèi)存中操作,內(nèi)存操作速度非???,每個(gè)命令執(zhí)行時(shí)的時(shí)間短
Redis是單線程+多路IO復(fù)用技術(shù)
Memcached 是串行+多線程的方式
redis和Memcached三點(diǎn)不同: 支持多數(shù)據(jù)類型,支持持久化,單線程+多路IO復(fù)用
9、redis-key操作
1、查看所有的鍵:keys *
2、判斷某個(gè)鍵是否存在: exists? key?
返回1代表存在,0代表不存在
3、查看鍵對(duì)應(yīng)值的類型: type? key
4、刪除指定的鍵(鍵在值在,鍵光值亡): del key
5、給鍵設(shè)置過(guò)期時(shí)間:? expire key? seconds
6、查看鍵的過(guò)期時(shí)間:? ttl? key
返回>=0的數(shù)字,代表剩余數(shù)字對(duì)應(yīng)的秒數(shù)
返回-2 ,代表鍵已過(guò)期被刪除
返回-1 ,代表鍵永不過(guò)期
10、redis-五大數(shù)據(jù)類型-string
redis最常使用的數(shù)據(jù)類型就是string類型: java對(duì)象可以轉(zhuǎn)為字符串,圖片也可以轉(zhuǎn)為圖片
redis中string類型的大小最大可以為512m,redis的字符串二進(jìn)制安全
1、向redis中存入string鍵值對(duì):set? k? v
如果鍵相同,后設(shè)置的值會(huì)覆蓋之前的
2、獲取redis中指定鍵的值:? get? k
3、給redis中指定鍵的值追加內(nèi)容: append? k? ? appendStr
4、獲取鍵的值的長(zhǎng)度:? strlen? key
5、當(dāng)鍵不存在時(shí)才設(shè)置鍵值對(duì):? setnx? k? ? v
分布式鎖
6、設(shè)置值自增1? :? incr? k? ?
如果k的值已存在,必須時(shí)整形才可以自增
如果k不存在,默認(rèn)在0的基礎(chǔ)上+1
應(yīng)用場(chǎng)景: 計(jì)數(shù)器、密碼今天輸錯(cuò)的次數(shù)、秒殺庫(kù)存自減
7、設(shè)置值自減1 :? decr? k
8、自定義步長(zhǎng)增減:? incrby? k? count , decrby? k? count
9、設(shè)置鍵值對(duì)同時(shí)設(shè)置過(guò)期時(shí)間: setex? key? secods? val
使用場(chǎng)景:? 保存手機(jī)驗(yàn)證碼
10、批量操作
1、批量存入多個(gè)鍵值對(duì): mset k v k? v ....
2、批量獲取多個(gè)鍵的值: mget k1 k2 k3...
3、批量設(shè)置鍵值對(duì)當(dāng)鍵不存在時(shí):? msetnx k1 v1 k2 v2...
當(dāng)有一個(gè)鍵如果存在時(shí),所有的數(shù)據(jù)都保存失敗
所有的鍵都不存在時(shí),才可以存儲(chǔ)成功
redis命令具有原子性,命令執(zhí)行時(shí),必須成功或者失敗
java中的i++是否是原子操作?
不是,執(zhí)行時(shí),分為三步:先獲取i的變量的值,執(zhí)行i++操作,將計(jì)算后的結(jié)果設(shè)置到內(nèi)存中
i=0;兩個(gè)線程分別對(duì)i進(jìn)行++100次,值是多少?2~200
11、獲取值指定范圍內(nèi)的內(nèi)容:getrange? k? ? start? end
獲取時(shí),start和end索引都包含
end如果是-1? 代表獲取到最后
12、替換字符串指定范圍的內(nèi)容:setrange? k? start? ? replacestr
13、設(shè)置值并返回被替換的內(nèi)容:getset k? newVal?