cd -
cd ~/test
which java
whereis git
chmod 755 file1
chmod -R +x folder
chmod +x file1
mkdir folder1
[ ! -d folder ] && mkdir folder
mkdir -p /local/tmp/test
mv file /destination/
mv filename newname
cp file1 file2
rm -f file
rm -r folder
echo $JAVA_HOME
echo 123 > file.txt
ls lrt | head -5
tail -f file.log
less file
more file
touch filename
hostname
uname -a
sudo rm -fr /local/folder
su - username
shutdown -g04:30 -f"message"
reboot
id username
users
who
whoami
uptime
kill -l
kill -9 1234
curl http://www.x.com
wget http://www.x.com/1.txt
wget -i list.txt
df -h ./
zip -m log.zip *.log
zip -mr t.zip folder
unzip -d ./folder t.zip
pwd
echo $PWD
clear
date +%Y%m%d
date -d "last week Monday"
date --date='TZ="Asia/Shanghai" last Friday'
at 4am -f shell.sh
at 3pm + 2 days -f shell.sh
atq
at now +5 minutes
zip -m log.zip *.log
zip -mr t.zip folder
unzip -d ./folder t.zip
md5sum filename
dos2unix filename
chown -R newuser:newgroup dir_name
echo 'a#b#c' | cut -d# -f 2
scp local_file remote_username@remote_ip:/local/remote_folder/remote_file
ssh-keygen
ssh-copy-id username@remote_host
ls -ltra
由旧到新已长格式显示当前路径所有文件ls -d -1 $PWD/*
显示当前文件夹内所有文件完整路径,排除文件夹ls -1 /home/user/DB*/bin | xargs -n 1 cp -v test.ksh
xargs -n 1表对前面命令分别执行n次操作, cp -v
显示复制进度,整体及将test.ksh复制到符合前面命令的路径中
cat file1 file2 > file3
将file1+file2内容按顺序合并至file3cat file1 >> file1
报源文件与输出文件相同错误!正确可用 cat file1|tee -a file1
读文件并插入到源文件后cat -n file.txt
nl file.txt
等同命令,显示行号输出文件内容sort [-option] [-o output.file] [-t separator] [-k field 1[,field 2]]
sort -n -r test.txt -k 2
按数字反序排序第二列sort -u test.txt -k 3
根据第三列排序,去除重复行alias shortcmd='cmd1;cmd2;cmd3'
alias
列出当前所有别名命令alias ll='ls -ltr color=auto'
创建ll命令,已代替后面长命令alias cpy='scp ~/test.sh user@machine2:~/test/;rm abc.txt'
创建短命令执行多个命令,命令间用";"隔开
seq [option] [min] [step] max
seq -s '|' 4
1|2|3|4seq 1 3 8
1 3 7seq 1 5
echo {1..5}
seq 1 100 | xargs -I{} echo {} > t.txt
输出一百行到文件sed [-hnV][-e{script}][-f{script file}][file]
sed -i "s/old_word/new_string/g" file.txt
查找替换文件内容,"/"可用任意其他字符代替nl file.txt | sed '3,$d'
行号指定一个处理某行,指定两个处理某段,$表示末尾,d为删除动作,即删除第三行至末尾,非处理文件而只是显示,等同head -2 file.txt | nl
cat file.txt | sed -n '17,25p'
显示文件的第17至25行sed -i '$a test' file.txt
echo "test" >> file.txt
等同命令,在末尾插入字符串echo "/home/user/file.txt" | sed -i 's#/#@#2'
只替换第二个匹配的:/home@user/file.txt
echo 123456789 | sed 's#3\(.*\)6#a\1a#'
\1表示前面括号匹配出的内容sed -i 's/^$/d' file.txt
删除文件中的空白行sed -e 's/[0-9]/newcontent/g' -e '3a insert line' file.txt
查找替换file.txt中的数字,并在第三行插入新行
awk [option] 'condition{action}' [file]
echo 'abc 30.45542 123 -111' | awk '{printf "%-8s %.2f %+2d %+5d \n",$1,$2,$3,$4}'
abc 30.46 +123 -111,
字符串长度正数则左侧补全,负数则右侧补全,浮点数四舍五入保留精度
ls -l *.log | awk '{sum+=$5} END {print sum}'
计算并输出当前文件夹中txt文件总大小
awk 'length>100' file.log
找出lfile.log中长度大于100的行seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'
输出九九乘法表
awk -v var='' 'BEGIN{var=rand();print var}
自定义变量,内置函数rand()得到0~1之间的随机数
awk -F '|' '{a[$12]++} END{for(i in a) print i ":" a[i]}' File_name*.csv|sort -n -k 1
统计多文件中某列不重复值出现次数,按升序排列,a[$12]第十二列循环一次+1,END循环完输出,
sed -n '3p' file.txt | awk '{print $4}'
获取第三行第四列find path -option [-exec -ok command] {} \;
find . -type f -name "*.log" -ctime +90 -exec ls -lrt {} \;
找出当前文件夹中修改时间为90天以前的.log文件,以长格式输出结果
find -type f -empty -exec -ok rm {} \;
找出空文件并确认删除find -name 'abc.txt' -or -name '123.txt'
多条件查询du [-option][-X file][--exclude={dir/file}][--max-depth][dir/file]
du -sh /home/tmp
输出指定文件夹占用大小du -a | sort -nr | head -20
列出前20大文件du -s * | sort -nr | head
列出前10大目录tr [-option] [set 1] [set 2]
echo 'abcdefghijklmn' |tr a-f 1
111111ghijklmnecho 'abCdE' |tr [:lower:] [:upper:]
ABCDE, 同tr a-z A-Ztar -czvf test.tar.gz testfolder
新增备份文件tar -tzvf test.tar.gz
查看备份文件内容tar -xzvfk test.tar.gz
解压文件,不覆盖已存在文件ps -ef | grep java
查找java相关进程ps axjf
树形打印进程ps -eo pid,tid,class,ruiud,tty,stat,wchan:14,comm
定义显示的列
ps aux | head -1;ps aux |grep -v PID |sort -rn -k +4 | head -20
显示前二十个内存占用最高的进程
ps -eLf | grep java | wc -l
监控java线程数netstat -n | grep tcp | grep 80 | wc -l
监控网络客户连接数netstat -au
列出所有udp端口连接netstat -l
只显示监听端口free -h | sed -n '2p'|awk '{print $4}'
git init
初始化仓库git clone [-b develop] https://github.com/userid/projectid.git
下载项目
git add filename.php
添加文件到暂存区git commit -m 'description message'
提交暂存区文件,附带简介信息git fetch [alias]; git merge [alias]/[branch]
从远程获取代码库,然后合并到当前分支
git diff
对比暂存区与工作区的文件差异git pull
同git fetch;git merge
FETCH_HEAD,从远程更新本地文件并合并git push
上传代码并合并git branch branch_name
git
branch查看已有分支,加第二参数则创建分支branch_namegit checkout master
切换分支git branch -d branch_name
删除分支git merge
主分支中执行,合并分支git reset --hard HEAD^^
回滚当前版本的上上个版本,HEAD当前,^上一个,^^上上个版本,.或具体版本ID前几位git status
查看本地工作区和暂存区的状态git log
查看操作日志svn checkout https://svn-repostory.com/test
下载项目至本地仓库svn diff
比较本地文件与远程仓库差异svn update
同svn up,更新本地仓库文件svn status
查本地文件状态,是否已提交更新svn add file
添加待commit文件svn commit -m 'descript message'
提交代码更新至远程仓库,成功版本后增加1svn revert file
回滚本地文件,或svn revert -R folder
回滚整个项目文件svn copy master branches/my_branch
创建分支,即复制主仓库svn merge ../branches/my_branch
合并分支到主分支,commit提交改动rpm -hvi dos2unix-7.4.2-4.el9.x86_64
安装包rpm -qa | grep dos2unix
同rpm -qa dos2unix
查看包rpm -e dos2unix-7.4.2-4.el9.x86_64
删除包,包名不能包含.rpmls -lrt /etc/yum.repos.d/*.repo
yum软件源设置文件dpkg-query -l
列出已安装包apt-cache search nginx
搜索包sudo apt-get install -y apache
无需确认安装Apachesudo apt-get purge apache
卸载软件sudo apt-get update; sudo apt-get upgrade
更新软件keytool -genkeypair -alias servername -keypass keypwd -storepass storepwd -dname “C=CN,ST=SD,L=QD,O=Ognization,OU=UAT,CN=canwong.com” -keyalg RSA -keysize 2048 -validity 365 -keystore /tmp/certs/trust.jks
生成证书keytool -list -keystore store.jks -storepass password
列出store.jks中的信息
keytool -delete -alias aliasname -keystore store.jks -storepass password
删除store.jks中的aliasname
keytool -import -alias aname -keystore store.jks -file pub.pem -storepass password
证书导入到密钥库中
dstat -t
yum install dstat
如果命令不存在,默认每秒统计网络总发送/接受,IO总写入/读取等netstat -tnlaup
查哪个进程用了哪个端口
lsof -i -P
类似同上
ngrep -d
抓包工具,安装:yum install libpcap
tcpdump
同上,抓包分析,类似wireshark
opensnoop
实时查看正被打开的文件,安装:yum install bcc-tools && export PATH=$PATH;/usr/share/bcc/tools
echo net.ipv4.ip_nonlocal_bind=1 >> /etc/sysctl.conf
负载均衡如haproxy时开启curl www.baidu.com
curl -xpost -H 'Content-Type:application/json' -d '{"name":"Ken"}'
set var=value set /a var=123 ::digit only echo %var% set /a sum=123+456 ::加/a数学计算
set yyyy=%date:~0,4% ::从开头截取4个长度 set str=abcdefghijklmn echo %str:~4,2% ::ef 第4字符后截取2个长度 echo %str:~-3,2% ::ij 倒数第三字符截取2个长度 echo %str:~-4,-3% ::h 倒数第四开始截取到倒数第三
if "%a%"=="%b%" ( echo %a% ) else ( echo %b% if conditon ( action ) ) if 1 GTR 2 (echo true) else (echo false) if defined var (echo true) else (echo false) if ERRORLEVEL 1 ECHO can not find the file if ERRORLEVEL 0 ECHO success REM 循环 for %%x in (*.txt) do echo "%%x" for /F "tokens=2,3* delims=|" %%a in (file.txt) do ( echo %%a echo %%b ) REM 文件循环,以|分割取第二列,第三列及后续列 forfiles /S /P D:\dir /M *.log /D -60 /C "cmd /c echo @file && del @path"
setlocal enabledelayedexpansion call :function1 param1 param2 goto :eof :function1 echo %1 echo %2 goto :eof
sqlcmd -S db_hostname -d db_name -U db_user -P db_password -i script.sql -o output.log
@echo off
set folderList=D:\app\log
set folderList=%folderList%;D:\app\processed
set folderList=%folderList%;D:\app\tmp
echo %folderList%
for %%x in (%folderList%) do (
forfiles /S /P %%x /M *.log /D -90 /C "cmd /c del @path"
)
@echo off
set today=%date:~0,4%%date:~5,2%%date:~8,2%
date /t | findstr /i "周一" && call :Monday || call :Weekday
echo lcd D:/download > tmp.ftp
echo cd /home/user/test >> tmp.ftp
echo mget FileType_*_%today%.txt >> tmp.ftp
echo mget AnotherFile_*_%ytd%.txt >> tmp.ftp
C:\putty\psftp.exe username@server -pw password -b"tmp.ftp" -bc
goto :eof
:Monday
echo called monday
for /f %%x in ('PowerShell "(get-date).AddDays(-3)|get-date -format \"yyyyMMdd\""') do (set ytd=%%x)
goto :eof
:Weekday
echo called weekday
for /f %%x in ('PowerShell "(get-date).AddDays(-1)|get-date -format \"yyyyMMdd\""') do (set ytd=%%x)
:goto :eof
sc create ServiceName binPath= "D:\test\service.bat" start= auto
instsrv.exe ServiceName D:\tmp\srvany.exe
@echo off
setlocal enabledelayedexpansion
pushd %~dp0
set /a count=1
for /F "skip=1" %%x in ('certutil -hashfile BZ1802271950450159.jpg MD5') do (
if !count! equ 1 set MD5=%%x
set /a count+=1
)
echo %MD5%
echo %MD5: =%
var=value ${var:-default} #变量未定义或未赋值则返回后面的默认值 var=$([ "$a" == 1 ] && echo 'true' || echo 'false') #三元赋值,&&优先级高于|| echo ${var} expr 1 + 3 ((sum=10+15)) #直接赋值变量,不输出结果 echo $((4+5)) let "c=a*b"
var=1234567890987654321 echo ${var#*7} #890... #从左边开始删除第一匹配的左边,保留右 echo ${var##*7} #6543... ##从左边开始删除最后一个匹配的左边,保留右 echo ${var%7*} #...098 %从右开始删除第一个及右侧内容 echo ${var%%7*} # 123456... %%从右开始删除最后一个及右侧 echo ${var:0:5} #从最左侧0位置开始截取5个长度 echo ${var:13} #654321 从左侧第N个开始截取到末尾 echo ${var:0-5:3} #543 从右侧第5个开始截取3个长度 echo ${var:0-5} #54321 从右侧第5个开始截取到末尾
if [ $a > 5 ] && [ $b > 5 -o $c -eq 0 ] ; then echo $a elif [ $c > 10 ]; then echo $c else echo $b fi #[ -f file ] 文件file存在为真 #[ -d dir ] 目录dir存在为真 #[ -s file ] 文件file存在且大小不为0时为真 #[ -w file ] 文件file存在且可写为真 #[ file1 -nt file2 ] file1修改时间更新时为真 #[ -z string ] 字符串string长度0时为真 #[ -n string ] 字符串string长度非0时为真 #[ str1 != str2 ] 字符串不同时为真 case $var in 'value 1') do something ;; 'value 2') do something ;; *) do something ;; esac for x in {1..10} do case $x in 5) echo "skip" continue ;; 8) echo "exiting loop" break ;; *) echo $x ;; esac done for f in $(ls /var) do [ -d $f ] && du -sh $f done while ((x<=10)) do let sum+=1 let x++ done
function sum() { echo "input first number" read a echo "input second number" read b let "result=$a+$b" echo $result } sum anotherFun() { echo $1 echo $2 } anotherFun 1stParam 2ndParam #参数 # $# 参数个数 # $* 作为字符串显示全部参数 # $@ 同上但显示时带引号 # $$ 脚本运行的当前进程ID # $? 最后命令的状态,0表成功,类似batch ERRORLEVEL
outvar=$(sqlplus -s db_user/db_pass@db_hostname << EOF SET HEAD OFF FEEDBACK ON select * from tablename; ${sqlvar} @/dir/sqlfile.sql EOF) #feedback默认少于6条记录时不显示, show feed | set feed 3
var=value var = a if a > 5 else b #三元赋值[on true] if [expression] else [on false] print(var) sum = 4 + 5 print(sum-3)
var = '1234567890' print(var[2:5]) #345 从第3位截取到第6位 print(var[8:]) #90 从第9位截取到末尾 print(var[4:-3]) #567 从第5位截取到倒数第4位 print(var[-4:]) #7890 截取倒数4个长度 print(var[-3]) #8 获取倒数第3个字符
if (num >= 0 and num <= 5) or (num <=10 and num >= 7): print('it is 5') elif num == 11: print('it is 11') elif num < 15: print('it is less than 15') else: print('this is else') if ( var == 10 ): print('var is 10') numbers = [12,34,51,8,23,4,7] even = [] odd = [] while len(numbers) > 0 : number = numbers.pop() if (number % 2 == 0): even.append(number) else odd.append(number) for letter in 'python' if letter == 'h' break
def sum(n1,n2): result = n1 + n2 return result print(sum(4,5))
#-------第三方程序--------- os.chdir(db_bin_path) isql_command = ['./isql', '-H',db_host, '-S',db_server, '-U',db_user, '-P',db_pass, '-D',db_name, '-i',sql_file, '-o',out_file, '-w',10000 ] stats = subprocess.call(isql_command) #----------内置库连接sqlite----- import sqlite3 conn = sqlite3.connect('test.db') newtable_sql = ''' create table user( name text not null, sex integer not null, id integer not null primary key autoincrement); ''' insert_sql = 'insert into user (name,sex,id) values ("%s",%d,%d)'%("Ken",1,1) with conn: conn.execute(newtable_sql) conn.execute(insert_sql) records = conn.execute('select * from user') for record in records: print(record) #------连接MySQL--------- pip install pymysql import pymysql
pip install pyinstaller
pyinstaller -F service.py
得到dist\service.exe文件,其余临时文件可删除
int1,float2 = 123,3.1415926
str1,str2 = '123','randome string'
list1 = [1,'python',2343,'word']
tup1 = ('string','version 123', 12345,"string2")
dict1 = {'var1':123,'var2':'123','var3':'string'}
set1 = set();set2 = {'apple','orange',111,34,'random'}
abs(-100)
max(12,32,543)
| min(12,5,24)
round(3.1415926,4)
*精度可选operator.lt(num1,num2)
*le,eq,ne,ge,gtrandom.random()
int(random.uniform(100,200))
random.choice(range(10))
math.sqrt(16)
math.pow(2,4)
str.find('a',2,10)
str.isalnum()
str.isalpha()
str.isdigit()
seq = ('abc','123','efg'); '|'.join(seq)
len(str)
str.replace('old','new')
strip(str)
url.split('/')[-1]
len(var)
max,min = max(var),min(var)
list(seq)
list_var.append('f')
list_var.pop()
list_var.reverse()
dict.clear()
dict.get('name','Ken')
dict.setdefault('name','Ken')
dict.keys()
dict.popitem()
dict.update(dict2)
dict.pop('name','no name')
'name' in dict
len(set2)
print(set('aaaaaa'))
* 输出{'a'}'apple' in set2
a & b
, 并集union(): a | b
, 差集symmetric_difference(): a ^ b
, 补集: a - b
set1.add('abc')
| set1.update('abc')
set1.discard('a')
set1.pop()
|
~True <=> false |
list[~3]
<=> list[-(3+1)]print('correct' if (1!=0) else 'wrong')
|
插入切片list[2:1]=["F"] |
删除切片del L[2:2]
import requests
import time
from lxml import etree
# 爬取内页图片地址并保存
def get_pics(url):
inner_page = requests.get(url,timeout = 30).text
inner_html = etree.HTML(inner_page)
pic_src = inner_html.xpath('//div[@class="entry-summary"]/p/a/@href')
for x in pic_src:
print(x)
if x[-4::] == '.jpg':
print('yes')
filename = x.split('/')[-1]
pic = requests.get(x,timeout = 15)
with open('D:\\python\\test\\pic\\{}'.format(filename),'wb') as f:
f.write(pic.content)
f.close()
# 爬取网站文章进行循环
webindex = requests.get('http://xxxxxx.com/',timeout = 30).text
html = etree.HTML(webindex)
articel_url = html.xpath('//div[contains(@class,"post")]/h2/a/@href')
for i in articel_url:
get_pics(i)
time.sleep(2)
os.chdir(path)
切换工作目录os.listdir(path)
列出当前或指定目录下所有文件或目录的列表os.remove(path)
删除文件 | os.removedirs(path)
递归删除目录 | os.rmdir(path)
删除空文件os.rename(old,new)
重命名文件或目录 | os.renames(old,new)
递归地进行重命名os.path.abspath(path)
返回绝对路径 | os.path.basename(path)
返回文件名 | os.path.dirname(path)
返回文件路径os.path.getatime(path)
最近访问时间 | os.path.getmtime(path)
最近修改时间 | os.path.getgctime(path)
创建时间 用time.ctime()
转换为可读时间os.isfile(path)
判断是否为文件 | os.path.isdir(path)
判断是否为目录os.path.join(os.path.dirname(path) + os.sep + os.path.basename(path))
合并为路径os.path.samefile(path1,path2)
对比文件或目录是否相同os.path.split(path)
将路径分割为目录名和文件名,返回一个元组 | os.path.splitdrive(path)
类似,一般用于win系统返回驱动器名和路径
config = configparser.ConfigParser()
config.add_section('mysql_conn')
config.set('mysql_conn','host','localhost')
config.set('mysql_conn','user','dbuser')
config.set('mysql_conn','port','1234')
config.set('mysql_conn','password','dbpass')
config.set('mysql_conn','database','testdb')
config.add_section('user_info')
config.set('user_info','admin','KenWong')
config.set('user_info','password','abc123')
with open('config.ini','w') as f:
config.write(f)
read_config = configparser.ConfigParser()
read_config.read('config.ini')
dbinfo = read_config['mysql_conn']
userinfo = read_config['user_info']
print(dbinfo['host'])
print(userinfo['admin'])
import requests
import threading
url = 'http://xxxxx/xxxxx.php'
data = {
'data1':'value1',
'data2':'value2',
'data3':'value3'
}
def do_request():
while True:
respone = requests.post(url,data=data).text
print(respone)
threads = []
for i in range(50):
t = threading.Thread(target=do_request)
t.daemon = True
threads.append(t)
for i in range(50):
threads[i].start()
for i in range(50):
threads[i].join()
from ibm_watson import TextToSpeechV1
from ibm_watson import ApiException
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
authenticator = IAMAuthenticator('KdI4XU0xoRIuQgGfeIArzhutuH73gmfO3WKZxz8_hpCy')
text_to_speech = TextToSpeechV1(
authenticator=authenticator
)
text_to_speech.set_service_url('https://api.jp-tok.text-to-speech.watson.cloud.ibm.com')
text_to_speech.set_disable_ssl_verification(True)
voice = 'zh-CN_LiNaVoice'
audiotype = 'audio/wav'
extend_name = '.wav'
# audiotype = 'audio/wav;rate=22050'
def downAudio(filename,content_text):
filename = '.\\voices\\'+filename+extend_name
try:
with open(filename, 'wb') as audio_file:
audio_file.write(
text_to_speech.synthesize(
content_text,
voice=voice,
accept=audiotype
).get_result().content)
except ApiException as ex:
print("Method failed with status code " + str(ex.code) + ": " + ex.message)
with open('words.txt','r',encoding='utf-8') as f:
for line in f:
para = line.split(':',1)
downAudio(para[0],para[1])
docker version
docker info
docker [action] --help
systemctl start docker
systemctl enable docker
docker images
docker rmi imagename:tagname
docker search nginx
docker pull mysql
docker build -t imagename:tagname -f Dockerfile .
docker run -d -p 8080:80 --name nginx-server --restart=on-failure:5 -v /opt/nginx-server:/usr/share/nginx/html:ro -v /opt/nginx-config/nginx.conf:/etc/nginx/nginx.conf:ro nginx:latest
docker ps -a
docker start/stop/restart id(3)
docker rm id(3)
docker inspect id(3)
docker exec -it id(3) /bin/bash
docker exec cat /etc/somepath/somefile.txt
docker cp /home/test.txt id(3):/tmp/test.txt
docker cp id(3):/tmp/test.txt /local/tmp/test.txt
docker save -o imagezip.tar myid:imagename
docker load -i imagezip.tar
docker export id(3) > imagename.tar
cat docker/imagename.tar | docker import - test/image:tag
docker logs -n 5 -ft id(3)
docker top container_name
docker pull registry
docker run -d -p 5000:5000 --restart always --name registry registry:latest
docker pull ubuntu
docker tag ubuntu newuser:5000/ubuntu
docker push newuser:5000/ubuntu
sudo yum install docker-ce docker-ce-cli containerd.io --allowerasing
yum erase podman buildah
yum install docker-ce docker-ce-cli containerd.io
docker run -d -p 80:80 --name nginx-server -v /opt/nginx-server:/usr/share/nginx/html:rw nginx:latest
echo "this is nginx docker is running!" > /opt/nginx-server/index.html
[root@localhost nginx-server]# curl localhost
this is index, nginx docker is running!
docker pull mysql:8.0
docker run -d -p 3306:3306 \
--name mysqldoc \
--privileged=true \
-v /opt/mysql/log:/var/log/mysql \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/conf:/etc/mysql \
-v /opt/mysql/mysql-file:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=abc123 \
mysql:8.0
docker exec -it mysqldoc mysql -uroot -p
docker run -d -p 3307:3306 \
--name mysql-slave \
--privileged=true \
-v /opt/mysql-slave/log:/var/log/mysql \
-v /opt/mysql-slave/data:/var/lib/mysql \
-v /opt/mysql-slave/conf:/etc/mysql \
-v /opt/mysql-slave/mysql-file:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=abc123 \
--link mysqldoc:mysql-master\
mysql:8.0
docker pull redis
docker run -d -p 6379:6379 --name redis redis
docker exec -it redis /bin/bash
redis-cli
set name abc
OKget name
"abc"#基于官方镜像开始构建,默认latest tag FROM nginx LABEL Image_Author=KenHuang #设置环境变量供下面命令使用 ENV NGINX_CONFIG=/etc/nginx/conf.d/default.conf ENV PATH=/usr/local/nginx/bin:$PATH #构建镜像时的操作,多个RUN会占用更多资源,建议以\切割写多行 RUN sed -i "s/index.html index.htm/index.php/g" $NGINX_CONFIG \ && sed -i "30,36 s/#//g" $NGINX_CONFIG \ && sed -i -r "s#(cn.archive|cn.security).ubuntu.com#repo.huaweicloud.com#g" /etc/apt/sources.list \ && apt-get update \ && apt-get install -y php-fpm \ && rm -rf /var/lib/apt/lists/* \ #&& sed -i "s/^#[[:space:]+root/^root/g" $NGINX_CONFIG \ #&& sed -i "s/^#[[:space:]+fastcgi_pass/^fastcgi_pass/g" $NGINX_CONFIG \ #&& sed -i "s/^#[[:space:]+fastcgi_param/^fastcgi_param/g" $NGINX_CONFIG \ #&& sed -i "s/^#[[:space:]+include/^include/g" $NGINX_CONFIG \ #复制本地项目文件进镜像内 COPY ./nginx/tpweb /usr/share/nginx/html #需要暴露的端口,构建时-P随机分配,或-p 8080:80方式分配 EXPOSE 80 #创建一个mount点,讲容器内文件夹暴露出来,一般放置需长期保存的数据及文档 VOLUME /var/log #启动镜像时执行的命令 CMD [ "nginx","-g","daemon off;" ]
docker build ./ -t myid:imagename -f Dockerfile
docker run --name mylocsrv -d myid:imagename
docker-compose up
docker-compose up -d
touch /etc/yum.repos.d/gitlab-ce.repo
cat /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
yum install gitlab-ce --nogpgcheck
vi /etc/gitlab/gitlab.rb
external_url "http://gitlab.canwong.com"
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "493468513@qq.com"
gitlab_rails['smtp_password'] = "updtsrthoqfxcadc"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = "493468513@qq.com"
user['git_user_email'] = "493468513@qq.com"
alertmanager['admin_email'] = '493468513@qq.com'
gitlab-ctl reconfigure
gitlab-ctl --help
gitlab-ctl status
gitlab-ctl restart
gitlab-ctl tail nginx
systemctl disable firewalld
systemctl stop firewalld
gitlab-rails console
u=User.where(id:1).first
u.password='canwong123'
u.password_confirmation='canwong123'
u.save!
exit
systemctl enable gitlab-runsvdir.service
# connect to db
mysql -hhostname -uusername -ppassword #mysql -uroot -pcanwong@123
# change password
mysqladmin -uusername -poldpassword password newpassword #mysqladmin -uroot -pcanwong@123 password newcanwong23
# execute sql file
mysql -uusername -ppassword < /path/to/sqlfile.sql
# backup database
mysqldump --opt db_name > /path/to/store/bak_filename.sql
mysqldump -uroot --all-databases --single-transaction --master-data=2 > /path/to/backup/backupfile.sql
# --databases db_name <-- specify database
# --all-databases <-- backup all databases
# --lock-all-tables <-- for InnoDB engine hot backup
# --single-transaction <-- lock databases for InnoDB hot backup
# --master-data=[0|1|2] <--whether record master bin log location
# 0: don't record
# 1: record to 'change master to' without comment out
# 2: record to 'change master to' but comment out
show databases;
use database_name;
show tables;
desc table1_name -- describe table2_name;
create database db_name;
create table table1_name (
'id' int(10) NOT NULL AUTO_INCREMENT COMMENT 'descript of column',
'pid' int(10) NOT NULL,
'column2' varchar(1000) COMMENT 'description',
'column3' text COMMENT 'description',
'column3' char(10) DEFAULT '10000',
'year' date,
PRIMARY KEY(id),
UNIQUE(pid),
CHECK(id>0 AND column2='keyword')
) ENGINE=InnoDB AUTO_INCREMENT=1 CHARSET=utf8mb3;
drop db_name;
drop table table1_name;
-- Constraint
add constraint chk_rulename CHECK (column3 > 100)
drop constraint chk_rulename -- SQL Server/Oracle
drop check chk_rulename -- MySQL
-- create new user
grant select,insert,update,delete on db_name.* to new_user@localhost identified by "password";
-- select
select distinct column1,column2,column3 from table1_name where column1 like '%condition%' and column2 < 3 or column3 = 'tmp' or column4 in (value1,value2,value3) order by column1 ASC, column3 DESC;
-- update
update table1_name set column1 = 'test', column2 = 123 where id = 1000;
-- insert
insert into table1_name values ('value1','value2','value3');
insert into table1_name (column1,column2,column3) values ('value1','value2','value3');
-- truncate
truncate table table1_name;
-- delete rows
delete from talbe1_name where column1 = 'condition';
-- Replace
update table1_name set column1 = replace(column1,'source','replacement');
update table1_name set column2 = dbo.fn_replace_regax(column2,'^[::number::]','xxx');
update table1_name
set column3 =
CASE
WHEN column3 LIKE '%keyword%' THEN REPLACE (column3,'keyword','new word')
ELSE column3
END;
-- Limit output records
-- SQL server
select top 100 column_name from table2_name;
select top 20 percent * from table2_name;
-- MySQL
select column_name from table1_name limit 10;
-- Oracle
select column_name from table2_name where rownum <= 10;
-- Wildcard
-- % <-0 or mutiple char
-- _ <- 1 char
-- [AbcDe] <- any char in list
-- [^charlist] or [!charlist] <- any not in list
-- In and Between/not in/not between
select column_name from table2_name where column1 in (value1,value2,value3);
select column_name from table3_name where column2 between 10 and 20;
-- Alias
select t1.column1 as c1, t2.column2 as c2 from table1_name as t1, table2_name as t2 where t1.id = t2.pid;
-- JOIN == INNER JOIN 至少有一个匹配则返回行
-- LEFT JOIN 即便右表没匹配,也从左表返回所有行
-- RIGHT JOIN 即便左表没匹配,也从右边返回所有行
-- FULL JOIN 只要其中一个表存在匹配,就返回行
select column_name from table1_name
inner join table2_name
on table1_name.column_name = table2_name.column_name
order by table2_name.column3;
select left_table.column1, left_table.column2, right_table.column1
from left_table
left join right_table
on left_table.id = right_table.pid
order by left_table.column2;
select left_table.column1, left_table.column2, right_table.column1
from left_table
right join right_table
on left_table.id = right_table.pid
order by left_table.column2;
-- Union 合并多个select结果集,必须有相同数量的列,列必须有相似的数据类型,同时列的顺序必须相同,会自动过滤重复结果并排序
-- Union All同上但保留重复结果并且不重新排序
select column_name from table1_name
union
select column_name from table2_name
-- Select into
select * into new_table from old_table;
select * into new_table in 'backup.mdb' from old_table; -- 向另一数据库插入
select column1,column2 into table_backup from old_table; -- 限定特定字段
select t1.column1, t2.column2 into new_table_backup from old_table as t1 inner join another_table as t2 on t1.id = t2.pid;
-- output result to file
select column1,column2 into outfile '/path/to/output_file.txt' fields terminated by ',' optionally enclosed by '"' lines terminated by '\n' from table_name1;
-- fields terminated by 字段分隔符
-- optinally enclosed by (可选)字段用指定字符括上
-- lines terminated by 换行分隔符
-- Alter table
alter table table_name1 add new_column date;
alter table table_name1 drop new_column;
alter user user_name account unlock identified by "new_password";
alter table table_name1 alter column column_name int(1000);
-- View
create view view_name AS select column_name from table_name1 where column_name = 'condition';
create or replace view view_name AS select column_name from table_name1 where column_name = 'condition';
drop view view_name;
-- Functions - select function(column) from table;
select avg(column1) as new_name from table_name1;
select sum(column2) from table_name1;
select count(distinct column_name) from table_name2;
max()
min()
first()
last()
select ucase('abc');
select lcase('ABC');
-- Having - 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
select column1,column2 from table_name2
where column1 = 'a' or column2 = 'b'
group by column1
having sum(column3) > 1000;
-- interview question
select name,sum(socrds) as total from students group by name order by total DESC limit 2;