………………………………………………华丽丽的分割线………………………………………………………………………
前方高能预警,非战斗人员撤退
………………………………………………华丽丽的分割线…………………………………………………………………………
一:修改服务器密码
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 [email protected] #如果是连接到同一个用户可以去掉用户ssh 192.168.85.129,如果再加上公钥的话可以免密连接
ssh-keygen #生成私钥-公钥对
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] #此时私钥就到了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’ [email protected]
命令栏快捷操作
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 [email protected] /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 [email protected] #发送人邮箱
set smtp=smtp.126.com #指定smtp服务器
set smtp-auth-user="[email protected]" #发送人邮箱
set smtp-auth-password="abcd1234" #授权码
#set smtp-auth-password="1qaz@@WSX" #邮箱密码
set smtp-auth=login #设置login
mail -s "second test(主题)" [email protected] < /home/hanke/test/1.txt(正文)
echo /home/hanke/test/1.txt | mail -s "second test" [email protected] #此命令效果和上面一样的
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 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! w 向前移动一个单词(光标停在单词首部),如果已到行尾,则转至下一行行首。此命令快,可以代替l命令。 b 向后移动一个单词 2b 向后移动2个单词 e,同w,只不过是光标停在单词尾部 ge,同b,光标停在单词尾部。 ^ 移动到本行第一个非空白字符上。 0(数字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
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语句编辑区, 可按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(也就是 ^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