1劫狠、Linux-服務(wù)+網(wǎng)絡(luò)端口號
服務(wù):一般在后臺運(yùn)行
centos6有7種運(yùn)行級別盾计,系統(tǒng)啟動時(shí)會按照配置的一個(gè)運(yùn)行級別啟動链患,然后使用init.d再根據(jù)此運(yùn)行級別去判斷服務(wù)是否在此級別中啟動派敷。到centos7時(shí)只保留了3和5
1.1 在centos6中如何管理服務(wù)(centos7也兼容6的服務(wù)管理命令)
1-? chkconfig? --list? ? :查看服務(wù)運(yùn)行級別
2-? service? firewalld? status? 查詢服務(wù)的狀態(tài)
3-? service firewalld start? 啟動服務(wù)
4- service? firewalld? stop? 停止服務(wù)
防火墻所刀,端口號一般都被防火墻過濾掉嫡霞,只暴露22端口號
5-? ll? /etc/init.d/? 查看init進(jìn)程管理的服務(wù)文件夾
6-? chkconfig --level 2 network off? 設(shè)置指定的服務(wù)在指定運(yùn)行級別關(guān)閉
7- chkconfig --level 2 network on? ? 設(shè)置指定服務(wù)在指定運(yùn)行級別啟動
1.2 在centos7中管理服務(wù)(centos7天字第一號進(jìn)程是systemd瓶埋,只有3和5兩個(gè)運(yùn)行級別)
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ù)名? :啟動指定服務(wù)
4- systemctl? stop 服務(wù)名:停止服務(wù)
5- systemctl? diable 服務(wù)名:設(shè)置服務(wù)開機(jī)禁止啟動
6- systemctl enable 服務(wù)名: 設(shè)置服務(wù)開機(jī)自啟
7-? systemctl get-default : 查看當(dāng)前系統(tǒng)的運(yùn)行級別
8- systemctl set-default? multi-user.target/graphical.target: 設(shè)置系統(tǒng)的運(yùn)行級別
1.3? 網(wǎng)絡(luò)端口號查詢
netstat? -anp | grep? 端口號
將springboot項(xiàng)目上傳到虛擬機(jī)的/opt目錄下
java -jar xxxx.jar?
主機(jī)瀏覽器訪問:http://虛擬機(jī)ip地址:8080/hello
如果虛擬機(jī)控制臺沒有報(bào)錯,虛擬機(jī)防火墻將請求攔截了
netstat -anp|grep 8080
kill -9 1490 :殺死占用端口號的進(jìn)程
2、Linux-用戶權(quán)限命令(了解)
id? 用戶名: 查看用戶
useradd? 用戶名:新增用戶
通過useradd的方式添加的用戶都是普通用戶养筒,所有的用戶的家目錄都會創(chuàng)建在/home目錄下
passwd? 用戶名:設(shè)置密碼
whoami: 查看當(dāng)前正在使用系統(tǒng)的用戶
who am i :查看登錄的用戶
su 用戶名:? 切換用戶
從超級管理員切換到普通用戶不用輸入密碼
從普通用戶到root需要輸入密碼
userdel -r? 用戶名:刪除用戶和他的/home目錄下的家目錄文件
groupadd? 組名: 創(chuàng)建用戶組
usermod -g? 組名? 用戶名: 將用戶添加到組中
useradd -g 組名? 新用戶名:新創(chuàng)建用戶并分配到組中
groupdel 組名:刪除組
groupmod -n 新組名 舊組名:修改組名
/etc/passwd :存儲用戶的信息
/etc/shadow:存儲用戶的影子信息[密碼]
/etc/group :組
權(quán)限:
列表中的第一列代表文件類型權(quán)限
代表權(quán)限的第一列除了.曾撤,剩下10位
第一位:代表文件類型? d代表文件夾,-代表文件, l代表鏈接
第2~4位: u 代表文件擁有者的權(quán)限
rwx:? ? 如果使用-代表其中一個(gè)晕粪,就表示沒有這個(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装悲,第三組沒有權(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提供了中央軟件庫阅嘶,可以通過yum命令遠(yuǎn)程連接下載程序自動安裝
yum? list |grep? -i? firefox:? 聯(lián)網(wǎng)搜索指定的程序安裝包
yum? install? firefox.x86_64? : 安裝指定的程序
4属瓣、Linux-開發(fā)環(huán)境搭建
4.1 jdk
1、拷貝課件中的已經(jīng)下載好的jdk到虛擬機(jī)的/opt目錄下
2奈懒、切換到opt目錄下奠涌,解壓縮壓縮包
tar -zxvf? 壓縮包名 :解壓縮所有的壓縮包
jdk解壓可用,無需安裝磷杏,但是jdk的命令在bin目錄下[/opt/jdk1.8.0_152/bin]
在控制臺執(zhí)行jdk的命令時(shí)溜畅,系統(tǒng)默認(rèn)從path環(huán)境變量中查找對應(yīng)的命令,我們自己解壓的jdk沒有配置到環(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)境變量
====? 啟動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í)會安裝其他的多個(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)以下錯誤,表示mysql服務(wù)沒有啟動
systemctl start mysql
ps -aux|grep -i mysql
//連接mysql美莫,初始化安裝mysql沒有密碼
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啟動時(shí)襟铭,優(yōu)先在/etc下查找my.cnf配置文件作為mysql的配置碌奉,如果/etc下沒有此文件短曾,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 庫中的user表中
mysql保存用戶信息時(shí)存在mysql.user表中
host代表ip地址,user代表賬號魁兼,password代表密碼椭岩,xxx_priv 代表權(quán)限
訪問mysql時(shí),mysql識別用戶是通過 登錄賬號+登錄時(shí)的ip地址組合判斷賬號
root@localhost
刪除localhost? root以外的其他用戶: delete語句+條件刪除
修改用戶密碼:
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測試工具? ab
使用yum安裝: yum install -y? httpd-tools
使用:
ab --help
ab -n8000 -c800? http://192.168.1.130:8080/hello
5侯谁、Nosql數(shù)據(jù)庫簡介
6、redis簡介
redis之前的版本只支持linux
只有l(wèi)inux才能最優(yōu)化的使用redis
7章钾、redis安裝+啟動停止
7.1 將redis安裝包拷貝到 虛擬機(jī)的/opt目錄下
7.2 解壓縮redis的壓縮包:tar -zxvf redis.tar.gz
7.3 查看redis的文件夾發(fā)現(xiàn)解壓之后的src是redis的源碼墙贱,需要先編譯才能安裝
redis是使用c語言開發(fā)的,需要使用c語言的編譯命令
在redis目錄下執(zhí)行:make命令時(shí)贱傀,報(bào)錯惨撇,原因:系統(tǒng)中沒有安裝c語言的環(huán)境
1、安裝c語言和c++的語言環(huán)境
yum install -y gcc
yum install -y gcc-c++
gcc -v
g++ -v
2府寒、刪除上次make產(chǎn)生的錯誤文件
make distclean
3魁衙、再執(zhí)行make進(jìn)行編譯
4、再執(zhí)行安裝命令: make install
5株搔、如果執(zhí)行? redis-server? 能夠看到redis的啟動界面剖淀,就代表redis安裝成功
ctrl+c? 可以關(guān)閉redis-server
redis安裝之后,命令存放在usr/local/bin下纤房,命令可以在任意的地方執(zhí)行
redis-server? :redis服務(wù)端啟動命令
redis-cli? :redis客戶端啟動的命令
8纵隔、修改redis為后臺啟動
redis默認(rèn)前臺啟動(阻塞啟動)
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è)置后臺啟動
vim? /myredis/redis.conf
136行設(shè)置daemonize? 改為yes
保存退出
8.4 指定配置文件啟動redis服務(wù)
redis-server /myredis/redis.conf
服務(wù)端默認(rèn)端口號:6379
8.5 redis客戶端連接redis?
redis-cli? 默認(rèn)連接本機(jī)的6379端口號的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只會關(guān)閉redis客戶端
方式1: 在linux命令中執(zhí)行? redis-cli? -h 127.0.0.1 -p 6379 shutdown
方式2:如果在redis-cli的連接中? shutdown
方式3: 可以通過redis進(jìn)程id殺死進(jìn)程? kill? 進(jìn)程id
8.7 redis簡單使用+特點(diǎn)
redis默認(rèn)有16個(gè)庫炮姨。一般使用默認(rèn)的索引為0的庫:select 0
dbsize? :查看redis存儲數(shù)據(jù)的條數(shù)
flushdb? : 清空當(dāng)前庫(慎用)
flushall:? 清空redis所有的庫
內(nèi)存數(shù)據(jù)庫存儲數(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梭依、查看鍵對應(yīng)值的類型: type? key
4稍算、刪除指定的鍵(鍵在值在,鍵光值亡): del key
5役拴、給鍵設(shè)置過期時(shí)間:? expire key? seconds
6糊探、查看鍵的過期時(shí)間:? ttl? key
返回>=0的數(shù)字,代表剩余數(shù)字對應(yīng)的秒數(shù)
返回-2 河闰,代表鍵已過期被刪除
返回-1 科平,代表鍵永不過期
10、redis-五大數(shù)據(jù)類型-string
redis最常使用的數(shù)據(jù)類型就是string類型: java對象可以轉(zhuǎn)為字符串姜性,圖片也可以轉(zhuǎn)為圖片
redis中string類型的大小最大可以為512m,redis的字符串二進(jìn)制安全
1瞪慧、向redis中存入string鍵值對:set? k? v
如果鍵相同,后設(shè)置的值會覆蓋之前的
2部念、獲取redis中指定鍵的值:? get? k
3弃酌、給redis中指定鍵的值追加內(nèi)容: append? k? ? appendStr
4、獲取鍵的值的長度:? strlen? key
5儡炼、當(dāng)鍵不存在時(shí)才設(shè)置鍵值對:? setnx? k? ? v
分布式鎖
6妓湘、設(shè)置值自增1? :? incr? k? ?
如果k的值已存在,必須時(shí)整形才可以自增
如果k不存在乌询,默認(rèn)在0的基礎(chǔ)上+1
應(yīng)用場景: 計(jì)數(shù)器榜贴、密碼今天輸錯的次數(shù)、秒殺庫存自減
7楣责、設(shè)置值自減1 :? decr? k
8竣灌、自定義步長增減:? incrby? k? count , decrby? k? count
9、設(shè)置鍵值對同時(shí)設(shè)置過期時(shí)間: setex? key? secods? val
使用場景:? 保存手機(jī)驗(yàn)證碼
10秆麸、批量操作
1初嘹、批量存入多個(gè)鍵值對: mset k v k? v ....
2、批量獲取多個(gè)鍵的值: mget k1 k2 k3...
3沮趣、批量設(shè)置鍵值對當(dāng)鍵不存在時(shí):? msetnx k1 v1 k2 v2...
當(dāng)有一個(gè)鍵如果存在時(shí)屯烦,所有的數(shù)據(jù)都保存失敗
所有的鍵都不存在時(shí),才可以存儲成功
redis命令具有原子性房铭,命令執(zhí)行時(shí)驻龟,必須成功或者失敗
java中的i++是否是原子操作?
不是缸匪,執(zhí)行時(shí)翁狐,分為三步:先獲取i的變量的值,執(zhí)行i++操作凌蔬,將計(jì)算后的結(jié)果設(shè)置到內(nèi)存中
i=0;兩個(gè)線程分別對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?