基础运维-杂乱篇-持续更新.......

………………………………说明:本葵花宝典不定时更新……………………………………
一:修改服务器密码
1:在进入系统开机步骤之前按上下键选中你的操作系统
2:按“e”进入编辑模式,修改linux16那一行 ro以及之后的内容全部删掉,直接 ctrl+k ,然后输入rw init=/sysroot/bin/bash   或者 rw rd.break
3:修改完之后直接 ctrl+x重启
4:再执行 mount 查看挂载结果
5:chroot /sysroot/ 切换到sysroot目录
6:输入passwd输入两次新密码
7:touch /.autorelabel 保证系统不会黑屏
8:exit ./shutdown -r now 重启系统输入新密码验证
head -n 10 /etc/passwd
tail -n /etc/passwd
touch hanke{1..5}.txt
解压至指定目录 tar -zxvf 111.tar.gz -C /tmp
文件加锁命令:chattr
linux机器关机重启的几条命令
shutdown
halt
poweroff
reboot
查看用户所属组:id user查出来所属组之后   groups 查出来的组里面有哪些用户
linux中查看内存
cat /proc/meminfo
linux中查看CPU
# 查看物r理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
HP-UX查看CPU
machinfo  glance
AIX查看CPU
prtconf
查看操作系统版本:oslevel
bdf 查看系统中文件系统的大小及使用情况
HP-UX常用命令
1、 hostname:查看系统主机名
2、 model:查看主机型号
3、 ioscan –fnCprocessor:查看CPU个数
4、 top 前几行是cpu个数,型号,和平均负载,下面的十几行信息是进程占用cpu实时状况, 一般占用cpu越多排名就越靠前。
5、 print_manifest:查看主机硬件信息,包括显示系统型号、机器序列号、处理器类型、处理器数目、CPU类型、总内存大小、内置硬盘数、挂接存储信息,IO信息,安装的软件,网络信息、文件系统信息、内核信息
6、 lanscan:列出系统内所有网卡的信息
7、 netstat –in:查看网卡IP地址
8、 ioscan –fnkC disk:查看内置硬盘/外置硬盘(LUN)的使用信息
9、 diskinfo /dev/rdsk/c1t0d0:查看硬盘大小信息
10、 ioscan –fnC fc:列出主机上连接的光纤卡设备
11、 fcmsutil /dev/fcd*(*光纤卡编号):查看光纤卡的wwn号及微码版本
12、 top:查看系统当前CPU使用率、实际内存使用(%Comp段信息),PS使用率等信息
13、 sar:sar 2 3 查看系统当前负载, sar -u 查看cpu的负载, sar -d 查看磁盘的负载
14、 swapinfo:查看交换区信息
15、 uname -a:查看操作系统版本
16、 vgdisplay:查看系统有哪些VG
17、 vgdisplay xxxvg:查看xxxvg信息
18、 vgdisplay –v xxxvg:查看xxxvg中的lv及pv信息
19、 ioscan –fnC disk:查看系统硬盘
20、 strings /etc/lvmtab:查看逻辑卷的分配和使用情况
21、 bdf:查看系统中文件系统的大小及使用情况
22、 mount:查看系统已经挂载的文件系统
23、 sqlplus / nolog :查看Oracle软件版本
在HP-UX上监控系统状况可以使用glance工具,但是该工具需要license
通过SAM工具也可以很方便的看到系统信息,例如sam进入工具界面后按f再按d就可以看的系统硬盘大小及对应vg等信息。
进入sam界面按d再按o:可查看系统热插拔卡
查看文件编码格式:file hanke.txt
更改文件编码格式1:临时更改,vi hanke.txt   :set fileencoding
更改文件编码格式2:enconv -L zh_CN -x UTF-8 hanke.txt
更改文件编码格式3:iconv -f UTF-8 -t GBK hanke.txt > hanke1.txt
IP-hostname
nslookup 10.240.86.56  可查出IP对应的hostname
ping hostname  可查出hostname对应的IP
 
脚本实现ftp取文件
#从FTP上批量下载文件到本地
#!/bin/sh
ftp -v -n 10.11.10.11<<EOF
user ftpuser ftppwd
binary
cd Down
lcd ./
prompt off
mget *
bye
EOF
echo "download from ftp successfully"
 
-d:使用调试模式,但必须编辑 /etc/syslog.conf 文件并添加以下中的一项:user.info FileName 或 user.debug FileName。
-g:禁用文件名中的元字符拓展,即取消全局文件名。
-i :关闭多文件传输中的交互式提示。
-n:防止在起始连接中的自动登录。否则, ftp 命令会搜索 $HOME/.netrc 登录项,该登录项描述了远程主机的登录和初始化过程。
-v:显示远程服务器的全部响应,并提供数据传输的统计信息,即在程序运行时显示详细的处理信息。
 
在linux中瞬间生成指定大小的文件 并且不占用磁盘空间  dd if=/dev/zero of=hanke bs=1M count=0 seek=20000
在linux中瞬间生成指定大小的文件 并且占用实际磁盘空间  dd if=/dev/zero of=hanke bs=1M count=20000
 
对拷文件夹 (包括文件夹本身)
scp -r /home/wwwroot/www/charts/util root@192.168.1.65:/home/wwwroot/limesurvey_back/scp
对拷文件夹下所有文件 (不包括文件夹本身)
scp /home/wwwroot/www/charts/util/* root@192.168.1.65:/home/wwwroot/limesurvey_back/scp
对拷文件并重命名
scp /home/wwwroot/www/charts/util/a.txt root@192.168.1.65:/home/wwwroot/limesurvey_back/scp/b.text
 
免费DNS地址:
阿里云:223.5.5.5  223.6.6.6
谷歌:8.8.8.8   8.8.4.4
百度:180.76.76.76
publicDNS:119.29.29.29
openDNS:208.67.220.220
移动,电信,铁通:101.226.4.6
联通:123.125.81.6
 
查看一个目录下的所有目录和文件
ls -l|grep ^d|wc -l  目录
ls -l|grep ^-|wc -l  文件
ls -lR|grep ^d|wc -l 递归
ls -lR|grep ^-|wc -l 递归
 
history
linux中
查看历史命令的使用时间
1:临时生效直接命令行输入:export HISTTIMEFORMAT='%F %T'
2:永久生效:vi /etc/profile 或者  ~.bash_profile
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S"  或者export HISTTIMEFORMAT='%F %T'
若想保留的历史命令很多的话可以继续添加  HISTSIZE=999999
unix中
设置历史命令
vi .profile在最下面加入
export EDITOR=vi
export HISTFILE=~/.bash_history
export HISTSIZE=999999
 
;   顺序执行命令
||   前一条失败则执行第二条
&&   前一条成功则执行第二条
!!:执行上一条命令
!num:执行历史命令中第num条命令
!-num:执行历史命令中倒数第num条命令
!?string?:执行最近一条包含有string字符串的命令
Ctrl+r:搜索上一条匹配的命令
!$:代表上一个命令的最后一个字符串
Esc+.:显示上一个命令的最后一个字符串
Ctrl+a:将光标移到行首
Ctrl+e:将光标移到行尾
Ctrl+右箭头:向右移动一个单词
Ctrl+左箭头:向左移动一个单词
Ctrl+f:向右移动一个字符,相当于按向右按键
Ctrl+b:向左移动一个字符,相当于按向左按键
Esc+f:移动到当前单词的尾部
Esc+b:移动到当前单词的首部
tab:补全命令
Ctrl+c:中断当前的操作(最常用)
Ctrl+u:剪切光标所在位置到行首间的字符,如果光标在最后,相当于剪切当前命令行
Ctrl+k:剪切光标所在位置到行尾间的字符,如果光标在行首,相当于剪切当前命令行
Ctrl+y:粘贴之前被剪切的字符串
Ctrl+d:删除光标处所在的字符
Ctrl+h:删除光标处所在的前一个字符
Ctrl+w:删除光标前的单词
Ctrl+d:注销当前shell并关闭
clear:清屏
exit:退出当前shell
Ctrl+l:清屏操作(将当前的显示全部清除,保留当前行命令)
Ctrl+s: 挂起当前shell
Ctrl+q:重新启动挂起的shell
man -k firewall   #查看firewall的用法
man …………   #man查看上一条查找出来的语句用法,再到里面搜索example,搜索例子,直接拿出来修修补补
source /etc/profile   #改完profile要执行此命令生效
firewall-cmd --reload   #改完防火墙要重载
nmcli connection up eth0   #修改完网卡信息要重启
nmcli connection add type ethernet con-name eth0 ifname eth0 autoconnect yes ipv4 172.24.8.11/24 gw4 172.24.8.254
nmcli connection modify eth0 ipv4.dns 172.24.8.254
nmcli connection up eth0
nmcli connection modify eth0 connection.autoconnect yes ipv6.method manual +ipv6.addresses '2003:ac18::30a/64'   #添加IPV6地址
wget -c   #断点下载,继续下载之前断掉的文件
wget  -O   #重命名下载   wget -O hanke.tar http://^^^^^^
wget -b   #后台下载,使用  tail -f wget-log
wget -i 1.txt   #同时下载多个地址,首先将需要下载的地址卸载1.txt里面
wget -r -A.pdf www.baidu.com   #下载百度下面所有的pdf文件
wget -P /home/hanke http://server.group8.example.com/hanke.txt   #将hanke.txt下载至/home/hanke这个目录
sort命令
sort 升序(根据第一个字符)
sort -r 降序(根据第一个字符)
sort -u 去重复
sort -n 作为数值排序(不作为字符)
sort -t -k (t表示以什么为分隔符,k表示第几个)
 
echo $PATH #查看环境变量
将java加入环境变量,全局:vi /etc/profile 一般修改用户下.bash_profile
export JAVA_HOME=/usr/share/jdk1.6.0_14
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
TMOUT=3000  #环境超时时间为3000秒,直接添加在.bash_profile里面
hostnamectl #可以查看主机名和发行版本
cat /etc/redhat-release  查看发行版本
如果环境没有.ssh目录,请执行ssh localhost 按照要求输入yes以及密码
nmtui #设置hostname以及网卡等信息
ssh root@192.168.85.132 #如果是连接到同一个用户可以去掉用户ssh 192.168.85.129,如果再加上公钥的话可以免密连接
ssh-keygen #生成私钥-公钥对
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.85.129 #此时公钥就到了192.168.85.129,目录为~/.ssh/authorized_keys 此时我就可以在我的机器登录192.168.85.129
ssh-copy-id root@remotehost
w #查看当前系统登录的所有用户
w -f
lab permissions setup #重置系统做题目
lab permissions grade #做完题目检查下
showmount -e IP或者主机名   #查看NFS服务器上所有共享的目录
getent   #查看系统数据库中存在的信息
getent passwd|grep hanke
tar -zcvf hanke`date +%Y%m%d%H%M`.tar.gz hanke  以当前时间备份
判断目录是否为空,然后执行其他操作
[ "`ls -A $WORK_DIR`" != "" ] && mv $WORK_DIR $WORK_DIR`date +%Y%m%d` && mkdir $WORK_DIR
DATE=$(date +%Y%m%d) #将当前日期赋值给DATE变量
date -s 2019-10-15
date -s 15:00
date -s "2019-10-15 15:00"
date查看系统时间
date +%Y%m%d  #显示当前的年月日
date -d "last day" #显示前一天日期
date -d last-day #显示前一天日期
date -d last-day +%Y%m%d
touch -d "2020-09-18 12:30" `find . -type d`  修改查找到得目录的时间为20200918
clock或者hwclock查看的是硬件时间
hwclock -s 将硬件时间写入到系统时间
hwclock -w 将系统时间写入到硬件时间
tar -cvf hanke.tar /hanke
tar -zcvf hanke.tar.gz /hanke
tar -jcvf hanke.tar.bz2 /hanke
tar -Jcvf hanke.tar.xz /hanke
tar -cvf hanke.tar * .[!.]*   #将隐藏文件一起打包
tar -tvf 111.tar  #查看包里面的文件路径
tar -xvf 111.tar tmp/111/222/333/444.txt  #根据tvf出来的路径单独解压出包里面的某个文件
tar -tvf 111.tar |grep test.txt  #查看压缩包里面是否有test.txt
tar -xvf 111.tar 111/hanke/test.txt  #单独解压出包里面的某个文件
find . -type f -name 'hanke*' |xargs tar -cvf 111.tar
find . -type f -name 'hanke*' -exec tar -cvf 222.tar {} \;
find . -type f -newermt '2020-10-20 12:00:00' ! -newermt '2020-10-20 13:00:00'
echo yes|cp -ra ./.bash_profile ../   #将当前的.bash_profile强制覆盖到上一级目录(不用手动输入yes)
如果linux中打tar解压后有乱码,可以打zip包
zip -r hanke.zip /hanke  打包目录需要带-r参数
unzip hanke.zip   解压
gzip hanke.tar.bz2 /hanke   #压缩完之后/hanke这个目录就没了
gzip test.txt   #生成test.txt.gz
gzip -d test.txt.gz   #将.gz解压成test.txt
gzip -c 1.txt 2.txt > all.gz  #将1.txt和2.txt里面的内容全部弄到all里面,并将all打包为all.gz
bzip2 -d filename.bz 解压bz文件
bunzip2 filename.bz  解压bz文件
tar -jxvf filename.tar.bz  解压.tar.bz文件
uncompress filename.Z  解压.Z文件
conpress filename   压缩成.Z文件
rar a filename.rar folder 压缩为filename.rar
unrar x filename.rar  解压
tar -Zcvf hanke.tar.Z hanke 压缩
tar -Zxvf hanke.tar.Z  解压
find / -type f -mtime  modify
                      -atime  access
                      -ctime   change
                    -user
                    -size
                    -group
rename sit uat2 *  #批量将文件名带sit的改为uat2
cat 2.txt|while read line;do mkdir -p $line;done  读取2.txt的每一行内容并进行mkdir
cat /root/hanke.txt|grep "^$"|wc -l   #查看hanke.txt是否有空行,并统计出有几个空行
grep hello /root/hanke.txt|grep -v "^$" >/root/wordlist   #将hanke.txt里面含hello的行过滤出来追加到wordlist里面并去掉空行
find . -type f -mtime +10 -exec cp {} ~/hanke/bak/ \;
find . -type f -mmin -10 -exec ls -lrt {} \;   #将10分钟以内的文件列出来
 
cmd1 ; cmd2 #顺序执行命令
cmd1 || cmd2 #cmd1失败则执行cmd2
cmd1 && cmd2 #cmd1执行成功则执行cmd2
 
/etc/yum.repos.d #此目录下是yum源
yum install --downloadonly --downloaddir=/tmp <package-name> #仅从yum源中下载rpm包
如果不能使用--downloadonly参数就执行 yum install yum-plugin-downloadonly 安装downloadonly
yum clean all ; yum makecache #清理缓存,建立缓存
yum -y install #安装软件或工具,支持*
yum -y install "/usr/sbin/semanage"    #直接写命令路径安装
yum install "/usr/bin/httpd"
yum remove #卸载工具,不支持*
yum erase subversion subversion-devel subversion-libs subversion-javah  #同时下载多个软件包
yum provides httpd #查看httpd是哪个包提供的
yum search httpd   #查找httpd是哪个包提供的
yum groups install "Server with Gui"   #安装图形化
rpm -ivh #rpm安装工具,支持*
rpm -e #卸载工具,不支持*
rpm -ql   #列出关于这个服务的所有文件
rpm -qc   #查服务的配置文件路径
rpm -qf 文件名   #查找这个文件属于哪个安装包
rpm -qi firewalld   #查看防火墙安装信息
rpm -qd firewalld   #查看防火墙所有帮助文档
rpm -qR firewalld   #查看防火墙所依赖的软件包
源码编译安装步骤:
./configure --prefix #编译安装,--prefix指定安装目录
make && make install
 
whereis oracle #查询oracle安装路径
which oracle #查找运行文件路径
ln -s path1 path2 #将path1软链接到path2
ln -d path1 path2 #将path1硬链接到path2
ln -snf path1 path2 #path2已经存在。更改链接路径
 
数仓改数据库密码:modify user bosedw as password=""
 
ORACLE数据库:
查看数据库服务器的版本:select * from v$version;
重启oracle数据库
第一步;su - oracle(必须oracle用户)
先执行 sqlplus /nolog;
再执行 conn sys / as sysdba ;
关闭 再执行 shutdown immediate ;
开启 最后执行 startup ;
第二步骤;su - oracle用户下执行((必须oracle用户))
监听开启 lsnrctl start
关闭监听 lsnrctl stop
查看当前数据库连接数:select count(*) from v$process;
查看当前数据库最大连接数:select value from v$parameter where name='processes';
查看数据库下所有用户是否被锁
select username,account_status,lock_date from dba_users;
查看数据库下单个用户是否被锁
select username,account_status,lock_date from dba_users where username='hanke';
用户解锁
alter user hanke account unlock;
修改用户密码
alter user hanke identified by abcd1234;
模糊查询:select * from tabname where tabname.colname like '%韩可%';
更新某一列数据为某一个值:update test set name='测试韩';
字段下面的数据小于某个长度:select * from tabname where length(colname)<18; 
select * from v$version;   #查看当前数据库版本
create table CUST(list number(14) primary key,name varchar2(100) not null,id nvarchar2(100),mobile nvarchar2(100),address varchar2(100));
insert into CUST (column1,column2,column3) values (1,2,3,4,5);   insert into是插入新数据,如果输入的值列表和字段列表对应,则不需要(column1,)
alter table CUST1 add NAME1 varchar2(100);  添加列
alter table CUST1 drop column NAME1;  删除列
delete from CUST where NAME1='韩可1';    删除某一条记录
update CUST set ADDRESS='江苏省徐州市',NAME1='韩可1' where list=1;   修改字段值
update CUST set CUST.NAME1=NULL;   将NAME1这一列数据全部删除
查询表字段中重复的数据有哪些:select 字段,count(*) from 表名 group by 字段 having count(*) >1; #显示重复的数据以及重复的条数
查询表字段中重复的数据有哪些:select count(*) from 表名 a where (a.字段) in (select 字段 from 表名 group by 字段 having count(*) >1); #只显示重复的条数
删除重复数据保留rowid最小的那一条:delete from 表名 a where (a.字段) in (select 字段 from 表名 group by 字段 having count(*) >1) and rowid not in (select min(rowid) from 表名 group by 字段 having count(*) >1);
drop table CUST;  #删除表
create table CUST_COPY1 as select * from CUST;  #同一个库下从CUST复制一个表并重命名为CUST_COPY1
create table CUST_COPY1 as select * from CUST where 1 = 2;  #同一个库下从CUST表复制表结构到新的表,不复制表数据,但是主键没复制过去
如果想再把数据也弄过去,那就执行:insert into CUST_COPY1 select * from CUST;
同一个库从一张表copy到另一张表:insert into CUST_COPY1(column1,column2,,,,) select column1,column2,,,, from CUST;
同一个库从一张表copy到另一张表:insert into CUST_COPY1 select * from CUST;
查看dmp文件里面有哪些表:strings  exp_ddl_lhr_03.dmp | grep "CREATE TABLE"|awk '{print $3}'  #记得替换strings后面的内容
查看dmp文件的字符集:cat exp_ddl_lhr_03.dmp | od -x|head -1|awk '{print $2 $3}'|cut -c 3-6 查找出来4个字符,根据这四个字符到数据库查找对应的字符:select NLS_CHARSET_NAME(TO_NUMBER('0354','XXXX')) FROM DUAL;
查看当前数据库字符集:select userenv('language') from dual;
查看数据库中所有表空间名:select name from v$tablespace;
exp hjgl/abcd1234@10.240.33.104/orcl file=/hjgl/hanke/CUST.dmp tables=CUST   #从orcl库中导出CUST表结构以及表数据
exp hjgl/abcd1234@10.240.33.104/orcl file=/hjgl/hanke/CUST.dmp   #从orcl库中导出CUST表结构以及表数据
imp的时候要注意:目的库里面不能包含dmp里面的表,如果报错too lang 可能是字符集的原因
imp hjgl/abcd1234@10.240.33.105/orcl1 file=/hjgl/hanke/CUST.dmp tables='(CUST,TEST)'  #将从orcl库中导出的CUST表结构以及表数据导入到orcl1库中,表名还是CUST
imp后面的tables如果小括号导入不行的话就加单引号
imp hjgl/abcd1234@10.240.33.105/orcl1 file=/hjgl/tmp/CUST/dmp fromuser=topcard touser=hjgl log=CUST.log
如何查看fromuser:执行imp命令会显示这个dmp文件当初是哪个用户导出的
imp hjgl/abcd1234@10.240.33.105/orcl1 file=/hjgl/hanke/CUST.dmp ignore=y full=y
创建永久表空间:create tablespace TSP_TEST datafile '/oracle/oracledata/TSP_TEST.DBF' size 500M AUTOEXTEND ON NEXT 50M
删除非空表空间,包含物理文件,以及外键约束
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
oracle:
查表:select count(*) from user_tables where table_name='klnb_cfkhcy';   ECCIFPAGT
模糊查询:select count(*) from user_tables where table_name LIKE '_hanke_';
查表中是否有某一字段:select count(*) from user_tab_columns where table_name='FSM_BATCHBUY_PAYIN_FLOW' and column_name='PAYEENAME';       
查表空间:select t.tablespace_name,round(sum(bytes / (1024 * 1024)),0)ts_size from dba_tablespaces t,dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name;  
删除索引:ALTER TABLE table_name DROP PRIMARY KEY;
          ALTER TABLE table_name DROP INDEX index_name;
          DROP INDEX index_name ON table_name;
          DROP INDEX index_name;
对多个字段建索引:CREATE UNIQUE INDEX index_name ON table_name (column1,column2);
                  CREATE INDEX index_name ON table_name (column1,column2);
                  ALTER TABLE table_name ADD PRIMARY KEY (column1,column2);
                  ALTER TABLE table_name ADD INDEX index_name (column1,column2);
列出此用户此库下所有表名:select table_name from user_tables;
统计此用户此库下所有表个数:select count(*) from all_tables where owner='HJGL';  #用户一定要大写
添加字段:alter table CUST add TIME date;  添加TIME字段并设定字段类型为date
修改字段类型:alter table CUST modify TIME varchar2(100);
oracle数据库连接串里面的密码有特殊字符请这样表示:sqlplus 'user/"passwd"'@IP/SID
列出数据库中所有表:select table_name from user_tables;
删除表中所有数据但不删除表:truncate table CUST1;
根据条件查询某一条数据:select * from CUST where CUST.MOBILE='18321213686';  #查询手机号为18321213686人的所有信息,也可以将*替换为字段
删除主键的同时并删除索引:alter table CUST drop constraint 约束名 cascade drop index;
删除约束:alter table 表名 drop constraint 约束名;
删除主键:alter table 表名 drop primary key;
如果出错:此唯一主键已被某些外键引用则执行:alter table 表名 drop primary key cascade;
删除主键被引用的表:drop table 表名 cascade constraint;
查主键名称:select * from user_constraint where table_name='CUST' and constraint_type='P';
查主键对应的列:select * from user_cons_columns where table_name='CUST' and constraint_name='PK_CUST';
查索引名称:select * from user_indexes where table_name='CUST';
查索引对应的列:select * from user_ind_columns where table_name='CUST' and index_name='INDX_BA';
创建索引:create index index_CUST on CUST(column1,column2);
创建主键:alter table CUST add primary key(list);
创建主键:alter table CUST add constraint PK_CUST primary key(list);
清理所有表数据:SELECT 'TRUNCATE TABLE ' || TABLE_NAME || ';' FROM USER_TABLES;
删除所有表:SELECT 'DROP TABLE '|| TABLE_NAME || ';' AS SQLSCRIPT FROM USER_TABLES;
将上一条命令查出的结果再执行就OK了,其实SELECT TABLE_NAME FROM USER_TABLES;查出来的结果我们通过UE自行处理也是可以的
外键和主键的关系:
首先要有父子两个表,父表里面建好主键,字表在创建父表外键( references)的时候必须要用父表中的主键TEST(LIST)  TEST是父表,LIST为父表的主键
字表在给外键插入数据时必须要是父表主键的值或者None,否则报错主键冲突
 
DB2:
查看db2版本:db2level
查看数据库是否启动:ps -ef|grep -i db2sysc
列出关联的DB2数据库:db2 list db directory  或 db2 list node directory
进入数据库:db2 connect to cbibdb user ibapp using hardutest1017
查询表是否存在:db2 list tables|grep IB_LOAN_ENTRUST_SIGN   前提是db2数据库已关联到本机器
                                db2 list tables for all   列出当前用户下的所有表
                                db2 list active databases 列出所有活动的数据库
                                db2 list db directory  列出所有数据库
                                db2 list tablespaces show detail  列出当前数据库表空间分配情况
查询一个表的主键:db2 describe indexes for table IB_RESTAURANT_CARD_INFO show detail 可以查看具体索引的字段 names对应的下面的那个字段
db2数据库改用户密码,其实就是在Linux下面切到db2用户,直接改密码,这样的话也就相当于改了数据库密码
或者linux下:db2 connect to cbibdb user ibapp using Easylearn1212 new hardutest1017 confirm harutest1017
windows下:切换至admin用户db2admin setid ibapp harutest1017
db2数据库连接串里面的密码有特殊字符请这样表示:db2 "connect to database user hanke using 'abcd1234'"
查询表存不存在:db2 "select count(*) from syscat.tables where tabname='CUST'"
查询字段存不存在:db2 "select count(*) from syscat.columns where tabname='CUST' and colname='NAME'"
模糊查询:select * from tabname where tabname.colname like '%韩可%';
查表结构:db2 describe table 表名
DB2
#db2cmd
#db2 creat database hanke(数据库名) /创建数据库
#db2 connect to hanke user root using abcd1234 /连接至数据库
#db2 connect reset /断开DB2数据库连接
#db2 drop database hanke /删除数据库
#db2 "insert into t1 select * from t2" /将t2的表导入到t1
#db2 -tvf hanke.sql /执行脚本文件
 
mysql数据库
查看数据库服务器的版本:status;
查询是否存在某张表:select count(*) from information_schema.tables where table_name = 'klnb_cfkhcy';
查询某个表中是否存在某字段:select count(*) from information_schema.columns where table_name = 'otpmobilert' and column_name = 'MOBILE';
查询主键:describe 表名;   看key那一列,凡是带PRI的都为主键
查询主键:select column_name from information_schema.`key_column_usage` where table_name='tablename' and constraint_name='primary';
查表结构:describe tablename;
查索引以及索引对应的字段名:show index from 库名.表名;
查字段上的索引名:show index from 库名.表名 where column_name='字段名';
查表内容:select * from tablename;
模糊查询字段:select * from tabname where tabname.colname like '%韩可%';
模糊查询表:seletc * from information_schema.tables where table_name like '%hanke%';
用mysql命令查看所连得数据库IP: select SUBSTRING_INDEX(host, ':' , 1 ) as ip , count (*) from information_schema.processlist group by ip;
linux系统进入mysql数据库的方法:
连接MYSQL:
格式: mysql -h主机地址 -u用户名 -p用户密码 -ddatabase_name
mysql数据库改密
set password=password('newpasswd')
1、连接到本机上的MYSQL。
首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>
2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -uroot -pabcd123(注:u与root可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)
一个建库和建表以及插入数据的实例:
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key, //id设置为主关键字,并自动设值,也就是添加的时候,你不必向ID字段写内容
name char(10) not null,
address varchar(50) default '深圳', //设置默值为深圳
year date
); //建表结束
//以下为插入字段
insert into teacher values('','glchengang','建平一中','1976-10-10'); //ID不用写内容
insert into teacher values('','jack','建平一中','1975-12-23');
1、MySQL数据库导出
#/usr/local/mysql/bin/mysqldump -h10.240.93.110 -uroot -p123456 test >/home/backup/test.sql
mysql数据库导出整库表结构(不含数据):mysqldump -h10.240.93.110 -uroot -pabcd1234 -d 库名 > /hjgl/hanke/ddl.sql
mysql数据库导出单个表结构(不含数据):mysqldump -h10.240.93.110 -uroot -pabcd1234 -d 库名 表名 > /hjgl/hanke/ddl.sql
mysql数据库导出整库表结构:mysqldump -h10.240.93.110 -uroot -pabcd1234 库名 > /hjgl/hanke/ddl.sql
mysql数据库导出单个表结构:mysqldump -h10.240.93.110 -uroot -pabcd1234 库名 表名 > /hjgl/hanke/ddl.sql
注意:可能导出的时候会报错:Warning: Using a password on the command line interface can be insecure.
    请先在命令行执行 export MYSQL_PWD=abcd1234
    那么在执行mysqldump的时候就可以忽略 -p参数直接  mysqldump -h10.240.93.110 -uroot 库名 > /hjgl/hanke/ddl.sql
其中:root为数据库用户名
123456为对应root数据库密码
test是需要导出的数据库名。
/home/backup/test.sql是数据库文件sql导出的路径。
2、MySQL数据库导入(1)
#/usr/local/mysql/bin/mysql -h 10.240.93.110 -uroot -p123456 test </home/backup/test.sql
3:MySQL数据库导入(2)
先将.sql脚本上传至系统/afa/HB/hanke.sql
然后#mysql -h10.240.97.147 -uroot -pabcd1234进入10.240.97.147数据库
创建一个新的数据库musql>creat database hanke;检验创建是否成功mysql>show database;
然后将刚刚.sql文件导入hanke这个数据库,先是mysql>use hanke;mysql>source /afa/HB/hanke.sql
待导入完毕查看mysql>show tables;
查看mysql数据库长连接的sleep进程: SELECT ID FROM information_schema.PROCESSLIST t WHERE t.COMMAND='Sleep' and user=hjgl and time >1000;
杀掉mysql进程:进到数据库,kill $PID
exit;退出
 
informix(DBA)
#查看数据库字符集
select * from sysmaster:sysdbslocale
info columns for 表名   查看表中包含哪些字段
cat /informix/etc/sqlhosts 查看informix链接信息
ps -ef|grep oninit #查看informix数据库是否启动,进到数据库服务器查看
onstat -c|grep DBSERVER 查看数据库名
#查询有哪些库
select * from sysmaster:sysdatabases;
查看数据库锁机制(行锁,页锁,表锁):select locklevel from systables where owner = '数据库用户' and tabtype = 'T'
将表改为行锁:alter table table_name lock mode (row); 
查看informix数据库状态,root进到数据库服务器su到informix用户(su - informix):onstat - 
启动informix 数据库命令,root进到数据库服务器su到informix用户(su - informix):oninit -vy 
关闭informix 数据库命令,root进到数据库服务器su到informix用户(su - informix):onmode -ky 
#进入informix客户端:dbaccess test -
#查询库中表:select * from systables;
#查询库中有多少表
select count(*) from systables where tabid>99 and tabtype='T';
#查询表是否存在
select count(*) from systables where tabname='表名';
#字段是否存在
select 字段名 from 表名;
#导出整库表结构
dbschema -d 库名 -t all test.sql
#导出库中一个表结构
dnschema -d 库名 -t 表名 test.sql
#导出库中所有对象
dbschema -d 库名 test.sql
#导出数据库中对用户或角色的授权信息
dbschema -d your_database_name -p all
dbschema -d your_database_name -r all
导出数据表中的数据到文件中
echo "unload to 表名.unl select * from 表名"|dbaccess pibs@pibs
导入数据到现有表
echo "load from 表名.unl insert into 表名"|dbaccess test@test
 
#informix 给test表添加num字段,类型为integer
alter table test add num integer;
#informix 创建唯一索引(其中test为表名 , age为需要创建的字段)
alter table test modify age integer  primary key ;
#informix 查找主键, ----'R'查找外键,'P'查找主键
select constrname from sysconstraints where constrtype='R' and tabid= ( select tabid from systables where tabname = '表名' ) ;   
#如查找tabid为103的表
select * from sysconstraints where tabid=103;
#informix 删除主键
alter  table  tablename  drop  constraint  constrname;
#如删除名为 u103_13 的主键:
alter  table  test  drop  constraint  u103_13;
创建数据空间: onspaces -c -d datadbs1 -o 0 -p /dev/rrvol3 -s 60000
创建临时数据空间: onspaces -c -d tempdbs1 -t -o 0 -p /dev/rrvol5 -s 80000
#删除字段
alter table 表名 drop(字段名);
#创建索引
create index 索引名 on 表名(字段名)
#删除索引
drop index 索引名
#删除表
drop table 表名;
#建表
CREATE TABLE TEST(LIST CHAR(100),ID CHAR(100));
#插入数据
INSERT INTO TEST(LIST,ID) VALUES('1','32032419901219');
1:在命令行执行sql脚本#dbaccess test@test hanke.sql
2:也可以dbaccess进入,然后选择database,进入数据库之后可以左右选择上面的任务栏,"New"为输入数据库语言,"Run"运行,直接按"E"退出
3:运行dbaccess命令,选好数据库,进入SQL操作界面,菜单如下:
SQL: New Run Modify Use-editor Output Choose Save Info Drop Exit
可按C选择Choose命令,进入脚本选择界面,选择xx脚本,脚本内容会显示到sql语句</a>编辑区,
可按M进行修改,也可以按R直接运行。
 
sqlserver中查看表是否存在:
select count(*) from sysobjects where id=object_id('tablename');
查看字段存不存在:
select count(*) from syscolumns where id=object_id('tablename') and name='colname';
判断表存不存在,不存在则创建:
if not exists (select * from sysobjects where id = object_id('mytab')
and OBJECTPROPERTY(id, 'IsUserTable') = 1)
create table mytab
(
  id int,
  age int ,
  name varchar(max),
  primary key (id,age)
)
go
判断字段存不存在,不存在则创建:
if not exists (select * from syscolumns where id=object_id('mytab') and name='colname') alter table [mytab] add colname nvarchar(max);
 
查看环境变量
echo $PATH #查看环境变量
cat /etc/profile #配置系统环境变量 source /etc/profile #使配置生效
cat ~/.bash_profile #配置用户环境变量 source ~/.bash_profile #使配置生效
JAVA_HOME=
export PATH=$JAVA_HOME/bin:$PATH
update-alternatives --display java #查看java插件安装情况
 
重定向和管道
> #标准成功输出到
2> #标准错误输出到
1> file1 2> file2 #正确的输出到file1。错误的输出到file2
>> #追加到
2>/dev/null #错误输出到黑洞里面
1> file1 2>&1 #正确输出到file1,错误的输出也随正确输出一起显示
& > file1 #错误正确输出都要,和上一个意思一样
grep -v 删掉过滤出来的
cat /etc/passwd |head -n 10 > file1 #passwd前十行输出到file1
ping -c2 1.1.1.1|tee /home/hanke/test/file1|mail -s ‘for test’ cainiaoke@163.com
 
命令栏快捷操作
ctrl-l - 刷新屏幕。
ctrl-z - 暂停进程。使用命令:bg在后台运行或者使用fg在前端运行。
ctrl-a - 把光标移动到命令行最开始的地方。
ctrl-e - 把光标移动到命令行末尾。
ctrl-u - 清除光标左侧字段
ctrl-w - 清除光标左侧字段
ctrl-k - 清除光标右侧字段
ctrl-y - 黏贴被ctrl-u 或者 ctrl-k 或者 ctrl-w清除的字段
魔术组合键(sysrq)
echo 1 > /proc/sys/kernel/sysrq #启动魔术组合键
echo 0 > /proc/sys/kernel/sysrq #关闭魔术组合键
 
linux安全与优化
/var/run/utmp:记录当前正在登录系统的用户信息,默认由who和w记录当前登录用户的信息,uptime记录系统启动时间;
/var/log/wtmp:记录当前正在登录和历史登录系统的用户信息,默认由last命令查看;
/var/log/btmp:记录失败的登录尝试信息,默认由lastb命令查看。
vipw #查看用户组
root:x:0:0::/root:/sbin/nologin #加了nologin, root用户就没权限了 (此命令要和下面的命令一起使用,否则系统起不来)
hanke:x:0:0::/home/huojun:/bin/bash #将3,4列改为了0:0, 普通用户就变成了root (此命令要和上面的命令一起使用,否则系统起不来)
vi /etc/shadow #修改密码过期时间
vi /etc/ssh/sshd_config #添加一行allowusers hanke@192.168.85.132   /etc/init.d/sshd restart   #修改完以上操作记得重启
vi /etc/ssh/sshd_config #修改Port 22 端口自定义一个   /etc/init.d/sshd restart   #修改完以上操作记得重启
vi /etc/ssh/sshd_config #添加PermitRootLogin no   /etc/init.d/sshd restart   #修改完以上操作记得重启
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all #禁止ping本机 立即生效
vi /etc/sysconfig/selinux #更改selinux里面的SELINUX=disabled
firewall-cmd --state #查看防火墙
selinux的作用是最大限度的限制系统服务可访问的文件(最小权限规则)
ps -ef   #查询进程
ps -ef|grep java   #查询java进程
pgrep java   #改进版本的查java进程的命令
pidof java-bin   #改进版本的查java进程的命令
ps -ef|grep java|grep -v grep|cut -c 10-15|xargs kill -s 9 解释如下:
    grep firefox   #的输出结果是,所有含有关键字“firefox”的进程
    grep -v grep   #是在列出的进程中去除含有关键字“grep”的进程。
    cut -c 10-15   #是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
    kill -s 9 1120   #强行杀掉制定进程
pgrep java|xargs kill -s 9
kill -s 9 `pgrep java`
pkill -9 java   #pkill = pgrep+ kill      pgrep = ps -ef|grep java
killall -9 java
如果系统报错 Too many open files in system  检查措施如下:
……1:  :   :   ulimit -n或者ulimit -a #查看当前系统允许打开的最大文件数(软限制的文件数,相当于是警告但系统仍然能登陆,还有个硬限制,文件数到了这个值系统就登录不进去了)
cat /etc/security/limits.conf   #打开这个文件能看到以下信息,可以修改
            *        soft     nofile        1024    #软限制打开文件的最大数
            *        hard    nofile        10240   #硬限制打开文件的最大数
            *        soft    noproc        1024   #软限制打开进程的最大数
            *        hard    noproc        10240   #硬限制打开文件的最大数
echo "session    required    /lib/security/pam_limits.so" >> /etc/pam.d/login
echo "session     required      /lib/security/$ISA/pam_limits.so" >> /etc/pam.d/system-auth
 
主要用这种方法……2.................:  :  :  lsof|wc -l   #检查当前系统已经打开的文件数  ulimit -n ,ulimit -a或者cat /proc/sys/fs/file-max   #查看系统设定的最大打开文件数,将两个数比较下,如果已经打开的比规定的多,那就执行下面操作::::
echo 一倍的数值 >/proc/sys/fs/file-max   这样的话报错就没有了,但只是临时生效,系统重启失效
vi /etc/sysctl.conf   #在最后一行添加fs.file-max = 一倍的数值    sysctl -p   #重启生效
ulimit -a   #查看各个功能有无限制
数据段长度:ulimit -d unlimited    #设置为无限制
最大内存大小:ulimit -m unlimited     #设置为无限制
堆栈大小:ulimit -s unlimited     #设置为无限制
CPU 时间:ulimit -t unlimited     #设置为无限制
虚拟内存:ulimit -v unlimited     #设置为无限制
 
swap优化:
vi /etc/sysctl.conf   #添加下面一行,之前有的话就修改
vm.swappiness=10 #内存使用90%的时候,就开始出现有使用swap的情况
主动释放swap: swapoff -a   swapon -a
swapon -s   查看swap分区挂载在哪个盘
 
HP-UX优化:
uptime  显示系统运行时间,用户数,系统负荷。
top   显示进程对系统资源的利用程度
iostat  显示系统I/O情况
sar  显示各子系统活动情况  
 # sar-v 1 5  显示系统进程,inod,文件表参数 
# sar-u 1 5  显示系统CPU利用率    
# sar-d 1 5  显示系统I/O活动情况  
 #sar -b 1 5  显示系统buffer活动情况
vmstat  系统内存使用统计
netstat  显示系统网络情况
ipcs  报告系统进程间通信情况
glance  系统性能监控工具 C:CPU  M:内存 D:磁盘 A:每个CPU使用情况 W:swap分区情况  G:进程相关  I:磁盘IO
修改linux终端永不超时断开:echo "ecport TMOUT=3600" >> /etc/profile
 
LVM逻辑卷
#yum -y install lvm*
1:硬盘sdb(注意此硬盘是否还有剩余空间)
对硬盘进行分区:fdisk /dev/sdb 选择P 先分出sdb1(1G),sdb2(2G) 选择t 给这两个区加上标识符8e 然后w保存 退出之后同步下:partx -a /dev/sdb或者partprobe
2:物理卷PV
将上面的sdb1,sdb2转化为物理卷:pvcreate /dev/sdb1 /dev/sdb2 pvs以及pvdisplay查看物理卷大小等信息
3:卷组VG
将已经转化为PV的两个区创建为一个卷组:vgcreate vgdata /dev/sdb1 /dev/sdb2     vgs以及vgdisplay查看卷组大小等信息
4:逻辑卷LV
从上面创建好的卷组里面分割出一部分作为逻辑卷:lvcreate -L 500M -n lvdata1 vgdata lvs以及lvdisplay查看逻辑卷大小等信息
创建好lvdata1之后要为逻辑卷创建文件系统并格式化:mkfs.ext4 -b 1024 /dev/vgdata/lvdata1
如果只是单纯的更改文件系统的话:mkfs -t ext2 /dev/vgdata/lvdata
每创建好一个逻辑卷都可以在/dev/mapper下面找到一个对应的卷组-逻辑卷的软链接
5:挂载逻辑卷
临时挂载:mount /dev/vgdata/lvdata /data
永久挂载:vi /etc/fstab
/dev/vgdata/lvdata /data ext4 defaults 0 0
或者 UUID=45700d1c-3940-4bf3-bdee-e6c27e42a45f /data ext4 defaults 0 0 这里面是UUID代替了/dev/vgdata/lvdata1 blkid查看UUID
#卸载逻辑卷挂载: umount /data
#检查文件系统还有多少剩余的空间:e2fsck -f /dev/vgdata/lvdata
#将文件系统减少到700M:resize2fs /dev/vgdata/lvdata 700M
#将逻辑卷减少到700M:lvreduce -L 700M /dev/vgdata/lvdata
#重新挂载:mount /dev/vgdata/lvdata /data
#把减掉的空间给其他的磁盘:lvextend -L +1G /dev/vgdata/lvdata1 --resize2fs
报错:::resize2fs: Bad magic number in super-block 当尝试打开 /dev/mapper/centos-home 时
找不到有效的文件系统超级块. #原因:可能文件系统不同导致的,查看文件系统,如果是xfs则用:xfs_growfs /dev/mapper/centos-home更新文件系统
lvextend -L +500M /dev/vg0/lv0 --resizefs   #+500M  表示扩大了500M
lvextend -l 1.5G /dev/vg0/lv0 --resizefs   #-l 1.5G  表示扩大到1.5G
lvcreate -L 500M -n lvdata vgdata
vgextend vgdata /dev/sdb3   #卷组不够的情况下增加卷组
lvextend /dev/vgdata/lvdata1 -L 5G  --resizefs #将逻辑卷增加到5G并同步下
 
 
 
安装Firewalld 防火墙规则路径/etc/firewalld/zones/public.xml
yum -y install firewall*
启用Firewalld
systemctl enable firewalld
systemctl start firewalld
firewalld命令行配置
add:创建
get:查看
query:查询
set:设置
change:修改
remove:移除
permanent:永久生效
reload :重新加载防火墙
示例:
firewall-cmd --get-zones:查看当前已存在的区域
firewall-cmd --get-active-zones:查看当前活跃的区域
firewall-cmd --get-default-zone:查看当前防火墙的默认区域
firewall-cmd --list-services --zone=home:查看home区域下的可用服务
firewall-cmd --set-default-zone=home:设置默认区域为home
firewall-cmd --change-zone=work:修改当前连接区域
添加常用端口放行
firewall-cmd --permanent --zone=public --add-port=20/tcp
firewall-cmd --permanent --zone=public --add-port=21/tcp
firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=888/tcp
firewall-cmd --permanent --zone=public --add-port=30000-40000/tcp
重载Firewalld配置
firewall-cmd --reload
systemctl get-default #查看当前系统启动级别
systemctl isolate runlevel3.target #临时切换到第三级运行
systemctl isolate runlevel5.target #临时切换至第五级运行
systemctl set-default multi-user.target #设置默认第三启动级别
systemctl set-default graphical.target #设置默认第五启动级别
systemctl list-units --types=service --all|grep httpd
systemctl is-active httpd #查看httpd服务是否运行
systemctl is-enabled httpd #查看httpd服务是否开机启动
systemctl mask firewalld #服务冲突解决办法,虽然起来了,但是软链接到/dev/null中的,所以相当于什么都没干   屏蔽服务,使之无法手动或自动启动
systemctl unmask firewalld   #去掉屏蔽
systemctl enable httpd #设置开机自启
systemctl disable httpd #关闭开机自启,顺便还可以查看服务对应的server在哪个目录,然后将此服务加入/etc/init.d/里面,再加两行注释再文件头
vi /etc/rc.d/init.d/httpd,添加以下注释信息:
# chkconfig: 345 85 15
# description: Activates/Deactivates Apache Web Server
第一行3个数字参数意义分别为:哪些Linux级别需要启动httpd(3,4,5);启动序号(85);关闭序号(15)。
chkconfig --add httpd #这个时候就成功了
 
 
 
定时计划任务
1:直接修改/etc/crontab文件的话需要加用户,举例:
vi /etc/crontab
*/2 * * * * root sh /home/hanke/tmp/test.sh #每两分钟执行一次test脚本
2:直接在命令行输入 crontab -e 这样的话不需要加执行用户,举例:
*/2 * * * * sh /home/hanke/tmp/test.sh
-u :通过-u帮其它使用者建立/移除 crontab;
-e :编辑 crontab 的内容
-l :查看 crontab 的内容
-r :移除 crontab 的所有内容(是全部的内容,如果只是删除某个,用-e编辑即可)
 
command &  直接在后台运行程序
ctrl+c 退出前台的命令,不再执行
ctrl+z挂起前台命令暂停执行,回到shell命令行环境中
bg    将刚挂起的命令放到后台运行
bg %3  将第三个job放到后台运行
kill %3  杀死第三个job,不再执行
fg    将刚挂起的命令返回前台运行
fg %3  将第三个job返回前台运行
jobs   察看当前shell下运行的所有程序;带+表示最新的jobs;带-表示次新的jobs;其他jobs不带符号
nohup=no hang up,不挂断,如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程.长命令必须写在shell文件中,否则nohup不起作用
          nohup command &                 //该命令的一般形式
          nohup command > myout.file 2>&1 &      //log输出到myout.file,并将标准错误输出重定向到标准输出,再被重定向到myout.file
 
cdm1 ; cmd2  顺序执行命令
cmd1 || cdm2   1失败执行2
cmd2 && cmd3  1成功后再执行2
 
创建用户
useradd -d /home/hdper -s /bin/bash -u 101 -g hdper -G root adm hdper #设置用户家目录 登陆shell UID -g主组 -G同时属于root和adm组 
groupmod -g 101 -n hdper1 hdper #更改用户组GID 用户组名称
usermod  修改已存在用户的相关
chgrp -R hdper1 folder (将folder目录的所属组更改为hdper1) -R参数表示递归
chown -R hdper1 folder (将folder目录的拥有者更改为hdper1) -R参数表示递归
chown hdper1:hdper1 folder (同时修改folder目录的拥有者,所属组为hdper1)
chmod a-x /etc/fstab (所有人对此文件没有执行权限)
chmod o=r /etc/fatab (其他人对此文件只有读权限)
锁定用户禁止登陆:passwd -l hdper
解锁用户登录 passwd -u hdper
删除用户密码:passwd -d hdper
chage -l root   #查看root用户密码还有多久到期
chmod a-x hanke.txt   #所有人对此文件没有执行权限   a-x表示all(所有人)去掉x执行权限
setfacl -m u:hanke:rw- hanke.txt   #韩可对此文件有读写执行权限  setfacl(f表示file) -m后面跟参数  -R递归设置ACL   -d 设置默认ACL
让普通用户拥有root的权限
1.root登录
2.useradd 用户名
3.passwd 用户名
确定密码
4.修改/etc/passwd即可,把用户名的ID和ID组修改成0 (3,4两列)
5.vi /etc/shadow #修改密码过期时间linux
命令:/usr/lbin/modprpw -l -m mintm=0,exptm=0,expwarn=0,lftm=0 hjgl   unix机器修改用户密码永不过期
echo abcd1234|passwd --stdin hanke   #更改韩可的密码
for i in {natasha,sarah,harry};do echo abcd1234|passwd --stdin $i;done   #同时更改多人密码
SUID   4   用户u   s会替换x显示在x位,如果没有x则会显示S(权限无效)
SGID   2   组g   s会替换x显示在x位,如果没有x则会显示S(权限无效)
STicky   1   其它o   t会替换x显示在x位,如果没有x则会显示T(权限无效)
 
限制用户登录次数,超过限制环境自动锁定
修改/etc/pam.d/下面对应的配置文件
/etc/pam.d/login中配置只在本地文本终端上做限制;
/etc/pam.d/kde在配置时在kde图形界面调用时限制;
/etc/pam.d/sshd中配置时在通过ssh连接时做限制;
/etc/pam.d/system-auth中配置凡是调用 system-auth 文件的服务,都会生效
在以上配置文件中加入:auth required pam_tally2.so deny=3 unlock_time=5 even_deny_root root_unlock_time=10
最多连续3次认证登录都出错时,5秒后解锁,root用户也可以被锁定,root用户10秒后解锁。
unix机器解锁用户:/usr/lbin/modprpw -l -k root
 
UUID="79e90562-0427-4332-b94a-bf2f616068e7"
UE去掉空行
正则表达式替换: ^p^p  替换为空   (^p表示一个回车)
 
git使用规则:master库是不动的,如果需要改代码的话请创建新分支,在新分支改好之后切换到master分支合并新分支的修改,然后删掉新建的那个临时分支
git checkout -b dev #创建开发分支干活,干完活 git add . && git commit -am
git checkout master #切换至主分支
git merge --no-ff -m "提交日志" dev
git branch -d dev #删除不用了的dev分支
如果我正在开发一个dev,但是现在有个生产事件来了,我要另外开个分支dev1,但是dev里面的修改我现在还不能提交,我们需要这么做
git stash #隐藏当前正在工作的状态
git checkout -b dev1 #创建并切换至dev1修改文件,修改完 git add . && git commit -am
git checkout master #切回主分支
git merge --no-ff -m "提交日志" dev1
git branch -d dev1 #删除不用的分支
git stash list #查看之前隐藏的工作现场
git stash pop #去掉隐藏继续之前修改
git命令
远程库:origin
本地库:master
git add . #添加所有文件至git库
git status #查看状态
git commit -am "log"
git diff readme.txt #比较修改了的文件差异
git log #查看日志
git reset --hard HEAD^ #回退至上个版本
git reflog #查看日志第二种方法
git reset --hard 79d84b1 #回退版本至此版本
git init #本地目录加入git库
git clone https://github.com/cainiaoke/python2.git #直接将github上的库clone至本地,git config --list可以看到什么都是关联好的
git config --list #查看git 配置文件
git config --global user.name "cainiaoke" #设置全局用户名
git config remote.origin.url "https://github.com/cainiaoke/testgit" #直接在配置文件关联github仓库
或者是:git remote add origin https://github.com/cainiaoke/testgit
git push -u origin master #将本地master库推送到远程origin库,origin库就是上一条命令定义的那个库,第一次push添加 -u 参数,以后就可以简化push命令为:git push
git branch #查看当前所在分支
git branch test #创建test分支
gti checkout -b test #创建并切换至test分支
git branch --list #列出所有分支
git checkout test #切换到test分支
git checkout --readme.txt #撤销readme.txt修改的内容,相当于回退到没修改或者是add那一步
git merge test #将test分支改动的提交到主分支
git branch -d test #删除test分支
git remote #查看远程库信息
git remote -v #查看远程库详细信息
git pull origin master #将远程代码拉倒本地,相当于是同步下,防止push的时候报冲突
执行pull如果报错::fatal: refusing to merge unrelated histories 请执行:git pull origin master --allow-unrelated-histories
git clone  https://github.com/cainiaoke/EverydayWechat   将远程库克隆到本地
git传大文件。需要安装git-lfs工具,下载地址: https://git-lfs.github.com/,安装完毕需要制定大文件路径,具体如下:
单个大文件指定方法:git lfs track "a/b/c.txt"
某个类型的文件执行方法:git lfs track "*.zip"
整个目录的指定方法:git lfs track "a/*"
 
FTP报错connect: Connection refused
解决办法:root用户下执行 vsftpd /etc/vsftpd/vsftpd.conf &
如果报错:vsftpd: not configured for standalone, must be started from inetd
vi /etc/vsftpd/vsftpd.conf 修改里面的listen=yes
如果ftp 10.240.33.98输入密码之后等待时间比较长,有两种解决方法
1:vi /etc/vsftpd/vsftpd.conf  在最后添加一行reverse_lookup_enable=NO
2:如果上面的方法不行的话vi /etc/resolv.conf 修改里面的nameserver与速度快的环境一样
3:实在不行就直接把resolv.conf里面的全部注释掉,再退出重新登陆试试
 
docker相关
yum -y install docker #安装docker
systemctl enable docker --now #设置开机自启
systemctl status docker #查看docker状态
docker imges #查看现有的docker
docker search lamp #搜索lamp的docker
docker pull docker.io/linode/lamp #下载这个docker
 
 
配置邮箱
1:本地创建个账号,记住POP3|SMTP|IMAP授权码
2:mail配置文件路径 /etc/mail.rc
3:添加如下配置
#add by cainiaoke
set from=cainiaoke@126.com #发送人邮箱
set smtp=smtp.126.com #指定smtp服务器
set smtp-auth-user="cainiaoke@126.com" #发送人邮箱
set smtp-auth-password="abcd1234" #授权码
#set smtp-auth-password="1qaz@@WSX" #邮箱密码
set smtp-auth=login #设置login
mail -s "second test(主题)" 18321213686@163.com < /home/hanke/test/1.txt(正文)
echo /home/hanke/test/1.txt | mail -s "second test" 18321213686@163.com #此命令效果和上面一样的
 
 
 
MSC微软管理控制台(Microsoft Management Control)文件
certmgr.msc #作用:系统认证证书编辑。
ciadv.msc #作用:索引服务,链接文件*:\System Volume Information
comexp.msc #所在文件夹:C:\WINDOWS\system32\Com 作用:组件服务,可以打开本地服务。
compmgmt.msc #作用:本地计算机硬件和服务管理,功能很强大。
devmgmt.msc #作用:设备管理器
dfrg.msc #作用:磁盘碎片整理程序
diskmgmt.msc #作用:磁盘管理器,可以修改盘符,格式化和分区等。
eventvwr.msc #作用:事件查看器
fsmgmt.msc #作用:共享文件夹管理
gpedit.msc #作用:组策略管理器,功能强大。
lusrmgr.msc #作用:本地用户和组管理器
ntmsmgr.msc #作用:可移动存储管理器
ntmsoprq.msc #作用:可移动存储管理员操作请求
perfmon.msc #作用:性能察看管理器
rsop.msc #作用:各种策略的结果集
secpol.msc #作用:本地安全策略设置
services.msc #作用:各项本地服务管理器
wmimgmt.msc #作用:Windows管理体系结构(WMI)
tasklist #列出所有正在运行的进程
tasklist | find "360chrome" #查看360浏览器进程
taskkill /f /t /im qq.exe # /f强制杀掉 /t顺便杀掉子进程 /im完整的进程名称
tskill 1234 #直接杀掉进程号代表的进程
 
OSI(网络层次结构模型)
物理层-数据链路层-网络层-传输层-会话层-表示层-应用层
 
各类协议
TCP:用于从应用程序到网络的数据传输
IP:负责计算机之间的通讯,负责在英特网上发送和接收数据包
HTTP:负责WEB服务器与WEB浏览器之间的通信,WEB浏览器向WEB服务器发送请求,WEB服务器向WEB浏览器返回内容
HTTPS:负责WEB服务器与WEB浏览器之间的安全通信
SSL:安全数据加密传输
SMTP:用于电子邮件传输
MIME:用于使SMTP有能力通过TCP/IP网络传输多媒体文件
IMAP:用于存储和取回电子邮件
POP:用于从电子邮件服务器下载邮件至本地
FTP:用于计算机之间的文件传输
NTP:用于在计算机之间同步时钟
DHCP:用于向网络中的计算机动态分配IP
SNMP:用于计算机网络管理
LDAP:用于从网络中搜集关于用户和电子邮件地址的信息
ICMP:负责网络中的错误处理
ARP:通过IP来查找基于IP地址的计算机网卡的硬件地址
RARP:通过IP来查找基于硬件地址的计算机网卡的IP地址
BOOTP:用于从网络重启计算机
PPTP:用于私人网络之间的链接
 
ftp传多个文件,首先要确定prompt是开启还是关闭
ftp>prompt   查看prompt状态,需要off才能多文件传输
ftp>mget *或者mput *
 
TCP三次握手以及四次挥手
握手:
1,client发送请求报文给server(发送内容包括序列号X和一个窗口大小)
2,server返回SYN(同步序列编号)报文给client(返回内容包括server选择的一个序列号Y和对client发来的序列号确认的返回X+1以及一个窗口大小)
3,client收到返回之后会再返回一个确认的Y+1和X+1 ACK(确认编号)报文
挥手:
1,client发起中断连接请求(我这边没有数据要发给你了,如果你这边还有数据要发给我请继续)
2,server收到请求返回ACK(确认编号)报文(告诉client你的消息我收到了,但我这边还没准备好,请继续等待我的消息)之后client进入WAIT状态
3,server发完数据之后跟client说我这边发完了,没啥事儿的话我就关闭连接了
4,client收到server发来的FIN报文之后就断开连接了,但是它断开连接之前还是要给server回复确认断开的ACK报文,发完报文client进入WAIT状态
server收到报文自行关闭连接,client也关闭连接
 
TCP与UDP区别
1:TCP面向连接(数据传递至前需要进行三次握手,有握手,确认,窗口,重传,阻塞机制),UDP传输数据之前不需要建立连接
2:TCP提供可靠的服务,传输的数据无差错,不丢失,无重复,按序到达,UDP是尽自己最大努力,不可靠
3:TCP是面向字节流,UDP面向的是报文(对实时应用很有用,IP电话,视频会议)
4:TCP是点对点通讯,UDP可以是一对一,一对多,多对一,多对多交互通信
5:TCP的逻辑通信信道是全双工的可靠通道,UDP是不可靠通道
 
touch #用于同步系统时间
touch -t 201903171244.50 1.log #将1.log的时间改为2019年3月17日12点44分50秒
 
找回删除的文件,举例
rm -rf /var/log/syslog #删除文件
lsof|grep syslog #查看哪个进程打开了此文件,可以查找到PID
ll /proc/PID/fd #进程都在proc目录下,到此目录找到对应的PID/fd
查看这个已经删除的文件对应的文件描述符是多少
cat /proc/PID/fd/描述符 > /var/log/syslog #将
删除的文件追回来
lsof -p 1234  查看此进程打开的文件
 
strace -f httpd 跟踪httpd及其子进程的运行
strace -p 1234  跟踪1234进程对应的进程
strace -o /tmp/hanke.txt httpd  跟踪httpd的运行,并将结果输出到/tmp/hanke.txt 
 
w #查看当前机器有哪些用户登录
w -f #查看用户来源
top -b -n 2 > /home/hanke/test/tmp.txt #将top两次执行结果输出到文档   -b代表批处理选项
top -d 2 #两秒刷新一次top页面
top -d 2 -p 11646 #top查看固定进程
P   #CPU倒叙
M   #内存倒叙
T   #时间倒序
top|head -n 10    #显示top命令前十行
top|tail -n 10    #显示top后十行
 
linux中字符的含义
$ #变量表达式符号
& #后台作业
* #通配符
() #启动,停止子shell
\ #转译,\"表示不翻译双引号
[] #开始,结束字符集通配符号
{} #开始,结束命令块
‘’ #强引用,表示不翻译单引号里面特殊字符,原样输出
“” #弱引用,和单引号相反,翻译引号里面的特殊字符
? #单个任意字符
echo ${hanke:-work} #如果hanke存在且有值则返回值,否则返回work
echo ${hanke:=work} #如果hanke存在且有值则返回值,否则将work赋值给hanke,并返回work
echo ${hanke:+work} #如果hanke存在且有值则返回work,否则返回null
echo ${hanke:?work} #如果hanke存在且有值则返回值,否则打印work值
定义:line="hanke=123=456=789"
echo ${line/hanke/012} #将匹配出hanke的第一部分替换为012
echo ${line//hanke/012} #将匹配出的所有hanke替换为012
echo ${line%=*} #匹配结尾,将匹配到的最后一个=号后内容以及等号删除,显示剩余
echo ${line%%=*} #匹配结尾,将匹配到的第一个=号后内容以及等号删除,显示剩余
echo ${line#*=} #匹配开头,将匹配到的第一个=号前内容以及等号删除,显示剩余
echo ${line##*=} #匹配开头,将匹配到的最后一个=号前内容以及等号删除,显示剩余
echo ${#line} #显示line中字符个数
$# #输出变量的个数
$? #输出上一条命令的结果
$0 #输出命令的名字
$@ #输出所有参数名称
export #输出所有shell环境变量
将文件或者目录大写改成小写
for folder in `ls|grep '[A-Z]'`
do
str=`echo $folder|tr '[A-Z]' '[a-z]'`
mv $folder $str
done
wc -l hanke.txt  统计文件里面的行数
grep -c 'hanke' test.txt  #统计test.txt中包含hanke字段的的有多少行 
grep -rni 'hanke' *  #列出当前目录下包含hanke字段的文件,并显示行号和内容  r表示递归,n显示行号,i忽略大小写
grep '\<hanke\<' *   匹配仅含有hanke字段
grep '\<hanke' *   匹配hanke开头的字段,比如hanke1111,不会匹配到111hanke
java -jar jenkins.war --ajp13Port=-1 --httpPort=8081 #war包启动jenkins的这么修改jenkins端口
vi /etc/sysconfig/jenkins #jenkins配置文件路径,也可以修改端口
 
8 通过 SMB 共享目录:
yum -y install samba samba-client cifs-utils   #安装samba并安装其他的一些服务
systemctl enable smb nmb   #开机自启
firewall-cmd --permanent --add-service=samba --add-service=samba-client   #防火墙添加服务
firewall-cmd --reload   #重载防火墙
vi /etc/samba/smb.conf   #
            workgroup = STAFF
            ………
            [common]
            comment = common
            path = /common
            hosts allow = 172.24.8.0/24
            browseable = yes
            valid users = andy
smbpasswd -a amdy   #修改andy密码
setfacl -Rm u:andy:rX /common/   #设置目录的acl    X表示执行,目录默认有X,不然cd不进去,文件不需要有X
setfacl -Rm d:u:andy:rX /common/   #修改文件的acl
systemctl restart smb nmb   #同时重启两个服务
systemctl status -l smb nmb   #同时查看两个服务的状态
semanage fcontext -a -t "samba_share_t" '/common(/.)?'   #新建一条规则--添加标签类型
restorecon -RFv /common   #同 shall I use operator DEBUG步刷新下/common目录下所有文件的安全上下文
ll -dZ /common   #列出selinux权限,应该是下面这样的
drwxr-xr-x. root root system_u:object_r:samba_share_t:s0 /common/
smbclient -L localhost -U andy   #用andy用户尝试登录
 
9 通过 SMB 共享目录:
mkdir /devops   #创建共享目录
vi /etc/samb/smb.conf
            [devops]
            comment = devops
            path = /devops
            hosts allow = 172.24.8.0/24
            browseable = yes
            valid users = silene,akira
            read list = silene
            write list = akira
            write?able = no
id silene;id akira   #查看是否有这两个用户
getent passwd akira   #这也是种方法,查看是否存在这个用户
smbpasswd -a silene   #修改sam密码
smbpasswd -a akira   #修改sam密码
setfacl -Rm u:silene:rX /devops/   #设置acl
setfacl -Rm u:akira:rwX /devops/   #设置acl
setfacl -Rm d:u:silene:rX /devops/   #设置acl
setfacl -Rm d:u:akira:rwX /devops/   #设置acl
semanage fcontext -a -t "samba_share_t" '/devops(/.)?'   #新加一条selinux规则,永久的
restorecon -RFv /devops   #同步刷新下/devops目录下的所有文件安全上下文
systemctl restart smb nmb
systemctl status -l sam nmb
system2操作如下:
yum -y install samba-client cifs-utils   #安装客户端以及cifs-utils
vi /etc/fstab   #修改fstab文件如下:
            //172.24.8.11/devops   /mnt/dev   cifs   defaults,username=silene,password=redhat,multiuser,sec=ntlmssp  0 0 
mkdir /mnt/dev   #创建挂载目录
mount -a   #挂载
id akira   #检查是否有akira用户
su - akira
cd /mnt/dev
mkdir a   验证
 
扩展知识:
semanage fcontext -l   #查看系统中目前有的se规则
semanage fcontext -l | grep /common   #查看这个目录的se规则,如果没有可以使用下面的命令添加一条
semanage fcontext -a -t public_content_t '/common(/.*)?'    #为/common新建一条se规则,永久的,也可作为修改文件或者目录se规则
restorecon -RFv /common    #同步刷新/common的selinux属性,相当于是把/common目录下所有文件的se属性全部同步成和/common一样的了
chcon -R -t public_content_t /common   #临时更改安全上下文
chcon -t public_content_rw_t /common   #临时更改安全上下文并设置rw权限
chcon -u system_u -r object_r -t public_content_t /common   #修改/common的安全上下文 -u -r -t都修改了
semanage port -a -t -S targeted http_port_t -p tcp 8080
 
P:python
查看网站爬虫协议:https://www.baidu.com/robots.txt
查看linux中python是多少位的:
import platform
print(platform.architecture())
修改pip安装源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
注意:linux自带的python版本为2.7,可以不用卸载直接下载源码包编译安装升级至3.7,升级完做以下两步操作,保持yum配置读的还是老的python
vi /usr/libexec/urlgrabber-ext-down #将开头改为 #! /usr/bin/python2.7
vi /usr/bin/yum #将开头改为 #!/usr/bin/python2.7
编译安装:
./configure --prefix=/usr/local/python3.7 #指定安装目录编译安装
make && make install
yum -y install readline-devel #进入python命令栏可以左右键,还有各种模块,可以百度
>>>name = "hanke" #字符需要双引号
>>>age = 74 #数字不需要双引号
>>>"hello %s,you are %s." % (name,age) #这个打印出来的结果会有''单引号
>>>print("hello %s,you are %s." % (name,age)) #这个打印出来的结果无双引号
            #上面这句的%s代表的是前面先占个位置,我后面会补上,s代表的是str字符串
            #类似%s的还有%f  %d   (代表浮点数,整数)
>>>print("hello {},you are {}.".format (name.age)) #按照format定义的变量顺序来引用变量
>>>print("hello {1},you are {0}.".format (age.name)) #format变量顺序可以随意,前面的语句可以指定序号,0,1,2,3这样的顺序
>>>print(f"hello {name}, you are {age}.") #用了f之后直接在语句中加入变量名,很方便
转义字符表
\a #响铃
\b #退格(bakcspace
\f #下一页
\n #换行
\r #回车
\f #换页
\t #tab键
\\ #代表一个反斜杠字符
\' #代表一个单引号
算数运算符
+ — * / #加减乘除
% #取余数
2**3 #2的3次幂
// #除取整
#python数据类型转换
int(x [,base ]) 将x转换为一个整数
long(x [,base ]) 将x转换为一个长整数
float(x ) 将x转换到一个浮点数
complex(real [,imag ]) 创建一个复数
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串
#python数学函数
abs(x) #返回数字的绝对值,比如abs(-10)返回10
ceil(x) #返回数字的向上取整值,比如match.ceil(4.1)返回5
floor(x) #返回数字的向下取整值,比如match.floor(4.9)返回4
cmp(x,y) #比较函数,比如x>y返回1,x<y返回-1,x=y返回0
fabs(x) #返回数字的绝对值
max(x,y,z) #返回给定参数的最大值
min(x,y,z) #返回给定参数的最小值
pow(x,y) #返回x**y的值
round(x,[n]) #返回浮点数x的四舍五入值,n代表小数点后的位数
sqrt(x) #返回X的平方根
print(2**3)   #2的3次幂
print(10%3)   #取除法余数
print(10//3)   #取除法整数
 
本地windows运行pip install报错无pip模块解决方法
1: python -m ensurepip 输入此命令之后看看还报不报错,如果还报错执行下面操作
2:删除python安装目录下Script目录里面的包含pip名字的文件,重新安装执行 easy_install pip
pip 安装python模块制定安装源:pip install requests -i  https://pypi.douban.com/simple
 
举例:(要求输出:人工智障说:3.8+1等于4)
word = '3.8'
number = 1
sentence = '人工智障说:3.8+1等于'
print(sentence+str(int(float(word)+number)))
float(word) #将字符型的数字转化为浮点数3.8
float(word)+number #两个相加等于4.8
int(float(word)+number) #取整得到4
str(int(float(word)+number)) #将4变为字符串,因为sentence代表的也是字符串,凡是带’‘的都是字符串
print(sentence+str(int(float(word)+number)))
 
print('\n'.join([' '.join(['%s*%s=%-2s' % (y, x, x*y) for y in range(1, x+1)]) for x in range(1, 10)])) #乘法口诀表
print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(30, -30, -1)])) #爱心
 
列表函数:(打印,增加,删除)     元素位置区分
students = ['韩可','王贺荷','陈强']
# for i in students:
# print(i+'在不在?')
# print(students[:])
# print(students[1:2])
students.append('冯凯') #增加‘冯凯’
students[1:1] = ['小马'] #在王贺荷前面加上小马
del students[3] #删除‘冯凯’
print(students)
for i in range(10)
for i in [1,2,3]
for i in {1:1,2:2,3:3}
 
字典:
scores = {'小明':95,'小红':90,'小刚':90} #大括号,逗号分隔,字符串需加引号,键  值 区分
del scores['小刚'] #删除小刚
scores['小刚'] = 92 #加上小刚
scores['小美'] = 85
print(scores)
 
 
元组:
# tuple1 = ('A','B')
# list2 = [('A','B'),('C','D'),('E','F')]
# print(tuple1[0]) #取出元组里面的A
# print(list2[1][1]) #取出列表里面的D
 
import time   #调用time模块,设置sleep.time(1)时间
import random   #调用random模块,使用方法如下:
                            print(random.randint(1,11))   #随机生成1-11之间的整数
                            print(random.uniform(1,11))   #随机生成1-11之间的浮点数
                            print(random.choice('sankdj'))   #随机选取里面的单个字符
                            print(random.sample('sankdnsa',3))   #随机选出三个字符
                            print(random.choice(['hanke','hehe','qiangge']))   #随机选取一个字符串
a = [random.randint( 100 , 200 ) for _ in range ( 3 )] print(a)  #从100-200之间随机取出三个数
import random
list = ['张三','李四','王二','麻子','哥哥']
random.sample(list,3)  #从列表中随机取出三个元素
#洗牌
import.random
i = [1,2,3,4,5]
random.shuffle(i)
print(i)
 
 
for i in range ( 1 , 2):    #1-2(包括1,但不包括2)之间 的循环
    print ( '%d X %d = %d' %(i, 1 ,i* 1 ),  end = ' ' )   #运行上面的循环,输出的结果不换行,而是以end里面的内容为每次输出结果的分隔符
print ( '' )   #运行此print就需要换行了,三不输出任何东西,因为两个print是不能在同一行输出的如果不加任何修饰
for i in range ( 1 , 3):   #接下来就是继续运行这个循环
    print ( '%d X %d = %d' %(i, 2 ,i* 2 ), end = ' ' )
print ( '' )
 
列表函数的使用
a = [ 'hanke' , 'jeje' , 'hehe' , 'wowo' ]
a.append( 'wwww' ); print (a) #在末尾插入www并打印出来
a[ 1 : 1 ] = [ 'aaaa' ]; print (a) #在第二位置前插入aaaa。中括号要加上不然就是四个a了
a[:] = [ 'hello' ]; print (a) #将整个列表替换为字符串
print ( len (a)) #len的用法是统计列表里面元素个数
print (a[ 1 ]) #打印第二个元素,元素是从0开始的
a[ 0 ] = 'gggg' ; print (a) #替换第0位元素
a[ 0 ] = 1 , 2 , 3 ; print (a) #将0号位替换为[1,2,3]这一个元素
a[ 0 : 0 ] = 1 , 2 , 3 ; print (a) #在0号位前插入1,2,3三个元素
a[:] = list ( 'hello' ); print (a); print (a.count( 'l' )); print ( len (a)) #将a列表全部替换为hello,然后统计里面l的个数,再统计a里面元素个数
 
b = 'hello'
print ( list ( b )) #list函数可以将字符串转化为列表
print ( list ( 'hello' )) #效果和上面的一样
 
list1 = [ 91 , 95 , 97 , 99 , 95 ]
list2 = [ 92 , 93 , 96 , 98 , 96 ]
print (list1+list2) #将两个列表加在一起
list1.insert( 1 , 110 ); print (list1) #在list1中1号位前插入110
list1.extend(list2); print (list1) #将list2扩展到list1中,也相当于是在list1中加入list2
list1.pop(); print (list1) #删除指定位置的元素,“()”默认删除最后一位
list2.insert( 1 , 100 ); print (list2);list2.pop( 1 ); print (list2)
list1.remove( 91 ); print (list1) #删除指定值的第一个匹配项
list1.insert( 0 , 91 ); print (list1)
list1.append( 91 ); print (list1)
list1[0:0] = [100]  #在第一位91前新增一个100
list1[0:1] = [100]  #将第一位的91替换为100
 
while 91 in list1:
list1.remove( 91 ); print (list1) #这两行代码的意思是如果list1中有91的话就删掉所有的91
 
print (list1.index( 95 )) #从列表中找出第一个匹配项的索引位置
print ( len (list1)) #统计list1中元素的个数
print (list1.count( 95 )) #统计出list1中元素95 的个数
list1.reverse(); print (list1) #从尾至头显示,降序
list1.sort(); print (list1) #由小致大排序显示,升序
list1.sort( reverse = True ); print (list1) #降序
list1.sort( reverse = False ); print (list1) #升序
list3 = sorted (list1); print (list3); print (list1) #list1列表排序出的结果赋值给list3,从而不改变原列表
list3 = list1[:];list3.sort(); print (list3); print (list1) #创建一个list1的副本list3,然后对list3排序,但不影响list1,,,如果是list3 = list1那就不对了
print(set(list1)); #去重
 
 
 
查看用户所属组:groups afa
tar -cvf hanke.tar hanke --exclude=hanke/123.sh --exclude=hanke/bak   #打包但不包括文件和目录,注意--exclude后面必须是相对路径,=也可以替换成空格
10.242.157.149
HP-UX下查看IP:netstat -in
查看内存:cat /var/adm/syslog/syslog.log|grep Physical
机器信息:machinfo
linux下查看IP:ifconfig   修改完ifconfig配置文件之后记得nmcli connection reload
查看内存:free/free -m
top
cat /proc/meminfo
查看CPU:cat /proc/cpuinfo 可以看出逻辑CPU数目
telnet 10.240.94.235 1179(端口) 出现
Escape character is ‘^]’. 这说明端口是正常监听的
exit退出
 
vi 命令
插入命令
i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
查找命令
/text  查找text,按n健查找下一个,按N健查找前一个。
?text  查找text,反向查找,按n健查找下一个,按N健查找前一个。
vim中有一些特殊字符在查找时需要转义  .*[]^%/?~$
:set ignorecase  忽略大小写的查找
:set noignorecase  不忽略大小写的查找
查找很长的词,如果一个词很长,键入麻烦,可以将光标移动到该词上,按*或#键即可以该单词进行搜索,相当于/搜索。而#命令相当于?搜索。
:set hlsearch  高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配。
:set nohlsearch  关闭高亮搜索显示
:nohlsearch  关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。
:set incsearch  逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan  重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
:set number:在命令模式下,用于在最左端显示行号;
:set nonumber:在命令模式下,用于在最左端不显示行号;
替换命令
ra 将当前字符替换为a,当前字符即光标所在字符。
s/old/new/ old替换为new,替换当前行的第一个匹配
s/old/new/g old替换为new,替换当前行的所有匹配
%s/old/new/ old替换为new,替换所有行的第一个匹配
%s/old/new/g old替换为new,替换整个文件的所有匹配
:10,20 s/^/ /g 在第10行知第20行每行前面加四个空格,用于缩进。
ddp 交换光标所在行和其下紧邻的一行。
移动命令
h 左移一个字符
l 右移一个字符,这个命令很少用,一般用w代替。
k 上移一个字符
j 下移一个字符
以上四个命令可以配合数字使用,比如20j就是向下移动20行,5h就是向左移动5个字符,在Vim中,很多命令都可以配合数字使用,比如删除10个字符10x,在当前位置后插入3个!,3a!<Esc>,这里的Esc是必须的,否则命令不生效。
w 向前移动一个单词(光标停在单词首部),如果已到行尾,则转至下一行行首。此命令快,可以代替l命令。
b 向后移动一个单词 2b 向后移动2个单词
e,同w,只不过是光标停在单词尾部
ge,同b,光标停在单词尾部。
^ 移动到本行第一个非空白字符上。
0(数字0)移动到本行第一个字符上,
<HOME> 移动到本行第一个字符。同0健。
$ 移动到行尾 3$ 移动到下面3行的行尾
gg 移动到文件头。 = [[
G(shift + g) 移动到文件尾。 = ]]
f(find)命令也可以用于移动,fx将找到光标后第一个为x的字符,3fd将找到第三个为d的字符。
F 同f,反向查找。
跳到指定行,冒号+行号,回车,比如跳到240行就是 :240回车。另一个方法是行号+G,比如230G跳到230行。
Ctrl + e 向下滚动一行
Ctrl + y 向上滚动一行
Ctrl + d 向下滚动半屏
Ctrl + u 向上滚动半屏
Ctrl + f 向下滚动一屏
Ctrl + b 向上滚动一屏
撤销和重做
u 撤销(Undo)
U 撤销对整行的操作
Ctrl + r 重做(Redo),即撤销的撤销。
删除命令
x 删除当前字符
3x 删除当前光标开始向后三个字符
X 删除当前字符的前一个字符。X=dh
dl 删除当前字符, dl=x
dh 删除前一个字符 3dh 删除前两个字符,加上当前字符就是3个字符
dd 删除当前行
dj 删除当前行和下面一行
dk 删除当前行和上面一行
10d 删除当前行开始的10行。
D 删除当前字符至行尾。D=d$
d$ 删除当前字符之后的所有字符(本行)
kdgg 删除当前行之前所有行(不包括当前行)
jdG(jd shift + g) 删除当前行之后所有行(不包括当前行)
:1,10d 删除1-10行
:11,$d 删除11行及以后所有的行
:1,$d 删除所有行
J(shift + j)  删除两行之间的空行,实际上是合并两行。
拷贝和粘贴
yy 拷贝当前行
nyy 拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行。
p 在当前光标后粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。
shift+p 在当前行前粘贴
:1,10 co 20 将1-10行插入到第20行之后。
:1,$ co $ 将整个文件复制一份并添加到文件尾部。
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按y即可复制
ddp交换当前行和其下一行
xp交换当前字符和其后一个字符
剪切命令
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按d即可剪切
ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
:1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。
:1, 10 m 20 将第1-10行移动到第20行之后。
退出命令
:wq 保存并退出
ZZ 保存并退出
:q! 强制退出并忽略所有更改
:e! 放弃所有修改,并打开原来文件。
sed '/^root/s/bin/Bin/g' /etc/passwd    匹配所有已root开头的行,然后将bin替换为Bin
awk -F : '{print $1 | "sort -nr"}' /etc/passwd     -F后面接的是分隔符,如果是空格则不需要-F
sed '2,10d' /etc/passwd
find . -type f| xargs sed ‘s#old#new#g’ -i 替换当前路径下所有文件里面的某个字段
sed -i "15i Contents" Lab.txt #将Contents插入到Lab.txt的第十五行,-i为保存文件
sed -i 's/^..//' ./test.txt   #将test.txt每一行的前两个字符替换为空,其中“^..”两个点表示两个字符
cat test.txt | sed -n '14p' > resault.txt   #将test.txt中的第十四行取到resault.txt里面 
awk '/匹配的字符串/{print NR}' 文件名   #查找某个文件中某个字段在第几行
awk '{print $4,$5}' ./test.txt > resault.txt   #取出test.txt里面的第四第五列,结果输出到resault.txt
cut -f4,5 ./test.txt > resault.txt #取出test.txt里面的第四第五列,结果输出到resault.txt
tr "[:upper:]" "[:lower:]" < test.txt > resault.txt   #将test.txt里面的大写字母全部转化为小写字母
echo -e 'export HISTSIZE=99999\nexport HISTFILE=11111' >> .bash_profile  #-e表示激活转译字符\n代表回车\t表示tab
sed -i '/aaaaaaa/i\bbbbbbb' hanke.txt  #其中i\表示在aaaa这一行之前加入bbbb
sed -i '/aaaaaaa/a\bbbbbbb' hanke.txt  #其中a\表示在aaaa这一行之后加入bbbb
第一步:cat hanke.txt|grep -n .*abcd1234.*|awk -F : '{print $1}'  #查询hanke.txt中匹配到abcd1234的所有行,并显示行号
第二部:sed -i '3i ccccc' hanke.txt  #在第三行加入ccccc
sed -i 's/old/new/g' *.txt   #将所有txt文件里面的old字段换为new字段
sed -e '/abc/d' ./a.txt > b.txt  #将a.txt里面包含abc的行删掉,结果输出到b.txt
sed '14c 22222222'  test.txt   #替换test.txt第14行为2222222
paste -d ':' file1 file2 > file3  #读取file1  file2每一行,导入到新的文件中
注:
-i 表示inplace edit,就地修改文件
-r 表示搜索子目录
-l 表示输出匹配的文件名
s表示替换,d表示删除
perl -p -i -e 's/old/new/g' *.txt   #将所有txt文件里面的old字段换为new字段
注:
-a 自动分隔模式,用空格分隔$_并保存到@F中。相当于@F = split ”。分隔符可以使用-F参数指定
-F 指定-a的分隔符,可以使用正则表达式
-e 执行指定的脚本。
-i 原地替换文件,并将旧文件用指定的扩展名备份。不指定扩展名则不备份。
-l 对输入内容自动chomp,对输出内容自动添加换行
-n 自动循环,相当于 while(<>) { 脚本; }
-p 自动循环+自动输出,相当于 while(<>) { 脚本; print; }
 
 
 
关系型数据库与非关系型数据库
关系型数据库:oracle,mysql,sql server,access
非关系型数据库:redis,nosql,hbase,mongoDB
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织
优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
 
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
1、不提供sql支持,学习和使用成本较高;
2、无事务处理;
3、数据结构相对复杂,复杂查询方面稍欠。
 
mysql与oracle的区别
软件系统 不一样,都是 数据库系统 ,mysql的优点是开源免费,oracle的优点是有 甲骨文公司 强大的技术后盾,功能强大,安全、性能、人性化、等各方面都比mysql好;mysql的缺点就是功能少,面向的对象是一般的小型网站或者系统, 大型数据库 很少用mysql;oracle的缺点是对硬件的要求十分高,对管理人员的技术要求高。 基本上 是这样了
 
 
"不是内部外部命令"-----程序和功能----打开或关闭windows功能,进去勾选就好
unix系统默认shell是ksh,linux默认是bash,要想Ctrl-p 和 Ctrl-n 来查看上一个下一个命令要先设置emacs
set -o | grep emacs 查看emacs是否是off
set -o emacs切换到emacs
 
环境是否安装了perl以及python
perl脚本执行条件:
无论是windows还是linux环境都要安装ActivePerl安装包,验证安装是否完成perl -v,
然后执行perl脚本#perl hanke.pl
python脚本执行条件:
首先获得安装包:#wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0b4.tgz 获取安装包到当前目录
tar -zxvf Python-3.5.0b4.tgz
cd Python*
./configure
make
make install
安装完毕直接输入Python就可以显示版本号
 
查看用户所属组:groups afa
 
^M产生原因:
linux和windows
在unix操作系统下的换行符格式为0A(ascii码),而dos格式下的换行符为 0D 0A(也就是<CR>),<CR>其实就显示为^M了。
^M去掉方法:vi进去之后在命令模式下输入:%s/^M//g %s/\r//g 然后esc退出 :wq保存退出  
                           (^M  ctrl+V  ctrl+M)
 
#arg list too lang 解决办法:#ls | xargs -n 10 rm -rf ls
#Terminal too wide 解决办法:在命令窗口#stty -a #查看设置
#stty columns 132 #更改columns值解决,如果132不行的话就120,120不行的话就继续减小
rm -rf * !(hanke.txt)  删除文件但排除hanke.txt 
替换目录下所有*tis*文件里面的一个字段
perl -pi -e 's/RQIP:10.240.93.88/RQIP:10.240.93.110/g' *tis*
注释:RQIP:需要更改的字段
10.240.93.88 这个为字段下面需要更改的内容
10.240.93.110 更改后的内容
*tis* 搜索到的需要修改的文件
grep RQIP *tis* 查看*tis*文件里面RQIP字段的值
 
 
 
svn 常用操作命令
检出
svn  checkout  http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名
svn  checkout  svn://路径(目录或文件的全路径) [本地目录全路径]  --username 用户名
# 例子:
svn co svn://localhost/测试工具 /home/testtools --username wzhnsc
svn co http://localhost/test/testapp --username wzhnsc
svn checkout svn://localhost/测试工具 /home/testtools --username wzhnsc
svn checkouthttp://localhost/test/testapp --username wzhnsc
注:如果不带--password 参数传输密码的话,会提示输入密码,建议不要用明文的--password 选项。
   其中 username 与 password前是两个短线,不是一个。
   不指定本地目录全路径,则检出到当前目录下。
导出(导出一个干净的不带.svn文件夹的目录树)
svn  export  [-r 版本号]  http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名
svn  export  [-r 版本号]  svn://路径(目录或文件的全路径) [本地目录全路径] --username 用户名
svn  export  本地检出的(即带有.svn文件夹的)目录全路径  要导出的本地目录全路径
例子:
svn export svn://localhost/测试工具 /home/testtools --username wzhnsc
svn export svn://localhost/test/testapp --username wzhnsc
svn export /home/testapp /home/testtools
注:第一种从版本库导出干净工作目录树的形式是指定URL,
如果指定了修订版本号,会导出相应的版本,
如果没有指定修订版本,则会导出最新的,导出到指定位置。
如果省略 本地目录全路径,URL的最后一部分会作为本地目录的名字。
第二种形式是指定 本地检出的目录全路径 到 要导出的本地目录全路径,所有的本地修改将会保留,
但是不在版本控制下(即没提交的新文件,因为.svn文件夹里没有与之相关的信息记录)的文件不会拷贝。
添加新文件
svn add 文件名
注:告诉SVN服务器要添加文件了,还要用svn commint -m真实的上传上去!
例子:
svn add test.php <- 添加test.php
svn commit -m “添加我的测试用test.php“ test.php
svn add *.php <- 添加当前目录下所有的php文件
svn commit -m “添加我的测试用全部php文件“ *.php
提交
svn commit -m “提交备注信息文本“ [-N] [--no-unlock] 文件名
svn ci -m “提交备注信息文本“ [-N] [--no-unlock] 文件名
必须带上-m参数,参数可以为空,但是必须写上-m
例子:
svn commit -m “提交当前目录下的全部在版本控制下的文件“ * <- 注意这个*表示全部文件
svn commit -m “提交我的测试用test.php“ test.php
svn commit -m “提交我的测试用test.php“ -N --no-unlock test.php <- 保持锁就用–no-unlock开关
svn ci -m “提交当前目录下的全部在版本控制下的文件“ * <- 注意这个*表示全部文件
svn ci -m “提交我的测试用test.php“ test.php
svn ci -m “提交我的测试用test.php“ -N --no-unlock test.php <- 保持锁就用–no-unlock开关
更新文件
svn update
svn update -r 修正版本 文件名
svn update 文件名
例子:
svn update <- 后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本
svn update -r 200 test.cpp <- 将版本库中的文件 test.cpp 还原到修正版本(revision)200
svn update test.php <- 更新与版本库同步。
            提交的时候提示过期冲突,需要先 update 修改文件,
            然后清除svn resolved,最后再提交commit。
删除文件
svn delete svn://路径(目录或文件的全路径) -m “删除备注信息文本”
推荐如下操作:
svn delete 文件名
svn ci -m “删除备注信息文本”
例子:
svn delete svn://localhost/testapp/test.php -m “删除测试文件test.php”
推荐如下操作:
svn delete test.php
svn ci -m “删除测试文件test.php”
加锁/解锁
svn lock -m “加锁备注信息文本“ [--force] 文件名
svn unlock 文件名
例子:
svn lock -m “锁信测试用test.php文件“ test.php
svn unlock test.php
比较差异
svn diff 文件名
svn diff -r 修正版本号m:修正版本号n 文件名
例子:
svn diff test.php<- 将修改的文件与基础版本比较
svn diff -r 200:201 test.php<- 对 修正版本号200 和 修正版本号201 比较差异
查看文件或者目录状态
svn st 目录路径/名
svn status 目录路径/名<- 目录下的文件和子目录的状态,正常状态不显示
             【?:不在svn的控制中;  M:内容被修改;C:发生冲突;
              A:预定加入到版本库;K:被锁定】
svn  -v 目录路径/名
svn status -v 目录路径/名<- 显示文件和子目录状态
              【第一列保持相同,第二列显示工作版本号,
               第三和第四列显示最后一次修改的版本号和修改人】
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,
  原因是svn在本地的.svn中保留了本地版本的原始拷贝。
查看日志
svn log 文件名
例子:
svn log test.php<- 显示这个文件的所有修改记录,及其版本号的变化
查看文件详细信息
svn info 文件名
例子:
svn info test.php
SVN 帮助
svn help <- 全部功能选项
svn help ci <- 具体功能的说明
查看版本库下的文件和目录列表
svn list svn://路径(目录或文件的全路径)
svn ls svn://路径(目录或文件的全路径)
例子:
svn list svn://localhost/test
svn ls svn://localhost/test <- 显示 svn://localhost/test目录下的所有属于版本库的文件和目录
创建纳入版本控制下的新目录
svn mkdir http://………………………………   -m "提交注释说明"
svn mkdir -m "新增目录备注文本" http://目录全路径
例子:
svn mkdir newdir
svn mkdir -m "Making a new dir." svn://localhost/test/newdir
注:添加完子目录后,一定要回到根目录更新一下,不然在该目录下提交文件会提示“提交失败”
svn update
注:如果手工在checkout出来的目录里创建了一个新文件夹newsubdir,
  再用svn mkdir newsubdir命令后,SVN会提示:
  svn: 尝试用 “svn add”或 “svn add --non-recursive”代替?
  svn: 无法创建目录“hello”: 文件已经存在
  此时,用如下命令解决:
  svn add --non-recursive newsubdir
  在进入这个newsubdir文件夹,用ls -a查看它下面的全部目录与文件,会发现多了:.svn目录
  再用 svn mkdir -m "添hello功能模块文件" svn://localhost/test/newdir/newsubdir 命令,
  SVN提示:
  svn: File already exists: filesystem '/data/svnroot/test/db', transaction '4541-1',
  path '/newdir/newsubdir '
恢复本地修改
svn revert [--recursive] 文件名
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录。
例子:
svn revert foo.c <- 丢弃对一个文件的修改
svn revert --recursive . <-恢复一整个目录的文件,. 为当前目录
把工作拷贝更新到别的URL
svn switch http://目录全路径 本地目录全路径
例子:
svn switch http://localhost/test/456 . <- (原为123的分支)当前所在目录分支到localhost/test/456
解决冲突
svn resolved [本地目录全路径]
例子:
$ svn update
C foo.c
Updated to revision 31.
如果你在更新时得到冲突,你的工作拷贝会产生三个新的文件:
$ ls
foo.c
foo.c.mine
foo.c.r30
foo.c.r31
当你解决了foo.c的冲突,并且准备提交,运行svn resolved让你的工作拷贝知道你已经完成了所有事情。
你可以仅仅删除冲突的文件并且提交,但是svn resolved除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,所以我们推荐你使用这个命令。
不checkout而查看输出特定文件或URL的内容
svn cat http://文件全路径
例子:
19、新建一个分支copy
svn copy branchA branchB  -m "make B branch" // 从branchA拷贝出一个新分支branchB
20、合并内容到分支merge
svn merge branchA branchB  // 把对branchA的修改合并到分支branchB
svnserve -d -r /svn/svnrepos   启动SVN服务
svn://192.168.42.130/td
ps -ef|grep svn   查看SVN进程号,比如是1234
netstat -antlp|grep 1234   查看此服务对应的端口
netstat -antulp  a表示所有 n表示不查询dns t表示tcp u表示udp l表示正在监听的 p表示程序
cat /proc/sys/net/ipv4/ip_local_port_range   查看本地端口范围
echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range   更改本地端口范围
cat /etc/services  服务于端口的关系
可以在/etc/sysctl.conf里面定义net.ipv4.ip_local_port_range = 1024 65000
lsof -i:3306
 
中间件(是位于平台(硬件和操作系统)和应用之间的通用服务)
小项目,个人本地开发用tomcat
linux里面用jetty,apache
大项目,商业项目用jboss或者weblogic或者was,glasshfish
weblogic中配置的数据源URL
mysql数据源:URL: jdbc:mysql://10.240.33.104:3306/test?characterEncoding=utf8
oracle数据源:URL:  jdbc:oracle:thin:@10.240.33.105:1521:test
 
云计算的三种服务模式:IaaS,PaaS和SaaS
IaaS: Infrastructure-as-a-Service(基础设施即服务)是第一层。
PaaS: Platform-as-a-Service(平台即服务)第二层就是所谓的PaaS,某些时候也叫做中间件。
SaaS: Software-as-a-Service(软件即服务)是第三层。
CPU超载
#top   查看哪个进程占用的最多,比如是1234
#ps -eLo pid,lwp,pcpu |grep 1234|sort -nk 3  查看此进程线程最高的几个PID
#top -p 1234 -H   查出这个进程对用的线程,看看哪个线程占用的高,比如是2345
#ps -ef |grep 2345 查看是否是恶意进程,是否可以干掉
#kill -9 2345
 
监视带宽
#nethogs -d 3 eth0 eth1    三秒刷新一次eth0 eth1的带宽使用情况   m 切换流量显示模式
最前面有PID,查看有没有恶意进程,可以杀掉
vnstat
iftop
 
 
内存过高检查及优化
free -mh,vmstat
sync  同步磁盘
echo 3 > /proc/sys/vm/drop_caches   #释放缓存
echo 0 > /proc/sys/vm/drop_caches   #释放完毕回复系统默认值
0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存
 
java -jar jenkins.war
chkconfig jenkins on 
chkconfig jenkins --level 6 on
 
tomcat和apache的区别:
Apache是web服务器(静态解析,如HTML),tomcat是java应用服务器(动态解析,如JSP、PHP);
Tomcat只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行;
Apache是有C语言实现的,支持各种特性和模块从而来扩展核心功能;Tomcat是Java编写的,更好的支持Servlet和JSP;
Apache是普通服务器,本身只支持html静态普通网页。不过可以通过插件支持PHP,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源,反之不然),Tomcat是jsp/servlet容器,同时也支持HTML、JSP、ASP、PHP、CGI等,其中CGI需要一些手动调试,不过很容易的;
Apache侧重于http server,Tomcat侧重于servlet引擎,如果以standalone方式运行,功能上Tomcat与apache等效支持JSP,但对静态网页不太理想;
Apache可以运行一年不重启,稳定性非常好,而Tomcat则不见得;
首选web服务器是Apache,但Apache解析不了的jsp、servlet才用tomcat;
Apache是很最开始的页面解析服务,tomcat是后研发出来的,从本质上来说tomcat的功能完全可以替代Apache,但Apache毕竟是tomcat的前辈级人物,并且市场上也有不少人还在用Apache,所以Apache还会继续存在,不会被取代,apache不能解析java的东西,但解析html速度快。
tomcat和apache的联系:
Apache是普通服务器,本身只支持html即普通网页,可以通过插件支持php,还可以与Tomcat连通(Apache单向连接Tomcat,就是说通过Apache可以访问Tomcat资源,反之不然)。  
Apache只支持静态网页,但像asp、jsp、php、cgi等动态网页就需要Tomcat来处理。
Apache和Tomcat整合使用:
如果客户端请求的是静态页面,则只需要Apache服务器响应请求;
如果客户端请求动态页面,则是Tomcat服务器响应请求,将解析的JSP等网页代码解析后回传给Apache服务器,再经Apache返回给浏览器端。
这是因为jsp是服务器端解释代码的,Tomcat只做动态代码解析,Apache回传解析好的静态代码,Apache+Tomcat这样整合就可以减少Tomcat的服务开销。
Apache和Tomcat是独立的,在同一台服务器上可以集成。
 
nginx和tomcat的区别
web上的server都叫web server,但是大家分工也有不同的。nginx常用做静态内容服务和代理服务器(不是你FQ那个代理),直面外来请求转发给后面的应用服务(tomcat,django什么的),tomcat更多用来做做一个应用容器,让java web app跑在里面的东西,对应同级别的有jboss,jetty等东西。但是事无绝对,nginx也可以通过模块开发来提供应用功能,tomcat也可以直接提供http服务,通常用在内网和不需要流控等小型服务的场景。apache用的越来越少了,大体上和nginx功能重合的更多。
严格的来说,Apache/Nginx 应该叫做「HTTP Server」;而 Tomcat 则是一个「Application Server」,或者更准确的来说,是一个「Servlet/JSP」应用的容器(Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上)。
一个 HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。通过 CGI 技术,也可以将处理过的内容通过 HTTP Server 分发,但是一个 HTTP Server 始终只是把服务器上的文件如实的通过 HTTP 协议传输给客户端。而应用服务器,则是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。
 
nginx与apache的优缺点
nginx 相对 apache 的优点:
轻量级,同样起web 服务,比apache 占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
社区活跃,各种高性能模块出品迅速啊
 
apache 相对nginx 的优点:
rewrite ,比nginx 的rewrite 强大
模块超多,基本想到的都可以找到
少bug ,nginx 的bug 相对较多
超稳定
 
nginx正向代理:客户端通过代理服务器去请求服务端,nginx代理的是客户端
nginx反向代理:服务端通过代理服务器向客户端展示,nginx代理的是服务端
 
数据库备份方式:
1:定期拷贝:定期将数据库拷贝到一块硬盘上,这是最低层次的备份方式
2:磁盘阵列:做RAID,支持热拔插
3:服务器双机备份:定期从主服务器拷贝到从服务器
4:双机热备:运行备份软件,实时备份数据
双机热备的方式:
 
 
linux快照
lvm快照法:此方法针对lvm
场景是已经有一块lvm挂载在/mnt/lv1
现在要对/dev/mapper/vg1/lv1做快照,快照的卷组还是和lv1在同一个vg1的,所以你的快照大小要看下vg1还剩下多少空间,下面我就用1G举例
#lvcreate -s -n lvsnp -L 1G /dev/mapper/vg1/lv1
可以创建一个目录挂载上去,查看快照是和被快照的逻辑卷大小一致的
mount /dev/mapper/vg1/lvsnp /mnt/lvsnp   至此快照做好也挂好了
现在做实验:lv1里面我新建个文件写进去100M的大小,然后我要用快照还原这个lv1到我快照的状态(没有这100M文件的状态)
#cd /mnt/lv1
# dd if =/dev/zero of=/mnt/lv1/temp.txt bs=100M count= 1
#ll /dev/lv1   里面有了一个100M的temp.txt,我现在要恢复快照,那这个100M的文件也就没有
#umount /mnt/lv1
#lvconvert --merge /dev/mapper/vg1/lvsnp
#ll /mnt/lv1  查看temp.txt没了
 
统一监控包括:基础设备,操作系统,应用程序
   监控包括:稳定性,安全性,可预见性
 
常见的raid有raid0 raid1 raid3 raid5 raid6 raid10
raid制作(raid按照要求制作完成可以挂在使用)
场景:我有5块盘每块都分了8个分区
raid01为两块raid0做成的raid1
1:制作raid0
mdadm -C /dev/md/raid0 -ayes -l0 -n2 /dev/sd[c,d]1  -C:raid路径以及名称 -ayes:添加并确认 -l:raid类型 -n后面跟的是需要几块盘以及哪几块
mdadm -D /dev/md/raid0  查看raid0信息
2:制作raid01(再做一个raid0,两块在一起做raid01)
mdadm -C /dev/md/raid1 -ayes -l0 -n2 /dev/sd[e,f]1
mdadm -C /dev/md/raid01 -ayes -l1 -n2 /dev/md/raid0 /dev/md/raid1
3:制作raid50
mdadm -C /dev/md/raid2 -ayes -l5 -n3 -x1 /dev/sd[c,d,e,f]3   -x表示有一块盘作为校验盘
mdadm -C /dev/md/raid3 -ayes -l5 -n3 -x1 /dev/sd[c,d,e,f]5
mdadm -c /dev/md/raid50 -ayes -l0 -n2 /dev/md/raid2 /dev/md/raid3
4:给raid添加磁盘
mdadm -C /dev/md/raid4 -ayes -l5 -n3 -x1 /dev/sd[c,d,e,f]6
mdadm /dev/md/raid4 -a /dev/sdg6
5:删除软raid
mdadm /dev/md/raid4 --fail /dev/sdc6 --remove /dev/sdc6
mdadm /dev/md/raid4 --fail /dev/sdd6 --remove /dev/sdd6
mdadm /dev/md/raid4 --fail /dev/sde6 --remove /dev/sde6
mdadm /dev/md/raid4 --fail /dev/sdf6 --remove /dev/sdf6
mdadm --stop /dev/md/raid4  停止raid4
mdadm --misc --zero-superblock /dev/sdc6
mdadm --misc --zero-superblock /dev/sdd6
mdadm --misc --zero-superblock /dev/sde6
mdadm --misc --zero-superblock /dev/sdf6
硬raid是通过硬件实现,比如raid控制器
软raid是通过自己组合完成的,linux中使用几块磁盘自己用命令组成的
 
ansible的安装及使用
ansible基于ssh协议进行数据传输,配公私钥
#yum -y install ansible
[root@system1 .ssh]# rpm -qc ansible
/etc/ansible/ansible.cfg    配置文件
/etc/ansible/hosts    机器列表
-v verbose详细信息
-s 切换至sudo用户
-K 询问sudo密码
-k 提示输入ssh密码,而不是基于秘钥的
#双方机器都要配置好公私钥
yum模块使用详解:
yum模块一般对应的状态有installed present latest removed absent
#ansible -i /etc/ansible/hosts remote -c ssh -m shell -a 'yum -y install mod_wsgi' -s -K #remote -c ssh表示执行远程机器 -a将任何参数指定给模块执行 -m指定模块 -i服务器列表
#ansible -i /etc/ansible/hosts local -c local -m shell -a 'yum -y install mod_wsgi' #local -c local表示执行本地
#ansible 192.168.42.131 -m yum -a 'name=mod_wsgi state=present'  此命令同样可以安装
#ansible 192.168.42.131 -m yum -a 'name=mod_wsgi state=latest disable_gpg_check=yes enablerepo=local'  启动本地源安装并设置gpgcheck=1
#ansible 192.168.42.131 -m yum -a 'name=mod_wsgi state=latest disable_gpg_check=no disbalerepo=local'  不使用本地源安装并设置gpgcheck=0
#ansible 192.168.42.131 -a 'chdir=/tmp ls -l'
Ansible copy模块主要用于文件或者目录复制,支持文件、目录、权限、用户组功能
copy模块使用详解:
src:Ansible端源文件或者目录,空目录不复制
content:用来替代src,用于将指定文件的内容复制到远程文件内
dest:客户端目标目录或者文件,需要绝对路径
backup:复制之前,先备份远程节点上的原始文件
directory_mode:用于复制目录,新建的文件会被复制,而旧的不会被复制
follow:支持link文件复制
force:覆盖远程主机不一致的内容
group:设定远程主机目录的组名
mode:设定远程主机文件及目录的权限
owner:设定远程主机目录的用户名
单条操作如下
#ansible 192.168.42.131 -m copy -a 'src=/etc/passwd dest=/tmp mode=777 owner=root group=root'
#ansible 192.168.42.131 -m copy -a 'content="HELLO" dest=/tmp/passwd backup=yes backup=yes owner=root group=root mode=777'
play-book操作如下
---
- hosts: 192.168.42.131
 connection: ssh
 become: yes
 become_user: root
 task: 
 - name: copy file
  copy: src=/etc/passwd dest=/tmp mode=755 owner=root group=root
 - name: install mod_wsgi
  yum: name=mod_wsgi state=present(latest) 使用yum模块安装mod_wsgi
  yum: name=mod_wsgi state=removed(absent)  卸载mod_wsgi
file模块使用详解:
force:需要在两种情况下强制创建软链接
1.源文件不存在但之后会建立的情况下
2.目标软连接已经存在,需要取消之前的软链接,然后创建洗的软连接,有两个选项:yes|no
group:定义文件/目标的属组
mode:定义文件/目录的权限
owenr:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:directory:如果文件不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软连接
ln -s /hjgl/usr/hanke/.ssh /hjgl/usr/dsq/ 将hanke下面的.ssh软链接到dsq下面。dsq下面显示为:.ssh -> /hjgl/usr/hanke/.hanke
如果报错:Too many levels of symbolic links错误  请将以上的链接命令写成绝对路径,不能用相对路径
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
#ansible 192.168.42.131 -m file -a 'path=/tmp/passwd state=touch'  创建文件
#ansible 192.168.42.131 -m file -a 'path=/tmp/passwd state=absent'  删除文件
#ansible -i /etc/ansible/hosts remote -c ssh -m file -a 'src=/etc/passwd dest=/tmp/passwd state=link'  创建软连接
#ansible -i /etc/ansible/hosts remote -c ssh -m file -a 'dest=/tmp/passwd state=absent'    删除软连接
#ansible 192.168.42.131 -m shell -a 'tar -zxvf /root/hanke.tar.gz /etc/*'    将远程目录打包
#ansible 192.168.42.131 -m fetch -a 'src=/root/hanke.tar.gz dest=/tmp/'     将远程的包取到本机,会在本地/tmp目录生成一个192.168.42.131目录
#ansible 192.168.42.131 -m script -a '/root/1.sh'  执行master上面的脚本使之在remote生效
注意事项:所有可以在linux敲入的命令都可以使用-m shell模块,如下:test.yml
---
- hosts: remote
 connection: ssh
 become: yes
 become_user: root
 tasks:
 - name: install httpd
  tags: install
  yum: name=httpd state=latest
 - name: start httpd.service
  tags: start
  service: name=httpd state=started
 - name: start httpd.service
  tags: restart
  service: name=httpd state=restarted
 - name: stop httpd.service
  tags: stop
  service: name=httpd state=stopped
 - name: config httpd
  tags: config
  copy: src=/root/ansible/httpd.conf dest=/etc/httpd/conf/ backup=yes
  when: ansible_distribution_major_version == "7"
  notify: restart httpd
 handlers:
 - name: restart httpd
  service: name=httpd state=restarted
 - name: tar
   shell: tar -zcvf hanke.tar.gz /tmp/hanke
 - name: cd 
   shell: cd ~
  tags是打标签用的,后面可以直接调用,如下:
ansible-playbook test.yml --tags=restart
ansible-playbook test.yml --tags="install,restart"    
ansible-playbook test.yml --tags="install,restart" -l 192.168.42.131 
  notify是指定当前这条操作接下来的步骤是哪个,连着的是handlers,对应handlers的name:,,并且notify和handlers之间可以不用连续     
      
#ansible-playbook test.yml  执行test.yml    
#ansible-vault encrypt test.yml  给test.yml加密
#ansible-vault decrypt test.yml  给test.yml解密
 
C语言
源码编译的过程:源码–>预处理–>编译–>汇编–>链接–>执行
大致可分为三步:./configure—>make—>make install
总的来说:make就做了编译汇编的工作,他是根据makefile的文件来编译汇编的;而makefile是configure根据一个叫做makefile.in的模板文件生成的;makefile.in是由一个叫automake的工具生成的,configure是由一个叫autoconf的工具生成的。make install把编译好的文件复制到指定的目录,说到底就是调用了install命令。
 
maven项目构建的时候如果从远程仓库更新报错的话将maven设置为offline,,,全局-点击maven-第一个就是offline
maven,.jsp或者html报错有些是可以避免的,进入首选项,输入valid搜索,,进去将所有的设置为disable
eclipse报错cannot be resolved,逐个检查jre,tomcat,maven以及当前工程自己的lib包是否缺失
jenkins构建maven项目
 
CSV转xlsx(格式转换) ####此脚本是在excel的宏 运行
Sub CAVToXLSX()
    Dim fDir As String
    Dim wB As Workbook
    Dim wS As Worksheet
    Dim fPath As String
    Dim sPath As String
    fPath = "原始csv文件的地址\"    #最后一个\不能省略
    sPath = "转出的xlsx文件地址\"   #最后一个\不能省略
    fDir = Dir(fPath)
    Do While (fDir <> "")
        If Right(fDir, 4) = ".csv" Or Right(fDir, 5) = ".csv" Then
            On Error Resume Next
            Set wB = Workbooks.Open(fPath & fDir)
            'MsgBox (wB.Name)
            For Each wS In wB.Sheets
                wS.SaveAs sPath & wB.Name & ".xlsx" _    #最后_之前有个空格
                , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
            Next wS
            wB.Close False
            Set wB = Nothing
        End If
        fDir = Dir
        On Error GoTo 0
    Loop
End Sub
 
windows下批量删除某个多级目录下的同一后缀的文件
del /a /f /s /q "*.csv"    /a /f  强制删除所有文件   /q无需确认直接删除   /s递归删除
 
批量登录Linux机器并执行脚本(VBS脚本):
#$language = "VBScript"
#$interface = "1.0"
 
Const ForReading = 1
Dim fs, iplistpath, pwdlistpath, iplist, pwdlist, strip, strpwd
Dim loginuser
 
'定义变量,此处IP.txt和PWD.txt要和VBS脚本在同一个目录下
iplistpath="C:\Users\Desktop\IP.txt"  'IP清单,格式为一行一个IP
loginuser = "root"
pwdlistpath="C:\Users\Desktop\PWD.txt"  '密码清单,一行一个密码
 
'用OpenTextFile读取文本文件并赋值给变量
set fs = CreateObject("Scripting.FileSystemObject")
set iplist = fs.OpenTextFile(iplistpath,1,False)  '1:ForReading 2:ForWriting 3:Appending  False表示文件不存在不创建
set pwdlist = fs.OpenTextFile(pwdlistpath,1,False)
 
'登录环境
Do While iplist.AtEndOfStream <> True and pwdlist.AtEndOfStream <> True  '当两个条件为真时循环
        strip = Trim(iplist.Readline)  '读取iplist的每一行
        strpwd = Trim(pwdlist.Readline)  '读取pwdlist的每一行
                If strip <> "" and strpwd <> "" Then
                    cmd = " /ssh2 /L " & loginuser & " /PASSWORD " & strpwd & " /C 3DES " & strip
                End If
                        set newtab=crt.Session.ConnectInTab(cmd)
                        set scr = newtab.Screen  '打开新窗口
                        scr.WaitForString "$"
                        scr.Send "sftp hjgl@10.240.84.99" & chr(13)  'sftp获取远程需要执行的脚本
                        scr.WaitForString "password:"
                        scr.Send "hjgl@App2020" & chr(13)  '& chr(13) 相当于回车
                        scr.WaitForString "sftp> "
                        scr.Send "cd /hjgl/usr/hanke/" & chr(13)
                        scr.WaitForString "sftp> "
                        scr.Send "get chpasswd.sh" & chr(13)
                        scr.WaitForString "sftp> "
                        scr.Send "bye" & chr(13)
                        scr.WaitForString "$"
                        scr.Send "chmod 755 $HOME/chpasswd.sh" & chr(13)
                        scr.Send "sh $HOME/chpasswd.sh" & chr(13)
                        scr.Send "exit" & chr(13)  '关闭窗口
Loop
 
windows 下在后台运行 .py 文件 pythonw test.py > test.log
windows 下查看后台进程 tasklist
windows 下杀死后台进程 taskkill /f /im python.exe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • 0
    点赞
  • 1
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值