运维葵花宝典

………………………………………………华丽丽的分割线………………………………………………………………………

前方高能预警,非战斗人员撤退

………………………………………………华丽丽的分割线…………………………………………………………………………

一:修改服务器密码

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 10 /etc/passwd 查看后十行

cmd1 ;cmd2 顺序执行命令,脚本经常用到

cmd1 || cmd2 前一条失败则执行第二条,脚本经常用到

cmd1 && cmd2 前一条成功则执行第二条,脚本经常用到

linux命令行操作如下:

!!:执行上一条命令

!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

hostnamectl #可以查看主机名和发行版本

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

w #查看当前系统登录的所有用户

w -f

lab permissions setup #重置系统做题目

lab permissions grade #做完题目检查下

showmount -e IP或者主机名 #查看NFS服务器上所有共享的目录

getent #查看系统数据库中存在的信息

getent passwd|grep hanke

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 * .[!.]* #将隐藏文件一起打包

echo yes|cp -ra ./.bash_profile ../ #将当前的.bash_profile强制覆盖到上一级目录(不用手动输入yes)

zip -r hanke.zip /hanke

gzip hanke.tar.bz2 /hanke #压缩完之后/hanke这个目录就没了

find / -type f -mtime modify

-atime access

-ctime change

-user

-size

-group

cat /root/hanke.txt|grep "^$"|wc -l #查看hanke.txt是否有空行,并统计出有几个空行

grep hello /root/hanke.txt|grep -v "^$" >/root/wordlist #将hanke.txt里面的hello过滤出来追加到wordlist里面并去掉空行

cmd1 ; cmd2 #顺序执行命令

cmd1 || cmd2 #cmd1失败则执行cmd2

cmd1 && cmd2 #cmd1执行成功则执行cmd2

/etc/yum.repos.d #此目录下是yum源

yum clean all ; yum makecache #清理缓存,建立缓存

yum -y install #安装软件或工具,支持*

yum -y install "/usr/sbin/semanage" #直接写命令路径安装

yum install "/usr/bin/httpd"

yum remove #卸载工具,不支持*

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 oracel #查找运行文件路径

ln -s path1 path2 #将path1软链接到path2

ln -d path1 path2 #将path1硬链接到path2

ln -snf path1 path2 #path2已经存在。更改链接路径

查看环境变量

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 #查看防火墙

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 #检查当前系统已经打开的文件数 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 #设置为无限制

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

报错:::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编辑即可)

创建用户

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 用户组名称

锁定用户禁止登陆: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 #修改密码过期时间

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秒后解锁。

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

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:用于私人网络之间的链接

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 #将删除的文件追回来

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环境变量

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 #同步刷新下/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

注意: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) #取除法整数

举例:(要求输出:人工智障说: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'])) #随机选取一个字符串

#洗牌

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)

# while 91 in list1:

# list1.remove(91);print(list1) #这两行代码的意思是如果list1中有91的话就删掉所有的91

# print(list1.index(95)) #查找出list1中元素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那就不对了

# list3 = set(list1);print(list3); #去重

查看用户所属组:groups afa

tar -cvf hanke.tar hanke --exclude=hanke/123.sh #打包但不包括

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! 放弃所有修改,并打开原来文件。

linux系统进入mysql数据库的方法:

连接MYSQL:

格式: mysql -h主机地址 -u用户名 -p用户密码

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

其中: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;

exit;退出

informix(DBA)

1:导入数据#dbaccess databasename 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直接运行。

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 /执行脚本文件

"不是内部外部命令"-----程序和功能----打开或关闭windows功能,进去勾选就好

unix系统默认shell是ksh,linux默认是bash,要想Ctrl-p 和 Ctrl-n 来查看上一个下一个命令要先设置emacs

set -o | grep emacs 查看emacs是否是off

set -o emscs切换到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保存退出

#arg list too lang 解决办法:#ls | xargs -n 10 rm -rf ls

#Terminal too wide 解决办法:在命令窗口#stty -a #查看设置

#stty columns 132 #更改columns值解决

替换目录下所有*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://文件全路径

例子:

svn cat http://localhost/test/readme.txt

19、新建一个分支copy

svn copy branchA branchB -m "make B branch" // 从branchA拷贝出一个新分支branchB

20、合并内容到分支merge

svn merge branchA branchB // 把对branchA的修改合并到分支branchB