Update from Sync Service
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
**一、****FirewallD****简介**
|
||||
FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。 以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而模块的卸载将会破坏状态防火墙和确立的连接。
|
||||
相反,firewall daemon 动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。不过,要使用 firewall daemon 就要求防火墙的所有变更都要通过该守护进程来实现,以确保守护进程中的状态和内核里的防火墙是一致的。另外,firewall daemon 无法解析由 ip*tables 和 ebtables 命令行工具添加的防火墙规则。
|
||||
守护进程通过 D-BUS 提供当前激活的防火墙设置信息,也通过 D-BUS 接受使用 PolicyKit 认证方式做的更改。
|
||||
**一、****FirewallD****简介**
|
||||
FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。 以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而模块的卸载将会破坏状态防火墙和确立的连接。
|
||||
相反,firewall daemon 动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。不过,要使用 firewall daemon 就要求防火墙的所有变更都要通过该守护进程来实现,以确保守护进程中的状态和内核里的防火墙是一致的。另外,firewall daemon 无法解析由 ip*tables 和 ebtables 命令行工具添加的防火墙规则。
|
||||
守护进程通过 D-BUS 提供当前激活的防火墙设置信息,也通过 D-BUS 接受使用 PolicyKit 认证方式做的更改。
|
||||
**二、****FirewallD****特性**
|
||||
|
||||
- 守护进程应用程序、守护进程和用户可以通过 D-BUS 请求启用一个防火墙特性。特性可以是预定义的防火墙功能,如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP 拦截或自定义规则等。该功能可以启用确定的一段时间也可以再次停用。通过所谓的直接接口,其他的服务(例如 libvirt )能够通过 iptables 变元(arguments)和参数(parameters)增加自己的规则。amanda 、ftp 、samba 和 tftp 服务的 netfilter 防火墙助手也被“守护进程”解决了,只要它们还作为预定义服务的一部分。附加助手的装载不作为当前接口的一部分。由于一些助手只有在由模块控制的所有连接都关闭后才可装载。因而,跟踪连接信息很重要,需要列入考虑范围。
|
||||
@@ -31,11 +31,11 @@ FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接
|
||||
|
||||
- Firewalld命令:
|
||||
|
||||
#进程与状态相关systemctl start firewalld.service #启动防火墙 systemctl stop firewalld.service #停止防火墙 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #更新防火墙规则 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #重载防火墙规则 firewall-cmd --list-ports #查看所有打开的端口 firewall-cmd --list-services #查看所有允许的服务 firewall-cmd --get-services #获取所有支持的服务 
|
||||
#区域相关firewall-cmd --list-all-zones #查看所有区域信息 firewall-cmd --get-active-zones #查看活动区域信息 firewall-cmd --set-default-zone=public #设置public为默认区域 firewall-cmd --get-default-zone #查看默认区域信息 firewall-cmd --zone=public --add-interface=eth0 #将接口eth0加入区域public
|
||||
#接口相关firewall-cmd --zone=public --remove-interface=eth0 #从区域public中删除接口eth0 firewall-cmd --zone=default --change-interface=eth0 #修改接口eth0所属区域为default firewall-cmd --get-zone-of-interface=eth0 #查看接口eth0所属区域 
|
||||
#端口控制firewall-cmd --add-port=80/tcp --permanent #永久添加80端口例外(全局)firewall-cmd --remove-port=80/tcp --permanent #永久删除80端口例外(全局)firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局) 
|
||||
firewall-cmd --zone=public --add-port=80/tcp --permanent #永久添加80端口例外(区域public)firewall-cmd --zone=public --remove-port=80/tcp --permanent #永久删除80端口例外(区域public)firewall-cmd --zone=public --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(区域public) 
|
||||
# 进程与状态相关systemctl start firewalld.service #启动防火墙 systemctl stop firewalld.service #停止防火墙 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #更新防火墙规则 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #重载防火墙规则 firewall-cmd --list-ports #查看所有打开的端口 firewall-cmd --list-services #查看所有允许的服务 firewall-cmd --get-services #获取所有支持的服务 
|
||||
# 区域相关firewall-cmd --list-all-zones #查看所有区域信息 firewall-cmd --get-active-zones #查看活动区域信息 firewall-cmd --set-default-zone=public #设置public为默认区域 firewall-cmd --get-default-zone #查看默认区域信息 firewall-cmd --zone=public --add-interface=eth0 #将接口eth0加入区域public
|
||||
# 接口相关firewall-cmd --zone=public --remove-interface=eth0 #从区域public中删除接口eth0 firewall-cmd --zone=default --change-interface=eth0 #修改接口eth0所属区域为default firewall-cmd --get-zone-of-interface=eth0 #查看接口eth0所属区域 
|
||||
# 端口控制firewall-cmd --add-port=80/tcp --permanent #永久添加80端口例外(全局)firewall-cmd --remove-port=80/tcp --permanent #永久删除80端口例外(全局)firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局) 
|
||||
firewall-cmd --zone=public --add-port=80/tcp --permanent #永久添加80端口例外(区域public)firewall-cmd --zone=public --remove-port=80/tcp --permanent #永久删除80端口例外(区域public)firewall-cmd --zone=public --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(区域public) 
|
||||
**注:如果某个接口不属于任何****Zone****,那么这个接口的所有数据包使用默认的****Zone****的规则。**
|
||||
|
||||
- 命令含义:--zone #作用域--add-port=80/tcp #添加端口,格式为:端口/通讯协议--permanent #永久生效,没有此参数重启后失效
|
||||
@@ -46,8 +46,8 @@ systemctl start firewalld.service #启动服务systemctl stop firewalld.servi
|
||||
- 关闭CentOS7自带Firewall启用iptables:
|
||||
|
||||
yum install iptables-services #安装iptables systemctl stop firewalld.service #停止firewalld systemctl mask firewalld.service #禁止自动和手动启动firewalld systemctl start iptables.service #启动iptablessystemctl start ip6tables.service #启动ip6tables systemctl enable iptables.service #设置iptables自启动 systemctl enable ip6tables.service #设置ip6tables自启动 注:静态防火墙规则配置文件是 /etc/sysconfig/iptables 以及 /etc/sysconfig/ip6tables
|
||||
|
||||
作者:风吹我已散博客
|
||||
链接:https://www.jianshu.com/p/a2e8829aa50e
|
||||
来源:简书
|
||||
|
||||
作者:风吹我已散博客
|
||||
链接:https://www.jianshu.com/p/a2e8829aa50e
|
||||
来源:简书
|
||||
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|
||||
@@ -1,39 +1,39 @@
|
||||
**NTP****简介:**
|
||||
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
|
||||
在计算机的世界里,时间非常地重要
|
||||
例如:对于火箭发射这种科研活动,对时间的统一性和准确性要求就非常地高,是按照A这台计算机的时间,还是按照B这台计算机的时间?
|
||||
NTP就是用来解决这个问题的,NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。
|
||||
它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。
|
||||
它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)进行时间同步,它可以提供高精准度的时间校正,而且可以使用加密确认的方式来防止病毒的协议攻击。
|
||||
|
||||
**环境:**
|
||||
==系统:====CentOS Linux release 7.4.1708 (Core)==
|
||||
==NTP Server====服务器====IP====:====192.168.0.15==
|
||||
==NTP Client====客户端====IP====:====192.168.0.16==
|
||||
|
||||
**1****、搭建****NTP****服务器**
|
||||
**1.1****、查看服务器是否安装****ntp****,系统默认安装****ntpdate****;**
|
||||
[root@localhost ~]# rpm -qa |grep ntpntpdate-4.2.6p5-28.el7.centos.x86_64ntp-4.2.6p5-28.el7.centos.x86_64
|
||||
**1.2****、安装****ntp****,****ntpdate****已经系统默认安装过了**
|
||||
[root@localhost ~]# yum install -y ntp
|
||||
**NTP****简介:**
|
||||
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
|
||||
在计算机的世界里,时间非常地重要
|
||||
例如:对于火箭发射这种科研活动,对时间的统一性和准确性要求就非常地高,是按照A这台计算机的时间,还是按照B这台计算机的时间?
|
||||
NTP就是用来解决这个问题的,NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。
|
||||
它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms。
|
||||
它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)进行时间同步,它可以提供高精准度的时间校正,而且可以使用加密确认的方式来防止病毒的协议攻击。
|
||||
|
||||
**环境:**
|
||||
==系统:====CentOS Linux release 7.4.1708 (Core)==
|
||||
==NTP Server====服务器====IP====:====192.168.0.15==
|
||||
==NTP Client====客户端====IP====:====192.168.0.16==
|
||||
|
||||
**1****、搭建****NTP****服务器**
|
||||
**1.1****、查看服务器是否安装****ntp****,系统默认安装****ntpdate****;**
|
||||
[root@localhost ~]# rpm -qa |grep ntpntpdate-4.2.6p5-28.el7.centos.x86_64ntp-4.2.6p5-28.el7.centos.x86_64
|
||||
**1.2****、安装****ntp****,****ntpdate****已经系统默认安装过了**
|
||||
[root@localhost ~]# yum install -y ntp
|
||||
**1.3****、修改****ntp****配置文件**
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
|
||||
[root@localhost ~]# vim /etc/ntp.conf
|
||||
[root@localhost ~]# vim /etc/ntp.conf
|
||||
把配置文件下面四行注释掉:server 0.cn.pool.ntp.org iburstserver 1.cn.pool.ntp.org iburstserver 2.cn.pool.ntp.org iburstserver 3.cn.pool.ntp.org iburst然后在下面添加这几行:server 0.cn.pool.ntp.org iburstserver 1.cn.pool.ntp.org iburstserver 2.cn.pool.ntp.org iburstserver 3.cn.pool.ntp.org iburst
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
|
||||
**1.4****、启动****ntp****服务,并开机自启动**
|
||||
[root@localhost ~]# systemctl start ntpd[root@localhost ~]# systemctl enable ntpd
|
||||
**1.5****、查询****ntp****是否同步**
|
||||
[root@localhost ~]# ntpq -p remote refid st t when poll reach delay offset jitter==============================================================================*119.28.206.193 100.122.36.196 2 u 128 128 377 19.711 -0.468 5.363
|
||||
**1.6****、开启防火墙****ntp****默认端口****udp123**
|
||||
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=123/udpsuccess[root@localhost ~]# firewall-cmd --reloadsuccess
|
||||
|
||||
**2****、****NTP****客户端配置**
|
||||
安装的NTP跟上面的步骤一样
|
||||
**1.4****、启动****ntp****服务,并开机自启动**
|
||||
[root@localhost ~]# systemctl start ntpd[root@localhost ~]# systemctl enable ntpd
|
||||
**1.5****、查询****ntp****是否同步**
|
||||
[root@localhost ~]# ntpq -p remote refid st t when poll reach delay offset jitter==============================================================================*119.28.206.193 100.122.36.196 2 u 128 128 377 19.711 -0.468 5.363
|
||||
**1.6****、开启防火墙****ntp****默认端口****udp123**
|
||||
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=123/udpsuccess[root@localhost ~]# firewall-cmd --reloadsuccess
|
||||
|
||||
**2****、****NTP****客户端配置**
|
||||
安装的NTP跟上面的步骤一样
|
||||
**2.1****、修改****ntp****配置文件,将上面的****NTP****服务器作为客户端同步****NTP****时间服务器**
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
@@ -42,9 +42,9 @@ NTP就是用来解决这个问题的,NTP(Network Time Protocol,网络时
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
|
||||
**2.2****、与****NTP server****服务器同步一下时间:**
|
||||
[root@localhost ~]# ntpdate -u 192.168.0.15
|
||||
**2.3****、查看****ntp****同步状态**
|
||||
能看到已经成功同步,要记得开启ntpd这个服务器
|
||||
**2.2****、与****NTP server****服务器同步一下时间:**
|
||||
[root@localhost ~]# ntpdate -u 192.168.0.15
|
||||
**2.3****、查看****ntp****同步状态**
|
||||
能看到已经成功同步,要记得开启ntpd这个服务器
|
||||
[root@localhost ~]# ntpq -p remote refid st t when poll reach delay offset jitter============================================================================== 192.168.0.15 119.28.206.193 3 u 7 64 1 0.217 -288085 0.000
|
||||
\> 来自 \<[https://www.cnblogs.com/Sungeek/p/10197345.html](https://www.cnblogs.com/Sungeek/p/10197345.html)\>
|
||||
> 来自 <[https://www.cnblogs.com/Sungeek/p/10197345.html](https://www.cnblogs.com/Sungeek/p/10197345.html)>
|
||||
@@ -1,56 +1,56 @@
|
||||
openssl req \
|
||||
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
|
||||
-x509 -days 3650 -out ca.crt \
|
||||
openssl req \
|
||||
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
|
||||
-x509 -days 3650 -out ca.crt \
|
||||
-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=zhdgps/OU=IT/CN=test/emailAddress=11111111@qq.com"
|
||||
openssl req \
|
||||
-newkey rsa:4096 -nodes -sha256 -keyout harbor-registry.key \
|
||||
-out harbor-registry.csr \
|
||||
openssl req \
|
||||
-newkey rsa:4096 -nodes -sha256 -keyout harbor-registry.key \
|
||||
-out harbor-registry.csr \
|
||||
-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=zhdgps/OU=IT/CN=10.10.200.175/emailAddress=974418136@qq.com"
|
||||
echo subjectAltName = IP:10.10.200.175 \> extfile.cnf
|
||||
echo subjectAltName = IP:10.10.200.175 > extfile.cnf
|
||||
openssl x509 -req -days 3650 -in harbor-registry.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out harbor-registry.crt
|
||||
|
||||
==因为Harbor发布时默认并不包含certificates,并使用http来提供registry请求服务。然而,我们建议在实际的生产环境中还是要使用安全的https。Harbor有一个Nginx实例以作为其他所有服务的反向代理。可以使用prepare脚本来配置Nginx以支持https。==
|
||||
**1. 停止Harbor**
|
||||
==上一章我们使用的是Harbor默认的http方式工作,这里我们首先将Harbor停止,并删除掉原有的一些数据,以恢复到一个干净的环境:==
|
||||
==# docker-compose down -v========# ls /data/*========# rm -rf /data/database========# rm -rf /data/registry========# rm -rf /data/*========# rm -rf /var/log/harbor*========#== ====
|
||||
==注意,可能是因为目前Harbor工作负载过重,导致上面调用====docker-compose down -v====经常会失败,可用如下方式来停止:==
|
||||
==# docker ps | grep -v CONTAINER | grep -v docs | awk '{print $1'} | xargs docker stop========# docker ps | grep -v CONTAINER | grep -v docs | awk '{print $1'} | xargs docker rm -vf==
|
||||
**2. 获取证书**
|
||||
==这里假设你的registry主机名为====reg.yourdomain.com====,并且通过DNS记录能够找到你运行Harbor的主机。首先你应该从CA处获得一个certificate。该certificate通常包含一个====a.crt====文件和一个====a.key====文件,例如:====yourdomain.com.crt====以及====yourdomain.com.key====。==
|
||||
==在测试或开发环境下,你也许会使用一个自签名证书,而不是从CA那里获取。可以通过如下的命令产生你自己的证书:==
|
||||
**2.1 创建自签名根证书**
|
||||
==可以通过如下的方式来产生一个====私钥====及====自签名证书====:==
|
||||
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout ca.key \====== ==-x509 -days 365 -out ca.crt======
|
||||
**2.2 产生证书签名请求**
|
||||
==假如你使用类似于====reg.yourdomain.com====的FQDN(Fully Qualified Domain Name)方式来连接registry主机,则你必须使用====reg.yourdomain.com====来作为CN(Common Name)。否则,假如你使用IP地址来连接你的registry主机的话,CN可以指定为任何值(例如指定为你的名字):==
|
||||
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \====== ==-out yourdomain.com.csr======
|
||||
**2.3 为registry主机产生证书**
|
||||
==假如你使用类似于====reg.yourdomain.com====的FQDN(Full Qualified Domain Name)方式来连接registry主机,你可以使用如下的命令来为registry主机产生证书:==
|
||||
==# openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out yourdomain.com.crt======
|
||||
==假如你是使用ip的话, 比如使用====192.168.1.101====来连接registry主机的话,你需要使用如下命令:==
|
||||
==# echo subjectAltName = IP:192.168.1.101 \> extfile.cnf======
|
||||
==# openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out yourdomain.com========.crt==
|
||||
**3. 配置与安装**
|
||||
==在你获得====yourdomain.com.crt====与====yourdomain.com.key====文件之后,你可以将它们放到一个目录,比如====/root/cert/====:==
|
||||
==# cp yourdomain.com.crt /root/cert/========# cp yourdomain.com.key /root/cert/== ====
|
||||
==然后修改====harbor.cfg====配置文件,更新hostname及protocol,然后更新====ssl_cert====及====ssl_cert_key====:==
|
||||
==#set hostname========hostname = reg.yourdomain.com========#set ui_url_protocol========ui_url_protocol = https========......========#The path of cert and key files for nginx, they are applied only the protocol is set to https== ======ssl_cert = /root/cert/yourdomain.com.crt========ssl_cert_key = /root/cert/yourdomain.com.key======
|
||||
==然后再执行如下命令为Harbor产生配置文件:==
|
||||
==# ./prepare======
|
||||
==假如当前====Harbor====正在运行的话,停止并移除当前的运行实例。通过如下方式你的====image data====仍会保留在文件系统中:==
|
||||
==# docker-compose down======
|
||||
==最后,重启Harbor。==
|
||||
|
||||
==因为Harbor发布时默认并不包含certificates,并使用http来提供registry请求服务。然而,我们建议在实际的生产环境中还是要使用安全的https。Harbor有一个Nginx实例以作为其他所有服务的反向代理。可以使用prepare脚本来配置Nginx以支持https。==
|
||||
**1. 停止Harbor**
|
||||
==上一章我们使用的是Harbor默认的http方式工作,这里我们首先将Harbor停止,并删除掉原有的一些数据,以恢复到一个干净的环境:==
|
||||
==# docker-compose down -v========# ls /data/*========# rm -rf /data/database========# rm -rf /data/registry========# rm -rf /data/*========# rm -rf /var/log/harbor*========#== ====
|
||||
==注意,可能是因为目前Harbor工作负载过重,导致上面调用====docker-compose down -v====经常会失败,可用如下方式来停止:==
|
||||
==# docker ps | grep -v CONTAINER | grep -v docs | awk '{print $1'} | xargs docker stop========# docker ps | grep -v CONTAINER | grep -v docs | awk '{print $1'} | xargs docker rm -vf==
|
||||
**2. 获取证书**
|
||||
==这里假设你的registry主机名为====reg.yourdomain.com====,并且通过DNS记录能够找到你运行Harbor的主机。首先你应该从CA处获得一个certificate。该certificate通常包含一个====a.crt====文件和一个====a.key====文件,例如:====yourdomain.com.crt====以及====yourdomain.com.key====。==
|
||||
==在测试或开发环境下,你也许会使用一个自签名证书,而不是从CA那里获取。可以通过如下的命令产生你自己的证书:==
|
||||
**2.1 创建自签名根证书**
|
||||
==可以通过如下的方式来产生一个====私钥====及====自签名证书====:==
|
||||
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout ca.key \====== ==-x509 -days 365 -out ca.crt======
|
||||
**2.2 产生证书签名请求**
|
||||
==假如你使用类似于====reg.yourdomain.com====的FQDN(Fully Qualified Domain Name)方式来连接registry主机,则你必须使用====reg.yourdomain.com====来作为CN(Common Name)。否则,假如你使用IP地址来连接你的registry主机的话,CN可以指定为任何值(例如指定为你的名字):==
|
||||
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \====== ==-out yourdomain.com.csr======
|
||||
**2.3 为registry主机产生证书**
|
||||
==假如你使用类似于====reg.yourdomain.com====的FQDN(Full Qualified Domain Name)方式来连接registry主机,你可以使用如下的命令来为registry主机产生证书:==
|
||||
==# openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out yourdomain.com.crt======
|
||||
==假如你是使用ip的话, 比如使用====192.168.1.101====来连接registry主机的话,你需要使用如下命令:==
|
||||
==# echo subjectAltName = IP:192.168.1.101 > extfile.cnf======
|
||||
==# openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out yourdomain.com========.crt==
|
||||
**3. 配置与安装**
|
||||
==在你获得====yourdomain.com.crt====与====yourdomain.com.key====文件之后,你可以将它们放到一个目录,比如====/root/cert/====:==
|
||||
==# cp yourdomain.com.crt /root/cert/========# cp yourdomain.com.key /root/cert/== ====
|
||||
==然后修改====harbor.cfg====配置文件,更新hostname及protocol,然后更新====ssl_cert====及====ssl_cert_key====:==
|
||||
==#set hostname========hostname = reg.yourdomain.com========#set ui_url_protocol========ui_url_protocol = https========......========#The path of cert and key files for nginx, they are applied only the protocol is set to https== ======ssl_cert = /root/cert/yourdomain.com.crt========ssl_cert_key = /root/cert/yourdomain.com.key======
|
||||
==然后再执行如下命令为Harbor产生配置文件:==
|
||||
==# ./prepare======
|
||||
==假如当前====Harbor====正在运行的话,停止并移除当前的运行实例。通过如下方式你的====image data====仍会保留在文件系统中:==
|
||||
==# docker-compose down======
|
||||
==最后,重启Harbor。==
|
||||
==在设置了====https====之后,你可以通过如下的步骤来进行验证:==
|
||||
|
||||
- ==打开浏览器输入访问地址====https://reg.yourdomain.com====,就会显示出Harbor的 UI界面==
|
||||
- ==在安装有docker daemon的机器上(请确保没有====--insecure-registry====设置),你必须拷贝上述步骤所产生的====ca.crt====到====/etc/docker/certs.d/reg.yourdomain.com====目录(或者====registry host IP====目录)。假如该目录并不存在的话,请创建该目录。假如你将nginx 443端口映射到了其他端口的话,则你必须创建====/etc/docker/certs.d/reg.yourdomain.com:port====目录(或者====registry host IP:port====目录),然后运行相应的docker命令行来验证https是否工作正常:==
|
||||
|
||||
==# docker login reg.yourdomain.com======
|
||||
==假如你已经将nginx 443端口映射到了其他端口的话,你需要在登录时添加相应的端口,例如:==
|
||||
==# docker login reg.yourdomain.com:port======
|
||||
**4. Troubleshooting**
|
||||
==1) 你也许从一个certificate issuer处获得了一个intermediate certificate。在这种情况下,你可以将该intermediate certificate与你自己的certificate合并,创建出一个certificate bundle。你可以通过如下命令来实现:==
|
||||
==# cat intermediate-certificate.pem \>\> yourdomain.com.crt==
|
||||
==# docker login reg.yourdomain.com======
|
||||
==假如你已经将nginx 443端口映射到了其他端口的话,你需要在登录时添加相应的端口,例如:==
|
||||
==# docker login reg.yourdomain.com:port======
|
||||
**4. Troubleshooting**
|
||||
==1) 你也许从一个certificate issuer处获得了一个intermediate certificate。在这种情况下,你可以将该intermediate certificate与你自己的certificate合并,创建出一个certificate bundle。你可以通过如下命令来实现:==
|
||||
==# cat intermediate-certificate.pem >> yourdomain.com.crt==
|
||||
==2) 在有一些docker daemon运行的操作系统上,你也许需要在操作系统级别信任该证书==
|
||||
|
||||
- ==在Ubuntu操作系统上,你可以通过如下命令来完成==
|
||||
@@ -59,35 +59,35 @@ openssl req \
|
||||
|
||||
- ==在Redhat(Centos等)操作系统上,你可以通过如下命令来完成==
|
||||
|
||||
==# cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/reg.yourdomain.com.crt========# update-ca-trust======
|
||||
**5. 部署示例**
|
||||
==我们当前部署环境ip地址为====192.168.69.128==
|
||||
**5.1 获得证书文件**
|
||||
**1) 产生根证书**
|
||||
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout ca.key \====== ==-x509 -days 365 -out ca.crt \====== ==-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=test_company/OU=IT/CN=test/emailAddress=11111111@qq.com"======
|
||||
==# ls========ca.crt ca.key======
|
||||
**2) 产生证书签名请求**
|
||||
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout harbor-registry.key \====== ==-out harbor-registry.csr \====== ==-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=test_company/OU=IT/CN=192.168.69.128/emailAddress=11111111@qq.com"======
|
||||
==# ls========ca.crt ca.key harbor-registry.csr harbor-registry.key======
|
||||
**3) 为registry产生证书**
|
||||
==# echo subjectAltName = IP:192.168.69.128 \> extfile.cnf======
|
||||
==# openssl x509 -req -days 365 -in harbor-registry.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out harbor-registry.crt======
|
||||
==# ls========ca.crt ca.key ca.srl extfile.cnf harbor-registry.crt harbor-registry.csr harbor-registry.key==
|
||||
**5.2 配置及安装**
|
||||
==1) 拷贝harbor-registry证书到====/opt/cert====目录==
|
||||
==# mkdir -p /opt/cert========# cp harbor-registry.crt /opt/cert/========# cp harbor-registry.key /opt/cert/======
|
||||
==2) 修改harbor.cfg配置文件==
|
||||
==#set hostname========hostname = 192.168.69.128========#set ui_url_protocol========ui_url_protocol = https========......========#The path of cert and key files for nginx, they are applied only the protocol is set to https== ======ssl_cert = /opt/cert/harbor-registry.crt========ssl_cert_key = /opt/cert/harbor-registry.key======
|
||||
==3) 重新产生配置文件==
|
||||
==# ./prepare======
|
||||
==4) 关闭harbor==
|
||||
==# docker-compose down== ====
|
||||
==5) 查看docker daemon是否有====--insecure-registry====选项==
|
||||
==如果仍有该选项,请将其去掉,并执行如下命令重启docker daemon:==
|
||||
==# systemctl daemon-reload========# systemctl restart docker======
|
||||
==6) 重启Harbor==
|
||||
==# docker-compose up -d========Creating network "harbor_harbor" with the default driver========Creating harbor-log ... done========Creating registry ... done========Creating harbor-adminserver ... done========Creating harbor-db ... done========Creating harbor-ui ... done========Creating harbor-jobservice ... done========Creating nginx ... done======
|
||||
==# docker ps========CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES========c7b4d837fefc vmware/nginx-photon:v1.4.0 "nginx -g 'daemon of…" 6 seconds ago Up 3 seconds 0.0.0.0:80-\>80/tcp, 0.0.0.0:443-\>443/tcp, 0.0.0.0:4443-\>4443/tcp nginx========257ec984fc98 vmware/harbor-jobservice:v1.4.0 "/harbor/start.sh" 6 seconds ago Up 4 seconds (health: starting) harbor-jobservice========331fe98b1623 vmware/harbor-ui:v1.4.0 "/harbor/start.sh" 8 seconds ago Up 5 seconds (health: starting) harbor-ui========d155d8a3cf00 vmware/harbor-db:v1.4.0 "/usr/local/bin/dock…" 10 seconds ago Up 7 seconds (health: starting) 3306/tcp harbor-db========183a8f508491 vmware/harbor-adminserver:v1.4.0 "/harbor/start.sh" 10 seconds ago Up 7 seconds (health: starting) harbor-adminserver========579642c3cecc vmware/registry-photon:v2.6.2-v1.4.0 "/entrypoint.sh serv…" 10 seconds ago Up 7 seconds (health: starting) 5000/tcp registry========06a1618f789e vmware/harbor-log:v1.4.0 "/bin/sh -c /usr/loc…" 10 seconds ago Up 9 seconds (health: starting) 127.0.0.1:1514-\>10514/tcp harbor-log======
|
||||
==# cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/reg.yourdomain.com.crt========# update-ca-trust======
|
||||
**5. 部署示例**
|
||||
==我们当前部署环境ip地址为====192.168.69.128==
|
||||
**5.1 获得证书文件**
|
||||
**1) 产生根证书**
|
||||
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout ca.key \====== ==-x509 -days 365 -out ca.crt \====== ==-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=test_company/OU=IT/CN=test/emailAddress=11111111@qq.com"======
|
||||
==# ls========ca.crt ca.key======
|
||||
**2) 产生证书签名请求**
|
||||
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout harbor-registry.key \====== ==-out harbor-registry.csr \====== ==-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=test_company/OU=IT/CN=192.168.69.128/emailAddress=11111111@qq.com"======
|
||||
==# ls========ca.crt ca.key harbor-registry.csr harbor-registry.key======
|
||||
**3) 为registry产生证书**
|
||||
==# echo subjectAltName = IP:192.168.69.128 > extfile.cnf======
|
||||
==# openssl x509 -req -days 365 -in harbor-registry.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out harbor-registry.crt======
|
||||
==# ls========ca.crt ca.key ca.srl extfile.cnf harbor-registry.crt harbor-registry.csr harbor-registry.key==
|
||||
**5.2 配置及安装**
|
||||
==1) 拷贝harbor-registry证书到====/opt/cert====目录==
|
||||
==# mkdir -p /opt/cert========# cp harbor-registry.crt /opt/cert/========# cp harbor-registry.key /opt/cert/======
|
||||
==2) 修改harbor.cfg配置文件==
|
||||
==#set hostname========hostname = 192.168.69.128========#set ui_url_protocol========ui_url_protocol = https========......========#The path of cert and key files for nginx, they are applied only the protocol is set to https== ======ssl_cert = /opt/cert/harbor-registry.crt========ssl_cert_key = /opt/cert/harbor-registry.key======
|
||||
==3) 重新产生配置文件==
|
||||
==# ./prepare======
|
||||
==4) 关闭harbor==
|
||||
==# docker-compose down== ====
|
||||
==5) 查看docker daemon是否有====--insecure-registry====选项==
|
||||
==如果仍有该选项,请将其去掉,并执行如下命令重启docker daemon:==
|
||||
==# systemctl daemon-reload========# systemctl restart docker======
|
||||
==6) 重启Harbor==
|
||||
==# docker-compose up -d========Creating network "harbor_harbor" with the default driver========Creating harbor-log ... done========Creating registry ... done========Creating harbor-adminserver ... done========Creating harbor-db ... done========Creating harbor-ui ... done========Creating harbor-jobservice ... done========Creating nginx ... done======
|
||||
==# docker ps========CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES========c7b4d837fefc vmware/nginx-photon:v1.4.0 "nginx -g 'daemon of…" 6 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx========257ec984fc98 vmware/harbor-jobservice:v1.4.0 "/harbor/start.sh" 6 seconds ago Up 4 seconds (health: starting) harbor-jobservice========331fe98b1623 vmware/harbor-ui:v1.4.0 "/harbor/start.sh" 8 seconds ago Up 5 seconds (health: starting) harbor-ui========d155d8a3cf00 vmware/harbor-db:v1.4.0 "/usr/local/bin/dock…" 10 seconds ago Up 7 seconds (health: starting) 3306/tcp harbor-db========183a8f508491 vmware/harbor-adminserver:v1.4.0 "/harbor/start.sh" 10 seconds ago Up 7 seconds (health: starting) harbor-adminserver========579642c3cecc vmware/registry-photon:v2.6.2-v1.4.0 "/entrypoint.sh serv…" 10 seconds ago Up 7 seconds (health: starting) 5000/tcp registry========06a1618f789e vmware/harbor-log:v1.4.0 "/bin/sh -c /usr/loc…" 10 seconds ago Up 9 seconds (health: starting) 127.0.0.1:1514->10514/tcp harbor-log======
|
||||
==7) 通过https形式访问Harbor==
|
||||
|
||||
- ==通过浏览器访问==
|
||||
@@ -96,32 +96,32 @@ openssl req \
|
||||
|
||||
- ==通过docker命令来访问==
|
||||
|
||||
==首先新建====/etc/docker/certs.d/192.168.69.128====目录,然后将上面产生的====ca.crt====拷贝到该目录:==
|
||||
==# mkdir -p /etc/docker/certs.d/192.168.69.128========# cp ca.crt /etc/docker/certs.d/192.168.69.128/======
|
||||
==然后登录到docker registry:==
|
||||
==# docker login 192.168.69.128========Username (admin): admin========Password:== ======Login Succeeded======
|
||||
==用向====registry====中上传一个镜像:==
|
||||
==# docker images========192.168.69.128/library/redis alpine c27f56585938 3 weeks ago 27.7MB======
|
||||
==首先新建====/etc/docker/certs.d/192.168.69.128====目录,然后将上面产生的====ca.crt====拷贝到该目录:==
|
||||
==# mkdir -p /etc/docker/certs.d/192.168.69.128========# cp ca.crt /etc/docker/certs.d/192.168.69.128/======
|
||||
==然后登录到docker registry:==
|
||||
==# docker login 192.168.69.128========Username (admin): admin========Password:== ======Login Succeeded======
|
||||
==用向====registry====中上传一个镜像:==
|
||||
==# docker images========192.168.69.128/library/redis alpine c27f56585938 3 weeks ago 27.7MB======
|
||||
==[root@localhost test]# docker push 192.168.69.128/library/redis:alpine========The push refers to repository [192.168.69.128/library/redis]========f6b9463783dc: Pushed== ======222a85888a99: Pushed== ======1925395eabdd: Pushed== ======c3d278563734: Pushed== ======ad9247fe8c63: Pushed== ======cd7100a72410: Pushed== ======alpine: digest: sha256:9d017f829df3d0800f2a2582c710143767f6dda4df584b708260e73b1a1b6db3 size: 1568======
|
||||
|
||||
- ==通过curl命令来访问 registry API版本号==
|
||||
|
||||
==查询registry API版本号:==
|
||||
==# curl -iL -X GET== ==https://192.168.69.128/v2== ==--cacert ca.crt========HTTP/1.1 301 Moved Permanently========Server: nginx========Date: Tue, 10 Apr 2018 09:33:39 GMT========Content-Type: text/html========Content-Length: 178========Location:== ==https://192.168.69.128/v2/========Connection: keep-alive======
|
||||
==HTTP/1.1 401 Unauthorized========Server: nginx========Date: Tue, 10 Apr 2018 09:33:39 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 87========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=575f32ac760f52c8cf1cdb748e48ab5e; Path=/; HttpOnly========Www-Authenticate: Bearer realm="https://192.168.69.128/service/token",service="harbor-registry"======
|
||||
=={"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}======
|
||||
==# curl -iL -X GET -u admin:Harbor12345== ==https://192.168.69.128/service/token?account=admin\&service=harbor-registry== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Tue, 10 Apr 2018 09:34:39 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 1100========Connection: keep-alive========Set-Cookie: beegosessionID=77bc62dcdc4a810a0e208487a89f069a; Path=/; HttpOnly======
|
||||
=={====== =="token": "nHLZqMPw",====== =="expires_in": 1800,====== =="issued_at": "2018-04-10T09:34:39Z"========}======
|
||||
==# curl -iL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer nHLZqMPw"== ==https://192.168.69.128/v2== ==--cacert ca.crt========HTTP/1.1 301 Moved Permanently========Server: nginx========Date: Tue, 10 Apr 2018 09:36:48 GMT========Content-Type: text/html========Content-Length: 178========Location:== ==https://192.168.69.128/v2/========Connection: keep-alive======
|
||||
==HTTP/1.1 200 OK========Server: nginx========Date: Tue, 10 Apr 2018 09:36:48 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 2========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=e651b65d891617a999254ec875c1c63c; Path=/; HttpOnly======
|
||||
==查询registry API版本号:==
|
||||
==# curl -iL -X GET== ==https://192.168.69.128/v2== ==--cacert ca.crt========HTTP/1.1 301 Moved Permanently========Server: nginx========Date: Tue, 10 Apr 2018 09:33:39 GMT========Content-Type: text/html========Content-Length: 178========Location:== ==https://192.168.69.128/v2/========Connection: keep-alive======
|
||||
==HTTP/1.1 401 Unauthorized========Server: nginx========Date: Tue, 10 Apr 2018 09:33:39 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 87========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=575f32ac760f52c8cf1cdb748e48ab5e; Path=/; HttpOnly========Www-Authenticate: Bearer realm="https://192.168.69.128/service/token",service="harbor-registry"======
|
||||
=={"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}======
|
||||
==# curl -iL -X GET -u admin:Harbor12345== ==https://192.168.69.128/service/token?account=admin\&service=harbor-registry== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Tue, 10 Apr 2018 09:34:39 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 1100========Connection: keep-alive========Set-Cookie: beegosessionID=77bc62dcdc4a810a0e208487a89f069a; Path=/; HttpOnly======
|
||||
=={====== =="token": "nHLZqMPw",====== =="expires_in": 1800,====== =="issued_at": "2018-04-10T09:34:39Z"========}======
|
||||
==# curl -iL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer nHLZqMPw"== ==https://192.168.69.128/v2== ==--cacert ca.crt========HTTP/1.1 301 Moved Permanently========Server: nginx========Date: Tue, 10 Apr 2018 09:36:48 GMT========Content-Type: text/html========Content-Length: 178========Location:== ==https://192.168.69.128/v2/========Connection: keep-alive======
|
||||
==HTTP/1.1 200 OK========Server: nginx========Date: Tue, 10 Apr 2018 09:36:48 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 2========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=e651b65d891617a999254ec875c1c63c; Path=/; HttpOnly======
|
||||
==上面为了显示,我们对返回过来的====token====做了适当的裁剪。此外这里====curl====命令不适用====-k====选项,表示需要对服务器证书进行检查。==
|
||||
|
||||
- ==通过curl来访问registry中的镜像列表==
|
||||
|
||||
==# curl -iL -X GET -u admin:Harbor12345== ==https://192.168.69.128/service/token?account=admin\&service=harbor-registry\&scope=registry:catalog:*== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Mon, 09 Apr 2018 09:33:52 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 1166========Connection: keep-alive========Set-Cookie: beegosessionID=648fd5a5ec4f06389d45c02f7f5971b4; Path=/; HttpOnly======
|
||||
=={====== =="token": "A7yfEdUBYD3bDhLM",====== =="expires_in": 1800,====== =="issued_at": "2018-04-09T09:33:52Z"========}======
|
||||
==# curl -iL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer LA7yfEdUBYD3bDhLM"== ==http://192.168.69.128/v2/_catalog== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Mon, 09 Apr 2018 09:36:35 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 34========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=1b84e760ab0234045f06680e56e28818; Path=/; HttpOnly======
|
||||
=={"repositories":["library/redis"]}======
|
||||
==# curl -iL -X GET -u admin:Harbor12345== ==https://192.168.69.128/service/token?account=admin\&service=harbor-registry\&scope=registry:catalog:*== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Mon, 09 Apr 2018 09:33:52 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 1166========Connection: keep-alive========Set-Cookie: beegosessionID=648fd5a5ec4f06389d45c02f7f5971b4; Path=/; HttpOnly======
|
||||
=={====== =="token": "A7yfEdUBYD3bDhLM",====== =="expires_in": 1800,====== =="issued_at": "2018-04-09T09:33:52Z"========}======
|
||||
==# curl -iL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer LA7yfEdUBYD3bDhLM"== ==http://192.168.69.128/v2/_catalog== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Mon, 09 Apr 2018 09:36:35 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 34========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=1b84e760ab0234045f06680e56e28818; Path=/; HttpOnly======
|
||||
=={"repositories":["library/redis"]}======
|
||||
==上面为了显示,我们对返回过来的====token====做了适当的裁剪。此外这里====curl====命令不适用====-k====选项,表示需要对服务器证书进行检查。==
|
||||
\> 来自 \<[https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https](https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https)\>
|
||||
\> 来自 \<[https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https](https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https)\>
|
||||
> 来自 <[https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https](https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https)>
|
||||
> 来自 <[https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https](https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https)>
|
||||
@@ -1,20 +1,20 @@
|
||||
J==enkins是开源的,使用Java编写的持续集成的工具,在Centos上可以通过yum命令行直接安装。记录下安装的过程,方便以后查找。==
|
||||
==安装 java==
|
||||
==$ sudo yum== ==install== ==-y== ==java========......==
|
||||
==安装Jenkins==
|
||||
==$ sudo wget -O /etc/yum.repos.d/jenkins.repo== ==http:====//jenkins-ci.org/redhat/jenkins.repo========$ sudo rpm --====import== ==http:====//pkg.jenkins-ci.org/redhat/jenkins-ci.org.key========$ sudo yum install -y jenkins========......==
|
||||
==配置==
|
||||
==Jenkins 的安装目录是:/var/lib/jenkins/==
|
||||
==Jenkins 的皮遏制文件地址:/etc/sysconfig/jenkins==
|
||||
==这里介绍下三个比较重要的配置:==
|
||||
==JENKINS_HOME==
|
||||
==JENKINS_USER==
|
||||
==JENKINS_PORT==
|
||||
==JENKINS_HOME是Jenkins的主目录,Jenkins工作的目录都放在这里,Jenkins储存文件的地址,Jenkins的插件,生成的文件都在这个目录下。==
|
||||
==JENKINS_USER是Jenkins的用户,拥有$JENKINS_HOME和/var/log/jenkins的权限。==
|
||||
==JENKINS_PORT是Jenkins的端口,默认端口是8080,为了和别的系统占用端口冲突,建议改变。==
|
||||
==授权==
|
||||
==有时候Jenkins需要操作别的用户的文件或者执行脚本,那么就得有对应的权限,比如Jenkins用户执行docker命令进行镜像制作与上传,用如下的命令即可。==
|
||||
==$ sudo usermod -a -G docker jenkins==
|
||||
==启动 Jenkins==
|
||||
J==enkins是开源的,使用Java编写的持续集成的工具,在Centos上可以通过yum命令行直接安装。记录下安装的过程,方便以后查找。==
|
||||
==安装 java==
|
||||
==$ sudo yum== ==install== ==-y== ==java========......==
|
||||
==安装Jenkins==
|
||||
==$ sudo wget -O /etc/yum.repos.d/jenkins.repo== ==http:====//jenkins-ci.org/redhat/jenkins.repo========$ sudo rpm --====import== ==http:====//pkg.jenkins-ci.org/redhat/jenkins-ci.org.key========$ sudo yum install -y jenkins========......==
|
||||
==配置==
|
||||
==Jenkins 的安装目录是:/var/lib/jenkins/==
|
||||
==Jenkins 的皮遏制文件地址:/etc/sysconfig/jenkins==
|
||||
==这里介绍下三个比较重要的配置:==
|
||||
==JENKINS_HOME==
|
||||
==JENKINS_USER==
|
||||
==JENKINS_PORT==
|
||||
==JENKINS_HOME是Jenkins的主目录,Jenkins工作的目录都放在这里,Jenkins储存文件的地址,Jenkins的插件,生成的文件都在这个目录下。==
|
||||
==JENKINS_USER是Jenkins的用户,拥有$JENKINS_HOME和/var/log/jenkins的权限。==
|
||||
==JENKINS_PORT是Jenkins的端口,默认端口是8080,为了和别的系统占用端口冲突,建议改变。==
|
||||
==授权==
|
||||
==有时候Jenkins需要操作别的用户的文件或者执行脚本,那么就得有对应的权限,比如Jenkins用户执行docker命令进行镜像制作与上传,用如下的命令即可。==
|
||||
==$ sudo usermod -a -G docker jenkins==
|
||||
==启动 Jenkins==
|
||||
$ systemctl enable jenkins # 开机启动$ systemctl start jenkins # 启动jenkins
|
||||
@@ -1,148 +1,148 @@
|
||||
==一、前言==
|
||||
==安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。==
|
||||
==SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。==
|
||||
==SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。==
|
||||
==如果可以熟练掌握 SELinux 并正确运用,我觉得整个系统基本上可以到达"坚不可摧"的地步了(请永远记住没有绝对的安全)。==
|
||||
==掌握 SELinux 的基本概念以及简单的配置方法是每个 Linux 系统管理员的必修课。==
|
||||
==本文均在 CentOS 7.4.1708 系统中操作。==
|
||||
==本文纯属个人学习经验分享交流,出错再所难免,仅供参考!如果发现错误的地方,可以的话麻烦指点下,特别感谢!==
|
||||
==二、SELinux 的作用及权限管理机制==
|
||||
==2.1 SELinux 的作用==
|
||||
==SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。==
|
||||
==设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。是不是很可怕?==
|
||||
==SELinux 就是来解决这个问题的。==
|
||||
==2.2 DAC==
|
||||
==在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。==
|
||||
==只要访问这个资源的进程符合以上的条件就可以被访问。==
|
||||
==而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。==
|
||||
==这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。==
|
||||
==2.3 MAC==
|
||||
==在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。==
|
||||
==这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。==
|
||||
==即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。==
|
||||
==这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。==
|
||||
==而 MAC 又细分为了两种方式,一种叫类别安全(MCS)模式,另一种叫多级安全(MLS)模式。==
|
||||
==下文中的操作均为 MCS 模式。==
|
||||
==2.4 DAC 和 MAC 的对比==
|
||||
==这里引用一张图片来说明。==
|
||||
==可以看到,在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。==
|
||||
==三、SELinux 基本概念==
|
||||
==3.1 主体(Subject)==
|
||||
==可以完全等同于进程。==
|
||||
==注:为了方便理解,如无特别说明,以下均把进程视为主体。==
|
||||
==3.2 对象(Object)==
|
||||
==被主体访问的资源。可以是文件、目录、端口、设备等。==
|
||||
==注:为了方便理解,如无特别说明,以下均把文件或者目录视为对象。==
|
||||
==3.3 政策和规则(Policy & Rule)==
|
||||
==系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。==
|
||||
==而哪些进程需要管制、要怎么管制是由政策决定的。==
|
||||
==一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。==
|
||||
==规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。==
|
||||
==在 CentOS 7 系统中,有三套政策,分别是:==
|
||||
==1. targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。==
|
||||
==2. minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。==
|
||||
==3. mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。==
|
||||
==政策可以在 /etc/selinux/config 中设定。==
|
||||
==3.4 安全上下文(Security Context)==
|
||||
==安全上下文是 SELinux 的核心。==
|
||||
==安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。==
|
||||
==一个「进程安全上下文」一般对应多个「文件安全上下文」。==
|
||||
==只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。==
|
||||
==文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。==
|
||||
==需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。==
|
||||
==安全上下文的结构及含义==
|
||||
==安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。==
|
||||
==3.5 SELinux 的工作模式==
|
||||
==SELinux 有三种工作模式,分别是:==
|
||||
==1. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。==
|
||||
==2. permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。==
|
||||
==3. disabled:关闭 SELinux。==
|
||||
==SELinux 工作模式可以在 /etc/selinux/config 中设定。==
|
||||
==如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。==
|
||||
==enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。==
|
||||
==需要注意的是,如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文(我表示我重启了大约 10 分钟,还以为是死机了……)。==
|
||||
==SELinux 日志的记录需要借助 auditd.service 这个服务,请不要禁用它。==
|
||||
==3.6 SELinux 工作流程==
|
||||
==这里引用一张图片,不必过多解释。==
|
||||
==注:上面的安全文本指的就是安全上下文。==
|
||||
==四、SELinux 基本操作==
|
||||
==4.1 查询文件或目录的安全上下文==
|
||||
==命令基本用法==
|
||||
==ls -Z==
|
||||
==用法举例==
|
||||
==查询 /etc/hosts 的安全上下文。==
|
||||
==ls -Z /etc/hosts==
|
||||
==执行结果==
|
||||
==-rw-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts==
|
||||
==4.2 查询进程的安全上下文==
|
||||
==命令基本用法==
|
||||
==ps auxZ | grep -v grep | grep==
|
||||
==用法举例==
|
||||
==查询 Nginx 相关进程的安全上下文。==
|
||||
==ps auxZ | grep -v grep | grep nginx==
|
||||
==执行结果==
|
||||
==system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx==
|
||||
==system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: worker process==
|
||||
==4.3 手动修改文件或目录的安全上下文==
|
||||
==命令基本用法==
|
||||
==chcon [...]==
|
||||
==选项功能-u 修改安全上下文的用户字段-r 修改安全上下文的角色字段-t 修改安全上下文的类型字段-l 修改安全上下文的级别字段--reference 修改与指定文件或目录相一致的安全上下文-R递归操作-h修改软链接的安全上下文(不加此选项则修改软链接对应文件)==
|
||||
==用法举例==
|
||||
==修改 test 的安全上下文为 aaa_u:bbb_r:ccc_t:s0。==
|
||||
==chcon -u aaa_u -r bbb_r -t ccc_t test==
|
||||
==4.4 把文件或目录的安全上下文恢复到默认值==
|
||||
==命令基本用法==
|
||||
==restorecon [选项] [...]==
|
||||
==选项功能-v打印操作过程-R递归操作==
|
||||
==用法举例==
|
||||
==添加一些网页文件到 Nginx 服务器的目录之后,为这些新文件设置正确的安全上下文。==
|
||||
==restorecon -R /usr/share/nginx/html/==
|
||||
==4.5 查询系统中的布尔型规则及其状态==
|
||||
==命令基本用法==
|
||||
==getsebool -a==
|
||||
==由于该命令要么查询所有规则,要么只查询一个规则,所以一般都是先查询所有规则然后用 grep 筛选。==
|
||||
==用法举例==
|
||||
==查询与 httpd 有关的布尔型规则。==
|
||||
==getsebool -a | grep httpd==
|
||||
==执行结果==
|
||||
==httpd_anon_write --\> off==
|
||||
==httpd_builtin_scripting --\> on==
|
||||
==httpd_can_check_spam --\> off==
|
||||
==httpd_can_connect_ftp --\> off==
|
||||
==#以下省略==
|
||||
==4.6 开关一个布尔型规则==
|
||||
==命令基本用法==
|
||||
==setsebool [选项]==
|
||||
==选项功能-P重启依然生效==
|
||||
==用法举例==
|
||||
==开启 httpd_anon_write 规则。==
|
||||
==setsebool -P httpd_anon_write on==
|
||||
==4.7 添加目录的默认安全上下文==
|
||||
==命令基本用法==
|
||||
==semanage fcontext -a -t "(/.*)?"==
|
||||
==注:目录或文件的默认安全上下文可以通过 semanage fcontext -l 命令配合 grep过滤查看。==
|
||||
==用法举例==
|
||||
==为 Nginx 新增一个网站目录 /usr/share/nginx/html2 之后,需要为其设置与原目录相同的默认安全上下文。==
|
||||
==semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"==
|
||||
==4.8 添加某类进程允许访问的端口==
|
||||
==命令基本用法==
|
||||
==semanage port -a -t -p==
|
||||
==注:各种服务类型所允许的端口号可以通过 semanage port -l 命令配合 grep 过滤查看。==
|
||||
==用法举例==
|
||||
==为 Nginx 需要使用 10080 的端口用于 HTTP 服务。==
|
||||
==semanage port -a -t http_port_t -p tcp 10080==
|
||||
==五、SELinux 错误分析和解决==
|
||||
==5.1 认识 SELinux 日志==
|
||||
==当开启了 SELinux 之后,很多服务的一些正常行为都会被视为违规行为(标题及下文中的错误均指违规行为)。==
|
||||
==这时候我们就需要借助 SELinux 违规日志来分析解决。==
|
||||
==SELinux 违规日志保存在 /var/log/audit/audit.log 中。==
|
||||
==/var/log/audit/audit.log 的内容大概是这样的。==
|
||||
==type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=25 res=1==
|
||||
==type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success'==
|
||||
==...==
|
||||
==该文件的内容很多,而且混有很多与 SELinux 错误无关的系统审计日志。我们要借助 sealert 这个实用工具来帮忙分析(如果提示找不到命令的话请安装 setroubleshoot 软件包)。==
|
||||
==5.2 使用sealert分析错误==
|
||||
==命令基本用法==
|
||||
==sealert -a /var/log/audit/audit.log==
|
||||
==一、前言==
|
||||
==安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。==
|
||||
==SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。==
|
||||
==SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。==
|
||||
==如果可以熟练掌握 SELinux 并正确运用,我觉得整个系统基本上可以到达"坚不可摧"的地步了(请永远记住没有绝对的安全)。==
|
||||
==掌握 SELinux 的基本概念以及简单的配置方法是每个 Linux 系统管理员的必修课。==
|
||||
==本文均在 CentOS 7.4.1708 系统中操作。==
|
||||
==本文纯属个人学习经验分享交流,出错再所难免,仅供参考!如果发现错误的地方,可以的话麻烦指点下,特别感谢!==
|
||||
==二、SELinux 的作用及权限管理机制==
|
||||
==2.1 SELinux 的作用==
|
||||
==SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。==
|
||||
==设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。是不是很可怕?==
|
||||
==SELinux 就是来解决这个问题的。==
|
||||
==2.2 DAC==
|
||||
==在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。==
|
||||
==只要访问这个资源的进程符合以上的条件就可以被访问。==
|
||||
==而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。==
|
||||
==这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。==
|
||||
==2.3 MAC==
|
||||
==在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。==
|
||||
==这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。==
|
||||
==即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。==
|
||||
==这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。==
|
||||
==而 MAC 又细分为了两种方式,一种叫类别安全(MCS)模式,另一种叫多级安全(MLS)模式。==
|
||||
==下文中的操作均为 MCS 模式。==
|
||||
==2.4 DAC 和 MAC 的对比==
|
||||
==这里引用一张图片来说明。==
|
||||
==可以看到,在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。==
|
||||
==三、SELinux 基本概念==
|
||||
==3.1 主体(Subject)==
|
||||
==可以完全等同于进程。==
|
||||
==注:为了方便理解,如无特别说明,以下均把进程视为主体。==
|
||||
==3.2 对象(Object)==
|
||||
==被主体访问的资源。可以是文件、目录、端口、设备等。==
|
||||
==注:为了方便理解,如无特别说明,以下均把文件或者目录视为对象。==
|
||||
==3.3 政策和规则(Policy & Rule)==
|
||||
==系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。==
|
||||
==而哪些进程需要管制、要怎么管制是由政策决定的。==
|
||||
==一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。==
|
||||
==规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。==
|
||||
==在 CentOS 7 系统中,有三套政策,分别是:==
|
||||
==1. targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。==
|
||||
==2. minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。==
|
||||
==3. mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。==
|
||||
==政策可以在 /etc/selinux/config 中设定。==
|
||||
==3.4 安全上下文(Security Context)==
|
||||
==安全上下文是 SELinux 的核心。==
|
||||
==安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。==
|
||||
==一个「进程安全上下文」一般对应多个「文件安全上下文」。==
|
||||
==只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。==
|
||||
==文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。==
|
||||
==需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。==
|
||||
==安全上下文的结构及含义==
|
||||
==安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。==
|
||||
==3.5 SELinux 的工作模式==
|
||||
==SELinux 有三种工作模式,分别是:==
|
||||
==1. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。==
|
||||
==2. permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。==
|
||||
==3. disabled:关闭 SELinux。==
|
||||
==SELinux 工作模式可以在 /etc/selinux/config 中设定。==
|
||||
==如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。==
|
||||
==enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。==
|
||||
==需要注意的是,如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文(我表示我重启了大约 10 分钟,还以为是死机了……)。==
|
||||
==SELinux 日志的记录需要借助 auditd.service 这个服务,请不要禁用它。==
|
||||
==3.6 SELinux 工作流程==
|
||||
==这里引用一张图片,不必过多解释。==
|
||||
==注:上面的安全文本指的就是安全上下文。==
|
||||
==四、SELinux 基本操作==
|
||||
==4.1 查询文件或目录的安全上下文==
|
||||
==命令基本用法==
|
||||
==ls -Z==
|
||||
==用法举例==
|
||||
==查询 /etc/hosts 的安全上下文。==
|
||||
==ls -Z /etc/hosts==
|
||||
==执行结果==
|
||||
==-rw-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts==
|
||||
==4.2 查询进程的安全上下文==
|
||||
==命令基本用法==
|
||||
==ps auxZ | grep -v grep | grep==
|
||||
==用法举例==
|
||||
==查询 Nginx 相关进程的安全上下文。==
|
||||
==ps auxZ | grep -v grep | grep nginx==
|
||||
==执行结果==
|
||||
==system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx==
|
||||
==system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: worker process==
|
||||
==4.3 手动修改文件或目录的安全上下文==
|
||||
==命令基本用法==
|
||||
==chcon [...]==
|
||||
==选项功能-u 修改安全上下文的用户字段-r 修改安全上下文的角色字段-t 修改安全上下文的类型字段-l 修改安全上下文的级别字段--reference 修改与指定文件或目录相一致的安全上下文-R递归操作-h修改软链接的安全上下文(不加此选项则修改软链接对应文件)==
|
||||
==用法举例==
|
||||
==修改 test 的安全上下文为 aaa_u:bbb_r:ccc_t:s0。==
|
||||
==chcon -u aaa_u -r bbb_r -t ccc_t test==
|
||||
==4.4 把文件或目录的安全上下文恢复到默认值==
|
||||
==命令基本用法==
|
||||
==restorecon [选项] [...]==
|
||||
==选项功能-v打印操作过程-R递归操作==
|
||||
==用法举例==
|
||||
==添加一些网页文件到 Nginx 服务器的目录之后,为这些新文件设置正确的安全上下文。==
|
||||
==restorecon -R /usr/share/nginx/html/==
|
||||
==4.5 查询系统中的布尔型规则及其状态==
|
||||
==命令基本用法==
|
||||
==getsebool -a==
|
||||
==由于该命令要么查询所有规则,要么只查询一个规则,所以一般都是先查询所有规则然后用 grep 筛选。==
|
||||
==用法举例==
|
||||
==查询与 httpd 有关的布尔型规则。==
|
||||
==getsebool -a | grep httpd==
|
||||
==执行结果==
|
||||
==httpd_anon_write --> off==
|
||||
==httpd_builtin_scripting --> on==
|
||||
==httpd_can_check_spam --> off==
|
||||
==httpd_can_connect_ftp --> off==
|
||||
==#以下省略==
|
||||
==4.6 开关一个布尔型规则==
|
||||
==命令基本用法==
|
||||
==setsebool [选项]==
|
||||
==选项功能-P重启依然生效==
|
||||
==用法举例==
|
||||
==开启 httpd_anon_write 规则。==
|
||||
==setsebool -P httpd_anon_write on==
|
||||
==4.7 添加目录的默认安全上下文==
|
||||
==命令基本用法==
|
||||
==semanage fcontext -a -t "(/.*)?"==
|
||||
==注:目录或文件的默认安全上下文可以通过 semanage fcontext -l 命令配合 grep过滤查看。==
|
||||
==用法举例==
|
||||
==为 Nginx 新增一个网站目录 /usr/share/nginx/html2 之后,需要为其设置与原目录相同的默认安全上下文。==
|
||||
==semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"==
|
||||
==4.8 添加某类进程允许访问的端口==
|
||||
==命令基本用法==
|
||||
==semanage port -a -t -p==
|
||||
==注:各种服务类型所允许的端口号可以通过 semanage port -l 命令配合 grep 过滤查看。==
|
||||
==用法举例==
|
||||
==为 Nginx 需要使用 10080 的端口用于 HTTP 服务。==
|
||||
==semanage port -a -t http_port_t -p tcp 10080==
|
||||
==五、SELinux 错误分析和解决==
|
||||
==5.1 认识 SELinux 日志==
|
||||
==当开启了 SELinux 之后,很多服务的一些正常行为都会被视为违规行为(标题及下文中的错误均指违规行为)。==
|
||||
==这时候我们就需要借助 SELinux 违规日志来分析解决。==
|
||||
==SELinux 违规日志保存在 /var/log/audit/audit.log 中。==
|
||||
==/var/log/audit/audit.log 的内容大概是这样的。==
|
||||
==type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=25 res=1==
|
||||
==type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success'==
|
||||
==...==
|
||||
==该文件的内容很多,而且混有很多与 SELinux 错误无关的系统审计日志。我们要借助 sealert 这个实用工具来帮忙分析(如果提示找不到命令的话请安装 setroubleshoot 软件包)。==
|
||||
==5.2 使用sealert分析错误==
|
||||
==命令基本用法==
|
||||
==sealert -a /var/log/audit/audit.log==
|
||||
==执行完命令之后,系统需要花一段时间去分析日志中的违规行为并给出分析报告。分析报告的结构讲解请看下图:==
|
||||
\> 来自 \<[https://blog.csdn.net/yanjun821126/article/details/80828908](https://blog.csdn.net/yanjun821126/article/details/80828908)\>
|
||||
> 来自 <[https://blog.csdn.net/yanjun821126/article/details/80828908](https://blog.csdn.net/yanjun821126/article/details/80828908)>
|
||||
@@ -1,12 +1,12 @@
|
||||
**centos支持rz、sz命令**
|
||||
|
||||
yum install lrzsz
|
||||
|
||||
|
||||
rz的用法
|
||||
在命令终端输入rz回车后,就会出现文件选择对话框,选择需要上传文件,一次可以指定多个文件,上传到服务器的路径为当前执行rz命令的目录。
|
||||
如图;选择要上传的文件–Add–OK
|
||||
|
||||
s
|
||||
sz的用法
|
||||
yum install lrzsz
|
||||
|
||||
|
||||
rz的用法
|
||||
在命令终端输入rz回车后,就会出现文件选择对话框,选择需要上传文件,一次可以指定多个文件,上传到服务器的路径为当前执行rz命令的目录。
|
||||
如图;选择要上传的文件–Add–OK
|
||||
|
||||
s
|
||||
sz的用法
|
||||
sz命令可以单下载一个文件,也可以多个文件同时下载
|
||||
@@ -1,38 +1,38 @@
|
||||
有以下命令可以查看:
|
||||
|
||||
# lsb_release -a
|
||||
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
|
||||
Distributor ID: CentOS
|
||||
Description: CentOS release 5.4 (Final)
|
||||
Release: 5.4
|
||||
|
||||
# lsb_release -a
|
||||
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
|
||||
Distributor ID: CentOS
|
||||
Description: CentOS release 5.4 (Final)
|
||||
Release: 5.4
|
||||
Codename: Final
|
||||
|
||||
|
||||
|
||||
这个命令适用于所有的linux,包括Redhat、SuSE、Debian、Centos等发行版。
|
||||
|
||||
root@MyMail ~ # uname
|
||||
Linux
|
||||
root@MyMail ~ # uname -r
|
||||
2.6.18-164.el5
|
||||
[root@localhost ~]# uname -a
|
||||
|
||||
root@MyMail ~ # uname
|
||||
Linux
|
||||
root@MyMail ~ # uname -r
|
||||
2.6.18-164.el5
|
||||
[root@localhost ~]# uname -a
|
||||
Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010 i686 i686 i386 GNU/Linux
|
||||
|
||||
|
||||
|
||||
以下二种方法适用于RedHat,CentOS
|
||||
|
||||
root@MyMail ~ # cat /etc/redhat-release
|
||||
CentOS release 5.4 (Final)
|
||||
|
||||
登录到linux执行rpm -q redhat-release
|
||||
|
||||
#rpm -q redhat-release
|
||||
或CentOS
|
||||
|
||||
root@MyMail ~ # rpm -q centos-release
|
||||
centos-release-5-4.el5.centos.1
|
||||
|
||||
|
||||
**当前****centos** **版本与****redhat****对应的版本的命令**
|
||||
# cat /proc/version
|
||||
root@MyMail ~ # cat /etc/redhat-release
|
||||
CentOS release 5.4 (Final)
|
||||
|
||||
登录到linux执行rpm -q redhat-release
|
||||
|
||||
# rpm -q redhat-release
|
||||
或CentOS
|
||||
|
||||
root@MyMail ~ # rpm -q centos-release
|
||||
centos-release-5-4.el5.centos.1
|
||||
|
||||
|
||||
**当前****centos** **版本与****redhat****对应的版本的命令**
|
||||
# cat /proc/version
|
||||
Linux version 2.6.9-78.ELsmp (mockbuild@builder16.centos.org) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)) #1 SMP Fri Jul 25 00:04:28 EDT 2008
|
||||
\> 来自 \<[https://www.cnblogs.com/zzdylan/p/9930144.html](https://www.cnblogs.com/zzdylan/p/9930144.html)\>
|
||||
> 来自 <[https://www.cnblogs.com/zzdylan/p/9930144.html](https://www.cnblogs.com/zzdylan/p/9930144.html)>
|
||||
@@ -1,9 +1,9 @@
|
||||
==用户列表文件:====/etc/passwd==
|
||||
用户组列表文件:/etc/group
|
||||
查看系统中有哪些用户:cut -d : -f 1 /etc/passwd
|
||||
查看可以登录系统的用户:cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1
|
||||
查看用户操作:w命令(需要root权限)
|
||||
查看某一用户:w 用户名
|
||||
查看登录用户:who
|
||||
==用户列表文件:====/etc/passwd==
|
||||
用户组列表文件:/etc/group
|
||||
查看系统中有哪些用户:cut -d : -f 1 /etc/passwd
|
||||
查看可以登录系统的用户:cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1
|
||||
查看用户操作:w命令(需要root权限)
|
||||
查看某一用户:w 用户名
|
||||
查看登录用户:who
|
||||
查看用户登录历史记录:last
|
||||
\> 来自 \<[https://www.cnblogs.com/todarcy/p/11079228.html](https://www.cnblogs.com/todarcy/p/11079228.html)\>
|
||||
> 来自 <[https://www.cnblogs.com/todarcy/p/11079228.html](https://www.cnblogs.com/todarcy/p/11079228.html)>
|
||||
@@ -4,67 +4,85 @@
|
||||
|
||||
`df -h (centos-home`==和==`centos-root`==每人的名字可能不一样==
|
||||
|
||||
```
|
||||
```
|
||||
) vgdisplay (
|
||||
```
|
||||
|
||||
```
|
||||
==查看空闲磁盘大小)==``
|
||||
|
||||
4. 备份home分区文件
|
||||
|
||||
```
|
||||
```
|
||||
tar cvf /tmp/home.tar /home
|
||||
```
|
||||
|
||||
```
|
||||
6. 卸载/home,如果无法卸载,先终止使用/home文件系统的进程
|
||||
|
||||
`umount /home` ==(卸载)==
|
||||
|
||||
```
|
||||
```
|
||||

|
||||
fuser -km /home/
|
||||
```
|
||||
|
||||
```
|
||||
==(终止)==``
|
||||
|
||||
8. 删除/home所在的lv
|
||||
|
||||
```
|
||||
```
|
||||
lvremove /dev/mapper/centos-home
|
||||
```
|
||||
|
||||
```
|
||||
10. 扩展/root所在的lv
|
||||
|
||||
```
|
||||
```
|
||||
lvextend -L +50G /dev/mapper/centos-root
|
||||
```
|
||||
|
||||
```
|
||||
12. 扩展/root文件系统
|
||||
|
||||
```
|
||||
```
|
||||
xfs_growfs /dev/mapper/centos-root
|
||||
```
|
||||
|
||||
```
|
||||
14. 重新创建home lv
|
||||
|
||||
```
|
||||
```
|
||||
lvcreate -L 50G -n /dev/mapper/centos-home
|
||||
```
|
||||
|
||||
```
|
||||
16. 创建文件系统
|
||||
|
||||
```
|
||||
```
|
||||
mkfs.xfs /dev/mapper/centos-home
|
||||
```
|
||||
|
||||
```
|
||||
18. 挂载home
|
||||
|
||||
```
|
||||
```
|
||||
mount /dev/mapper/centos-home
|
||||
```
|
||||
|
||||
```
|
||||
20. home文件恢复
|
||||
|
||||
`tar xvf /tmp/home.tar -C /home/`
|
||||
\> 来自 \<[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)\>
|
||||
\> 来自 \<[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)\>
|
||||
> 来自 <[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)>
|
||||
> 来自 <[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)>
|
||||
@@ -1,12 +1,12 @@
|
||||
/usr: 系统级的目录,可以理解为C:/Windows/;/usr/bin 存放应用程序;/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,可以理解为C:/Windows/System32
|
||||
/usr: 系统级的目录,可以理解为C:/Windows/;/usr/bin 存放应用程序;/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,可以理解为C:/Windows/System32
|
||||
*比如Java的安装目录,我会放在这里。
|
||||
|
||||
/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。
|
||||
用户自己编译的软件默认会安装到这个目录下。
|
||||
|
||||
/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。
|
||||
用户自己编译的软件默认会安装到这个目录下。
|
||||
*比如Hadoop,Tomcat的安装目录我一般会放在/usr/目录下
|
||||
|
||||
/opt:给主机额外安装软件所摆放的目录。用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。
|
||||
*比如临时上传到Linux里的软件;tar.gz rpm等文件,用作软件仓库。
|
||||
————————————————
|
||||
版权声明:本文为CSDN博主「佛系亚当」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
|
||||
|
||||
/opt:给主机额外安装软件所摆放的目录。用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。
|
||||
*比如临时上传到Linux里的软件;tar.gz rpm等文件,用作软件仓库。
|
||||
————————————————
|
||||
版权声明:本文为CSDN博主「佛系亚当」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
|
||||
原文链接:https://blog.csdn.net/adamlinsfz/article/details/84307097
|
||||
@@ -1,60 +1,60 @@
|
||||
==bin core home lib64 mnt root snap tmp vmlinuz==
|
||||
==boot dev initrd.img lost+found opt run srv usr==
|
||||
==bin core home lib64 mnt root snap tmp vmlinuz==
|
||||
==boot dev initrd.img lost+found opt run srv usr==
|
||||
==cdrom etc lib media proc sbin sys var==
|
||||
|
||||
==下面, 我们逐个分析这些文件夹的用处==
|
||||
==bin==
|
||||
==系统 shell (终端) 命令存放于此==
|
||||
==core==
|
||||
==home==
|
||||
==除了root用户以外的用户默认主目录, 每个子目录都是一个用户名==
|
||||
==lib64==
|
||||
==mnt==
|
||||
==root==
|
||||
==root用户的主目录==
|
||||
==snap==
|
||||
==tmp==
|
||||
==boot==
|
||||
==dev==
|
||||
==lost+found==
|
||||
==opt==
|
||||
==供本系统所有用户使用软件一般安装在此==
|
||||
==有人也喜欢把软件安装在== **/usr/local/**
|
||||
==run==
|
||||
==srv==
|
||||
==usr==
|
||||
**/usr/** ==目录包含所有的命令、程序库、文档和其它文件。这些文件在正常操作中不会被改变的。这个目录也包含你的Linux发行版本自带的主要的应用程序。==
|
||||
**/usr/local/** ==目录一般安装第三方的软件==
|
||||
**/usr/local/bin** ==放置用户自己安装的小的shell命令,和一些在/usr/local目录下大应用程序的符号连接。==**/usr/local/bin/** ==目录下的命令可以直接在shell里使用==
|
||||
**/usr/share/fonts**==是字体文件夹,可以在这里新建文件夹== **winFonts/**==,把ttf格式的字体放进去==
|
||||
==然后将字体文件拷贝到此文件夹下:==
|
||||
==下面, 我们逐个分析这些文件夹的用处==
|
||||
==bin==
|
||||
==系统 shell (终端) 命令存放于此==
|
||||
==core==
|
||||
==home==
|
||||
==除了root用户以外的用户默认主目录, 每个子目录都是一个用户名==
|
||||
==lib64==
|
||||
==mnt==
|
||||
==root==
|
||||
==root用户的主目录==
|
||||
==snap==
|
||||
==tmp==
|
||||
==boot==
|
||||
==dev==
|
||||
==lost+found==
|
||||
==opt==
|
||||
==供本系统所有用户使用软件一般安装在此==
|
||||
==有人也喜欢把软件安装在== **/usr/local/**
|
||||
==run==
|
||||
==srv==
|
||||
==usr==
|
||||
**/usr/** ==目录包含所有的命令、程序库、文档和其它文件。这些文件在正常操作中不会被改变的。这个目录也包含你的Linux发行版本自带的主要的应用程序。==
|
||||
**/usr/local/** ==目录一般安装第三方的软件==
|
||||
**/usr/local/bin** ==放置用户自己安装的小的shell命令,和一些在/usr/local目录下大应用程序的符号连接。==**/usr/local/bin/** ==目录下的命令可以直接在shell里使用==
|
||||
**/usr/share/fonts**==是字体文件夹,可以在这里新建文件夹== **winFonts/**==,把ttf格式的字体放进去==
|
||||
==然后将字体文件拷贝到此文件夹下:==
|
||||
sudo cp ~/Desktop/font/*.ttf /usr/share/fonts/winFonts/
|
||||
|
||||
- ==1==
|
||||
- ==2==
|
||||
|
||||
==然后,改变权限:==
|
||||
==然后,改变权限:==
|
||||
sudo chmod 644 /usr/share/fonts/winFonts/*.ttf
|
||||
|
||||
- ==1==
|
||||
- ==2==
|
||||
|
||||
==cdrom==
|
||||
==etc==
|
||||
==系统全局配置文件一般在此==
|
||||
==/etc/apt/==
|
||||
==Ubuntu 软件源列表, 也就是 apt-get 命令执行时从哪些地方下载包的依据==
|
||||
==lib==
|
||||
==media==
|
||||
==proc==
|
||||
==sbin==
|
||||
==sys==
|
||||
==cdrom==
|
||||
==etc==
|
||||
==系统全局配置文件一般在此==
|
||||
==/etc/apt/==
|
||||
==Ubuntu 软件源列表, 也就是 apt-get 命令执行时从哪些地方下载包的依据==
|
||||
==lib==
|
||||
==media==
|
||||
==proc==
|
||||
==sbin==
|
||||
==sys==
|
||||
==var==
|
||||
\> 来自 \<[http://blog.csdn.net/caib1109/article/details/51764196](http://blog.csdn.net/caib1109/article/details/51764196)\>
|
||||
> 来自 <[http://blog.csdn.net/caib1109/article/details/51764196](http://blog.csdn.net/caib1109/article/details/51764196)>
|
||||
|
||||
**开始安装**
|
||||
==cd /usr/share/fonts/winFonts/==
|
||||
==sudo mkfontscale (创建雅黑字体的fonts.scale文件,它用来控制字体旋转缩放)==
|
||||
==sudo mkfontdir (创建雅黑字体的fonts.dir文件,它用来控制字体粗斜体产生)==
|
||||
**开始安装**
|
||||
==cd /usr/share/fonts/winFonts/==
|
||||
==sudo mkfontscale (创建雅黑字体的fonts.scale文件,它用来控制字体旋转缩放)==
|
||||
==sudo mkfontdir (创建雅黑字体的fonts.dir文件,它用来控制字体粗斜体产生)==
|
||||
==sudo fc-cache -fv (建立字体缓存信息,也就是让系统认识雅黑)==
|
||||
\> 来自 \<[http://blog.csdn.net/caib1109/article/details/51764196](http://blog.csdn.net/caib1109/article/details/51764196)\>
|
||||
> 来自 <[http://blog.csdn.net/caib1109/article/details/51764196](http://blog.csdn.net/caib1109/article/details/51764196)>
|
||||
@@ -1,175 +1,175 @@
|
||||
**命令历史**
|
||||
以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。
|
||||
**启动vim**
|
||||
在命令行窗口中输入以下命令即可
|
||||
vim 直接启动vim
|
||||
vim filename 打开vim并创建名为filename的文件
|
||||
**文件命令**
|
||||
打开单个文件
|
||||
vim file
|
||||
同时打开多个文件
|
||||
vim file1 file2 file3 ...
|
||||
在vim窗口中打开一个新文件
|
||||
:open file
|
||||
在新窗口中打开文件
|
||||
:split file
|
||||
切换到下一个文件
|
||||
:bn
|
||||
切换到上一个文件
|
||||
:bp
|
||||
查看当前打开的文件列表,当前正在编辑的文件会用[]括起来。
|
||||
:args
|
||||
打开远程文件,比如ftp或者share folder
|
||||
:e [ftp://192.168.10.76/abc.txt](ftp://192.168.10.76/abc.txt)
|
||||
:e [\\qadrive\test\1.txt](file:///\\qadrive\test\1.txt)
|
||||
**vim的模式**
|
||||
正常模式(按Esc或Ctrl+[进入) 左下角显示文件名或为空
|
||||
插入模式(按i键进入) 左下角显示--INSERT--
|
||||
可视模式(不知道如何进入) 左下角显示--VISUAL--
|
||||
**导航命令**
|
||||
% 括号匹配
|
||||
**插入命令**
|
||||
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 重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
|
||||
**替换命令**
|
||||
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 删除前一个字符
|
||||
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! 放弃所有修改,并打开原来文件。
|
||||
**窗口命令**
|
||||
:split或new 打开一个新窗口,光标停在顶层的窗口上
|
||||
:split file或:new file 用新窗口打开文件
|
||||
split打开的窗口都是横向的,使用vsplit可以纵向打开窗口。
|
||||
Ctrl+ww 移动到下一个窗口
|
||||
Ctrl+wj 移动到下方的窗口
|
||||
Ctrl+wk 移动到上方的窗口
|
||||
关闭窗口
|
||||
:close 最后一个窗口不能使用此命令,可以防止意外退出vim。
|
||||
:q 如果是最后一个被关闭的窗口,那么将退出vim。
|
||||
ZZ 保存并退出。
|
||||
关闭所有窗口,只保留当前窗口
|
||||
:only
|
||||
录制宏
|
||||
按q键加任意字母开始录制,再按q键结束录制(这意味着vim中的宏不可嵌套),使用的时候@加宏名,比如qa。。。q录制名为a的宏,@a使用这个宏。
|
||||
**执行shell命令**
|
||||
:!command
|
||||
:!ls 列出当前目录下文件
|
||||
:!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便。
|
||||
:!perl script.pl 执行perl脚本,可以不用退出vim,非常方便。
|
||||
:suspend或Ctrl - Z 挂起vim,回到shell,按fg可以返回vim。
|
||||
**注释命令**
|
||||
perl程序中#开始的行为注释,所以要注释某些行,只需在行首加入#
|
||||
3,5 s/^/#/g 注释第3-5行
|
||||
3,5 s/^#//g 解除3-5行的注释
|
||||
1,$ s/^/#/g 注释整个文档。
|
||||
:%s/^/#/g 注释整个文档,此法更快。
|
||||
**帮助命令**
|
||||
:help or F1 显示整个帮助
|
||||
:help xxx 显示xxx的帮助,比如 :help i, :help CTRL-[(即Ctrl+[的帮助)。
|
||||
:help 'number' Vim选项的帮助用单引号括起
|
||||
:help \<Esc\> 特殊键的帮助用\<\>扩起
|
||||
:help -t Vim启动参数的帮助用-
|
||||
:help i_\<Esc\> 插入模式下Esc的帮助,某个模式下的帮助用模式_主题的模式
|
||||
帮助文件中位于||之间的内容是超链接,可以用Ctrl+]进入链接,Ctrl+o(Ctrl + t)返回
|
||||
**其他非编辑命令**
|
||||
. 重复前一次命令
|
||||
:set ruler? 查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看
|
||||
:scriptnames 查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等。
|
||||
:set list 显示非打印字符,如tab,空格,行尾等。如果tab无法显示,请确定用set lcs=tab:\>-命令设置了.vimrc文件,并确保你的文件中的确有tab,如果开启了expendtab,那么tab将被扩展为空格。
|
||||
Vim教程
|
||||
在Unix系统上
|
||||
$ vimtutor
|
||||
在Windows系统上
|
||||
**命令历史**
|
||||
以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。
|
||||
**启动vim**
|
||||
在命令行窗口中输入以下命令即可
|
||||
vim 直接启动vim
|
||||
vim filename 打开vim并创建名为filename的文件
|
||||
**文件命令**
|
||||
打开单个文件
|
||||
vim file
|
||||
同时打开多个文件
|
||||
vim file1 file2 file3 ...
|
||||
在vim窗口中打开一个新文件
|
||||
:open file
|
||||
在新窗口中打开文件
|
||||
:split file
|
||||
切换到下一个文件
|
||||
:bn
|
||||
切换到上一个文件
|
||||
:bp
|
||||
查看当前打开的文件列表,当前正在编辑的文件会用[]括起来。
|
||||
:args
|
||||
打开远程文件,比如ftp或者share folder
|
||||
:e [ftp://192.168.10.76/abc.txt](ftp://192.168.10.76/abc.txt)
|
||||
:e [\\qadrive\test\1.txt](file:///\\qadrive\test\1.txt)
|
||||
**vim的模式**
|
||||
正常模式(按Esc或Ctrl+[进入) 左下角显示文件名或为空
|
||||
插入模式(按i键进入) 左下角显示--INSERT--
|
||||
可视模式(不知道如何进入) 左下角显示--VISUAL--
|
||||
**导航命令**
|
||||
% 括号匹配
|
||||
**插入命令**
|
||||
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 重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
|
||||
**替换命令**
|
||||
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 删除前一个字符
|
||||
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! 放弃所有修改,并打开原来文件。
|
||||
**窗口命令**
|
||||
:split或new 打开一个新窗口,光标停在顶层的窗口上
|
||||
:split file或:new file 用新窗口打开文件
|
||||
split打开的窗口都是横向的,使用vsplit可以纵向打开窗口。
|
||||
Ctrl+ww 移动到下一个窗口
|
||||
Ctrl+wj 移动到下方的窗口
|
||||
Ctrl+wk 移动到上方的窗口
|
||||
关闭窗口
|
||||
:close 最后一个窗口不能使用此命令,可以防止意外退出vim。
|
||||
:q 如果是最后一个被关闭的窗口,那么将退出vim。
|
||||
ZZ 保存并退出。
|
||||
关闭所有窗口,只保留当前窗口
|
||||
:only
|
||||
录制宏
|
||||
按q键加任意字母开始录制,再按q键结束录制(这意味着vim中的宏不可嵌套),使用的时候@加宏名,比如qa。。。q录制名为a的宏,@a使用这个宏。
|
||||
**执行shell命令**
|
||||
:!command
|
||||
:!ls 列出当前目录下文件
|
||||
:!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便。
|
||||
:!perl script.pl 执行perl脚本,可以不用退出vim,非常方便。
|
||||
:suspend或Ctrl - Z 挂起vim,回到shell,按fg可以返回vim。
|
||||
**注释命令**
|
||||
perl程序中#开始的行为注释,所以要注释某些行,只需在行首加入#
|
||||
3,5 s/^/#/g 注释第3-5行
|
||||
3,5 s/^#//g 解除3-5行的注释
|
||||
1,$ s/^/#/g 注释整个文档。
|
||||
:%s/^/#/g 注释整个文档,此法更快。
|
||||
**帮助命令**
|
||||
:help or F1 显示整个帮助
|
||||
:help xxx 显示xxx的帮助,比如 :help i, :help CTRL-[(即Ctrl+[的帮助)。
|
||||
:help 'number' Vim选项的帮助用单引号括起
|
||||
:help <Esc> 特殊键的帮助用<>扩起
|
||||
:help -t Vim启动参数的帮助用-
|
||||
:help i_<Esc> 插入模式下Esc的帮助,某个模式下的帮助用模式_主题的模式
|
||||
帮助文件中位于||之间的内容是超链接,可以用Ctrl+]进入链接,Ctrl+o(Ctrl + t)返回
|
||||
**其他非编辑命令**
|
||||
. 重复前一次命令
|
||||
:set ruler? 查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看
|
||||
:scriptnames 查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等。
|
||||
:set list 显示非打印字符,如tab,空格,行尾等。如果tab无法显示,请确定用set lcs=tab:>-命令设置了.vimrc文件,并确保你的文件中的确有tab,如果开启了expendtab,那么tab将被扩展为空格。
|
||||
Vim教程
|
||||
在Unix系统上
|
||||
$ vimtutor
|
||||
在Windows系统上
|
||||
:help tutor
|
||||
|
||||
:syntax 列出已经定义的语法项
|
||||
:syntax clear 清除已定义的语法规则
|
||||
:syntax case match 大小写敏感,int和Int将视为不同的语法元素
|
||||
|
||||
:syntax 列出已经定义的语法项
|
||||
:syntax clear 清除已定义的语法规则
|
||||
:syntax case match 大小写敏感,int和Int将视为不同的语法元素
|
||||
:syntax case ignore 大小写无关,int和Int将视为相同的语法元素,并使用同样的配色方案
|
||||
\> 来自 \<[https://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html](https://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html)\>
|
||||
> 来自 <[https://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html](https://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html)>
|
||||
20
Lunix/Ubuntu/ubuntu中管理用户和用户组.md
Executable file
20
Lunix/Ubuntu/ubuntu中管理用户和用户组.md
Executable file
@@ -0,0 +1,20 @@
|
||||
1. 添加一个用户组并指定id为1002
|
||||
sudo groupadd -g 1002 www
|
||||
|
||||
2. 添加一个用户到www组并指定id为1003
|
||||
sudo useradd wyx -g 1002 -u 1003 -m
|
||||
|
||||
3. 修改用户的密码
|
||||
sudo passwd wyx
|
||||
|
||||
4. 删除一个用户
|
||||
sudo userdel wyx
|
||||
|
||||
5. 为该用户添加sudo权限
|
||||
sudo usermod -a -G adm wyx
|
||||
sudo usermod -a -G sudo wyx
|
||||
|
||||
6. 查看所有用户和用户组:
|
||||
cat /etc/passwd
|
||||
cat /etc/group
|
||||
> 来自 <[https://www.cnblogs.com/vincedotnet/p/4017574.html](https://www.cnblogs.com/vincedotnet/p/4017574.html)>
|
||||
@@ -1,7 +1,7 @@
|
||||
netstat –tln //查看服务监听端口
|
||||
netstat //查看进程号
|
||||
ps –aux //查看进程号
|
||||
ps –aux | more //全部查看
|
||||
ps –ef | grep mysql //查看mysql的进程
|
||||
netstat –tln //查看服务监听端口
|
||||
netstat //查看进程号
|
||||
ps –aux //查看进程号
|
||||
ps –aux | more //全部查看
|
||||
ps –ef | grep mysql //查看mysql的进程
|
||||
kill -9 3306 //强制杀掉进程号3306
|
||||
\> 来自 \<[http://blog.sina.com.cn/s/blog_64492fe10100qqk3.html](http://blog.sina.com.cn/s/blog_64492fe10100qqk3.html)\>
|
||||
> 来自 <[http://blog.sina.com.cn/s/blog_64492fe10100qqk3.html](http://blog.sina.com.cn/s/blog_64492fe10100qqk3.html)>
|
||||
@@ -1,9 +1,9 @@
|
||||
==Linux====提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在====Linux====系== ==统上工作离不开使用系统提供的命令。要想真正理解====Linux====系统,就必须从====Linux====命令学起,通过基础的命令学习可以进一步理解====Linux====系统。==
|
||||
==不同====Linux====发行版的命令数量不一样,但====Linux====发行版本最少的命令也有====200====多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。==
|
||||
==◆== ==安装和登录命令:====login====、====shutdown====、====halt====、====reboot====、====install====、====mount====、====umount====、====chsh====、====exit====、====last====;==
|
||||
==◆== ==文件处理命令:====file====、====mkdir====、====grep====、====dd====、====find====、====mv====、====ls====、====diff====、====cat====、====ln====;==
|
||||
==◆== ==系统管理相关命令:====df====、====top====、====free====、====quota====、====at====、====lp====、====adduser====、====groupadd====、====kill====、====crontab====;==
|
||||
==◆== ==网络操作命令:====ifconfig====、====ip====、====ping====、====netstat====、====telnet====、====ftp====、====route====、====rlogin====、====rcp====、====finger====、====mail====、== ==nslookup====;==
|
||||
==◆== ==系统安全相关命令:====passwd====、====su====、====umask====、====chgrp====、====chmod====、====chown====、====chattr====、====sudo ps====、====who====;==
|
||||
==Linux====提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在====Linux====系== ==统上工作离不开使用系统提供的命令。要想真正理解====Linux====系统,就必须从====Linux====命令学起,通过基础的命令学习可以进一步理解====Linux====系统。==
|
||||
==不同====Linux====发行版的命令数量不一样,但====Linux====发行版本最少的命令也有====200====多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。==
|
||||
==◆== ==安装和登录命令:====login====、====shutdown====、====halt====、====reboot====、====install====、====mount====、====umount====、====chsh====、====exit====、====last====;==
|
||||
==◆== ==文件处理命令:====file====、====mkdir====、====grep====、====dd====、====find====、====mv====、====ls====、====diff====、====cat====、====ln====;==
|
||||
==◆== ==系统管理相关命令:====df====、====top====、====free====、====quota====、====at====、====lp====、====adduser====、====groupadd====、====kill====、====crontab====;==
|
||||
==◆== ==网络操作命令:====ifconfig====、====ip====、====ping====、====netstat====、====telnet====、====ftp====、====route====、====rlogin====、====rcp====、====finger====、====mail====、== ==nslookup====;==
|
||||
==◆== ==系统安全相关命令:====passwd====、====su====、====umask====、====chgrp====、====chmod====、====chown====、====chattr====、====sudo ps====、====who====;==
|
||||
==◆== ==其它命令:====tar====、====unzip====、====gunzip====、====unarj====、====mtools====、====man====、====unendcode====、====uudecode====。==
|
||||
\> 来自 \<[https://www.cnblogs.com/tangbinblog/archive/2012/10/17/2727942.html](https://www.cnblogs.com/tangbinblog/archive/2012/10/17/2727942.html)\>
|
||||
> 来自 <[https://www.cnblogs.com/tangbinblog/archive/2012/10/17/2727942.html](https://www.cnblogs.com/tangbinblog/archive/2012/10/17/2727942.html)>
|
||||
@@ -14,169 +14,169 @@
|
||||
|
||||
1. ==cp 文件 最终路径==
|
||||
2. ==cp -r 文件夹 最终路径 (这样可以把一个文件夹的所有文件全部移到最终路径)==
|
||||
\>
|
||||
**apt-get:**
|
||||
==debian系系统的软件包管理程序(其图形化前端就是大名鼎鼎的新立得了),会自动帮你搞定依赖关系==
|
||||
==最常用参数:==
|
||||
==update —-与你的软件源(在/etc/apt/sources.list中列出)更新软件包列表,换源后需要执行==
|
||||
==upgrade —-根据update得到的源软件库与本地已经安装的对比,(如果需要升级就)全部升级==
|
||||
==install —-安装软件包(可以使用tab补全软件包的名字,比较方便)==
|
||||
==remove —-卸载软件包==
|
||||
==purge —-卸载软件包,同时删除该软件的配置文件==
|
||||
==source —-从源里下载软件包的源码到当前目录(执行此命令的目录)并解压(除非指定–download-only参数)==
|
||||
==该地址由/etc/apt/sources.list中的 deb-src 行指定==
|
||||
==check —-用来(自动)修复(已装)软件包之间的依赖关系==
|
||||
==clean —-清除/var/cache/apt/archives/包括其子目录partial/下的所有软件包缓存==
|
||||
==autoclean —-比clean常用,我的理解是删除低版本的缓存而保留高版本的(或者包括非当前源里的软件包?)==
|
||||
**aptitude:**
|
||||
==此为PT同学补充,他的说法是aptitude比apt-get少个横线,tab补全比较容易(=.=)~大概神牛都比较懒吧==
|
||||
==不得不提下蛋蛋童鞋以前说过的ubuntu彩蛋:) \<仅限于UBUNTU 8.04\>==
|
||||
==man apt —-最后会看到 “本apt有着超级牛力” or “this APT has a super-cow power”==
|
||||
==man aptitude —-会看到 “这个aptitude没有超级牛力”==
|
||||
==看看aptitude的参数,你就会明白为什么aptitude会标称”高级软件包管理程序”了==
|
||||
==最常用参数:==
|
||||
==search —-在(你的源的)所有软件包列表中搜索该软件,search的表达式可以很复杂,具体看man==
|
||||
==其余常用参数同apt-get==
|
||||
**cat:**
|
||||
==把(一个或多个)文件内容(连接)显示到标准输出==
|
||||
==当文本文件很小,而且你只是想看下,并不打算用gedit或者vim之类编辑器编辑的时候,可以cat一下,我是用来配合grep使用==
|
||||
**cd:**
|
||||
==切换当前工作目录==
|
||||
==不同于其他命令,这是一个shell内置命令,所以没有手册页可看…够基础,所以才会出现在本篇文章中(=.=)郁闷==
|
||||
==最常用参数:==
|
||||
==. —-切换到当前目录(貌似没有什么意义)(.这个目录可以通过ls -a看到)==
|
||||
==.. —-切换到上层目录==
|
||||
==~ —-回到家目录(/home/你的登录名/)==
|
||||
**chmod**==:==
|
||||
==改变文件的权限位==
|
||||
==linux文件系统的权限位有两种表示方法,要是详细说下,非得累死老鼠不可=.=,所以只说8进制数表示:)==
|
||||
==简要介绍下:ls -l可以显示出文件的权限,比如(-rwxr-xr–),代表了三种用户的权限==
|
||||
==第一个rwx,代表文件所有者的权限,即(读,写,执行),用二进制表示为111,代表八进制中的4+2+1=7==
|
||||
==第二个r-x,代表文件所有者同一用户组其他用户的权限,即(读, ,执行),用二进制表示为101,代表八进制中的5=4+0+1==
|
||||
==第三个r–,代表其他用户的权限,即(读, , ),二进制表示为100,代表八进制的4=4+0+0==
|
||||
==所以这个文件的权限位为754==
|
||||
==这也就是chmod的用法,例如chmod 751 myfile #将该文件权限设定为rwxr-x–x==
|
||||
==最常用参数:==
|
||||
==-v —-列出当前正在执行的步骤==
|
||||
==-R —-递归式,即改变非空目录下的一切为指定权限==
|
||||
**cp**==:==
|
||||
==拷贝文件和目录==
|
||||
==最常用参数:==
|
||||
==-b —-为每个已经存在的目的文件作个备份==
|
||||
==-d —-遇到软链接时不拷贝软链接所指向的文件;拷贝时保留links属性(链接数)==
|
||||
==-p —-保留文件的访问权限,所有者,和时间戳==
|
||||
==-R和-r —-递归式拷贝(cp过程遇到非空目录才有效),即拷贝目录,子目录,子目录的子目录…..==
|
||||
==-a —-作用同-dpR==
|
||||
==-s —-并不真的做拷贝,而只是为每个文件作软链接(符号链接)==
|
||||
==-u —-同下面 mv 的-u参数==
|
||||
**head, tail**
|
||||
==就像这两个名字,一个显示文件头部,一个显示尾部==
|
||||
==最常用参数:==
|
||||
==-n —-指定输出的(头部或尾部)行数, 当没有此参数时,默认显示10行==
|
||||
**ifconfig**==:==
|
||||
==配置网卡==
|
||||
==最常用参数:==
|
||||
==没有参数 —-列出当前活动网卡的状态==
|
||||
==-a —-列出所有网卡的状态==
|
||||
==interface —-指定网卡名称比如eth0==
|
||||
==up —-唤醒该网卡==
|
||||
==down —-关闭该网卡==
|
||||
==arp,mtu,netmask addr,…等等很多参数 =.===
|
||||
**ln**==:==
|
||||
==为文件建立链接==
|
||||
==linux的链接分为两种:硬链接和软链接,ln默认建立硬链接(hard link),两种的区别请自己搜索:)==
|
||||
==最常用参数:==
|
||||
==-s —-建立软链接(符号链接,可以理解为win下的快捷方式)==
|
||||
==-f —-如果要建立的链接名已经存在,则删除之==
|
||||
**ls**==:==
|
||||
==显示目录内容==
|
||||
==最常用参数:==
|
||||
==-a —-显示指定目录所有文件,包括文件名以 . 开头的文件==
|
||||
==-l —-显示文件详细信息(包括文件类型,权限,修改时间,访问时间,大小,文件名…)==
|
||||
==-h —-将文件大小以方便阅读的形式表示出来,配合 -l 参数使用,常有奇效==
|
||||
**man**==:==
|
||||
==阅读参考手册of~==
|
||||
==题外话:HX说这是linux最最难学的命令,因为man你学好了,就没有什么命令能难倒你了,=.=无敌了==
|
||||
==man可以查的不仅仅是命令额(当然,因为man是无敌的嘛/ch)==
|
||||
==最常用参数:==
|
||||
==man 阿拉伯数字==
|
||||
==阿拉伯数字1: 可执行程序(一般为用户安装的程序,如果提供了manpages的话)和shell命令==
|
||||
==阿拉伯数字2: 系统调用(例如 open调用,socket调用,chmod调用 等等等等),先装manpages-dev先==
|
||||
==阿拉伯数字3: 库函数调用(例如 man 3 printf),先装manpages-dev先==
|
||||
==…….==
|
||||
==当你执行man ls 时, 和 man 1 ls结果是一样的,因为ls在man手册中只有一个入口==
|
||||
==当你想看chmod调用的手册页时,就要特别指定 man 2 chmod了~~因为chmod不止有一个入口==
|
||||
==在man的时候,可以通过j,k上下移动(和vi中类似),可以通过/查询,通过n,N查找下个,上个匹配(和vi类似)==
|
||||
==q退出(也和vi类似….)==
|
||||
==比较有意思的一点:==
|
||||
==由于man 本身是个命令,所以,连man都是可以man的 =.===
|
||||
**mkdir**==:==
|
||||
==创建一个目录==
|
||||
==最常用参数:==
|
||||
==-p —-如果给出的路径中父目录不存在,则同时创建父目录==
|
||||
**mount**==:==
|
||||
==挂载文件系统(可理解为挂载一个分区)==
|
||||
==最常用参数:==
|
||||
==-t —-指定文件系统类型,比如iso9660(挂载iso镜像为光盘,相当于虚拟光驱),ntfs,ext3,rfs等等==
|
||||
==-l —-列出所有已经挂载的文件系统,支持卷标==
|
||||
==-a —-挂载fstab中记录的所有分区==
|
||||
==-n —-挂载的时候不写入/etc/mtab==
|
||||
==-o —-相当常用的一个参数,指定挂载文件系统的”选项”,比如noatime,用来挂载BT专用分区很合适==
|
||||
**mv**==:==
|
||||
==移动或者更名文件,取决于目的目录是否为当前目录==
|
||||
==最常用参数:==
|
||||
==-b —-为每个已经存在的目的文件做个备份(防止覆盖)==
|
||||
==-f —-不提示是否覆盖已经存在的目的文件==
|
||||
==-i —-与-f参数相反==
|
||||
==-u —-仅当源文件比目的文件更新或者目的文件不存在时候才移动==
|
||||
==-v —-显示移动文件的进度(个人总是推荐使用此参数,明白你在做什么)==
|
||||
**ps,top:**
|
||||
==列出当前命令的执行状态,ps为静态,top为动态(top时’q’退出)==
|
||||
==ps:这个命令本人更常用些,推荐给你看看=.===
|
||||
==最常用参数(ps多用参数集合,而不是单个参数,并且配合grep使用)==
|
||||
==-ef —-以标准语法列出当前所有进程状态,例如ps -ef | grep eva #列出eva的进程状态==
|
||||
==aux —-以BSD语法列出………………………………..==
|
||||
==-ejH —-列出进程树==
|
||||
==-eLf —-同时列出线程状态==
|
||||
**rm, rmdir:**
|
||||
==rm:删除文件或目录,rmdir:删除一个空目录(此命令个人认为没啥用,可以用rm -r替代)==
|
||||
==rm最常用参数:==
|
||||
==-f —-不提示不存在的文件,直接跳过==
|
||||
==-i —-每个删除动作都提示 (=.= 删除多的话岂不是烦死)==
|
||||
==-I —-删除多个文件(多于3个时)或者递归式删除(对于非空目录)提示一次==
|
||||
==-r和-R —-递归式删除该目录下的一切东东==
|
||||
==-v —-显示每个文件的删除动作(个人总是推荐使用此参数,明白你在做什么)==
|
||||
**sudo,su:**
|
||||
==这大概是装好系统之后第一个要用的命令吧?==
|
||||
==sudo我们主要用来临时提升权限,主要用以管理员(超级用户)的权限来运行命令,当需要修改当前登录用户力所不能及的文件/目录==
|
||||
==时需要用sudo,或者su -c,当然sudo和su的作用范围不仅仅如此==
|
||||
==可以使用visudo来编辑/etc/sudoers文件来修改sudo更详细的动作(比如记住密码的时间戳长度),请谨慎修改!==
|
||||
**sh:**
|
||||
==在终端解释执行==
|
||||
==类似于’./’的形式,但PT给了不同点: ‘./’仅仅对当前目录下有执行权限的程序才有效,’sh’则不管这套==
|
||||
==想想也是哈, ‘./’仅仅是给出了一个文件的路径(在当前目录下)而已, 但这个文件能不能执行就不好说了==
|
||||
==所以用sh总是正确的==
|
||||
**shutdown:**
|
||||
==关闭系统,如果停留在TTY,请改用halt, poweroff等命令==
|
||||
==常用参数:==
|
||||
==+m —-指定关机延迟的分钟==
|
||||
==-c —-取消一个等待关机的请求(关掉运行此命令的终端也可:))==
|
||||
==now —-立即关机==
|
||||
==hh:mm —-手动指定时间(以24小时计)==
|
||||
**tar:**
|
||||
==打包/解包==
|
||||
==这个tar不多说了吧..到处都是tar.gz,tar.bz2的东东==
|
||||
==和ps命令一样,tar一般不用单个参数,而是多个参数的组合,记住参数x是解压(extract),c是创建包(creat)即可==
|
||||
==最常用参数:==
|
||||
==-xvf —-详细列出解包的步骤==
|
||||
==-cvf —-详细列出打包的步骤==
|
||||
==-j —-用来说明这是个tar.bz2包,例如tar -xjvf myfile.tar.bz2==
|
||||
==-t —-列出包中的文件列表==
|
||||
==—–打包时常追加的参数:==
|
||||
==-r —-追加到压缩包中==
|
||||
==-u —-只把比包中更新的文件追加进去==
|
||||
==-h —-不把符号链接添加到包中,而是添加此符号链接指向的文件==
|
||||
==附加说明:tar是个太强大的东东,常用的操作也就是打包解包,高级功能还是参阅man =.===
|
||||
**touch:**
|
||||
>
|
||||
**apt-get:**
|
||||
==debian系系统的软件包管理程序(其图形化前端就是大名鼎鼎的新立得了),会自动帮你搞定依赖关系==
|
||||
==最常用参数:==
|
||||
==update —-与你的软件源(在/etc/apt/sources.list中列出)更新软件包列表,换源后需要执行==
|
||||
==upgrade —-根据update得到的源软件库与本地已经安装的对比,(如果需要升级就)全部升级==
|
||||
==install —-安装软件包(可以使用tab补全软件包的名字,比较方便)==
|
||||
==remove —-卸载软件包==
|
||||
==purge —-卸载软件包,同时删除该软件的配置文件==
|
||||
==source —-从源里下载软件包的源码到当前目录(执行此命令的目录)并解压(除非指定–download-only参数)==
|
||||
==该地址由/etc/apt/sources.list中的 deb-src 行指定==
|
||||
==check —-用来(自动)修复(已装)软件包之间的依赖关系==
|
||||
==clean —-清除/var/cache/apt/archives/包括其子目录partial/下的所有软件包缓存==
|
||||
==autoclean —-比clean常用,我的理解是删除低版本的缓存而保留高版本的(或者包括非当前源里的软件包?)==
|
||||
**aptitude:**
|
||||
==此为PT同学补充,他的说法是aptitude比apt-get少个横线,tab补全比较容易(=.=)~大概神牛都比较懒吧==
|
||||
==不得不提下蛋蛋童鞋以前说过的ubuntu彩蛋:) <仅限于UBUNTU 8.04>==
|
||||
==man apt —-最后会看到 “本apt有着超级牛力” or “this APT has a super-cow power”==
|
||||
==man aptitude —-会看到 “这个aptitude没有超级牛力”==
|
||||
==看看aptitude的参数,你就会明白为什么aptitude会标称”高级软件包管理程序”了==
|
||||
==最常用参数:==
|
||||
==search —-在(你的源的)所有软件包列表中搜索该软件,search的表达式可以很复杂,具体看man==
|
||||
==其余常用参数同apt-get==
|
||||
**cat:**
|
||||
==把(一个或多个)文件内容(连接)显示到标准输出==
|
||||
==当文本文件很小,而且你只是想看下,并不打算用gedit或者vim之类编辑器编辑的时候,可以cat一下,我是用来配合grep使用==
|
||||
**cd:**
|
||||
==切换当前工作目录==
|
||||
==不同于其他命令,这是一个shell内置命令,所以没有手册页可看…够基础,所以才会出现在本篇文章中(=.=)郁闷==
|
||||
==最常用参数:==
|
||||
==. —-切换到当前目录(貌似没有什么意义)(.这个目录可以通过ls -a看到)==
|
||||
==.. —-切换到上层目录==
|
||||
==~ —-回到家目录(/home/你的登录名/)==
|
||||
**chmod**==:==
|
||||
==改变文件的权限位==
|
||||
==linux文件系统的权限位有两种表示方法,要是详细说下,非得累死老鼠不可=.=,所以只说8进制数表示:)==
|
||||
==简要介绍下:ls -l可以显示出文件的权限,比如(-rwxr-xr–),代表了三种用户的权限==
|
||||
==第一个rwx,代表文件所有者的权限,即(读,写,执行),用二进制表示为111,代表八进制中的4+2+1=7==
|
||||
==第二个r-x,代表文件所有者同一用户组其他用户的权限,即(读, ,执行),用二进制表示为101,代表八进制中的5=4+0+1==
|
||||
==第三个r–,代表其他用户的权限,即(读, , ),二进制表示为100,代表八进制的4=4+0+0==
|
||||
==所以这个文件的权限位为754==
|
||||
==这也就是chmod的用法,例如chmod 751 myfile #将该文件权限设定为rwxr-x–x==
|
||||
==最常用参数:==
|
||||
==-v —-列出当前正在执行的步骤==
|
||||
==-R —-递归式,即改变非空目录下的一切为指定权限==
|
||||
**cp**==:==
|
||||
==拷贝文件和目录==
|
||||
==最常用参数:==
|
||||
==-b —-为每个已经存在的目的文件作个备份==
|
||||
==-d —-遇到软链接时不拷贝软链接所指向的文件;拷贝时保留links属性(链接数)==
|
||||
==-p —-保留文件的访问权限,所有者,和时间戳==
|
||||
==-R和-r —-递归式拷贝(cp过程遇到非空目录才有效),即拷贝目录,子目录,子目录的子目录…..==
|
||||
==-a —-作用同-dpR==
|
||||
==-s —-并不真的做拷贝,而只是为每个文件作软链接(符号链接)==
|
||||
==-u —-同下面 mv 的-u参数==
|
||||
**head, tail**
|
||||
==就像这两个名字,一个显示文件头部,一个显示尾部==
|
||||
==最常用参数:==
|
||||
==-n —-指定输出的(头部或尾部)行数, 当没有此参数时,默认显示10行==
|
||||
**ifconfig**==:==
|
||||
==配置网卡==
|
||||
==最常用参数:==
|
||||
==没有参数 —-列出当前活动网卡的状态==
|
||||
==-a —-列出所有网卡的状态==
|
||||
==interface —-指定网卡名称比如eth0==
|
||||
==up —-唤醒该网卡==
|
||||
==down —-关闭该网卡==
|
||||
==arp,mtu,netmask addr,…等等很多参数 =.===
|
||||
**ln**==:==
|
||||
==为文件建立链接==
|
||||
==linux的链接分为两种:硬链接和软链接,ln默认建立硬链接(hard link),两种的区别请自己搜索:)==
|
||||
==最常用参数:==
|
||||
==-s —-建立软链接(符号链接,可以理解为win下的快捷方式)==
|
||||
==-f —-如果要建立的链接名已经存在,则删除之==
|
||||
**ls**==:==
|
||||
==显示目录内容==
|
||||
==最常用参数:==
|
||||
==-a —-显示指定目录所有文件,包括文件名以 . 开头的文件==
|
||||
==-l —-显示文件详细信息(包括文件类型,权限,修改时间,访问时间,大小,文件名…)==
|
||||
==-h —-将文件大小以方便阅读的形式表示出来,配合 -l 参数使用,常有奇效==
|
||||
**man**==:==
|
||||
==阅读参考手册of~==
|
||||
==题外话:HX说这是linux最最难学的命令,因为man你学好了,就没有什么命令能难倒你了,=.=无敌了==
|
||||
==man可以查的不仅仅是命令额(当然,因为man是无敌的嘛/ch)==
|
||||
==最常用参数:==
|
||||
==man 阿拉伯数字==
|
||||
==阿拉伯数字1: 可执行程序(一般为用户安装的程序,如果提供了manpages的话)和shell命令==
|
||||
==阿拉伯数字2: 系统调用(例如 open调用,socket调用,chmod调用 等等等等),先装manpages-dev先==
|
||||
==阿拉伯数字3: 库函数调用(例如 man 3 printf),先装manpages-dev先==
|
||||
==…….==
|
||||
==当你执行man ls 时, 和 man 1 ls结果是一样的,因为ls在man手册中只有一个入口==
|
||||
==当你想看chmod调用的手册页时,就要特别指定 man 2 chmod了~~因为chmod不止有一个入口==
|
||||
==在man的时候,可以通过j,k上下移动(和vi中类似),可以通过/查询,通过n,N查找下个,上个匹配(和vi类似)==
|
||||
==q退出(也和vi类似….)==
|
||||
==比较有意思的一点:==
|
||||
==由于man 本身是个命令,所以,连man都是可以man的 =.===
|
||||
**mkdir**==:==
|
||||
==创建一个目录==
|
||||
==最常用参数:==
|
||||
==-p —-如果给出的路径中父目录不存在,则同时创建父目录==
|
||||
**mount**==:==
|
||||
==挂载文件系统(可理解为挂载一个分区)==
|
||||
==最常用参数:==
|
||||
==-t —-指定文件系统类型,比如iso9660(挂载iso镜像为光盘,相当于虚拟光驱),ntfs,ext3,rfs等等==
|
||||
==-l —-列出所有已经挂载的文件系统,支持卷标==
|
||||
==-a —-挂载fstab中记录的所有分区==
|
||||
==-n —-挂载的时候不写入/etc/mtab==
|
||||
==-o —-相当常用的一个参数,指定挂载文件系统的”选项”,比如noatime,用来挂载BT专用分区很合适==
|
||||
**mv**==:==
|
||||
==移动或者更名文件,取决于目的目录是否为当前目录==
|
||||
==最常用参数:==
|
||||
==-b —-为每个已经存在的目的文件做个备份(防止覆盖)==
|
||||
==-f —-不提示是否覆盖已经存在的目的文件==
|
||||
==-i —-与-f参数相反==
|
||||
==-u —-仅当源文件比目的文件更新或者目的文件不存在时候才移动==
|
||||
==-v —-显示移动文件的进度(个人总是推荐使用此参数,明白你在做什么)==
|
||||
**ps,top:**
|
||||
==列出当前命令的执行状态,ps为静态,top为动态(top时’q’退出)==
|
||||
==ps:这个命令本人更常用些,推荐给你看看=.===
|
||||
==最常用参数(ps多用参数集合,而不是单个参数,并且配合grep使用)==
|
||||
==-ef —-以标准语法列出当前所有进程状态,例如ps -ef | grep eva #列出eva的进程状态==
|
||||
==aux —-以BSD语法列出………………………………..==
|
||||
==-ejH —-列出进程树==
|
||||
==-eLf —-同时列出线程状态==
|
||||
**rm, rmdir:**
|
||||
==rm:删除文件或目录,rmdir:删除一个空目录(此命令个人认为没啥用,可以用rm -r替代)==
|
||||
==rm最常用参数:==
|
||||
==-f —-不提示不存在的文件,直接跳过==
|
||||
==-i —-每个删除动作都提示 (=.= 删除多的话岂不是烦死)==
|
||||
==-I —-删除多个文件(多于3个时)或者递归式删除(对于非空目录)提示一次==
|
||||
==-r和-R —-递归式删除该目录下的一切东东==
|
||||
==-v —-显示每个文件的删除动作(个人总是推荐使用此参数,明白你在做什么)==
|
||||
**sudo,su:**
|
||||
==这大概是装好系统之后第一个要用的命令吧?==
|
||||
==sudo我们主要用来临时提升权限,主要用以管理员(超级用户)的权限来运行命令,当需要修改当前登录用户力所不能及的文件/目录==
|
||||
==时需要用sudo,或者su -c,当然sudo和su的作用范围不仅仅如此==
|
||||
==可以使用visudo来编辑/etc/sudoers文件来修改sudo更详细的动作(比如记住密码的时间戳长度),请谨慎修改!==
|
||||
**sh:**
|
||||
==在终端解释执行==
|
||||
==类似于’./’的形式,但PT给了不同点: ‘./’仅仅对当前目录下有执行权限的程序才有效,’sh’则不管这套==
|
||||
==想想也是哈, ‘./’仅仅是给出了一个文件的路径(在当前目录下)而已, 但这个文件能不能执行就不好说了==
|
||||
==所以用sh总是正确的==
|
||||
**shutdown:**
|
||||
==关闭系统,如果停留在TTY,请改用halt, poweroff等命令==
|
||||
==常用参数:==
|
||||
==+m —-指定关机延迟的分钟==
|
||||
==-c —-取消一个等待关机的请求(关掉运行此命令的终端也可:))==
|
||||
==now —-立即关机==
|
||||
==hh:mm —-手动指定时间(以24小时计)==
|
||||
**tar:**
|
||||
==打包/解包==
|
||||
==这个tar不多说了吧..到处都是tar.gz,tar.bz2的东东==
|
||||
==和ps命令一样,tar一般不用单个参数,而是多个参数的组合,记住参数x是解压(extract),c是创建包(creat)即可==
|
||||
==最常用参数:==
|
||||
==-xvf —-详细列出解包的步骤==
|
||||
==-cvf —-详细列出打包的步骤==
|
||||
==-j —-用来说明这是个tar.bz2包,例如tar -xjvf myfile.tar.bz2==
|
||||
==-t —-列出包中的文件列表==
|
||||
==—–打包时常追加的参数:==
|
||||
==-r —-追加到压缩包中==
|
||||
==-u —-只把比包中更新的文件追加进去==
|
||||
==-h —-不把符号链接添加到包中,而是添加此符号链接指向的文件==
|
||||
==附加说明:tar是个太强大的东东,常用的操作也就是打包解包,高级功能还是参阅man =.===
|
||||
**touch:**
|
||||
==改变文件时间戳,默认包括修改时间和创建时间,默认修改为当前时间,默认如果文件不存在就新建(=.=是不是很罗嗦)==
|
||||
\> 来自 \<[http://www.ipc.me/ubuntu-useful-commands-collection-for-newbie.html](http://www.ipc.me/ubuntu-useful-commands-collection-for-newbie.html)\>
|
||||
> 来自 <[http://www.ipc.me/ubuntu-useful-commands-collection-for-newbie.html](http://www.ipc.me/ubuntu-useful-commands-collection-for-newbie.html)>
|
||||
@@ -1,401 +1,401 @@
|
||||
==最近在项目中用到了Linux,然后自己只会那些简单的,发现头用的溜溜的,所以查了一下常用的命令,多查,多用。==
|
||||
==系统信息==
|
||||
==arch 显示机器的处理器==**架构**==(1)==
|
||||
==uname -m 显示机器的处理器架构(2)==
|
||||
==uname -r 显示正在使用的内核版本==
|
||||
==dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)==
|
||||
==hdparm -i /dev/hda 罗列一个磁盘的架构特性==
|
||||
==hdparm -tT /dev/sda 在磁盘上执行测试性读取操作==
|
||||
==cat /proc/cpuinfo 显示CPU info的信息==
|
||||
==cat /proc/interrupts 显示中断==
|
||||
==cat /proc/meminfo 校验内存使用==
|
||||
==cat /proc/swaps 显示哪些swap被使用==
|
||||
==cat /proc/version 显示内核的版本==
|
||||
==cat /proc/net/dev 显示网络适配器及统计==
|
||||
==cat /proc/mounts 显示已加载的文件系统==
|
||||
==lspci -tv 罗列 PCI 设备==
|
||||
==lsusb -tv 显示 USB 设备==
|
||||
==date 显示系统日期==
|
||||
==cal 2007 显示2007年的日历表==
|
||||
==date 041217002007.00 设置日期和时间 - 月日时分年.秒==
|
||||
==clock -w 将时间修改保存到 BIOS==
|
||||
|
||||
==关机 (系统的关机、重启以及登出 )==
|
||||
==shutdown -h now 关闭系统(1)==
|
||||
==init 0 关闭系统(2)==
|
||||
==telinit 0 关闭系统(3)==
|
||||
==shutdown -h hours:minutes & 按预定时间关闭系统==
|
||||
==shutdown -c 取消按预定时间关闭系统==
|
||||
==shutdown -r now 重启(1)==
|
||||
==reboot 重启(2)==
|
||||
==logout 注销==
|
||||
|
||||
==文件和目录==
|
||||
==cd /home 进入 '/ home' 目录'==
|
||||
==cd .. 返回上一级目录==
|
||||
==cd ../.. 返回上两级目录==
|
||||
==cd 进入个人的主目录==
|
||||
==cd ~user1 进入个人的主目录==
|
||||
==cd - 返回上次所在的目录==
|
||||
==pwd 显示工作路径==
|
||||
==ls 查看目录中的文件==
|
||||
==ls -F 查看目录中的文件==
|
||||
==ls -l 显示文件和目录的详细资料==
|
||||
==ls -a 显示隐藏文件==
|
||||
==ls *[0-9]* 显示包含数字的文件名和目录名==
|
||||
==tree 显示文件和目录由根目录开始的树形结构(1)==
|
||||
==lstree 显示文件和目录由根目录开始的树形结构(2)==
|
||||
==mkdir dir1 创建一个叫做 'dir1' 的目录'==
|
||||
==mkdir dir1 dir2 同时创建两个目录==
|
||||
==mkdir -p /tmp/dir1/dir2 创建一个目录树==
|
||||
==rm -f file1 删除一个叫做 'file1' 的文件'==
|
||||
==rmdir dir1 删除一个叫做 'dir1' 的目录'==
|
||||
==rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容==
|
||||
==rm -rf dir1 dir2 同时删除两个目录及它们的内容==
|
||||
==mv dir1 new_dir 重命名/移动 一个目录==
|
||||
==cp file1 file2 复制一个文件==
|
||||
==cp dir/* . 复制一个目录下的所有文件到当前工作目录==
|
||||
==cp -a /tmp/dir1 . 复制一个目录到当前工作目录==
|
||||
==cp -a dir1 dir2 复制一个目录==
|
||||
==ln -s file1 lnk1 创建一个指向文件或目录的软链接==
|
||||
==ln file1 lnk1 创建一个指向文件或目录的物理链接==
|
||||
==touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm)==
|
||||
==file file1 outputs the mime type of the file as text==
|
||||
==iconv -l 列出已知的编码==
|
||||
==iconv -f fromEncoding -t toEncoding inputFile \> outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding.==
|
||||
==find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick)==
|
||||
|
||||
==文件搜索==
|
||||
==find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录==
|
||||
==find / -user user1 搜索属于用户 'user1' 的文件和目录==
|
||||
==find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件==
|
||||
==find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件==
|
||||
==find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件==
|
||||
==find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限==
|
||||
==find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备==
|
||||
==locate \*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令==
|
||||
==whereis halt 显示一个二进制文件、源码或man的位置==
|
||||
==which halt 显示一个二进制文件或可执行文件的完整路径==
|
||||
|
||||
==挂载一个文件系统==
|
||||
==mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在==
|
||||
==umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出==
|
||||
==fuser -km /mnt/hda2 当设备繁忙时强制卸载==
|
||||
==umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用==
|
||||
==mount /dev/fd0 /mnt/floppy 挂载一个软盘==
|
||||
==mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom==
|
||||
==mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom==
|
||||
==mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom==
|
||||
==mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件==
|
||||
==mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统==
|
||||
==mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备==
|
||||
==mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享==
|
||||
|
||||
==磁盘空间==
|
||||
==df -h 显示已经挂载的分区列表==
|
||||
==ls -lSr |more 以尺寸大小排列文件和目录==
|
||||
==du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间'==
|
||||
==du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小==
|
||||
==rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统)==
|
||||
==dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统)==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==用户和群组==
|
||||
==groupadd group_name 创建一个新用户组==
|
||||
==groupdel group_name 删除一个用户组==
|
||||
==groupmod -n new_group_name old_group_name 重命名一个用户组==
|
||||
==useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 "admin" 用户组的用户==
|
||||
==useradd user1 创建一个新用户==
|
||||
==userdel -r user1 删除一个用户 ( '-r' 排除主目录)==
|
||||
==usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性==
|
||||
==passwd 修改口令==
|
||||
==passwd user1 修改一个用户的口令 (只允许root执行)==
|
||||
==chage -E 2005-12-31 user1 设置用户口令的失效期限==
|
||||
==pwck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户==
|
||||
==grpck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组==
|
||||
==newgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==文件的权限 - 使用 "+" 设置权限,使用 "-" 用于取消==
|
||||
==ls -lh 显示权限==
|
||||
==ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示==
|
||||
==chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限==
|
||||
==chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限==
|
||||
==chown user1 file1 改变一个文件的所有人属性==
|
||||
==chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性==
|
||||
==chgrp group1 file1 改变文件的群组==
|
||||
==chown user1:group1 file1 改变一个文件的所有人和群组属性==
|
||||
==find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件==
|
||||
==chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限==
|
||||
==chmod u-s /bin/file1 禁用一个二进制文件的 SUID位==
|
||||
==chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的==
|
||||
==chmod g-s /home/public 禁用一个目录的 SGID 位==
|
||||
==chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件==
|
||||
==chmod o-t /home/public 禁用一个目录的 STIKY 位==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==文件的特殊属性 - 使用 "+" 设置权限,使用 "-" 用于取消==
|
||||
==chattr +a file1 只允许以追加方式读写文件==
|
||||
==chattr +c file1 允许这个文件能被内核自动压缩/解压==
|
||||
==chattr +d file1 在进行文件系统备份时,dump程序将忽略这个文件==
|
||||
==chattr +i file1 设置成不可变的文件,不能被删除、修改、重命名或者链接==
|
||||
==chattr +s file1 允许一个文件被安全地删除==
|
||||
==chattr +S file1 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘==
|
||||
==chattr +u file1 若文件被删除,系统会允许你在以后恢复这个被删除的文件==
|
||||
==lsattr 显示特殊的属性==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==打包和压缩文件==
|
||||
==bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件==
|
||||
==bzip2 file1 压缩一个叫做 'file1' 的文件==
|
||||
==gunzip file1.gz 解压一个叫做 'file1.gz'的文件==
|
||||
==gzip file1 压缩一个叫做 'file1'的文件==
|
||||
==gzip -9 file1 最大程度压缩==
|
||||
==rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包==
|
||||
==rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1'==
|
||||
==rar x file1.rar 解压rar包==
|
||||
==unrar x file1.rar 解压rar包==
|
||||
==tar -cvf archive.tar file1 创建一个非压缩的 tarball==
|
||||
==tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件==
|
||||
==tar -tf archive.tar 显示一个包中的内容==
|
||||
==tar -xvf archive.tar 释放一个包==
|
||||
==tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下==
|
||||
==tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包==
|
||||
==tar -xvfj archive.tar.bz2 解压一个bzip2格式的压缩包==
|
||||
==tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包==
|
||||
==tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包==
|
||||
==zip file1.zip file1 创建一个zip格式的压缩包==
|
||||
==zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包==
|
||||
==unzip file1.zip 解压一个zip格式压缩包==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==RPM 包 - (Fedora, Redhat及类似系统)==
|
||||
==rpm -ivh package.rpm 安装一个rpm包==
|
||||
==rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告==
|
||||
==rpm -U package.rpm 更新一个rpm包但不改变其配置文件==
|
||||
==rpm -F package.rpm 更新一个确定已经安装的rpm包==
|
||||
==rpm -e package_name.rpm 删除一个rpm包==
|
||||
==rpm -qa 显示系统中所有已经安装的rpm包==
|
||||
==rpm -qa | grep httpd 显示所有名称中包含 "httpd" 字样的rpm包==
|
||||
==rpm -qi package_name 获取一个已安装包的特殊信息==
|
||||
==rpm -qg "System Environment/Daemons" 显示一个组件的rpm包==
|
||||
==rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表==
|
||||
==rpm -qc package_name 显示一个已经安装的rpm包提供的配置文件列表==
|
||||
==rpm -q package_name --whatrequires 显示与一个rpm包存在依赖关系的列表==
|
||||
==rpm -q package_name --whatprovides 显示一个rpm包所占的体积==
|
||||
==rpm -q package_name --scripts 显示在安装/删除期间所执行的脚本l==
|
||||
==rpm -q package_name --changelog 显示一个rpm包的修改历史==
|
||||
==rpm -qf /etc/httpd/conf/httpd.conf 确认所给的文件由哪个rpm包所提供==
|
||||
==rpm -qp package.rpm -l 显示由一个尚未安装的rpm包提供的文件列表==
|
||||
==rpm --import /media/cdrom/RPM-GPG-KEY 导入公钥数字证书==
|
||||
==rpm --checksig package.rpm 确认一个rpm包的完整性==
|
||||
==rpm -qa gpg-pubkey 确认已安装的所有rpm包的完整性==
|
||||
==rpm -V package_name 检查文件尺寸、 许可、类型、所有者、群组、MD5检查以及最后修改时间==
|
||||
==rpm -Va 检查系统中所有已安装的rpm包- 小心使用==
|
||||
==rpm -Vp package.rpm 确认一个rpm包还未安装==
|
||||
==rpm2cpio package.rpm | cpio --extract --make-directories *bin* 从一个rpm包运行可执行文件==
|
||||
==rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 从一个rpm源码安装一个构建好的包==
|
||||
==rpmbuild --rebuild package_name.src.rpm 从一个rpm源码构建一个 rpm 包==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==YUM 软件包升级器 - (Fedora, RedHat及类似系统)==
|
||||
==yum install package_name 下载并安装一个rpm包==
|
||||
==yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系==
|
||||
==yum update package_name.rpm 更新当前系统中所有安装的rpm包==
|
||||
==yum update package_name 更新一个rpm包==
|
||||
==yum remove package_name 删除一个rpm包==
|
||||
==yum list 列出当前系统中安装的所有包==
|
||||
==yum search package_name 在rpm仓库中搜寻软件包==
|
||||
==yum clean packages 清理rpm缓存删除下载的包==
|
||||
==yum clean headers 删除所有头文件==
|
||||
==yum clean all 删除所有缓存的包和头文件==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==DEB 包 (Debian, Ubuntu 以及类似系统)==
|
||||
==dpkg -i package.deb 安装/更新一个 deb 包==
|
||||
==dpkg -r package_name 从系统删除一个 deb 包==
|
||||
==dpkg -l 显示系统中所有已经安装的 deb 包==
|
||||
==dpkg -l | grep httpd 显示所有名称中包含 "httpd" 字样的deb包==
|
||||
==dpkg -s package_name 获得已经安装在系统中一个特殊包的信息==
|
||||
==dpkg -L package_name 显示系统中已经安装的一个deb包所提供的文件列表==
|
||||
==dpkg --contents package.deb 显示尚未安装的一个包所提供的文件列表==
|
||||
==dpkg -S /bin/ping 确认所给的文件由哪个deb包提供==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==APT 软件工具 (Debian, Ubuntu 以及类似系统)==
|
||||
==apt-get install package_name 安装/更新一个 deb 包==
|
||||
==apt-cdrom install package_name 从光盘安装/更新一个 deb 包==
|
||||
==apt-get update 升级列表中的软件包==
|
||||
==apt-get upgrade 升级所有已安装的软件==
|
||||
==apt-get remove package_name 从系统删除一个deb包==
|
||||
==apt-get check 确认依赖的软件仓库正确==
|
||||
==apt-get clean 从下载的软件包中清理缓存==
|
||||
==apt-cache search searched-package 返回包含所要搜索字符串的软件包名称==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==查看文件内容==
|
||||
==cat file1 从第一个字节开始正向查看文件的内容==
|
||||
==tac file1 从最后一行开始反向查看一个文件的内容==
|
||||
==more file1 查看一个长文件的内容==
|
||||
==less file1 类似于 'more' 命令,但是它允许在文件中和正向操作一样的反向操作==
|
||||
==head -2 file1 查看一个文件的前两行==
|
||||
==tail -2 file1 查看一个文件的最后两行==
|
||||
==tail -f /var/log/messages 实时查看被添加到一个文件中的内容==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==文本处理==
|
||||
==cat file1 file2 ... | command \<\> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT==
|
||||
==cat file1 | command( sed, grep, awk, grep, etc...) \> result.txt 合并一个文件的详细说明文本,并将简介写入一个新文件中==
|
||||
==cat file1 | command( sed, grep, awk, grep, etc...) \>\> result.txt 合并一个文件的详细说明文本,并将简介写入一个已有的文件中==
|
||||
==grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词"Aug"==
|
||||
==grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"开始的词汇==
|
||||
==grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行==
|
||||
==grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串"Aug"==
|
||||
==sed 's/stringa1/stringa2/g' example.txt 将example.txt文件中的 "string1" 替换成 "string2"==
|
||||
==sed '/^$/d' example.txt 从example.txt文件中删除所有空白行==
|
||||
==sed '/ *#/d; /^$/d' example.txt 从example.txt文件中删除所有注释和空白行==
|
||||
==echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下单元格内容==
|
||||
==sed -e '1d' result.txt 从文件example.txt 中排除第一行==
|
||||
==sed -n '/stringa1/p' 查看只包含词汇 "string1"的行==
|
||||
==sed -e 's/ *$//' example.txt 删除每一行最后的空白字符==
|
||||
==sed -e 's/stringa1//g' example.txt 从文档中只删除词汇 "string1" 并保留剩余全部==
|
||||
==sed -n '1,5p;5q' example.txt 查看从第一行到第5行内容==
|
||||
==sed -n '5p;5q' example.txt 查看第5行==
|
||||
==sed -e 's/00*/0/g' example.txt 用单个零替换多个零==
|
||||
==cat -n file1 标示文件的行数==
|
||||
==cat example.txt | awk 'NR%2==1' 删除example.txt文件中的所有偶数行==
|
||||
==echo a b c | awk '{print $1}' 查看一行第一栏==
|
||||
==echo a b c | awk '{print $1,$3}' 查看一行的第一和第三栏==
|
||||
==paste file1 file2 合并两个文件或两栏的内容==
|
||||
==paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分==
|
||||
==sort file1 file2 排序两个文件的内容==
|
||||
==sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)==
|
||||
==sort file1 file2 | uniq -u 删除交集,留下其他的行==
|
||||
==sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)==
|
||||
==comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容==
|
||||
==comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容==
|
||||
==comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==最近在项目中用到了Linux,然后自己只会那些简单的,发现头用的溜溜的,所以查了一下常用的命令,多查,多用。==
|
||||
==系统信息==
|
||||
==arch 显示机器的处理器==**架构**==(1)==
|
||||
==uname -m 显示机器的处理器架构(2)==
|
||||
==uname -r 显示正在使用的内核版本==
|
||||
==dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)==
|
||||
==hdparm -i /dev/hda 罗列一个磁盘的架构特性==
|
||||
==hdparm -tT /dev/sda 在磁盘上执行测试性读取操作==
|
||||
==cat /proc/cpuinfo 显示CPU info的信息==
|
||||
==cat /proc/interrupts 显示中断==
|
||||
==cat /proc/meminfo 校验内存使用==
|
||||
==cat /proc/swaps 显示哪些swap被使用==
|
||||
==cat /proc/version 显示内核的版本==
|
||||
==cat /proc/net/dev 显示网络适配器及统计==
|
||||
==cat /proc/mounts 显示已加载的文件系统==
|
||||
==lspci -tv 罗列 PCI 设备==
|
||||
==lsusb -tv 显示 USB 设备==
|
||||
==date 显示系统日期==
|
||||
==cal 2007 显示2007年的日历表==
|
||||
==date 041217002007.00 设置日期和时间 - 月日时分年.秒==
|
||||
==clock -w 将时间修改保存到 BIOS==
|
||||
|
||||
==关机 (系统的关机、重启以及登出 )==
|
||||
==shutdown -h now 关闭系统(1)==
|
||||
==init 0 关闭系统(2)==
|
||||
==telinit 0 关闭系统(3)==
|
||||
==shutdown -h hours:minutes & 按预定时间关闭系统==
|
||||
==shutdown -c 取消按预定时间关闭系统==
|
||||
==shutdown -r now 重启(1)==
|
||||
==reboot 重启(2)==
|
||||
==logout 注销==
|
||||
|
||||
==文件和目录==
|
||||
==cd /home 进入 '/ home' 目录'==
|
||||
==cd .. 返回上一级目录==
|
||||
==cd ../.. 返回上两级目录==
|
||||
==cd 进入个人的主目录==
|
||||
==cd ~user1 进入个人的主目录==
|
||||
==cd - 返回上次所在的目录==
|
||||
==pwd 显示工作路径==
|
||||
==ls 查看目录中的文件==
|
||||
==ls -F 查看目录中的文件==
|
||||
==ls -l 显示文件和目录的详细资料==
|
||||
==ls -a 显示隐藏文件==
|
||||
==ls *[0-9]* 显示包含数字的文件名和目录名==
|
||||
==tree 显示文件和目录由根目录开始的树形结构(1)==
|
||||
==lstree 显示文件和目录由根目录开始的树形结构(2)==
|
||||
==mkdir dir1 创建一个叫做 'dir1' 的目录'==
|
||||
==mkdir dir1 dir2 同时创建两个目录==
|
||||
==mkdir -p /tmp/dir1/dir2 创建一个目录树==
|
||||
==rm -f file1 删除一个叫做 'file1' 的文件'==
|
||||
==rmdir dir1 删除一个叫做 'dir1' 的目录'==
|
||||
==rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容==
|
||||
==rm -rf dir1 dir2 同时删除两个目录及它们的内容==
|
||||
==mv dir1 new_dir 重命名/移动 一个目录==
|
||||
==cp file1 file2 复制一个文件==
|
||||
==cp dir/* . 复制一个目录下的所有文件到当前工作目录==
|
||||
==cp -a /tmp/dir1 . 复制一个目录到当前工作目录==
|
||||
==cp -a dir1 dir2 复制一个目录==
|
||||
==ln -s file1 lnk1 创建一个指向文件或目录的软链接==
|
||||
==ln file1 lnk1 创建一个指向文件或目录的物理链接==
|
||||
==touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm)==
|
||||
==file file1 outputs the mime type of the file as text==
|
||||
==iconv -l 列出已知的编码==
|
||||
==iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding.==
|
||||
==find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick)==
|
||||
|
||||
==文件搜索==
|
||||
==find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录==
|
||||
==find / -user user1 搜索属于用户 'user1' 的文件和目录==
|
||||
==find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件==
|
||||
==find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件==
|
||||
==find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件==
|
||||
==find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限==
|
||||
==find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备==
|
||||
==locate \*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令==
|
||||
==whereis halt 显示一个二进制文件、源码或man的位置==
|
||||
==which halt 显示一个二进制文件或可执行文件的完整路径==
|
||||
|
||||
==挂载一个文件系统==
|
||||
==mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在==
|
||||
==umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出==
|
||||
==fuser -km /mnt/hda2 当设备繁忙时强制卸载==
|
||||
==umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用==
|
||||
==mount /dev/fd0 /mnt/floppy 挂载一个软盘==
|
||||
==mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom==
|
||||
==mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom==
|
||||
==mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom==
|
||||
==mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件==
|
||||
==mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统==
|
||||
==mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备==
|
||||
==mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享==
|
||||
|
||||
==磁盘空间==
|
||||
==df -h 显示已经挂载的分区列表==
|
||||
==ls -lSr |more 以尺寸大小排列文件和目录==
|
||||
==du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间'==
|
||||
==du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小==
|
||||
==rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统)==
|
||||
==dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统)==
|
||||
|
||||
==字符设置和文件格式转换==
|
||||
==dos2unix filedos.txt fileunix.txt 将一个文本文件的格式从MSDOS转换成UNIX==
|
||||
==unix2dos fileunix.txt filedos.txt 将一个文本文件的格式从UNIX转换成MSDOS==
|
||||
==recode ..HTML \< page.txt \> page.html 将一个文本文件转换成html==
|
||||
==recode -l | more 显示所有允许的转换格式==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==文件系统分析==
|
||||
==badblocks -v /dev/hda1 检查磁盘hda1上的坏磁块==
|
||||
==fsck /dev/hda1 修复/检查hda1磁盘上linux文件系统的完整性==
|
||||
==fsck.ext2 /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性==
|
||||
==e2fsck /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性==
|
||||
==e2fsck -j /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性==
|
||||
==fsck.ext3 /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性==
|
||||
==fsck.vfat /dev/hda1 修复/检查hda1磁盘上fat文件系统的完整性==
|
||||
==fsck.msdos /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性==
|
||||
==dosfsck /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性==
|
||||
|
||||
|
||||
==用户和群组==
|
||||
==groupadd group_name 创建一个新用户组==
|
||||
==groupdel group_name 删除一个用户组==
|
||||
==groupmod -n new_group_name old_group_name 重命名一个用户组==
|
||||
==useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 "admin" 用户组的用户==
|
||||
==useradd user1 创建一个新用户==
|
||||
==userdel -r user1 删除一个用户 ( '-r' 排除主目录)==
|
||||
==usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性==
|
||||
==passwd 修改口令==
|
||||
==passwd user1 修改一个用户的口令 (只允许root执行)==
|
||||
==chage -E 2005-12-31 user1 设置用户口令的失效期限==
|
||||
==pwck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户==
|
||||
==grpck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组==
|
||||
==newgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==初始化一个文件系统==
|
||||
==mkfs /dev/hda1 在hda1分区创建一个文件系统==
|
||||
==mke2fs /dev/hda1 在hda1分区创建一个linux ext2的文件系统==
|
||||
==mke2fs -j /dev/hda1 在hda1分区创建一个linux ext3(日志型)的文件系统==
|
||||
==mkfs -t vfat 32 -F /dev/hda1 创建一个 FAT32 文件系统==
|
||||
==fdformat -n /dev/fd0 格式化一个软盘==
|
||||
==mkswap /dev/hda3 创建一个swap文件系统==
|
||||
|
||||
|
||||
==文件的权限 - 使用 "+" 设置权限,使用 "-" 用于取消==
|
||||
==ls -lh 显示权限==
|
||||
==ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示==
|
||||
==chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限==
|
||||
==chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限==
|
||||
==chown user1 file1 改变一个文件的所有人属性==
|
||||
==chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性==
|
||||
==chgrp group1 file1 改变文件的群组==
|
||||
==chown user1:group1 file1 改变一个文件的所有人和群组属性==
|
||||
==find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件==
|
||||
==chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限==
|
||||
==chmod u-s /bin/file1 禁用一个二进制文件的 SUID位==
|
||||
==chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的==
|
||||
==chmod g-s /home/public 禁用一个目录的 SGID 位==
|
||||
==chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件==
|
||||
==chmod o-t /home/public 禁用一个目录的 STIKY 位==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==SWAP文件系统==
|
||||
==mkswap /dev/hda3 创建一个swap文件系统==
|
||||
==swapon /dev/hda3 启用一个新的swap文件系统==
|
||||
==swapon /dev/hda2 /dev/hdb3 启用两个swap分区==
|
||||
|
||||
|
||||
==文件的特殊属性 - 使用 "+" 设置权限,使用 "-" 用于取消==
|
||||
==chattr +a file1 只允许以追加方式读写文件==
|
||||
==chattr +c file1 允许这个文件能被内核自动压缩/解压==
|
||||
==chattr +d file1 在进行文件系统备份时,dump程序将忽略这个文件==
|
||||
==chattr +i file1 设置成不可变的文件,不能被删除、修改、重命名或者链接==
|
||||
==chattr +s file1 允许一个文件被安全地删除==
|
||||
==chattr +S file1 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘==
|
||||
==chattr +u file1 若文件被删除,系统会允许你在以后恢复这个被删除的文件==
|
||||
==lsattr 显示特殊的属性==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==备份==
|
||||
==dump -0aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的完整备份==
|
||||
==dump -1aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的交互式备份==
|
||||
==restore -if /tmp/home0.bak 还原一个交互式备份==
|
||||
==rsync -rogpav --delete /home /tmp 同步两边的目录==
|
||||
==rsync -rogpav -e ssh --delete /home ip_address:/tmp 通过SSH通道rsync==
|
||||
==rsync -az -e ssh --delete ip_addr:/home/public /home/local 通过ssh和压缩将一个远程目录同步到本地目录==
|
||||
==rsync -az -e ssh --delete /home/local ip_addr:/home/public 通过ssh和压缩将本地目录同步到远程目录==
|
||||
==dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通过ssh在远程主机上执行一次备份本地磁盘的操作==
|
||||
==dd if=/dev/sda of=/tmp/file1 备份磁盘内容到一个文件==
|
||||
==tar -Puf backup.tar /home/user 执行一次对 '/home/user' 目录的交互式备份操作==
|
||||
==( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' 通过ssh在远程目录中复制一个目录内容==
|
||||
==( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' 通过ssh在远程目录中复制一个本地目录==
|
||||
==tar cf - . | (cd /tmp/backup ; tar xf - ) 本地将一个目录复制到另一个地方,保留原有权限及链接==
|
||||
==find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 从一个目录查找并复制所有以 '.txt' 结尾的文件到另一个目录==
|
||||
==find /var/log -name '*.log' | tar cv --files-from=- | bzip2 \> log.tar.bz2 查找所有以 '.log' 结尾的文件并做成一个bzip包==
|
||||
==dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一个将 MBR (Master Boot Record)内容复制到软盘的动作==
|
||||
==dd if=/dev/fd0 of=/dev/hda bs=512 count=1 从已经保存到软盘的备份中恢复MBR内容==
|
||||
|
||||
|
||||
==打包和压缩文件==
|
||||
==bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件==
|
||||
==bzip2 file1 压缩一个叫做 'file1' 的文件==
|
||||
==gunzip file1.gz 解压一个叫做 'file1.gz'的文件==
|
||||
==gzip file1 压缩一个叫做 'file1'的文件==
|
||||
==gzip -9 file1 最大程度压缩==
|
||||
==rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包==
|
||||
==rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1'==
|
||||
==rar x file1.rar 解压rar包==
|
||||
==unrar x file1.rar 解压rar包==
|
||||
==tar -cvf archive.tar file1 创建一个非压缩的 tarball==
|
||||
==tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件==
|
||||
==tar -tf archive.tar 显示一个包中的内容==
|
||||
==tar -xvf archive.tar 释放一个包==
|
||||
==tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下==
|
||||
==tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包==
|
||||
==tar -xvfj archive.tar.bz2 解压一个bzip2格式的压缩包==
|
||||
==tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包==
|
||||
==tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包==
|
||||
==zip file1.zip file1 创建一个zip格式的压缩包==
|
||||
==zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包==
|
||||
==unzip file1.zip 解压一个zip格式压缩包==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==光盘==
|
||||
==cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一个可复写的光盘内容==
|
||||
==mkisofs /dev/cdrom \> cd.iso 在磁盘上创建一个光盘的iso镜像文件==
|
||||
==mkisofs /dev/cdrom | gzip \> cd_iso.gz 在磁盘上创建一个压缩了的光盘iso镜像文件==
|
||||
==mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 创建一个目录的iso镜像文件==
|
||||
==cdrecord -v dev=/dev/cdrom cd.iso 刻录一个ISO镜像文件==
|
||||
==gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 刻录一个压缩了的ISO镜像文件==
|
||||
==mount -o loop cd.iso /mnt/iso 挂载一个ISO镜像文件==
|
||||
==cd-paranoia -B 从一个CD光盘转录音轨到 wav 文件中==
|
||||
==cd-paranoia -- "-3" 从一个CD光盘转录音轨到 wav 文件中(参数-3)==
|
||||
==cdrecord --scanbus 扫描总线以识别scsi通道==
|
||||
==dd if=/dev/hdc | md5sum 校验一个设备的md5sum编码,例如一张 CD==
|
||||
|
||||
|
||||
==RPM 包 - (Fedora, Redhat及类似系统)==
|
||||
==rpm -ivh package.rpm 安装一个rpm包==
|
||||
==rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告==
|
||||
==rpm -U package.rpm 更新一个rpm包但不改变其配置文件==
|
||||
==rpm -F package.rpm 更新一个确定已经安装的rpm包==
|
||||
==rpm -e package_name.rpm 删除一个rpm包==
|
||||
==rpm -qa 显示系统中所有已经安装的rpm包==
|
||||
==rpm -qa | grep httpd 显示所有名称中包含 "httpd" 字样的rpm包==
|
||||
==rpm -qi package_name 获取一个已安装包的特殊信息==
|
||||
==rpm -qg "System Environment/Daemons" 显示一个组件的rpm包==
|
||||
==rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表==
|
||||
==rpm -qc package_name 显示一个已经安装的rpm包提供的配置文件列表==
|
||||
==rpm -q package_name --whatrequires 显示与一个rpm包存在依赖关系的列表==
|
||||
==rpm -q package_name --whatprovides 显示一个rpm包所占的体积==
|
||||
==rpm -q package_name --scripts 显示在安装/删除期间所执行的脚本l==
|
||||
==rpm -q package_name --changelog 显示一个rpm包的修改历史==
|
||||
==rpm -qf /etc/httpd/conf/httpd.conf 确认所给的文件由哪个rpm包所提供==
|
||||
==rpm -qp package.rpm -l 显示由一个尚未安装的rpm包提供的文件列表==
|
||||
==rpm --import /media/cdrom/RPM-GPG-KEY 导入公钥数字证书==
|
||||
==rpm --checksig package.rpm 确认一个rpm包的完整性==
|
||||
==rpm -qa gpg-pubkey 确认已安装的所有rpm包的完整性==
|
||||
==rpm -V package_name 检查文件尺寸、 许可、类型、所有者、群组、MD5检查以及最后修改时间==
|
||||
==rpm -Va 检查系统中所有已安装的rpm包- 小心使用==
|
||||
==rpm -Vp package.rpm 确认一个rpm包还未安装==
|
||||
==rpm2cpio package.rpm | cpio --extract --make-directories *bin* 从一个rpm包运行可执行文件==
|
||||
==rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 从一个rpm源码安装一个构建好的包==
|
||||
==rpmbuild --rebuild package_name.src.rpm 从一个rpm源码构建一个 rpm 包==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==网络 - (以太网和WIFI无线)==
|
||||
==ifconfig eth0 显示一个以太网卡的配置==
|
||||
==ifup eth0 启用一个 'eth0' 网络设备==
|
||||
==ifdown eth0 禁用一个 'eth0' 网络设备==
|
||||
==ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址==
|
||||
==ifconfig eth0 promisc 设置 'eth0' 成混杂模式以嗅探数据包 (sniffing)==
|
||||
==dhclient eth0 以dhcp模式启用 'eth0'==
|
||||
==route -n show routing table==
|
||||
==route add -net 0/0 gw IP_Gateway configura default gateway==
|
||||
==route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route to reach network '192.168.0.0/16'==
|
||||
==route del 0/0 gw IP_gateway remove static route==
|
||||
==echo "1" \> /proc/sys/net/ipv4/ip_forward activate ip routing==
|
||||
==hostname show hostname of system==
|
||||
==host== ==www.example.com== ==lookup hostname to resolve name to ip address and viceversa(1)==
|
||||
==nslookup== ==www.example.com== ==lookup hostname to resolve name to ip address and viceversa(2)==
|
||||
==ip link show show link status of all interfaces==
|
||||
==mii-tool eth0 show link status of 'eth0'==
|
||||
==ethtool eth0 show statistics of network card 'eth0'==
|
||||
==netstat -tup show all active network connections and their PID==
|
||||
==netstat -tupl show all network services listening on the system and their PID==
|
||||
==tcpdump tcp port 80 show all HTTP traffic==
|
||||
==iwlist scan show wireless networks==
|
||||
==iwconfig eth1 show configuration of a wireless network card==
|
||||
==hostname show hostname==
|
||||
==host== ==www.example.com== ==lookup hostname to resolve name to ip address and viceversa==
|
||||
==nslookup== ==www.example.com== ==lookup hostname to resolve name to ip address and viceversa==
|
||||
==whois== ==www.example.com== ==lookup on Whois database==
|
||||
|
||||
==GO TOP INDEX ^==
|
||||
==Microsoft Windows networks (SAMBA)==
|
||||
==nbtscan ip_addr netbios name resolution==
|
||||
==nmblookup -A ip_addr netbios name resolution==
|
||||
==smbclient -L ip_addr/hostname show remote shares of a windows host==
|
||||
==smbget -Rr smb://ip_addr/share like wget can download files from a host windows via smb==
|
||||
|
||||
==YUM 软件包升级器 - (Fedora, RedHat及类似系统)==
|
||||
==yum install package_name 下载并安装一个rpm包==
|
||||
==yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系==
|
||||
==yum update package_name.rpm 更新当前系统中所有安装的rpm包==
|
||||
==yum update package_name 更新一个rpm包==
|
||||
==yum remove package_name 删除一个rpm包==
|
||||
==yum list 列出当前系统中安装的所有包==
|
||||
==yum search package_name 在rpm仓库中搜寻软件包==
|
||||
==yum clean packages 清理rpm缓存删除下载的包==
|
||||
==yum clean headers 删除所有头文件==
|
||||
==yum clean all 删除所有缓存的包和头文件==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==DEB 包 (Debian, Ubuntu 以及类似系统)==
|
||||
==dpkg -i package.deb 安装/更新一个 deb 包==
|
||||
==dpkg -r package_name 从系统删除一个 deb 包==
|
||||
==dpkg -l 显示系统中所有已经安装的 deb 包==
|
||||
==dpkg -l | grep httpd 显示所有名称中包含 "httpd" 字样的deb包==
|
||||
==dpkg -s package_name 获得已经安装在系统中一个特殊包的信息==
|
||||
==dpkg -L package_name 显示系统中已经安装的一个deb包所提供的文件列表==
|
||||
==dpkg --contents package.deb 显示尚未安装的一个包所提供的文件列表==
|
||||
==dpkg -S /bin/ping 确认所给的文件由哪个deb包提供==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==APT 软件工具 (Debian, Ubuntu 以及类似系统)==
|
||||
==apt-get install package_name 安装/更新一个 deb 包==
|
||||
==apt-cdrom install package_name 从光盘安装/更新一个 deb 包==
|
||||
==apt-get update 升级列表中的软件包==
|
||||
==apt-get upgrade 升级所有已安装的软件==
|
||||
==apt-get remove package_name 从系统删除一个deb包==
|
||||
==apt-get check 确认依赖的软件仓库正确==
|
||||
==apt-get clean 从下载的软件包中清理缓存==
|
||||
==apt-cache search searched-package 返回包含所要搜索字符串的软件包名称==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==查看文件内容==
|
||||
==cat file1 从第一个字节开始正向查看文件的内容==
|
||||
==tac file1 从最后一行开始反向查看一个文件的内容==
|
||||
==more file1 查看一个长文件的内容==
|
||||
==less file1 类似于 'more' 命令,但是它允许在文件中和正向操作一样的反向操作==
|
||||
==head -2 file1 查看一个文件的前两行==
|
||||
==tail -2 file1 查看一个文件的最后两行==
|
||||
==tail -f /var/log/messages 实时查看被添加到一个文件中的内容==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==文本处理==
|
||||
==cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT==
|
||||
==cat file1 | command( sed, grep, awk, grep, etc...) > result.txt 合并一个文件的详细说明文本,并将简介写入一个新文件中==
|
||||
==cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt 合并一个文件的详细说明文本,并将简介写入一个已有的文件中==
|
||||
==grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词"Aug"==
|
||||
==grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"开始的词汇==
|
||||
==grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行==
|
||||
==grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串"Aug"==
|
||||
==sed 's/stringa1/stringa2/g' example.txt 将example.txt文件中的 "string1" 替换成 "string2"==
|
||||
==sed '/^$/d' example.txt 从example.txt文件中删除所有空白行==
|
||||
==sed '/ *#/d; /^$/d' example.txt 从example.txt文件中删除所有注释和空白行==
|
||||
==echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下单元格内容==
|
||||
==sed -e '1d' result.txt 从文件example.txt 中排除第一行==
|
||||
==sed -n '/stringa1/p' 查看只包含词汇 "string1"的行==
|
||||
==sed -e 's/ *$//' example.txt 删除每一行最后的空白字符==
|
||||
==sed -e 's/stringa1//g' example.txt 从文档中只删除词汇 "string1" 并保留剩余全部==
|
||||
==sed -n '1,5p;5q' example.txt 查看从第一行到第5行内容==
|
||||
==sed -n '5p;5q' example.txt 查看第5行==
|
||||
==sed -e 's/00*/0/g' example.txt 用单个零替换多个零==
|
||||
==cat -n file1 标示文件的行数==
|
||||
==cat example.txt | awk 'NR%2==1' 删除example.txt文件中的所有偶数行==
|
||||
==echo a b c | awk '{print $1}' 查看一行第一栏==
|
||||
==echo a b c | awk '{print $1,$3}' 查看一行的第一和第三栏==
|
||||
==paste file1 file2 合并两个文件或两栏的内容==
|
||||
==paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分==
|
||||
==sort file1 file2 排序两个文件的内容==
|
||||
==sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)==
|
||||
==sort file1 file2 | uniq -u 删除交集,留下其他的行==
|
||||
==sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)==
|
||||
==comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容==
|
||||
==comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容==
|
||||
==comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
|
||||
==字符设置和文件格式转换==
|
||||
==dos2unix filedos.txt fileunix.txt 将一个文本文件的格式从MSDOS转换成UNIX==
|
||||
==unix2dos fileunix.txt filedos.txt 将一个文本文件的格式从UNIX转换成MSDOS==
|
||||
==recode ..HTML < page.txt > page.html 将一个文本文件转换成html==
|
||||
==recode -l | more 显示所有允许的转换格式==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==文件系统分析==
|
||||
==badblocks -v /dev/hda1 检查磁盘hda1上的坏磁块==
|
||||
==fsck /dev/hda1 修复/检查hda1磁盘上linux文件系统的完整性==
|
||||
==fsck.ext2 /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性==
|
||||
==e2fsck /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性==
|
||||
==e2fsck -j /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性==
|
||||
==fsck.ext3 /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性==
|
||||
==fsck.vfat /dev/hda1 修复/检查hda1磁盘上fat文件系统的完整性==
|
||||
==fsck.msdos /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性==
|
||||
==dosfsck /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==初始化一个文件系统==
|
||||
==mkfs /dev/hda1 在hda1分区创建一个文件系统==
|
||||
==mke2fs /dev/hda1 在hda1分区创建一个linux ext2的文件系统==
|
||||
==mke2fs -j /dev/hda1 在hda1分区创建一个linux ext3(日志型)的文件系统==
|
||||
==mkfs -t vfat 32 -F /dev/hda1 创建一个 FAT32 文件系统==
|
||||
==fdformat -n /dev/fd0 格式化一个软盘==
|
||||
==mkswap /dev/hda3 创建一个swap文件系统==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==SWAP文件系统==
|
||||
==mkswap /dev/hda3 创建一个swap文件系统==
|
||||
==swapon /dev/hda3 启用一个新的swap文件系统==
|
||||
==swapon /dev/hda2 /dev/hdb3 启用两个swap分区==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==备份==
|
||||
==dump -0aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的完整备份==
|
||||
==dump -1aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的交互式备份==
|
||||
==restore -if /tmp/home0.bak 还原一个交互式备份==
|
||||
==rsync -rogpav --delete /home /tmp 同步两边的目录==
|
||||
==rsync -rogpav -e ssh --delete /home ip_address:/tmp 通过SSH通道rsync==
|
||||
==rsync -az -e ssh --delete ip_addr:/home/public /home/local 通过ssh和压缩将一个远程目录同步到本地目录==
|
||||
==rsync -az -e ssh --delete /home/local ip_addr:/home/public 通过ssh和压缩将本地目录同步到远程目录==
|
||||
==dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通过ssh在远程主机上执行一次备份本地磁盘的操作==
|
||||
==dd if=/dev/sda of=/tmp/file1 备份磁盘内容到一个文件==
|
||||
==tar -Puf backup.tar /home/user 执行一次对 '/home/user' 目录的交互式备份操作==
|
||||
==( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' 通过ssh在远程目录中复制一个目录内容==
|
||||
==( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' 通过ssh在远程目录中复制一个本地目录==
|
||||
==tar cf - . | (cd /tmp/backup ; tar xf - ) 本地将一个目录复制到另一个地方,保留原有权限及链接==
|
||||
==find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 从一个目录查找并复制所有以 '.txt' 结尾的文件到另一个目录==
|
||||
==find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 查找所有以 '.log' 结尾的文件并做成一个bzip包==
|
||||
==dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一个将 MBR (Master Boot Record)内容复制到软盘的动作==
|
||||
==dd if=/dev/fd0 of=/dev/hda bs=512 count=1 从已经保存到软盘的备份中恢复MBR内容==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==光盘==
|
||||
==cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一个可复写的光盘内容==
|
||||
==mkisofs /dev/cdrom > cd.iso 在磁盘上创建一个光盘的iso镜像文件==
|
||||
==mkisofs /dev/cdrom | gzip > cd_iso.gz 在磁盘上创建一个压缩了的光盘iso镜像文件==
|
||||
==mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 创建一个目录的iso镜像文件==
|
||||
==cdrecord -v dev=/dev/cdrom cd.iso 刻录一个ISO镜像文件==
|
||||
==gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 刻录一个压缩了的ISO镜像文件==
|
||||
==mount -o loop cd.iso /mnt/iso 挂载一个ISO镜像文件==
|
||||
==cd-paranoia -B 从一个CD光盘转录音轨到 wav 文件中==
|
||||
==cd-paranoia -- "-3" 从一个CD光盘转录音轨到 wav 文件中(参数-3)==
|
||||
==cdrecord --scanbus 扫描总线以识别scsi通道==
|
||||
==dd if=/dev/hdc | md5sum 校验一个设备的md5sum编码,例如一张 CD==
|
||||
|
||||
==返回顶部索引 ^==
|
||||
|
||||
==网络 - (以太网和WIFI无线)==
|
||||
==ifconfig eth0 显示一个以太网卡的配置==
|
||||
==ifup eth0 启用一个 'eth0' 网络设备==
|
||||
==ifdown eth0 禁用一个 'eth0' 网络设备==
|
||||
==ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址==
|
||||
==ifconfig eth0 promisc 设置 'eth0' 成混杂模式以嗅探数据包 (sniffing)==
|
||||
==dhclient eth0 以dhcp模式启用 'eth0'==
|
||||
==route -n show routing table==
|
||||
==route add -net 0/0 gw IP_Gateway configura default gateway==
|
||||
==route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route to reach network '192.168.0.0/16'==
|
||||
==route del 0/0 gw IP_gateway remove static route==
|
||||
==echo "1" > /proc/sys/net/ipv4/ip_forward activate ip routing==
|
||||
==hostname show hostname of system==
|
||||
==host== ==www.example.com== ==lookup hostname to resolve name to ip address and viceversa(1)==
|
||||
==nslookup== ==www.example.com== ==lookup hostname to resolve name to ip address and viceversa(2)==
|
||||
==ip link show show link status of all interfaces==
|
||||
==mii-tool eth0 show link status of 'eth0'==
|
||||
==ethtool eth0 show statistics of network card 'eth0'==
|
||||
==netstat -tup show all active network connections and their PID==
|
||||
==netstat -tupl show all network services listening on the system and their PID==
|
||||
==tcpdump tcp port 80 show all HTTP traffic==
|
||||
==iwlist scan show wireless networks==
|
||||
==iwconfig eth1 show configuration of a wireless network card==
|
||||
==hostname show hostname==
|
||||
==host== ==www.example.com== ==lookup hostname to resolve name to ip address and viceversa==
|
||||
==nslookup== ==www.example.com== ==lookup hostname to resolve name to ip address and viceversa==
|
||||
==whois== ==www.example.com== ==lookup on Whois database==
|
||||
|
||||
==GO TOP INDEX ^==
|
||||
==Microsoft Windows networks (SAMBA)==
|
||||
==nbtscan ip_addr netbios name resolution==
|
||||
==nmblookup -A ip_addr netbios name resolution==
|
||||
==smbclient -L ip_addr/hostname show remote shares of a windows host==
|
||||
==smbget -Rr smb://ip_addr/share like wget can download files from a host windows via smb==
|
||||
==mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share mount a windows network share==
|
||||
\> 来自 \<[http://blog.csdn.net/ww130929/article/details/69788517](http://blog.csdn.net/ww130929/article/details/69788517)\>
|
||||
> 来自 <[http://blog.csdn.net/ww130929/article/details/69788517](http://blog.csdn.net/ww130929/article/details/69788517)>
|
||||
@@ -1,19 +1,19 @@
|
||||
有两个修改命令可以用到,「change mode」&「change owner」
|
||||
==即chmod以及chown,其中可以用递归参数====-R====来实现更改所有子文件和子目录的权限。==
|
||||
==1、利用chmod修改权限:==
|
||||
==对Document/目录下的所有子文件与子目录执行相同的权限变更:==
|
||||
有两个修改命令可以用到,「change mode」&「change owner」
|
||||
==即chmod以及chown,其中可以用递归参数====-R====来实现更改所有子文件和子目录的权限。==
|
||||
==1、利用chmod修改权限:==
|
||||
==对Document/目录下的所有子文件与子目录执行相同的权限变更:==
|
||||
==chmod -R 700 Document/==
|
||||
|
||||
|
||||
==-R参数是递归 处理目录下的所有文件以及子文件夹==
|
||||
|
||||
|
||||
700是变更后的权限表示(只有所有者有读和写以及执行的权限)
|
||||
|
||||
|
||||
Document/ 是需要执行的目录
|
||||
|
||||
==2、利用chown改变所有者:==
|
||||
==对Document/ 目录下的所有文件与子目录执行相同的所有者变更,修改所有者为users用户组的username用户==
|
||||
|
||||
==2、利用chown改变所有者:==
|
||||
==对Document/ 目录下的所有文件与子目录执行相同的所有者变更,修改所有者为users用户组的username用户==
|
||||
==chown -R username:users Document/==
|
||||
|
||||
==username:users users用户组的username,用户组参数不是必须有==
|
||||
|
||||
==username:users users用户组的username,用户组参数不是必须有==
|
||||
==参考:http://rabbit52.com/2011/linux/ubuntu/linux-chmod-chown==
|
||||
\> 来自 \<[http://blog.csdn.net/songyu0120/article/details/43408499](http://blog.csdn.net/songyu0120/article/details/43408499)\>
|
||||
> 来自 <[http://blog.csdn.net/songyu0120/article/details/43408499](http://blog.csdn.net/songyu0120/article/details/43408499)>
|
||||
@@ -1,5 +1,5 @@
|
||||
==du -sh /*==
|
||||
==可以列出你整个VPS所有文件夹的大小。其中“/*”是控制分析哪个目录的,你根据上面的结果,然后灵活变化后面的路径就行了,例如:==
|
||||
==du -sh /usr/*==
|
||||
==du -sh /*==
|
||||
==可以列出你整个VPS所有文件夹的大小。其中“/*”是控制分析哪个目录的,你根据上面的结果,然后灵活变化后面的路径就行了,例如:==
|
||||
==du -sh /usr/*==
|
||||
==用这个命令来分析usr目录下的文件夹大小,最后定位到大文件,直接删除就行了。==
|
||||
\> 来自 \<[https://www.hack520.com/504.html](https://www.hack520.com/504.html)\>
|
||||
> 来自 <[https://www.hack520.com/504.html](https://www.hack520.com/504.html)>
|
||||
@@ -1,38 +1,38 @@
|
||||
[https://blog.csdn.net/yaoxingshuai/article/details/50563245](https://blog.csdn.net/yaoxingshuai/article/details/50563245)
|
||||
|
||||
楼主给笔记本电脑装了双系统,常年放在寝室开着,平时用实验室的电脑,偶尔需要笔记本的时候就远程控制。后来就发现了一个问题,我远程连接linux的时候,只能看见Linux这个分区的内容,windows的D、E、F盘都没有,这个时候如果要找这些盘符里的文件就比较麻烦了
|
||||
|
||||
于是乎,机智的楼主看了一下Linux里的设备文件
|
||||
|
||||
cd /dev
|
||||
|
||||
ls -l sd*
|
||||
|
||||
能看见楼主的笔记本硬盘分了好几个区C D E F G H,为了确保准确,楼主又看了一下硬盘信息
|
||||
|
||||
fdisk -lu
|
||||
|
||||
第四列Blocks指的分区大小,sda1=52,436,128B 大概50GB,这不是我的C盘么
|
||||
|
||||
最后一个sda9 = 12545024B 大概 12GB就是我安装Linux的盘符
|
||||
|
||||
sda2 = sda5+sda6+sda7+sda8+sda9 一共大概450G,于是机制的楼主推断出sda5便是我要的D盘;
|
||||
|
||||
我的D盘,时尚时尚最时尚,我情不自禁的要把D盘挂载到Linux下,于是乎
|
||||
|
||||
cd /mnt 一般挂载到/mnt 或者 /media, 都可以
|
||||
|
||||
ls 发现目前啥都没有
|
||||
|
||||
mkdir thinkiii 我想把D盘挂载过来取名thinkiii,这个无所谓的
|
||||
|
||||
mount /dev/sda5 /mnt/thinkiii 这样便把sda5也就是D盘挂载到/mnt/thinkiii了
|
||||
|
||||
cd /mnt/thinkiii
|
||||
|
||||
ls 便可查看D盘的文件了
|
||||
|
||||
|
||||
————————————————
|
||||
版权声明:本文为CSDN博主「浴前带刀侍卫」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
|
||||
楼主给笔记本电脑装了双系统,常年放在寝室开着,平时用实验室的电脑,偶尔需要笔记本的时候就远程控制。后来就发现了一个问题,我远程连接linux的时候,只能看见Linux这个分区的内容,windows的D、E、F盘都没有,这个时候如果要找这些盘符里的文件就比较麻烦了
|
||||
|
||||
于是乎,机智的楼主看了一下Linux里的设备文件
|
||||
|
||||
cd /dev
|
||||
|
||||
ls -l sd*
|
||||
|
||||
能看见楼主的笔记本硬盘分了好几个区C D E F G H,为了确保准确,楼主又看了一下硬盘信息
|
||||
|
||||
fdisk -lu
|
||||
|
||||
第四列Blocks指的分区大小,sda1=52,436,128B 大概50GB,这不是我的C盘么
|
||||
|
||||
最后一个sda9 = 12545024B 大概 12GB就是我安装Linux的盘符
|
||||
|
||||
sda2 = sda5+sda6+sda7+sda8+sda9 一共大概450G,于是机制的楼主推断出sda5便是我要的D盘;
|
||||
|
||||
我的D盘,时尚时尚最时尚,我情不自禁的要把D盘挂载到Linux下,于是乎
|
||||
|
||||
cd /mnt 一般挂载到/mnt 或者 /media, 都可以
|
||||
|
||||
ls 发现目前啥都没有
|
||||
|
||||
mkdir thinkiii 我想把D盘挂载过来取名thinkiii,这个无所谓的
|
||||
|
||||
mount /dev/sda5 /mnt/thinkiii 这样便把sda5也就是D盘挂载到/mnt/thinkiii了
|
||||
|
||||
cd /mnt/thinkiii
|
||||
|
||||
ls 便可查看D盘的文件了
|
||||
|
||||
|
||||
————————————————
|
||||
版权声明:本文为CSDN博主「浴前带刀侍卫」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
|
||||
原文链接:https://blog.csdn.net/yaoxingshuai/article/details/50563245
|
||||
@@ -1,7 +1,7 @@
|
||||
| |
|
||||
|---|
|
||||
|106.12.121.86|
|
||||
|
||||
|
||||
我2be黑星
|
||||
|
||||
|
||||

|
||||
@@ -1,16 +1,16 @@
|
||||
==首先,安装mysql==
|
||||
$ sudo apt-get install mysql-server$ sudo apt-get install mysql-client安装时输出root用户的密码
|
||||
==在安装phpmyadmin==
|
||||
$ sudo apt-get install phpmyadmin$ sudo apt-get install php-mbstring$ sudo apt-get install php-gettext安装时选择自动配置数据库,输入数据库root账号的密码如果不安装以上两个php软件包,则会报错或者白屏,提示找不到/usr/share/php/php-gettext/gettext.inc之类的错误
|
||||
==建立====/var/www/html== ==下的软连接==
|
||||
$ sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
|
||||
==修改php配置文件==
|
||||
==首先,安装mysql==
|
||||
$ sudo apt-get install mysql-server$ sudo apt-get install mysql-client安装时输出root用户的密码
|
||||
==在安装phpmyadmin==
|
||||
$ sudo apt-get install phpmyadmin$ sudo apt-get install php-mbstring$ sudo apt-get install php-gettext安装时选择自动配置数据库,输入数据库root账号的密码如果不安装以上两个php软件包,则会报错或者白屏,提示找不到/usr/share/php/php-gettext/gettext.inc之类的错误
|
||||
==建立====/var/www/html== ==下的软连接==
|
||||
$ sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
|
||||
==修改php配置文件==
|
||||
$ sudo vim /etc/php/7.0/apache2/php.inidisplay_errors = On(显示错误日志,出现两次,都要改,不然无效)extension=php_mbstring.dll (开启mbstring)
|
||||
|
||||
==重启apache==
|
||||
$ sudo /etc/init.d/apache2 restart
|
||||
==1==
|
||||
==2==
|
||||
==访问端口localhost/phpmyadmin,输入账号密码即可==
|
||||
|
||||
==重启apache==
|
||||
$ sudo /etc/init.d/apache2 restart
|
||||
==1==
|
||||
==2==
|
||||
==访问端口localhost/phpmyadmin,输入账号密码即可==
|
||||
==重点提要:因为默认安装phpmyadmin时会安装apahce和php等依赖包,由于是16.04系统,会默认安装php7.0,php7.0又没有默认自带php-mbstring,php-gettext这两个包,所以会报错。==
|
||||
\> 来自 \<[http://blog.csdn.net/l6807718/article/details/51374915](http://blog.csdn.net/l6807718/article/details/51374915)\>
|
||||
> 来自 <[http://blog.csdn.net/l6807718/article/details/51374915](http://blog.csdn.net/l6807718/article/details/51374915)>
|
||||
@@ -1,2 +1,2 @@
|
||||
**阿里云下Ubuntu16下LAMP+wordpress建站记录**
|
||||
\> 来自 \<[http://blog.csdn.net/code12hour/article/details/63691403](http://blog.csdn.net/code12hour/article/details/63691403)\>
|
||||
> 来自 <[http://blog.csdn.net/code12hour/article/details/63691403](http://blog.csdn.net/code12hour/article/details/63691403)>
|
||||
@@ -1,42 +1,42 @@
|
||||
==搞了下====FTP====服务器,基本上能遇到的问题都遇到了====-====。====-!==
|
||||
==先说步骤====:==
|
||||
==1.====安装====vsftpd====软件包==
|
||||
sudo apt-get install vsftpd
|
||||
==2.====打开配置文件==
|
||||
vim /etc/vsftpd.conf
|
||||
==3.====修改参数==
|
||||
==搞了下====FTP====服务器,基本上能遇到的问题都遇到了====-====。====-!==
|
||||
==先说步骤====:==
|
||||
==1.====安装====vsftpd====软件包==
|
||||
sudo apt-get install vsftpd
|
||||
==2.====打开配置文件==
|
||||
vim /etc/vsftpd.conf
|
||||
==3.====修改参数==
|
||||
==一些参数可以去掉注释激活,为了方便,你也可以注释全部,然后添加下面的设置==
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
|
||||
#这些设置系统默认是开启的,可以不管listen=NOlisten_ipv6=YESdirmessage_enable=YESuse_localtime=YESxferlog_enable=YESconnect_from_port_20=YES
|
||||
#下面的就要自定义设置了,建议系统默认的不管,然后复制下面的
|
||||
#是否允许匿名访问,NO为不允许anonymous_enable=NO#是否允许本地用户访问,就是linux本机中存在的用户,YES允许local_enable=YES#是否开启写模式,YES为开启write_enable=YES#新建文件权限,一般设置为022,那么新建后的文件的权限就是777-022=755local_umask=022
|
||||
#是否启动userlist为通过模式,YES的话只有存在于userlist文件中的用户才能登录ftp(可以理解为userlist是一个白名单),NO的话,白名单失效,和下面一个参数配合使用userlist_enable=YES#是否启动userlist为禁止模式,YES表示在userlist中的用户禁止登录ftp(黑名单),NO表示黑名单失效,我们已经让userlist作为一个白名单,所以无需使用黑名单功能userlist_deny=NO#指定哪个文件作为userlist文件,我们稍后编辑这个文件userlist_file=/etc/vsftpd.user_list
|
||||
#是否限制本地所有用户切换根目录的权限,YES为开启限制,即登录后的用户不能访问ftp根目录以外的目录,当然要限制啦chroot_local_user=YES#是否启动限制用户的名单list为允许模式,上面的YES限制了所有用户,可以用这个名单作为白名单,作为例外允许访问ftp根目录以外chroot_list_enable=YES#设置哪个文件是list文件,里面的用户将不受限制的去访问ftp根目录以外的目录chroot_list_file=/etc/vsftpd.chroot_list#是否开启写模式,开启后可以进行创建文件夹等写入操作allow_writeable_chroot=YES
|
||||
#设置ftp根目录的位置,这个文件我们稍后自己创建local_root=/var/myftp
|
||||
# 这些设置系统默认是开启的,可以不管listen=NOlisten_ipv6=YESdirmessage_enable=YESuse_localtime=YESxferlog_enable=YESconnect_from_port_20=YES
|
||||
# 下面的就要自定义设置了,建议系统默认的不管,然后复制下面的
|
||||
# 是否允许匿名访问,NO为不允许anonymous_enable=NO#是否允许本地用户访问,就是linux本机中存在的用户,YES允许local_enable=YES#是否开启写模式,YES为开启write_enable=YES#新建文件权限,一般设置为022,那么新建后的文件的权限就是777-022=755local_umask=022
|
||||
# 是否启动userlist为通过模式,YES的话只有存在于userlist文件中的用户才能登录ftp(可以理解为userlist是一个白名单),NO的话,白名单失效,和下面一个参数配合使用userlist_enable=YES#是否启动userlist为禁止模式,YES表示在userlist中的用户禁止登录ftp(黑名单),NO表示黑名单失效,我们已经让userlist作为一个白名单,所以无需使用黑名单功能userlist_deny=NO#指定哪个文件作为userlist文件,我们稍后编辑这个文件userlist_file=/etc/vsftpd.user_list
|
||||
# 是否限制本地所有用户切换根目录的权限,YES为开启限制,即登录后的用户不能访问ftp根目录以外的目录,当然要限制啦chroot_local_user=YES#是否启动限制用户的名单list为允许模式,上面的YES限制了所有用户,可以用这个名单作为白名单,作为例外允许访问ftp根目录以外chroot_list_enable=YES#设置哪个文件是list文件,里面的用户将不受限制的去访问ftp根目录以外的目录chroot_list_file=/etc/vsftpd.chroot_list#是否开启写模式,开启后可以进行创建文件夹等写入操作allow_writeable_chroot=YES
|
||||
# 设置ftp根目录的位置,这个文件我们稍后自己创建local_root=/var/myftp
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
|
||||
==重启====vsftpd==
|
||||
|
||||
sudo /etc/init.d/vsftpd restart
|
||||
|
||||
==4.====添加====ftp====用户==
|
||||
==顺便将将用户目录设置为我们上面的====ftp====根目录==
|
||||
sudo useradd -d /var/myftp ftpuser
|
||||
==设置用户密码==
|
||||
sudo passwd ftpuser
|
||||
==5.====创建需要的文件,设置文件夹权限==
|
||||
==上面我们指定了两个文件,====userlist====文件和====list====文件,有时候系统不会自动创建,你要自己创建==
|
||||
vim /etc/vsftpd.user_list
|
||||
==然后添加====ftpuser====进去作为白名单的一员==
|
||||
vim /etc/vsftpd.chroot_list
|
||||
==设为空即可==
|
||||
==创建用户文件夹,设置权限==
|
||||
mkdir /var/myftp
|
||||
==权限设置可以根据你的使用场景来设置,我这里在根目录下禁止此用户写,然后下面建两个文件夹,一个====download====只允许读取,====upload====允许写和读==
|
||||
|
||||
==重启====vsftpd==
|
||||
|
||||
sudo /etc/init.d/vsftpd restart
|
||||
|
||||
==4.====添加====ftp====用户==
|
||||
==顺便将将用户目录设置为我们上面的====ftp====根目录==
|
||||
sudo useradd -d /var/myftp ftpuser
|
||||
==设置用户密码==
|
||||
sudo passwd ftpuser
|
||||
==5.====创建需要的文件,设置文件夹权限==
|
||||
==上面我们指定了两个文件,====userlist====文件和====list====文件,有时候系统不会自动创建,你要自己创建==
|
||||
vim /etc/vsftpd.user_list
|
||||
==然后添加====ftpuser====进去作为白名单的一员==
|
||||
vim /etc/vsftpd.chroot_list
|
||||
==设为空即可==
|
||||
==创建用户文件夹,设置权限==
|
||||
mkdir /var/myftp
|
||||
==权限设置可以根据你的使用场景来设置,我这里在根目录下禁止此用户写,然后下面建两个文件夹,一个====download====只允许读取,====upload====允许写和读==
|
||||
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
|
||||
@@ -44,18 +44,18 @@ chmod 555 /var/myftpcd /var/myftpmkdir uploadchmod 755 uploadmkdir d
|
||||
|
||||
[](javascript:void\(0\);)
|
||||
|
||||
|
||||
==最后检查一下文件所有者,都改为====ftpuser==
|
||||
==6.====使用====ftp====,解决各种问题==
|
||||
==linux====访问输入====ftp== ==加== ==你的====IP==
|
||||
ftp xxx.xxx.xxx.xxx
|
||||
==输入用户名====ftpuser====和密码==
|
||||
==如果登录出现====530====错误:==
|
||||
vim /etc/pam.d/vsftpd
|
||||
==注释掉====#auth required pam_shells.so==
|
||||
==然后====ls====一下,如果失败了,切换到被动模式即可==
|
||||
passive mode
|
||||
==然后====mkdir====一下发现无法创建文件夹== ==550 create directory operation failed==
|
||||
setsebool -P ftpd_disable_trans on/etc/init.d/vsftpd restart
|
||||
|
||||
==最后检查一下文件所有者,都改为====ftpuser==
|
||||
==6.====使用====ftp====,解决各种问题==
|
||||
==linux====访问输入====ftp== ==加== ==你的====IP==
|
||||
ftp xxx.xxx.xxx.xxx
|
||||
==输入用户名====ftpuser====和密码==
|
||||
==如果登录出现====530====错误:==
|
||||
vim /etc/pam.d/vsftpd
|
||||
==注释掉====#auth required pam_shells.so==
|
||||
==然后====ls====一下,如果失败了,切换到被动模式即可==
|
||||
passive mode
|
||||
==然后====mkdir====一下发现无法创建文件夹== ==550 create directory operation failed==
|
||||
setsebool -P ftpd_disable_trans on/etc/init.d/vsftpd restart
|
||||
==即可==
|
||||
\> 来自 \<[https://www.cnblogs.com/dupengcheng/p/6790143.html](https://www.cnblogs.com/dupengcheng/p/6790143.html)\>
|
||||
> 来自 <[https://www.cnblogs.com/dupengcheng/p/6790143.html](https://www.cnblogs.com/dupengcheng/p/6790143.html)>
|
||||
@@ -1,21 +1,21 @@
|
||||
1. 首先,安装Apache2,安装命令:sudo apt-get install apache2
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=1)3. 安装完成后,进入到/etc/apache2中(根据自己的实际安装目录),这边我配置文件在/etc/apache2中。 我们看到没有想象中的httpd.conf配置文件,这里要说明的是apache2的配置文件是apache2.conf,而不是http.conf。 打开apache2.conf。写入两条语句ServerName localhostDirectoryIndex index.html index.htm index.php这里的ServerName localhost是为了防止最后开启apache2服务的时候会提示DNS出错。DirectoryIndex index.html index.htm index.php是默认目录的写法。保存退出。可以在apache2.conf中加入 AddDefaultCharset GB2312  设置默认字符集,定义服务器返回给客户机默认字符集(由于西欧UTF-8是Apache默认字符集,因此当访问有中文的网页时会出现乱码,这时只要将字符集改成GB2312,再重启Apache服务即可)Listen 192.168.1.1:80 设置监听ip是192.168.1.1的地址和端口为80Listen 192.168.1.2:8080 设置监听ip是192.168.1.2的地址和端口为8080Alias /down "/sofТWare /download" 创建虚拟目录(创建名为down的虚拟目录,它对应的物理路径是:/sofТWare /download)Alias /ftp "/var/ftp" 创建虚拟目录(创建名为ftp的虚拟目录,它对应的物理路径是:/var/ftp)\<Directory "/var/www/html"\> 设置目录权限(\<Directory "目录路径"\>此次写设置目录权限的语句\</Directory\>) Options FollowSymLinks page:116 AllowOverride None\</Directory\>
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=2)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=1)3. 安装完成后,进入到/etc/apache2中(根据自己的实际安装目录),这边我配置文件在/etc/apache2中。 我们看到没有想象中的httpd.conf配置文件,这里要说明的是apache2的配置文件是apache2.conf,而不是http.conf。 打开apache2.conf。写入两条语句ServerName localhostDirectoryIndex index.html index.htm index.php这里的ServerName localhost是为了防止最后开启apache2服务的时候会提示DNS出错。DirectoryIndex index.html index.htm index.php是默认目录的写法。保存退出。可以在apache2.conf中加入 AddDefaultCharset GB2312  设置默认字符集,定义服务器返回给客户机默认字符集(由于西欧UTF-8是Apache默认字符集,因此当访问有中文的网页时会出现乱码,这时只要将字符集改成GB2312,再重启Apache服务即可)Listen 192.168.1.1:80 设置监听ip是192.168.1.1的地址和端口为80Listen 192.168.1.2:8080 设置监听ip是192.168.1.2的地址和端口为8080Alias /down "/sofТWare /download" 创建虚拟目录(创建名为down的虚拟目录,它对应的物理路径是:/sofТWare /download)Alias /ftp "/var/ftp" 创建虚拟目录(创建名为ftp的虚拟目录,它对应的物理路径是:/var/ftp)<Directory "/var/www/html"> 设置目录权限(<Directory "目录路径">此次写设置目录权限的语句</Directory>) Options FollowSymLinks page:116 AllowOverride None</Directory>
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=2)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=3)7. 需要说明的是,在apache2中,根设置(默认主目录)在 /etc/apache2/sites-АVailable/default中,我们打开default,进行配置。如图,这里我们的默认主目录设置的路径是/var/www,文档最上方的VirtualHost后方的*代表通配符,即表示所有本机ip地址,监听端口为80,ServerName填写你注册的域名,没有可以不填。保存退出。
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=4)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=4)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=5)11. 至此,基本配置已经全部完成,查看本机ip地址。输入启用apache2的命令:/etc/init.d/apache2 restart.并在浏览器中输入本机ip地址。成功!
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=6)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=7)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=6)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=7)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=8)
|
||||
|
||||
==END==
|
||||
==END==
|
||||
注意事项
|
||||
|
||||
18. 配置文件从httpd.conf变成了apache2.con \> 来自 \<[https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html](https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html)\>
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=1)[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=2)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=3)[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=4)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=5)[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=6)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=7)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=8)
|
||||
\> 来自 \<[https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html](https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html)\>
|
||||
18. 配置文件从httpd.conf变成了apache2.con > 来自 <[https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html](https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html)>
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=1)[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=2)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=3)[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=4)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=5)[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=6)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=7)
|
||||
[](http://jingyan.baidu.com/album/9158e0006581d1a2541228b5.html?picindex=8)
|
||||
> 来自 <[https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html](https://jingyan.baidu.com/article/9158e0006581d1a2541228b5.html)>
|
||||

|
||||
@@ -1,302 +1,304 @@
|
||||
一). ubuntu下mysql安装布局:
|
||||
/usr/bin 客户端程序和mysql_install_db
|
||||
/db 数据库和日志文件
|
||||
/var/run mysqld 服务器
|
||||
/etc/mysql mysql 配置文件my.cnf
|
||||
/usr/share/mysql 字符集,基准程序和错误消息
|
||||
/etc/init.d/mysql 启动mysql服务器
|
||||
二). 设置mysql服务器随开关机自动启动和关闭:
|
||||
系统 -\> 系统管理 -\> 服务
|
||||
进行到“服务设置”窗口后,激活mysql数据库服务即可
|
||||
三). 修改mysql数据库文件的存储目录:
|
||||
MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步:
|
||||
1、home目录下建立data目录
|
||||
==cd /home==
|
||||
==mkdir data==
|
||||
2、把MySQL服务进程停掉:
|
||||
==mysqladmin -u root -p shutdown==
|
||||
3、把/var/lib/mysql整个目录移到/home/data
|
||||
==mv /var/lib/mysql== ==/home/data/==
|
||||
这样就把MySQL的数据文件移动到了/home/data/mysql下
|
||||
4、找到my.cnf配置文件
|
||||
如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下:
|
||||
==[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf== ==/etc/my.cnf==
|
||||
5、编辑MySQL的配置文件/etc/my.cnf
|
||||
为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。操作如下:
|
||||
==vi== ==my.cnf== ==(====用====vi====工具编辑====my.cnf====文件,找到下列数据修改之====)==
|
||||
==# The MySQL server==
|
||||
==[mysqld]== ==port== === 3306==
|
||||
==#socket== === /var/lib/mysql/mysql.sock====(原内容,为了更稳妥用====“#”====注释此行)==
|
||||
==socket== === /home/data/mysql/mysql.sock== ==(加上此行)==
|
||||
6、修改MySQL启动脚本/etc/init.d/mysql
|
||||
最后,需要修改MySQL启动脚本/etc/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:home/data/mysql。
|
||||
==[root@test1 etc]# vi== ==/etc/init.d/mysql==
|
||||
==#datadir=/var/lib/mysql====(注释此行)==
|
||||
==datadir=/home/data/mysql== ==(加上此行)==
|
||||
7、重新启动MySQL服务
|
||||
/etc/init.d/mysql start(启动:sudo /etc/init.d/mysql start 停止:sudo /etc/init.d/mysql stop 重启:sudo /etc/init.d/mysql restart)
|
||||
或用reboot命令重启Linux
|
||||
如果工作正常移动就成功了,否则对照前面的7步再检查一下。还要注意目录的属主和权限。
|
||||
四). 配置mysql数据库的INNODB存储引擎:
|
||||
1 . 查看mysql存储引擎情况: 登录mysql数据库,在mysql\>提示符下搞入show engines;命令。发现: InnoDB | YES,说明此mysql数据库服务器支持InnoDB引擎。
|
||||
2. 设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,保存。
|
||||
3. 重启mysql服务器:mysqladmin -u root -p shutdown(回车),sudo /etc/init.d/mysql start(回车)。
|
||||
4. 登录mysql数据库,在mysql\>提示符下搞入show engines;命令。如果出现 InnoDB |DEFAULT,则表示我们 设置InnoDB为默认引擎成功。
|
||||
ps: 这里我用重启命令sudo /etc/init.d/mysql restart,出现错误信息, 所以用了上面(步骤3)那种关闭服务又启动的笨方法。
|
||||
五)、MYSQL数据库表大小写问题
|
||||
vi /etc/mysql/my.cnf
|
||||
在[mysqld]后添加
|
||||
lower_case_table_names=0 区分大小写
|
||||
lower_case_table_names=1 不区分大小写
|
||||
重启MYSQL服务
|
||||
MYSQL在LINUX下数据库名、表名、列名、别名大小写规则如下:
|
||||
1.数据库名与表名是严格区分大小写的
|
||||
2.表的别名是严格区分大小写的
|
||||
3.列名与列的别名在所有的情况下均是忽略大小写的
|
||||
4.变量名也是严格区分大小写的
|
||||
MYSQL在WINDOWS下都不区分大小写
|
||||
六)、管理Mysql
|
||||
一). ubuntu下mysql安装布局:
|
||||
/usr/bin 客户端程序和mysql_install_db
|
||||
/db 数据库和日志文件
|
||||
/var/run mysqld 服务器
|
||||
/etc/mysql mysql 配置文件my.cnf
|
||||
/usr/share/mysql 字符集,基准程序和错误消息
|
||||
/etc/init.d/mysql 启动mysql服务器
|
||||
二). 设置mysql服务器随开关机自动启动和关闭:
|
||||
系统 -> 系统管理 -> 服务
|
||||
进行到“服务设置”窗口后,激活mysql数据库服务即可
|
||||
三). 修改mysql数据库文件的存储目录:
|
||||
MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步:
|
||||
1、home目录下建立data目录
|
||||
==cd /home==
|
||||
==mkdir data==
|
||||
2、把MySQL服务进程停掉:
|
||||
==mysqladmin -u root -p shutdown==
|
||||
3、把/var/lib/mysql整个目录移到/home/data
|
||||
==mv /var/lib/mysql== ==/home/data/==
|
||||
这样就把MySQL的数据文件移动到了/home/data/mysql下
|
||||
4、找到my.cnf配置文件
|
||||
如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下:
|
||||
==[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf== ==/etc/my.cnf==
|
||||
5、编辑MySQL的配置文件/etc/my.cnf
|
||||
为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。操作如下:
|
||||
==vi== ==my.cnf== ==(====用====vi====工具编辑====my.cnf====文件,找到下列数据修改之====)==
|
||||
==# The MySQL server==
|
||||
==[mysqld]== ==port== === 3306==
|
||||
==#socket== === /var/lib/mysql/mysql.sock====(原内容,为了更稳妥用====“#”====注释此行)==
|
||||
==socket== === /home/data/mysql/mysql.sock== ==(加上此行)==
|
||||
6、修改MySQL启动脚本/etc/init.d/mysql
|
||||
最后,需要修改MySQL启动脚本/etc/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:home/data/mysql。
|
||||
==[root@test1 etc]# vi== ==/etc/init.d/mysql==
|
||||
==#datadir=/var/lib/mysql====(注释此行)==
|
||||
==datadir=/home/data/mysql== ==(加上此行)==
|
||||
7、重新启动MySQL服务
|
||||
/etc/init.d/mysql start(启动:sudo /etc/init.d/mysql start 停止:sudo /etc/init.d/mysql stop 重启:sudo /etc/init.d/mysql restart)
|
||||
或用reboot命令重启Linux
|
||||
如果工作正常移动就成功了,否则对照前面的7步再检查一下。还要注意目录的属主和权限。
|
||||
四). 配置mysql数据库的INNODB存储引擎:
|
||||
1 . 查看mysql存储引擎情况: 登录mysql数据库,在mysql>提示符下搞入show engines;命令。发现: InnoDB | YES,说明此mysql数据库服务器支持InnoDB引擎。
|
||||
2. 设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,保存。
|
||||
3. 重启mysql服务器:mysqladmin -u root -p shutdown(回车),sudo /etc/init.d/mysql start(回车)。
|
||||
4. 登录mysql数据库,在mysql>提示符下搞入show engines;命令。如果出现 InnoDB |DEFAULT,则表示我们 设置InnoDB为默认引擎成功。
|
||||
ps: 这里我用重启命令sudo /etc/init.d/mysql restart,出现错误信息, 所以用了上面(步骤3)那种关闭服务又启动的笨方法。
|
||||
五)、MYSQL数据库表大小写问题
|
||||
vi /etc/mysql/my.cnf
|
||||
在[mysqld]后添加
|
||||
lower_case_table_names=0 区分大小写
|
||||
lower_case_table_names=1 不区分大小写
|
||||
重启MYSQL服务
|
||||
MYSQL在LINUX下数据库名、表名、列名、别名大小写规则如下:
|
||||
1.数据库名与表名是严格区分大小写的
|
||||
2.表的别名是严格区分大小写的
|
||||
3.列名与列的别名在所有的情况下均是忽略大小写的
|
||||
4.变量名也是严格区分大小写的
|
||||
MYSQL在WINDOWS下都不区分大小写
|
||||
六)、管理Mysql
|
||||
1、删除 mysql
|
||||
|
||||
1 sudo apt-get autoremove --purge mysql-server-5.0
|
||||
2 sudo apt-get remove mysql-server
|
||||
3 sudo apt-get autoremove mysql-server
|
||||
4 sudo apt-get remove mysql-common (非常重要)
|
||||
|
||||
1 sudo apt-get autoremove --purge mysql-server-5.0
|
||||
2 sudo apt-get remove mysql-server
|
||||
3 sudo apt-get autoremove mysql-server
|
||||
4 sudo apt-get remove mysql-common (非常重要)
|
||||
上面的其实有一些是多余的,建议还是按照顺序执行一遍
|
||||
|
||||
|
||||
清理残留数据
|
||||
|
||||
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
|
||||
==2、安装 mysql======
|
||||
1 sudo apt-get install mysql-server
|
||||
2 sudo apt-get install mysql-client
|
||||
3 sudo apt-get install php5-mysql(安装php5-mysql 是将php和mysql连接起来 )
|
||||
====
|
||||
==一旦安装完成,MySQL 服务器应该自动启动。您可以在终端提示符后运行以下命令来检查 MySQL 服务器是否正在运行:======
|
||||
|
||||
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
|
||||
==2、安装 mysql======
|
||||
1 sudo apt-get install mysql-server
|
||||
2 sudo apt-get install mysql-client
|
||||
3 sudo apt-get install php5-mysql(安装php5-mysql 是将php和mysql连接起来 )
|
||||
====
|
||||
==一旦安装完成,MySQL 服务器应该自动启动。您可以在终端提示符后运行以下命令来检查 MySQL 服务器是否正在运行:======
|
||||
1 sudo netstat -tap | grep mysql
|
||||
|
||||
当您运行该命令时,您可以看到类似下面的行:
|
||||
tcp 0 0 localhost.localdomain:mysql *:* LISTEN -
|
||||
如果服务器不能正常运行,您可以通过下列命令启动它:
|
||||
|
||||
当您运行该命令时,您可以看到类似下面的行:
|
||||
tcp 0 0 localhost.localdomain:mysql *:* LISTEN -
|
||||
如果服务器不能正常运行,您可以通过下列命令启动它:
|
||||
1 sudo /etc/init.d/mysql restart
|
||||
|
||||
3、进入mysql
|
||||
$mysql -u root -p 管理员密码
|
||||
配置 MySQL 的管理员密码:
|
||||
1 sudo mysqladmin -u root password newpassword
|
||||
[MySQL 导入慢的解决方法](http://www.gagahappy.com/mysqldump-import-slow/)
|
||||
MySQL导出的SQL语句在导入时有可能会非常非常慢。在导出时合理使用几个参数,可以大大加快导 入的速度。
|
||||
-e 使用包括几个VALUES列表的多行INSERT语法;
|
||||
–max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小;
|
||||
–net_buffer_length=XXX TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行。
|
||||
注意:max_allowed_packet和net_buffer_length不能比目标数据库的设定数值 大,否则可能出错。
|
||||
首先确定目标库的参数值
|
||||
mysql\>show variables like ‘max_allowed_packet’;
|
||||
mysql\>show variables like ‘net_buffer_length’;
|
||||
根据参数值书写mysqldump命令,如:
|
||||
E:\eis\>mysqldump -uroot -p eis_db goodclassification -e –max_allowed_packet=1048576 –net_buffer_length=16384 \>good3.sql
|
||||
==三====.====从数据库导出数据库文件:==
|
||||
==1.====将数据库====mydb====导出到====e:\mysql\mydb.sql====文件中:==
|
||||
==打开开始====-\>====运行====-\>====输入====cmd== ==进入命令行模式==
|
||||
==c:\\>mysqldump -h localhost -u root -p mydb \>e:\mysql\mydb.sql==
|
||||
==然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。==
|
||||
==2.====将数据库====mydb====中的====mytable====导出到====e:\mysql\mytable.sql====文件中:==
|
||||
==c:\\>mysqldump -h localhost -u root -p mydb mytable\>e:\mysql\mytable.sql==
|
||||
==3.====将数据库====mydb====的结构导出到====e:\mysql\mydb_stru.sql====文件中:==
|
||||
==c:\\>mysqldump -h localhost -u root -p mydb --add-drop-table \>e:\mysql\mydb_stru.sql==
|
||||
==四====.====从外部文件导入数据到数据库中:==
|
||||
==从====e:\mysql\mydb2.sql====中将文件中的====SQL====语句导入数据库中:==
|
||||
==1.====从命令行进入====mysql====,然后用命令====CREATE DATABASE mydb2;====创建数据库====mydb2====。==
|
||||
==2.====退出====mysql== ==可以输入命令====exit====;或者====quit====;==
|
||||
==3.====在====CMD====中输入下列命令:==
|
||||
==c:\\>mysql -h localhost -u root -p mydb2 \< e:\mysql\mydb2.sql==
|
||||
==然后输入密码,就====OK====了。==
|
||||
==五====.====下面谈一下关于导入文件大小限制问题的解决:==
|
||||
==默认情况下:====mysql== ==对导入文件大小有限制的,最大为====2M====,所以当文件很大时候,直接无法导入,下面就这个问题的解决列举如下:==
|
||||
==1.====在====php.ini====中修改相关参数:==
|
||||
==影响====mysql====导入文件大小的参数有三个:==
|
||||
==memory_limit=128M,upload_max_filesize=2M,post_max_size=8M==
|
||||
==修改====upload_max_filesize=200 M== ==这里修改满足你需要的大小,==
|
||||
==可以同时修改其他两项====memory_limit=250M post_max_size=200M==
|
||||
|
||||
3、进入mysql
|
||||
$mysql -u root -p 管理员密码
|
||||
配置 MySQL 的管理员密码:
|
||||
1 sudo mysqladmin -u root password newpassword
|
||||
[MySQL 导入慢的解决方法](http://www.gagahappy.com/mysqldump-import-slow/)
|
||||
MySQL导出的SQL语句在导入时有可能会非常非常慢。在导出时合理使用几个参数,可以大大加快导 入的速度。
|
||||
-e 使用包括几个VALUES列表的多行INSERT语法;
|
||||
–max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小;
|
||||
–net_buffer_length=XXX TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行。
|
||||
注意:max_allowed_packet和net_buffer_length不能比目标数据库的设定数值 大,否则可能出错。
|
||||
首先确定目标库的参数值
|
||||
mysql>show variables like ‘max_allowed_packet’;
|
||||
mysql>show variables like ‘net_buffer_length’;
|
||||
根据参数值书写mysqldump命令,如:
|
||||
E:\eis>mysqldump -uroot -p eis_db goodclassification -e –max_allowed_packet=1048576 –net_buffer_length=16384 >good3.sql
|
||||
==三====.====从数据库导出数据库文件:==
|
||||
==1.====将数据库====mydb====导出到====e:\mysql\mydb.sql====文件中:==
|
||||
==打开开始====->====运行====->====输入====cmd== ==进入命令行模式==
|
||||
==c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql==
|
||||
==然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。==
|
||||
==2.====将数据库====mydb====中的====mytable====导出到====e:\mysql\mytable.sql====文件中:==
|
||||
==c:\>mysqldump -h localhost -u root -p mydb mytable>e:\mysql\mytable.sql==
|
||||
==3.====将数据库====mydb====的结构导出到====e:\mysql\mydb_stru.sql====文件中:==
|
||||
==c:\>mysqldump -h localhost -u root -p mydb --add-drop-table >e:\mysql\mydb_stru.sql==
|
||||
==四====.====从外部文件导入数据到数据库中:==
|
||||
==从====e:\mysql\mydb2.sql====中将文件中的====SQL====语句导入数据库中:==
|
||||
==1.====从命令行进入====mysql====,然后用命令====CREATE DATABASE mydb2;====创建数据库====mydb2====。==
|
||||
==2.====退出====mysql== ==可以输入命令====exit====;或者====quit====;==
|
||||
==3.====在====CMD====中输入下列命令:==
|
||||
==c:\>mysql -h localhost -u root -p mydb2 < e:\mysql\mydb2.sql==
|
||||
==然后输入密码,就====OK====了。==
|
||||
==五====.====下面谈一下关于导入文件大小限制问题的解决:==
|
||||
==默认情况下:====mysql== ==对导入文件大小有限制的,最大为====2M====,所以当文件很大时候,直接无法导入,下面就这个问题的解决列举如下:==
|
||||
==1.====在====php.ini====中修改相关参数:==
|
||||
==影响====mysql====导入文件大小的参数有三个:==
|
||||
==memory_limit=128M,upload_max_filesize=2M,post_max_size=8M==
|
||||
==修改====upload_max_filesize=200 M== ==这里修改满足你需要的大小,==
|
||||
==可以同时修改其他两项====memory_limit=250M post_max_size=200M==
|
||||
==这样就可以导入====200M====以下的====.sql====文件了==
|
||||
\> 来自 \<[http://blog.csdn.net/qingrx/article/details/7987030](http://blog.csdn.net/qingrx/article/details/7987030)\>
|
||||
> 来自 <[http://blog.csdn.net/qingrx/article/details/7987030](http://blog.csdn.net/qingrx/article/details/7987030)>
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||
进入mysql
|
||||
$mysql -u root -p 管理员密码
|
||||
进入mysql
|
||||
$mysql -u root -p 管理员密码
|
||||
==进入MySQL Command line client下==
|
||||
|
||||
==查看当前使用的数据库:==
|
||||
==mysql\>select database();==
|
||||
==mysql\>status;==
|
||||
==mysql\>show tables;==
|
||||
==mysql\>show databases;//可以查看有哪些数据库,返回数据库名(databaseName)==
|
||||
==mysql\>use databaseName; //更换当前使用的数据库==
|
||||
==mysql\>show tables; //返回当前数据库下的所有表的名称==
|
||||
==或者也可以直接用以下命令==
|
||||
==mysql\>show tables from databaseName;//databaseName可以用show databases得来==
|
||||
==mysql查看表结构命令,如下:==
|
||||
==desc 表名;==
|
||||
==show columns from 表名;==
|
||||
==或者==
|
||||
==describe 表名;==
|
||||
==show create table 表名;==
|
||||
==或者==
|
||||
==use information_schema==
|
||||
==select * from columns where table_name='表名';==
|
||||
==查看警告:==
|
||||
==Rows matched: 1 Changed: 0 Warnings: 1==
|
||||
==mysql\> show warnings;==
|
||||
\> 来自 \<[http://database.51cto.com/art/201011/234471.htm](http://database.51cto.com/art/201011/234471.htm)\>
|
||||
|
||||
|
||||
==查看当前使用的数据库:==
|
||||
==mysql>select database();==
|
||||
==mysql>status;==
|
||||
==mysql>show tables;==
|
||||
==mysql>show databases;//可以查看有哪些数据库,返回数据库名(databaseName)==
|
||||
==mysql>use databaseName; //更换当前使用的数据库==
|
||||
==mysql>show tables; //返回当前数据库下的所有表的名称==
|
||||
==或者也可以直接用以下命令==
|
||||
==mysql>show tables from databaseName;//databaseName可以用show databases得来==
|
||||
==mysql查看表结构命令,如下:==
|
||||
==desc 表名;==
|
||||
==show columns from 表名;==
|
||||
==或者==
|
||||
==describe 表名;==
|
||||
==show create table 表名;==
|
||||
==或者==
|
||||
==use information_schema==
|
||||
==select * from columns where table_name='表名';==
|
||||
==查看警告:==
|
||||
==Rows matched: 1 Changed: 0 Warnings: 1==
|
||||
==mysql> show warnings;==
|
||||
> 来自 <[http://database.51cto.com/art/201011/234471.htm](http://database.51cto.com/art/201011/234471.htm)>
|
||||
|
||||
|
||||
 
|
||||
|
||||
4]如何创建和删除一个数据库?
|
||||
|
||||
|
||||
比如我要创建一个名为linux的数据库,应该运行如下命令
|
||||
|
||||
mysql\> create database [数据库名];
|
||||
|
||||
|
||||
mysql> create database [数据库名];
|
||||
|
||||
所以我们应该运行如下的命令,来创建名为linux的数据库
|
||||
|
||||
mysql\> create database linux;
|
||||
|
||||
mysql> create database linux;
|
||||
Query OK, 1 row affected (0.00 sec)
|
||||
|
||||
|
||||
是不是建好了呢??肯定是建好了,因为都有OK了:)
|
||||
|
||||
|
||||
查看是不是有linux这个数据库了呢?
|
||||
|
||||
代码:
|
||||
mysql\> show databases;
|
||||
+----------+
|
||||
| Database |
|
||||
+----------+
|
||||
| linux |
|
||||
| mysql |
|
||||
| test |
|
||||
+----------+
|
||||
|
||||
代码:
|
||||
mysql> show databases;
|
||||
+----------+
|
||||
| Database |
|
||||
+----------+
|
||||
| linux |
|
||||
| mysql |
|
||||
| test |
|
||||
+----------+
|
||||
3 rows in set (0.00 sec)
|
||||
|
||||
那我们如何删除一个数据库呢??
|
||||
mysql\> drop database [数据库名];
|
||||
|
||||
比如我们要把刚才创建的linux数据库删除,应该用下面的命令;
|
||||
mysql\> drop database linux;
|
||||
|
||||
那我们如何删除一个数据库呢??
|
||||
mysql> drop database [数据库名];
|
||||
|
||||
比如我们要把刚才创建的linux数据库删除,应该用下面的命令;
|
||||
mysql> drop database linux;
|
||||
Query OK, 0 rows affected (0.00 sec)
|
||||
|
||||
|
||||
是不是已经删除了呢??
|
||||
|
||||
代码:
|
||||
mysql\> show databases;
|
||||
+----------+
|
||||
| Database |
|
||||
+----------+
|
||||
| mysql |
|
||||
| test |
|
||||
+----------+
|
||||
2 rows in set (0.00 sec)
|
||||
|
||||
|
||||
代码:
|
||||
mysql> show databases;
|
||||
+----------+
|
||||
| Database |
|
||||
+----------+
|
||||
| mysql |
|
||||
| test |
|
||||
+----------+
|
||||
2 rows in set (0.00 sec)
|
||||
|
||||
5]如何操作一个数据库呢,这个问题就比较多了,建议还是看一下mysql的手册吧。里面的东西太多了。如果操作一个数据库,首先是要指定一个数据库为当前数据库,应该用use命令
|
||||
|
||||
mysql\>use [数据库];
|
||||
|
||||
|
||||
mysql>use [数据库];
|
||||
|
||||
比如我想指定linux这个数据库为当前数据库,应该是
|
||||
|
||||
mysql\> use linux;
|
||||
|
||||
mysql> use linux;
|
||||
Database changed
|
||||
|
||||
|
||||
6]如何备份数据库??
|
||||
|
||||
|
||||
比如我们要备份mysql中已经存在的名为linux的数据库,要用到命令mysqldump
|
||||
|
||||
|
||||
命令格式如下:
|
||||
|
||||
shell\> mysqldump -uroot -p linux \> /root/linux.sql
|
||||
|
||||
shell> mysqldump -uroot -p linux > /root/linux.sql
|
||||
Enter password:在这里输入数据库的密码
|
||||
|
||||
|
||||
通过上面的命令,我们要明白两件事,首先备份数据库是要以数据库管理员的身份备份;其次:备份目的地是/root,备份的文件名是linux.sql。其实备份的位置和文件名,根据自己的情况来定。文件名可以自己来取,路径也可以自己来安排;
|
||||
|
||||
比如我想把linux的数据库备份到/home/beinan,数据库的文件名为linuxsir031130.sql,所以应该输入如下的命令。
|
||||
shell\> mysqldump -uroot -p linux \> /home/beinan/linuxsir031130.sql
|
||||
|
||||
比如我想把linux的数据库备份到/home/beinan,数据库的文件名为linuxsir031130.sql,所以应该输入如下的命令。
|
||||
shell> mysqldump -uroot -p linux > /home/beinan/linuxsir031130.sql
|
||||
Enter password:在这里输入数据库管理员root的数据库密码
|
||||
|
||||
|
||||
这样我们到/home/beinan目录下就能发现mysql中名为linux的数据库的备份文件linuxsir031130.sql
|
||||
|
||||
|
||||
综上所述,我们学习时要学会变通。:):)
|
||||
|
||||
|
||||
5]如何把把备份的数据库导入到数据库中?
|
||||
|
||||
|
||||
首先我们还是要操作上面几个过程,比如添加数据库管理员(如果您没有添加过mysql数据库管理员的话),创建数据库等。
|
||||
|
||||
|
||||
比如我们要把在/home/beinan这个目录中的linuxsir031130.sql这个备份,导入名为linux的数据库中,应该如下操作;
|
||||
|
||||
shell\> mysql -uroot -p linux \< /home/beinan/linuxsir031130.sql
|
||||
|
||||
shell> mysql -uroot -p linux < /home/beinan/linuxsir031130.sql
|
||||
Enter password:在这里输入密码
|
||||
|
||||
|
||||
如果机器好,数据库比较小,几分钟就好了。
|
||||
|
||||
|
||||
6]其它一些比较常用的mysql指令;
|
||||
|
||||
查看状态
|
||||
mysql\> show status;
|
||||
|
||||
|
||||
查看状态
|
||||
mysql> show status;
|
||||
|
||||
查看进程
|
||||
|
||||
代码:
|
||||
mysql\> show processlist;
|
||||
+----+------+-----------+------+---------+------+-------+------------------+| Id | User | Host | db | Command | Time | State | Info |
|
||||
+----+------+-----------+------+---------+------+-------+------------------+| 16 | root | localhost | NULL | Query | 0 | NULL | show processlist |
|
||||
+----+------+-----------+------+---------+------+-------+------------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
|
||||
代码:
|
||||
mysql> show processlist;
|
||||
+----+------+-----------+------+---------+------+-------+------------------+| Id | User | Host | db | Command | Time | State | Info |
|
||||
+----+------+-----------+------+---------+------+-------+------------------+| 16 | root | localhost | NULL | Query | 0 | NULL | show processlist |
|
||||
+----+------+-----------+------+---------+------+-------+------------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
查看表,应该先指定一个数据库为当前数据库;比如是名为linux的数据库;
|
||||
|
||||
mysql\>use linux;
|
||||
mysql\> show tables;
|
||||
|
||||
mysql>use linux;
|
||||
mysql> show tables;
|
||||
Empty set (0.00 sec)
|
||||
|
||||
|
||||
7]对mysql数据库常用命令的一点补充;
|
||||
|
||||
|
||||
几个常用的mysql相关的管理命令
|
||||
|
||||
|
||||
mysql 命令:基本文本的,显示和使用的mysql数据库。前面已经简单的提过用法;比如登录等。
|
||||
|
||||
|
||||
mysqladmin 命令,用来创建和维护mysql数据库的命令,前面已经简单的提过;
|
||||
|
||||
|
||||
isamchk 是用来修复、检查和优化.ism后缀的数据库文件;
|
||||
|
||||
|
||||
mysqldump 是用于备份数据库,前面已经简单的说明过;
|
||||
|
||||
|
||||
myisamchk 用来修复.myi后缀的数据库文件;
|
||||
|
||||
|
||||
比如我们要检查名为linux的数据库.myi数据库表是否存在问题,应该用下面的命令;
|
||||
|
||||
要把mysqld服务器停下来
|
||||
shell\> ../share/mysql.server stop
|
||||
|
||||
然后执行
|
||||
shell\> myisamchk ../var/linux/*.MYI
|
||||
|
||||
|
||||
要把mysqld服务器停下来
|
||||
shell> ../share/mysql.server stop
|
||||
|
||||
然后执行
|
||||
shell> myisamchk ../var/linux/*.MYI
|
||||
|
||||
上面的命令的意思就是检查所有的.myi文件,数据库的目录在../var/linux/目录中
|
||||
|
||||
如果有问题,应该用-r参数来修复
|
||||
shell\> myisamchk -r ../var/linux/*.MYI
|
||||
|
||||
6]mysqlshow 命令:显示用户选择的数据库和表
|
||||
shell\> mysqlshow -uroot -p [数据库名]
|
||||
|
||||
|
||||
如果有问题,应该用-r参数来修复
|
||||
shell> myisamchk -r ../var/linux/*.MYI
|
||||
|
||||
6]mysqlshow 命令:显示用户选择的数据库和表
|
||||
shell> mysqlshow -uroot -p [数据库名]
|
||||
|
||||
比如我要查看名为linux的数据库;应该是:
|
||||
|
||||
shell\> mysqlshow -uroot -p linux
|
||||
|
||||
|
||||
shell> mysqlshow -uroot -p linux
|
||||
|
||||
好了,到这里,你可能已经知道命令行下的所有基本操作了~
|
||||
|
||||
|
||||
ps:补充一个。。
|
||||
|
||||
|
||||
更改ROOT帐号名。
|
||||
|
||||
|
||||
```sql
|
||||
update set user="新名字" where user="旧名字";
|
||||
\> 来自 \<[http://blog.csdn.net/princewong/article/details/2003658](http://blog.csdn.net/princewong/article/details/2003658)\>
|
||||
```
|
||||
> 来自 <[http://blog.csdn.net/princewong/article/details/2003658](http://blog.csdn.net/princewong/article/details/2003658)>
|
||||
@@ -1,18 +1,18 @@
|
||||
安装php7(我这里装了好多,我也不知道哪些是非必需的)
|
||||
[plain] view plain copy
|
||||
安装php7(我这里装了好多,我也不知道哪些是非必需的)
|
||||
[plain] view plain copy
|
||||
apt-get install php7.0 php7.0-curl php7.0-gd php7.0-json php7.0-opcache php7.0-xml mcrypt php7.0-curl php7.0-cgi php7.0-xmlrpc php7.0-gd php-pear
|
||||
|
||||
重启apache2和mysql
|
||||
[plain] view plain copy
|
||||
systemctl restart apache2
|
||||
|
||||
重启apache2和mysql
|
||||
[plain] view plain copy
|
||||
systemctl restart apache2
|
||||
systemctl restart mysql
|
||||
|
||||
测试php和apache2
|
||||
[plain] view plain copy
|
||||
vim /var/www/html/info.php
|
||||
输入
|
||||
[php] view plain copy
|
||||
\<?php
|
||||
phpinfo();
|
||||
?\>
|
||||
|
||||
测试php和apache2
|
||||
[plain] view plain copy
|
||||
vim /var/www/html/info.php
|
||||
输入
|
||||
[php] view plain copy
|
||||
<?php
|
||||
phpinfo();
|
||||
?>
|
||||
保存后访问你的域名或者公网ip:your_server_ip/info.php,看看有没有对应的信息,有就说明成功了。
|
||||
@@ -1,80 +1,82 @@
|
||||
WordPress的安装与配置
|
||||
下载wordpress:
|
||||
[plain] view plain copy
|
||||
wget https://wordpress.org/latest.zip
|
||||
安装unzip:
|
||||
[plain] view plain copy
|
||||
apt-get install unzip
|
||||
解压和后续操作
|
||||
[plain] view plain copy
|
||||
unzip -q latest.zip -d /var/www/html/
|
||||
cd /var/www/html/wordpress
|
||||
cp -a * ..
|
||||
rm -r wordpress/
|
||||
chown www-data:www-data -R /var/www/html/
|
||||
创建上传目录:
|
||||
[plain] view plain copy
|
||||
mkdir -p /var/www/html/wp-content/uploads
|
||||
WordPress的安装与配置
|
||||
下载wordpress:
|
||||
[plain] view plain copy
|
||||
wget https://wordpress.org/latest.zip
|
||||
安装unzip:
|
||||
[plain] view plain copy
|
||||
apt-get install unzip
|
||||
解压和后续操作
|
||||
[plain] view plain copy
|
||||
unzip -q latest.zip -d /var/www/html/
|
||||
cd /var/www/html/wordpress
|
||||
cp -a * ..
|
||||
rm -r wordpress/
|
||||
chown www-data:www-data -R /var/www/html/
|
||||
创建上传目录:
|
||||
[plain] view plain copy
|
||||
mkdir -p /var/www/html/wp-content/uploads
|
||||
chown www-data:www-data -R /var/www/html/wp-content/uploads
|
||||
|
||||
mysql相关操作
|
||||
创建mysql账户:
|
||||
[plain] view plain copy
|
||||
mysql -u root -p
|
||||
[sql] view plain copy
|
||||
CREATE DATABASE wordpress character set utf8 collate utf8_bin;
|
||||
GRANT ALL PRIVILEGES on wordpress.* to 'wpuser'@'localhost' identified by 'your_password';
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
mysql相关操作
|
||||
创建mysql账户:
|
||||
[plain] view plain copy
|
||||
mysql -u root -p
|
||||
[sql] view plain copy
|
||||
```sql
|
||||
CREATE DATABASE wordpress character set utf8 collate utf8_bin;
|
||||
```
|
||||
GRANT ALL PRIVILEGES on wordpress.* to 'wpuser'@'localhost' identified by 'your_password';
|
||||
FLUSH PRIVILEGES;
|
||||
exit
|
||||
|
||||
编辑配置文件
|
||||
[plain] view plain copy
|
||||
cd /var/www/html
|
||||
mv wp-config-sample.php wp-config.php
|
||||
vim wp-config.php
|
||||
[plain] view plain copy
|
||||
/** The name of the database for WordPress */
|
||||
define('DB_NAME', 'wordpress'); /** MySQL database username */
|
||||
define('DB_USER', 'wpuser'); /** MySQL database password */
|
||||
define('DB_PASSWORD', 'your_password'); /** MySQL hostname */
|
||||
|
||||
编辑配置文件
|
||||
[plain] view plain copy
|
||||
cd /var/www/html
|
||||
mv wp-config-sample.php wp-config.php
|
||||
vim wp-config.php
|
||||
[plain] view plain copy
|
||||
/** The name of the database for WordPress */
|
||||
define('DB_NAME', 'wordpress'); /** MySQL database username */
|
||||
define('DB_USER', 'wpuser'); /** MySQL database password */
|
||||
define('DB_PASSWORD', 'your_password'); /** MySQL hostname */
|
||||
define('DB_HOST', 'localhost');
|
||||
|
||||
设置固定链接:
|
||||
如果是设置了虚拟主机的话,这部分可能和下面的操作不一样,我也不太清楚,可以去google搜一下
|
||||
[plain] view plain copy
|
||||
vim /etc/apache2/sites-available/000-default.conf
|
||||
[plain] view plain copy
|
||||
[...]
|
||||
ServerAdmin webmaster@localhost
|
||||
DocumentRoot /var/www/html
|
||||
ServerName server1.example.com
|
||||
\<Directory /var/www/html/\>
|
||||
AllowOverride All
|
||||
\</Directory\>
|
||||
[...]
|
||||
就是在里面添加上ServerName到\</Directory\>这一段
|
||||
允许URL的重写以及Apache2的重启
|
||||
[plain] view plain copy
|
||||
a2enmod rewrite
|
||||
service apache2 restart
|
||||
创建.htaccess文件
|
||||
[plain] view plain copy
|
||||
touch /var/www/html/.htaccess
|
||||
chown :www-data /var/www/html/.htaccess
|
||||
|
||||
设置固定链接:
|
||||
如果是设置了虚拟主机的话,这部分可能和下面的操作不一样,我也不太清楚,可以去google搜一下
|
||||
[plain] view plain copy
|
||||
vim /etc/apache2/sites-available/000-default.conf
|
||||
[plain] view plain copy
|
||||
[...]
|
||||
ServerAdmin webmaster@localhost
|
||||
DocumentRoot /var/www/html
|
||||
ServerName server1.example.com
|
||||
<Directory /var/www/html/>
|
||||
AllowOverride All
|
||||
</Directory>
|
||||
[...]
|
||||
就是在里面添加上ServerName到</Directory>这一段
|
||||
允许URL的重写以及Apache2的重启
|
||||
[plain] view plain copy
|
||||
a2enmod rewrite
|
||||
service apache2 restart
|
||||
创建.htaccess文件
|
||||
[plain] view plain copy
|
||||
touch /var/www/html/.htaccess
|
||||
chown :www-data /var/www/html/.htaccess
|
||||
chmod 664 /var/www/html/.htaccess
|
||||
|
||||
添加wordpress安全保护(其实我也不太懂具体作用)
|
||||
访问 https://api.wordpress.org/secret-key/1.1/salt/,
|
||||
然后打开wp-config.php
|
||||
[plain] view plain copy
|
||||
vim /var/www/html/wp-config.php
|
||||
[plain] view plain copy
|
||||
define('AUTH_KEY', 'put your unique phrase here');
|
||||
define('SECURE_AUTH_KEY', 'put your unique phrase here');
|
||||
define('LOGGED_IN_KEY', 'put your unique phrase here');
|
||||
define('NONCE_KEY', 'put your unique phrase here');
|
||||
define('AUTH_SALT', 'put your unique phrase here');
|
||||
define('SECURE_AUTH_SALT', 'put your unique phrase here');
|
||||
define('LOGGED_IN_SALT', 'put your unique phrase here');
|
||||
define('NONCE_SALT', 'put your unique phrase here');
|
||||
|
||||
添加wordpress安全保护(其实我也不太懂具体作用)
|
||||
访问 https://api.wordpress.org/secret-key/1.1/salt/,
|
||||
然后打开wp-config.php
|
||||
[plain] view plain copy
|
||||
vim /var/www/html/wp-config.php
|
||||
[plain] view plain copy
|
||||
define('AUTH_KEY', 'put your unique phrase here');
|
||||
define('SECURE_AUTH_KEY', 'put your unique phrase here');
|
||||
define('LOGGED_IN_KEY', 'put your unique phrase here');
|
||||
define('NONCE_KEY', 'put your unique phrase here');
|
||||
define('AUTH_SALT', 'put your unique phrase here');
|
||||
define('SECURE_AUTH_SALT', 'put your unique phrase here');
|
||||
define('LOGGED_IN_SALT', 'put your unique phrase here');
|
||||
define('NONCE_SALT', 'put your unique phrase here');
|
||||
将其对应填入。
|
||||
@@ -1,28 +1,28 @@
|
||||
==关于====mysql====的用户管理,笔记==
|
||||
|
||||
==1====、创建新用户==
|
||||
==通过====root====用户登录之后创建==
|
||||
==\>\>== ==grant all privileges on *.* to== ==testuser====@localhost identified by== =="123456"== ==;== ==//== ==创建新用户,用户名为====testuser====,密码为====123456== ==;==
|
||||
==\>\>== ==grant all privileges on *.* to== ==testuser====@localhost identified by== =="123456"== ==;== ==//== ==设置用户====testuser====,可以在本地访问====mysql==
|
||||
==\>\>== ==grant all privileges on *.* to== ==testuser====@"%" identified by== =="123456"== ==;== ==//== ==设置用户====testuser====,可以在远程访问====mysql==
|
||||
==\>\>== ==flush privileges== ==;== ==//== ==mysql== ==新设置用户或更改密码后需用====flush privileges====刷新====MySQL====的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动====mysql====服务器,来使新设置生效==
|
||||
==2====、设置用户访问数据库权限==
|
||||
==\>\>== ==grant all privileges on== ==test_db.*== ==to== ==testuser@localhost identified by "123456" ;== ==//== ==设置用户====testuser====,只能访问数据库====test_db====,其他数据库均不能访问== ==;==
|
||||
==\>\>== ==grant all privileges on== ==*.*== ==to== ==testuser@localhost identified by "123456" ;== ==//== ==设置用户====testuser====,可以访问====mysql====上的所有数据库== ==;==
|
||||
==\>\>== ==grant all privileges on== ==test_db.user_infor== ==to== ==testuser@localhost identified by "123456" ;== ==//== ==设置用户====testuser====,只能访问数据库====test_db====的表====user_infor====,数据库中的其他表均不能访问== ==;==
|
||||
==3====、设置用户操作权限==
|
||||
==\>\>== ==grant== ==all privileges== ==on *.* to== ==testuser@localhost identified by "123456" WITH GRANT OPTION== ==;== ==//====设置用户====testuser====,拥有所有的操作权限,也就是管理员== ==;==
|
||||
==\>\> grant== ==select== ==on *.* to== ==testuser@localhost identified by "123456" WITH GRANT OPTION== ==;== ==//====设置用户====testuser====,只拥有【查询】操作权限== ==;==
|
||||
==\>\>== ==grant== ==select,insert== ==on *.* to== ==testuser@localhost identified by "123456"== ==;== ==//====设置用户====testuser====,只拥有【查询====\====插入】操作权限== ==;==
|
||||
==\>\>== ==grant== ==select,insert,update,delete== ==on *.* to== ==testuser@localhost identified by "123456"== ==;== ==//====设置用户====testuser====,只拥有【查询====\====插入】操作权限== ==;==
|
||||
==\>\>== ==REVOKE== ==select,insert== ==ON what FROM== ==testuser====//====取消用户====testuser====的【查询====\====插入】操作权限== ==;==
|
||||
==4====、设置用户远程访问权限==
|
||||
==\>\>== ==grant all privileges on *.* to== ==testuser@====“192.168.1.100”== ==identified by== =="123456"== ==;== ==//====设置用户====testuser====,只能在客户端====IP====为====192.168.1.100====上才能远程访问====mysql== ==;==
|
||||
==5====、关于====root====用户的访问设置==
|
||||
==设置所有用户可以远程访问====mysql====,====修改====my.cnf====配置文件,将====bind-address = 127.0.0.1====前面加====“#”====注释掉====,这样就可以允许其他机器远程访问本机====mysql====了;==
|
||||
==\>\>== ==grant all privileges on *.* to== ==root@"%" identified by== =="123456"== ==;== ==//== ==设置用户====root====,可以在远程访问====mysql==
|
||||
==\>\>== ==select host,user from user;== ==//====查询====mysql====中所有用户权限==
|
||||
==关闭====root====用户远程访问权限==
|
||||
==\>\>== ==delete from user where user="root" and host="%" ;== ==//====禁止====root====用户在远程机器上访问====mysql==
|
||||
==\>\>== ==flush privileges== ==;== ==//====修改权限之后,刷新====MySQL====的系统权限相关表方可生效==
|
||||
\> 来自 \<[https://www.cnblogs.com/candle806/p/4048651.html](https://www.cnblogs.com/candle806/p/4048651.html)\>
|
||||
==关于====mysql====的用户管理,笔记==
|
||||
|
||||
==1====、创建新用户==
|
||||
==通过====root====用户登录之后创建==
|
||||
==>>== ==grant all privileges on *.* to== ==testuser====@localhost identified by== =="123456"== ==;== ==//== ==创建新用户,用户名为====testuser====,密码为====123456== ==;==
|
||||
==>>== ==grant all privileges on *.* to== ==testuser====@localhost identified by== =="123456"== ==;== ==//== ==设置用户====testuser====,可以在本地访问====mysql==
|
||||
==>>== ==grant all privileges on *.* to== ==testuser====@"%" identified by== =="123456"== ==;== ==//== ==设置用户====testuser====,可以在远程访问====mysql==
|
||||
==>>== ==flush privileges== ==;== ==//== ==mysql== ==新设置用户或更改密码后需用====flush privileges====刷新====MySQL====的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动====mysql====服务器,来使新设置生效==
|
||||
==2====、设置用户访问数据库权限==
|
||||
==>>== ==grant all privileges on== ==test_db.*== ==to== ==testuser@localhost identified by "123456" ;== ==//== ==设置用户====testuser====,只能访问数据库====test_db====,其他数据库均不能访问== ==;==
|
||||
==>>== ==grant all privileges on== ==*.*== ==to== ==testuser@localhost identified by "123456" ;== ==//== ==设置用户====testuser====,可以访问====mysql====上的所有数据库== ==;==
|
||||
==>>== ==grant all privileges on== ==test_db.user_infor== ==to== ==testuser@localhost identified by "123456" ;== ==//== ==设置用户====testuser====,只能访问数据库====test_db====的表====user_infor====,数据库中的其他表均不能访问== ==;==
|
||||
==3====、设置用户操作权限==
|
||||
==>>== ==grant== ==all privileges== ==on *.* to== ==testuser@localhost identified by "123456" WITH GRANT OPTION== ==;== ==//====设置用户====testuser====,拥有所有的操作权限,也就是管理员== ==;==
|
||||
==>> grant== ==select== ==on *.* to== ==testuser@localhost identified by "123456" WITH GRANT OPTION== ==;== ==//====设置用户====testuser====,只拥有【查询】操作权限== ==;==
|
||||
==>>== ==grant== ==select,insert== ==on *.* to== ==testuser@localhost identified by "123456"== ==;== ==//====设置用户====testuser====,只拥有【查询====\====插入】操作权限== ==;==
|
||||
==>>== ==grant== ==select,insert,update,delete== ==on *.* to== ==testuser@localhost identified by "123456"== ==;== ==//====设置用户====testuser====,只拥有【查询====\====插入】操作权限== ==;==
|
||||
==>>== ==REVOKE== ==select,insert== ==ON what FROM== ==testuser====//====取消用户====testuser====的【查询====\====插入】操作权限== ==;==
|
||||
==4====、设置用户远程访问权限==
|
||||
==>>== ==grant all privileges on *.* to== ==testuser@====“192.168.1.100”== ==identified by== =="123456"== ==;== ==//====设置用户====testuser====,只能在客户端====IP====为====192.168.1.100====上才能远程访问====mysql== ==;==
|
||||
==5====、关于====root====用户的访问设置==
|
||||
==设置所有用户可以远程访问====mysql====,====修改====my.cnf====配置文件,将====bind-address = 127.0.0.1====前面加====“#”====注释掉====,这样就可以允许其他机器远程访问本机====mysql====了;==
|
||||
==>>== ==grant all privileges on *.* to== ==root@"%" identified by== =="123456"== ==;== ==//== ==设置用户====root====,可以在远程访问====mysql==
|
||||
==>>== ==select host,user from user;== ==//====查询====mysql====中所有用户权限==
|
||||
==关闭====root====用户远程访问权限==
|
||||
==>>== ==delete from user where user="root" and host="%" ;== ==//====禁止====root====用户在远程机器上访问====mysql==
|
||||
==>>== ==flush privileges== ==;== ==//====修改权限之后,刷新====MySQL====的系统权限相关表方可生效==
|
||||
> 来自 <[https://www.cnblogs.com/candle806/p/4048651.html](https://www.cnblogs.com/candle806/p/4048651.html)>
|
||||
@@ -1,14 +1,14 @@
|
||||
远程连接密码: 148880
|
||||
|
||||
120.78.214.77(公)
|
||||
\>
|
||||
|
||||
Mysql root 1q2w3e4r
|
||||
120.78.214.77(公)
|
||||
>
|
||||
|
||||
Mysql root 1q2w3e4r
|
||||
phpmyadmin 1q2w3e4r
|
||||
|
||||
Wordpress admin chill wuzhuoshan@163.com 1q2w3e4r
|
||||
|
||||
|
||||
[ftp://cocomap.cn](ftp://cocomap.cn) chill 1q2w3e4r
|
||||
|
||||
网站统计——百度 ,双十二事变
|
||||
网站统计——百度 ,双十二事变
|
||||
[https://tongji.baidu.com/web/11004934/overview/index](https://tongji.baidu.com/web/11004934/overview/index)
|
||||
Reference in New Issue
Block a user