清理Git仓库中未跟踪的文件时可以使用下面命令
删除untracked文件
git clean -f
删除untracked文件
git clean -fd
删除.gitignore的untracked文件
git clean -xfd
使用上面git clean之前,建议使用-n参数查看会删除哪些文件
git clean -nxfd
git clean -nf
git clean -nfd
清理Git仓库中未跟踪的文件时可以使用下面命令
删除untracked文件
git clean -f
删除untracked文件
git clean -fd
删除.gitignore的untracked文件
git clean -xfd
使用上面git clean之前,建议使用-n参数查看会删除哪些文件
git clean -nxfd
git clean -nf
git clean -nfd
软件开发价格 = A(估算工作量) × σ(软件人员月平均工资) × τ(风险系数) × B(复用系数) × λ(综合系数)
A:估算工作量经验值
B:软件企业的平均工资/人·月
σ:风险系数l ≤ Q ≤ 1.5
τ:复用系数0.25 ≤ τ ≤ 1
λ:综合系数(国内)2.7 ≤ λ ≤ 3.09(综合了公司税收利润、管理系数、优质系数)
分解计算过程展开
软件开发价格 = 开发工作量 × 开发费用/人·月
软件开发工作量 = 估算工作量经验值A × 风险系数σ × 复用系数τ
风险系数:l ≤ σ ≤ 1.5(业务领域不熟悉,用户需求不明确)
复用系数:0.25(实施基于构件开发方法,已有可复用的构件库) ≤ τ ≤ 1
开发费用/人·月 =(P+Q+R)× S× T
P(人员成本) = B(月平均工资) × 1.476(公积金7%、医疗保险12%、养老金22%、失业金2%、工伤0.5%,生育0.5%,残疾基金1.6%,工会基金2%,累计47.6%)
Q(办公费) = B/3
R(国家税收和企业利润) = B/3
S(管理系数):1 ≤ S ≤ 1.2 (十个软件人员需要两个管理人员)
T(优质系数,提高软件质量,必然有所开支,即质量成本):1.05 <= T <= 1.2
根据不同用户的要求,分为四种级别分别按照开发费用的15%、10%、5%或按次计算收取软件(系统)维护费用
首先定义U(系统建设费用),也就是该应用软件(系统)开发费用
A级:软件企业派出技术人员常驻用户,解决日常运行中发生的问题。
软件企业派出N个技术人员,常驻用户,因此:
软件(系统)维护费/年 = U × 15% 或 B × λ × N × 12
B级:软件企业每周七天,每天24小时(即7×24小时)响应,2小时到现场,且每天派技术人员到现场进行软件(系统)性能调试,使之运行处于良好状态。
软件(系统)维护费/年 = U × 10%
C级:软件企业7×24小时响应,2小时到场。
软件(系统)维护费/年=U × 5%
D级:用户的信息工程系统或应用软件发生问题,由原承担的软件企业派人维护。
软件(系统)维护费/次=B’(人·天) × τ’(同复用系数)× n
系统集成费 = U(系统建设费用) × α(四种级别的复杂程度) × T(优质系数)
复杂程度(以α来表示)可分四种级别来区分
A级:整个系统涉及到计算机硬件、软件、局域网络,且体系结构在三层次以下(含三层次)。
5% ≤ α ≤ 8%
B级:整个系统涉及到计算机硬件、软件、局域网络、互联网,且体系结构在三层以上(含三层次)。
7% ≤ α ≤ 10%
C级:整个系统涉及到计算机硬件、软件、局域网络、互联网以及多种网络接口。
8% ≤ α ≤ 12%
D级:整个系统涉及到计算机硬件、软件、网络、通信以及各种数据采集设备接口或者与用主系统有接口。
10% ≤ α ≤ 15%
学习文章《软件开发和服务项目价格构成及评估方法》的笔记
1、Mac下载并安装kaleidoscope和ksdiff(下载地址),确保命令行中可以运行ksdiff
命令
2、修改GIT配置文件~/.gitconfig
,加入下面内容
[diff]
tool = Kaleidoscope
[difftool "Kaleidoscope"]
cmd = ksdiff --partial-changeset --relative-path \"$MERGED\" -- \"$LOCAL\" \"$REMOTE\"
[difftool]
prompt = false
[merge]
tool = Kaleidoscope
[mergetool "Kaleidoscope"]
cmd = ksdiff --merge --output "$MERGED" --base "$BASE" -- "$LOCAL" --snapshot "$REMOTE" --snapshot
trustExitCode = true
[mergetool]
prompt = false
3、命令行中运行git difftool
或git mergetool
(git difftool用于与git diff相同)将使用kaleidoscope打开对比的文件
问题描述:Ubuntu中执行sudo iptables-save > /etc/iptables.rules
报错Permission denied
问题分析:命令中有管道,第一个命令iptables -L有sudo,但是管道后的第二个命令没有sudo,所以报错
问题解决:
sudo bash -c 'iptables-save > /etc/iptables.rules'
或
echo 'iptables-save > /etc/iptables.rules' | sudo bash
iptables命令用于linux下防火墙规则管理,可以对指定协议、来源、端口的访问数据进行放行或丢弃
iptables -A INPUT -p tcp -s 192.168.0.104 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
#-A INPUT or OUT 进还是出的规则
#-p tcp or udp协议
#-s 源ip地址
#--dport 端口号
#-j ACCEPT 允许 REJECT 拒绝 DROP 丢弃
#查看规则行号
iptables -L -n INPUT --line-numbers
#-L --list 显示规则
#-n 端口显示数字
#--line-numbers 显示规则编号,用于删除
#删除规则
iptables -D INPUT 3
centos6
service iptables save
#或
#修改/etc/sysconfig/iptables配置文件中的规则后重启服务
service iptables restart
centos7(默认使用firewall,停用firewall后安装iptables,就与centos6相同)
#停用firewall
systemctl stop firewall .service #停止firewall
systemctl disable firewall.service #禁止开机启动firewall
firewall-cmd --status #查看firewall状态
#安装iptables
yum install iptables-service
systemctl enable iptables
systemctl start iptables
ubuntu(使用iptables-save和iptables-restore)
手动保存
#1.保存iptables规则到文件
#sudo iptables-save > /etc/iptables.rules会报错
sudo bash -c 'iptables-save > /etc/iptables.rules'
#2.设置网络配置文件中加载该文件
vim /etc/network/interfaces
加入pre-up iptables-restore < /etc/iptables.up.rules
重启自动生效
#1.新增网络关闭自动执行脚本
vim /etc/network/if-post-down.d/iptables
内容为
#!/bin/bash
iptables-save > /etc/iptables.rules
#2.新增网络开启自动执行脚本
sudo vim /etc/network/if-pre-up.d/iptables
内容为
#!/bin/bash
iptables-restore < /etc/iptables.rules
#3.给两个脚本执行权限
sudo chmod +x /etc/network/if-post-down.d/iptables
sudo chmod +x /etc/network/if-pre-up.d/iptables
比如开通本机的22端口,允许192.168.1.0网段的服务器访问(-t filter表配置可以省略,默认就是这种表的配置)
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
或者
iptables -t filter -A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
开通本机的80端口,只允许192.168.1.150机器访问(32位掩码表示单机,单机指定时可以不加掩码)
iptables -t filter -A INPUT -s 192.168.1.150/32 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
然后保存规则,重启iptables
service iptables save
service iptables restart
或者在/etc/sysconfig/iptables文件里设置如下(其实上面在终端命令行里设置并save和restart防火墙后,就会自动保存规则到/etc/sysconfig/iptables这个文件中的):
cat /etc/sysconfig/iptables
......
*filter
:INPUT ACCEPT [442620:173026884]
:FORWARD ACCEPT [118911:23993940]
:OUTPUT ACCEPT [8215384:539509656]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.1.150/32 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
service iptables restart
比如访问本机(192.168.1.7)的8088端口转发到192.168.1.160的80端口;访问本机的33066端口转发到192.168.1.161的3306端口
准备工作:
本机打开ip_forword路由转发功能;192.168.1.160/161的内网网关要和本机网关一致!如果没有内网网关,就将网关设置成本机内网ip,并且关闭防火墙(防火墙要是打开了,就设置对应端口允许本机访问)
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8088 -j DNAT --to-destination 192.168.1.160:80
iptables -t nat -A POSTROUTING -d 192.168.1.160/32 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.7
iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 8088 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 33066 -j DNAT --to-destination 192.168.1.161:3306
iptables -t nat -A POSTROUTING -d 192.168.1.161/32 -p tcp -m tcp --sport 3306 -j SNAT --to-source 192.168.1.7
iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 33066 -j ACCEPT
service iptables save
service iptables restart
或者在/etc/sysconfig/iptables文件里设置如下
cat /etc/sysconfig/iptables
......
*nat
:PREROUTING ACCEPT [60:4250]
:INPUT ACCEPT [31:1973]
:OUTPUT ACCEPT [3:220]
:POSTROUTING ACCEPT [3:220]
-A PREROUTING -p tcp -m tcp --dport 8088 -j DNAT --to-destination 192.168.1.160:80 //PREROUTING规则都放在上面
-A PREROUTING -p tcp -m tcp --dport 33066 -j DNAT --to-destination 192.168.1.161:3306
-A POSTROUTING -d 192.168.1.160/32 -p tcp -m tcp --sport 80 -j SNAT --to-source 192.168.1.7 //POSTROUTING规则都放在下面
-A POSTROUTING -d 192.168.1.161/32 -p tcp -m tcp --sport 3306 -j SNAT --to-source 192.168.1.7
.....
*filter
:INPUT ACCEPT [16:7159]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [715:147195]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8088 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 33066 -j ACCEPT
.....
service iptables restart
iptables -L //列出设置的规则,默认列出的是filter表下的规则
iptables -L -t nat //如果列出nat表下规则,就加-t参数