LINUX 加固
作为 Linux 服务器维护管理人员,**安全是日常工作的重中之重**,需要从系统加固、权限管理、网络防护、数据安全、日志审计、漏洞修复、应急响应等多个维度构建纵深防御体系。以下是 Linux 安全的核心做法,结合实操命令和配置示例,覆盖从基础加固到高级防护的全流程:
核心原则:只安装必要的组件和服务,禁用无用功能(如图形界面、多余的网络服务、开发工具),减少潜在漏洞。 实操: 安装时选择「最小安装」模式(如 CentOS/RHEL 的 安装后清理无用包: 核心原则:定期更新内核、系统库和应用程序,修复已知漏洞(尤其是高危漏洞,如 Heartbleed、Shellshock、Spectre/Meltdown 等)。 实操: 配置自动更新(推荐生产环境谨慎使用,测试环境可开启): 手动更新(生产环境建议先测试补丁兼容性): 注意:内核更新后需重启服务器生效,生产环境建议在维护窗口执行,并提前备份数据。 核心原则:只保留业务必需的服务(如 Nginx、MySQL、SSH),禁用所有无关服务(如 telnet、ftp、rpcbind、cups 等),减少监听端口。 实操: 查看当前运行的服务: 禁用无用服务: 核心原则:通过调整内核参数,增强系统对网络攻击、内存溢出、文件系统滥用的防护能力。 实操:编辑 核心原则:防止弱密码被暴力破解,强制用户使用复杂密码,并定期更换。 实操: 安装密码策略工具: 编辑 PAM 配置文件 参数说明: 核心原则:SSH 是远程管理的主要入口,需通过“修改默认端口+禁用密码登录+限制登录 IP”增强防护。 实操: ssh-copy-id -p 2222 admin@服务器IP # 把公钥复制到服务器 admin 用户的 ~/.ssh/authorized_keys firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="2222" accept'
firewall-cmd --reload ufw allow from 192.168.1.0/24 to any port 2222
ufw enable 核心原则:防火墙是网络防护的第一道屏障,采用“默认拒绝所有,只开放必要端口”的策略,限制入站和出站流量。 实操: 选择防火墙工具(CentOS/RHEL 7+ 用 核心原则:禁用 telnet、ftp、rsh、rcp 等明文传输协议,改用 SSH、SFTP、SCP 等加密协议。 实操: 检查并禁用不安全服务: 禁用 IPv6(如不使用):参考「一、4」的 sysctl 配置。 核心原则:通过 TCP Wrappers 或文件系统 ACL 限制特定服务的访问权限,实现“白名单”控制。 实操: ALL: ALL getfacl /etc/shadow 核心原则:通过限制连接数、SYN 队列、请求频率等参数,缓解常见 DDoS 攻击(如 SYN 洪水、CC 攻击)。 实操: iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP vim /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222 # 对应 SSH 自定义端口
filter = sshd
logpath = /var/log/secure # CentOS/RHEL 日志路径 maxretry = 3 # 失败 3 次
bantime = 3600 # 封禁 1 小时 systemctl enable --now fail2ban 核心原则:数据是企业核心资产,需制定“定期备份+异地备份+测试恢复”的策略,防止数据丢失(如硬件故障、勒索病毒)。 实操: rsync -avz -e 'ssh -p 2222' /backup admin@备份服务器IP:/remote_backup 核心原则:敏感数据(如密码、财务数据)需在传输和存储环节加密,防止泄露。 实操: SSH/SCP/SFTP 替代 telnet/ftp(已在「二、5」配置)。 Web 服务启用 HTTPS(Let's Encrypt 免费证书): 敏感文件加密(如数据库配置、密钥文件): 文件系统加密(如 LUKS 加密分区): 核心原则:敏感文件(如 实操: 检查并修复敏感文件权限: 查找并处理世界可写的文件(安全隐患): 核心原则:系统日志是安全审计的重要依据,需开启所有关键服务的日志(如 SSH、Web、数据库),并集中存储(避免日志被篡改)。 实操: systemctl restart rsyslog vim /etc/rsyslog.d/50-default.conf 核心原则:通过脚本或工具监控日志中的敏感关键词(如 实操: FAIL_COUNT=$(grep "$(date +%Y-%m-%d) $(date -d '1 hour ago' +%H):" $LOG_FILE | grep "$KEYWORD" | wc -l) if [ $FAIL_COUNT -gt 10 ]; then
echo "SSH 暴力破解告警:近 1 小时失败 $FAIL_COUNT 次" | mail -s "SSH 安全告警" $ALERT_EMAIL
fi crontab -e
0 /usr/local/bin/ssh_monitor.sh 核心原则:使用工具扫描系统和应用的漏洞,优先修复高危漏洞(CVSS 评分 ≥7.0)。 实操: apt-get install -y apt-show-versions
apt-show-versions -u # 列出可升级的包(含漏洞修复) 核心原则:除系统漏洞外,应用程序(如 Nginx、MySQL、PHP)的配置漏洞是主要攻击入口,需针对性加固。 实操: client_max_body_size 10M; systemctl restart nginx vim /etc/my.cnf secure_file_priv = "" max_connections = 1000 systemctl restart mysqld systemctl restart nginx Linux 安全是一个“持续迭代”的过程,没有一劳永逸的方案。核心是围绕「最小攻击面、最小权限、数据加密、日志审计、快速响应」五大原则,从系统、账户、网络、数据、应用等多个层面构建防御体系,并定期演练和优化。以上做法覆盖了 90% 以上的常见安全风险,可根据企业实际业务场景(如生产环境、测试环境)和合规要求(如等保 2.0)进行调整和深化。一、系统基础加固:从源头减少攻击面
1. 操作系统最小化安装
Minimal 选项,Ubuntu 的 server 版)。# CentOS/RHEL
yum remove -y xorg-x11* gnome* kde* # 卸载图形界面
yum autoremove -y # 自动清理依赖
# Ubuntu/Debian
apt-get remove -y xserver-xorg* gnome* kde*
apt-get autoremove -y2. 及时更新系统补丁
# CentOS/RHEL 7+
yum install -y yum-cron
systemctl enable --now yum-cron
# Ubuntu/Debian
apt-get install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades # 交互式配置自动更新# CentOS/RHEL
yum update -y # 更新所有包(包括内核)
yum update -y --exclude=kernel* # 不更新内核(如需保持内核版本)
# Ubuntu/Debian
apt-get update && apt-get upgrade -y3. 禁用不必要的服务
# CentOS/RHEL 7+
systemctl list-unit-files --type=service --state=enabled
# Ubuntu/Debian
systemctl list-services --type=service --state=running# 示例:禁用 telnet、ftp、rpcbind 服务
systemctl disable --now telnet.socket vsftpd rpcbind4. 限制系统核心参数(sysctl 配置)
/etc/sysctl.conf 文件,添加/修改以下参数,然后执行 sysctl -p 生效:# 禁止 IP 转发(非路由服务器禁用)
net.ipv4.ip_forward = 0
# 禁用 ICMP 重定向(防止中间人攻击)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# 启用 TCP SYN Cookie(防御 SYN 洪水攻击)
net.ipv4.tcp_syncookies = 1
# 限制 SYN 半连接队列大小
net.ipv4.tcp_max_syn_backlog = 1024
# 防止 TCP 连接被劫持
net.ipv4.tcp_seq_file = /proc/net/tcp_seq
# 禁用 IPv6(如不使用)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# 限制文件句柄数量(防止 DoS 攻击)
fs.file-max = 65535
# 启用内存保护(防止缓冲区溢出)
kernel.randomize_va_space = 2 # 开启地址空间随机化二、账户与权限管理:守住“访问入口”
1. 禁用 root 远程登录
/etc/ssh/sshd_config:PermitRootLogin no # 禁用 root 远程登录
AllowUsers admin user1 # 只允许指定普通用户登录(可选,增强限制)systemctl restart sshd # CentOS/RHEL 7+
systemctl restart ssh # Ubuntu/Debian2. 创建并授权普通用户
useradd -m -s /bin/bash admin # 创建 admin 用户,生成家目录,指定 bash shell
passwd admin # 为 admin 设置强密码(长度≥8位,包含大小写、数字、特殊字符)usermod -aG wheel admin # CentOS/RHEL(wheel 组默认拥有 sudo 权限)
usermod -aG sudo admin # Ubuntu/Debian(sudo 组默认拥有 sudo 权限)visudo # 编辑 sudoers 文件(避免直接编辑 /etc/sudoers)
# 添加以下内容,仅允许 admin 用户执行指定命令(如重启、管理服务)
admin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/reboot3. 强制设置强密码策略
# CentOS/RHEL
yum install -y pam_cracklib
# Ubuntu/Debian
apt-get install -y libpam-cracklib/etc/pam.d/system-auth(CentOS/RHEL)或 /etc/pam.d/common-password(Ubuntu/Debian):# CentOS/RHEL:在 password sufficient pam_unix.so 行后添加
password requisite pam_cracklib.so minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 retry=3
# Ubuntu/Debian:修改 password [success=1 default=ignore] pam_unix.so 行
password [success=1 default=ignore] pam_unix.so obscure sha512 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1minlen=8(最小长度8)、ucredit=-1(至少1个大写)、lcredit=-1(至少1个小写)、dcredit=-1(至少1个数字)、ocredit=-1(至少1个特殊字符)、retry=3(最多重试3次)。4. 清理无用账户和密钥
cat /etc/passwd | grep -v nologin | grep -v false # 过滤系统账户,查看可登录用户userdel -r olduser # -r 同时删除用户家目录~/.ssh/authorized_keys 文件,删除未授权的公钥。5. 限制 SSH 登录(密钥认证+端口修改)
vim /etc/ssh/sshd_config
Port 2222 # 将默认 22 端口改为自定义端口(如 2222,建议 10000+)
vim /etc/ssh/sshd_config
PasswordAuthentication no # 禁用密码登录
PubkeyAuthentication yes # 启用密钥认证
# 客户端生成密钥对(本地执行)
ssh-keygen -t rsa -b 4096 # 生成 4096 位 RSA 密钥(默认存放在 ~/.ssh/id_rsa)上传公钥到服务器(客户端执行)
# 方法1:SSH 配置文件限制
vim /etc/ssh/sshd_config
AllowUsers admin@192.168.1.0/24 # 仅允许 192.168.1.0/24 网段的 admin 用户登录方法2:防火墙限制(推荐,更灵活)
CentOS/RHEL 7+(firewalld)
Ubuntu/Debian(ufw)
systemctl restart sshd三、网络安全:防护“外部入侵通道”
1. 配置防火墙(默认拒绝,仅开放必要端口)
firewalld,Ubuntu/Debian 用 ufw,或通用 iptables):# 示例1:CentOS/RHEL 7+(firewalld)
# 查看当前开放端口
firewall-cmd --list-ports
# 开放必要端口(如 SSH 2222、HTTP 80、HTTPS 443)
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
# 禁止所有其他入站流量(默认策略)
firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --reload
# 示例2:Ubuntu/Debian(ufw)
# 重置防火墙(可选,清理原有规则)
ufw reset
# 开放必要端口
ufw allow 2222/tcp
ufw allow 80/tcp
ufw allow 443/tcp
# 启用防火墙(默认拒绝入站,允许出站)
ufw enable
ufw status
# 示例3:通用 iptables(适合复杂规则)
# 清空原有规则
iptables -F
iptables -X
# 允许回环接口
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 开放必要端口
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 默认拒绝所有入站流量
iptables -P INPUT DROP
# 保存规则(CentOS/RHEL)
service iptables save
# 保存规则(Ubuntu/Debian)
iptables-save > /etc/iptables/rules.v42. 禁用不安全的网络服务和协议
# 查看是否安装 telnet/ftp
rpm -q telnet-server vsftpd # CentOS/RHEL
dpkg -l | grep -E 'telnet|ftp' # Ubuntu/Debian
# 卸载不安全服务
yum remove -y telnet-server vsftpd # CentOS/RHEL
apt-get remove -y telnet vsftpd # Ubuntu/Debian3. 配置网络访问控制(ACL/hosts.allow)
# 编辑 /etc/hosts.allow(允许访问的 IP/网段)
sshd: 192.168.1.0/24, 10.0.0.0/8
vsftpd: 192.168.1.100 # 仅允许 192.168.1.100 访问 FTP(如必须使用)编辑 /etc/hosts.deny(默认拒绝所有)
# 为 /etc/shadow 设置 ACL,仅 root 可读写
setfacl -m u:root:rw- /etc/shadow
setfacl -m g:root:r-- /etc/shadow
setfacl -m o::- /etc/shadow查看 ACL 设置
4. 防御 DDoS 攻击(基础措施)
# 限制每个 IP 的最大连接数(CentOS/RHEL 需安装 iptables-extensions)
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j DROP # 单个 IP 最多 100 个 HTTP 连接限制 SYN 包发送频率
fail2ban,防御暴力破解):
# 安装 fail2ban
yum install -y fail2ban # CentOS/RHEL
apt-get install -y fail2ban # Ubuntu/Debian配置 fail2ban(以 SSH 为例)
logpath = /var/log/auth.log # Ubuntu/Debian 日志路径
启动 fail2ban
四、数据安全:保护“核心资产”
1. 定期备份重要数据
/etc(系统配置)、/home(用户数据)、/var/www(Web 数据)、数据库文件(MySQL/MariaDB 等)。
rsync 或 tar 进行本地备份:
# 示例:用 tar 备份 /etc 和 /home 到 /backup
mkdir -p /backup
tar -czvf /backup/system_backup_$(date +%Y%m%d).tar.gz /etc /home示例:用 rsync 同步到异地备份服务器
crontab -e # 编辑定时任务
# 每天凌晨 2 点执行备份
0 2 * * * /usr/bin/tar -czvf /backup/system_backup_$(date +%Y%m%d).tar.gz /etc /home
# 每周日凌晨 3 点同步到异地
0 3 * * 0 /usr/bin/rsync -avz -e 'ssh -p 2222' /backup admin@备份服务器IP:/remote_backup
2. 数据加密(传输+存储)
# 安装 Certbot
yum install -y certbot python3-certbot-nginx # CentOS/RHEL + Nginx
apt-get install -y certbot python3-certbot-nginx # Ubuntu/Debian + Nginx
# 自动获取并配置证书
certbot --nginx -d example.com -d www.example.com
# 用 gpg 加密文件
gpg -c /etc/my.cnf # 生成 my.cnf.gpg 加密文件,删除原文件
# 解密文件
gpg /etc/my.cnf.gpg# 对 /dev/sdb1 进行 LUKS 加密
cryptsetup luksFormat /dev/sdb1
cryptsetup open /dev/sdb1 encrypted_partition
mkfs.ext4 /dev/mapper/encrypted_partition
mount /dev/mapper/encrypted_partition /data # 挂载加密分区3. 限制敏感文件权限
/etc/passwd、/etc/shadow、/etc/sudoers)仅允许 root 访问,防止非授权读取或修改。
# /etc/shadow:仅 root 读写
chmod 0000 /etc/shadow
chown root:root /etc/shadow
# /etc/passwd:root 读写,其他只读
chmod 0644 /etc/passwd
chown root:root /etc/passwd
# /etc/sudoers:仅 root 读写
chmod 0440 /etc/sudoers
chown root:root /etc/sudoersfind / -perm -0002 -type f -not -path "/proc/*" -not -path "/sys/*" # 查找世界可写文件
chmod o-w 文件名 # 移除其他用户的写权限五、日志审计:及时发现“异常行为”
1. 开启并集中管理日志
# CentOS/RHEL 7+(rsyslog)
vim /etc/rsyslog.conf
# 确保以下配置启用(记录 auth、cron、mail、kern 等日志)
authpriv.* /var/log/secure
cron.* /var/log/cron
mail.* -/var/log/maillog
kern.* -/var/log/kern.log重启 rsyslog
Ubuntu/Debian(rsyslog 默认启用)
确保 auth.log、syslog 等日志配置正确
rsync 定期同步日志到日志服务器,或使用 syslog-ng 实时转发。2. 监控异常日志(关键词告警)
Failed password、root login、invalid user、error),及时发现暴力破解、异常登录等行为。
fail2ban 更佳):
# 编辑监控脚本 /usr/local/bin/ssh_monitor.sh
#!/bin/bash
LOG_FILE="/var/log/secure"
KEYWORD="Failed password"
ALERT_EMAIL="admin@example.com"统计近 1 小时内的失败次数
添加到 crontab,每小时执行一次
fail2ban 自动封禁暴力破解 IP,ossec 支持日志分析和实时告警。六、漏洞防护:主动“修复潜在风险”
1. 定期漏洞扫描
# CentOS/RHEL:用 yum-security 检查漏洞
yum install -y yum-plugin-security
yum updateinfo list vuln # 列出所有漏洞
yum updateinfo list vuln --sec-severity=Critical # 仅列出高危漏洞Ubuntu/Debian:用 apt-show-versions 检查
nmap 扫描端口和服务版本,识别已知漏洞:nmap -sV -p- 服务器IP。openvas 或 nessus 进行深度漏洞扫描(需安装配置)。nikto(扫描 Web 服务器漏洞)、sqlmap(检测 SQL 注入)。2. 应用安全加固
# 编辑 nginx.conf
vim /etc/nginx/nginx.conf
# 添加安全头部
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Content-Security-Policy "default-src 'self'" always;禁用不必要的模块
编译时:./configure --without-http_autoindex_module --without-http_ssi_module
运行时:在 nginx.conf 中注释掉 load_module 指令
限制请求体大小(防止 DoS 攻击)
重启 Nginx
# 执行安全脚本(MySQL 5.7+ 内置)
mysql_secure_installation
# 按提示设置 root 密码、删除匿名用户、禁用 root 远程登录、删除 test 数据库编辑 my.cnf
禁用本地文件访问(防止 SQL 注入读取系统文件)
限制连接数
重启 MySQL
# 编辑 php.ini
vim /etc/php.ini
# 禁用危险函数
disable_functions = eval,exec,passthru,shell_exec,system
# 限制文件上传大小
upload_max_filesize = 2M
# 开启魔术引号(防止 SQL 注入,PHP 5.4+ 已移除,需手动过滤)
magic_quotes_gpc = On
# 禁用暴露 PHP 版本
expose_php = Off重启 Web 服务
七、应急响应:快速“处置安全事件”
1. 制定应急响应计划(IRP)
2. 入侵后的处置步骤
/var/log/*)、内存镜像(dd if=/dev/mem of=/backup/mem_dump.img)、恶意文件(如 /tmp/unknown)。
ps -ef | grep 恶意进程名 → kill -9 进程ID。rm -f 恶意文件路径。八、持续安全:构建“长效防御体系”
总结
用友T+Plus 表 之间的勾兑关系
## 用友T+Plus账套与表结构详解
账套是用友T+Plus中存储企业完整业务与财务数据的独立数据集合,相当于企业的"数字账本",具有三大核心功能: 数据隔离与独立核算:支持创建多个账套,区分不同业务板块、子公司或项目,各账套拥有独立的会计期间、科目体系和初始余额,实现数据互不干扰的精准核算 数据安全与权限控制:通过账套密码和角色权限,限制不同人员的操作范围(如财务只能操作财务模块),支持数据备份与恢复,防止数据丢失 业务流程管理载体:完整记录从采购、销售到财务核算的全流程数据,支持凭证处理、报表生成和业务分析,满足企业多维度管理需求 核心表:EAP_ACCOUNT(账套信息表),存储账套号、名称、启用年度等关键信息 用友T+Plus中的表分为两大类: 存储系统配置、基础档案和编码规则,是整个系统运行的基础: 存储企业日常经营数据,是模块间数据流转的核心: 完整流程:采购计划 → 采购订单 → 进货单 → 采购入库单 → 采购发票 → 付款 关键勾兑:采购入库单(ST_RDRecord)与进货单(AP_Vouch)通过iBillNo关联,确保"货票一致",生成凭证: 完整流程:销售订单 → 销货单 → 销售出库单 → 销售发票 → 收款 关键勾兑:销售出库单(ST_RDRecord)与销货单(SaleBillVouch)通过iBillNo关联,确保"货票一致",生成凭证: 完整流程:生产订单 → 材料出库 → 产成品入库 → 成本核算 关键勾兑: 主要业务:盘点、调拨、其他出入库 关键勾兑:盘点单审核后自动生成出入库单,更新库存数量,并通过存货核算模块生成财务凭证,确保账实一致 核心流程:凭证录入 → 记账 → 结账 → 报表生成 关键勾兑: 用友T+Plus通过关键关联字段实现模块间数据无缝流转,形成完整业务闭环: 核心关联:进货单与采购入库单通过iBillNo关联,确保"票货一致";存货核算根据入库单计算成本并生成凭证 核心关联:销货单与销售出库单通过iBillNo关联,确保销售数量一致;存货核算根据出库单结转销售成本 核心关联:材料出库单和产成品入库单均与生产订单关联,确保生产过程的材料消耗和成品产出准确归集到对应生产订单,实现成本精准核算 关键勾稽: 使用用友T+Plus时,数据不一致问题通常源于表间关联异常,可从以下方向排查: 采购暂估差异:采购入库单与进货单数量或金额不一致,导致暂估回冲异常 销售成本结转错误:发出商品成本与实际成本不符 账实不符:库存账面数与实物不一致 报表勾稽关系破坏:资产负债表与利润表数据不衔接 用友T+Plus通过表间精准关联实现了业务财务一体化管理,每个业务环节都有对应的表结构记录,并通过关键字段(如iBillNo、cPOID)与上下游表连接,形成完整的数据链。理解这种表对应关系,有助于管理员更精准地进行数据维护、问题排查和系统优化,确保企业数字化管理的高效运行。 下一步建议:结合企业实际业务场景,绘制专属的数据流向图,明确各环节表关联,为系统维护和二次开发提供清晰指引。一、账套的核心意义
二、表的分类与作用
1. 系统基础表
表类别
代表表
主要功能
基础档案
AA_Account(科目表)
AA_Vendor(供应商表)
AA_Customer(客户表)存储科目编码、供应商/客户基本信息,为业务单据提供参照依据
系统配置
EAP_OperationLog(操作日志表)
DSign(凭证类别表)记录操作轨迹、定义凭证类型,支持系统审计和异常追踪
存货基础
InventoryClass(存货分类表)
Inventory(存货档案表)建立存货分类体系,记录存货编码、名称、规格等基础属性,是库存和存货核算的基础
2. 业务财务表
模块
核心表
用途
采购管理
PO_Pomain(采购订单主表)
PO_Podetails(采购订单子表)记录采购订单头信息和明细,通过cPOID字段关联,主表存储表头,子表存储行项目
库存管理
ST_RDRecord(出入库主表)
ST_RDRecords(出入库子表)记录所有出入库业务,通过iType区分业务类型(II-采购入库、IO-销售出库、MD-材料出库等)
存货核算
IA_Subsidiary(存货明细账)
IA_Summary(存货总账)记录存货的收发存数量和金额,计算存货成本,是财务核算的重要数据源
财务管理
GL_AccVouch(凭证明细表)
GL_AccSum(科目总账表)存储凭证详细信息和科目汇总数据,是生成财务报表的基础
三、核心环节表对应关系详解
1. 采购环节表关联
业务环节
操作单据
核心表及关联关系
财务影响
采购订货
采购订单
PO_Pomain(主表) ↔ PO_Podetails(子表)
cPOID字段关联
→ PP_PU(采购计划-采购单关联表)记录采购意向,不影响财务账
采购收货
采购入库单
ST_RDRecord(iType=II) ↔ ST_RDRecords
iBillNo关联采购订单号
→ PU_LeftSum(采购余额表)增加库存,暂估应付款(票未到)
采购结算
进货单/采购发票
AP_Vouch(应付单主表) ↔ AP_Vouchs(子表)
与ST_RDRecord通过iBillNo关联
→ AP_Sum(应付总账表)确认应付账款,记录进项税
付款核销
付款单
AP_CloseBill(付款核销表)
关联AP_Vouch和银行日记账
→ GL_AccVouch(凭证表)减少应付账款,减少银行存款
2. 销售环节表关联
业务环节
操作单据
核心表及关联关系
财务影响
销售订货
销售订单
SO_SODetails(销售订单表)
记录销售意向,不影响财务账
销售发货
销售出库单
ST_RDRecord(iType=IO) ↔ ST_RDRecords
与SO_SODetails通过订单号关联
→ 当前库存量表(减少)减少库存数量,不影响财务账
销售结算
销货单/销售发票
SaleBillVouch(销售发票主表) ↔ SaleBillVouchs(子表)
与ST_RDRecord通过iBillNo关联
→ AR_Sum(应收总账表)确认销售收入和销项税,增加应收账款
收款核销
收款单
AR_CloseBill(收款核销表)
关联SaleBillVouch和银行日记账
→ GL_AccVouch(凭证表)减少应收账款,增加银行存款
3. 生产环节表关联
业务环节
操作单据
核心表及关联关系
财务影响
生产准备
生产加工单
ME_Order(生产订单表)
记录生产计划,关联销售订单号
领料
材料出库单
ST_RDRecord(iType=MD) ↔ ST_RDRecords
与ME_Order通过生产订单号关联
→ IA_Subsidiary(减少材料库存)减少原材料库存,增加生产成本-直接材料
完工入库
产成品入库单
ST_RDRecord(iType=MC) ↔ ST_RDRecords
与ME_Order通过生产订单号关联
→ IA_Subsidiary(增加产成品库存)增加产成品库存,减少生产成本,完成成本结转
成本核算
成本分配单
CA_CostCD(费用明细定义表)
CA_AllMt(分配率表)归集材料、人工和制造费用,计算产品单位成本
4. 库存管理环节表关联
业务类型
操作单据
核心表及关联关系
财务影响
盘点业务
盘点单(CheckVouch)
CheckVouch(盘点主表) ↔ CheckVouchs(盘点子表)
→ ST_RDRecord(生成盘盈/盘亏出入库单)盘盈:借:库存商品 贷:待处理财产损溢
盘亏:相反分录
调拨业务
调拨单(TransVouch)
TransVouch(调拨主表) ↔ TransVouchs(调拨子表)
→ ST_TransSourceRelation(调拨来源关系表)
→ ST_RDRecord(生成其他出入库单)调整库存分布,不影响总成本,只改变仓库归属
其他出入库
其他入库单/出库单
ST_RDRecord(iType=IC/ID) ↔ ST_RDRecords
按业务性质确定财务影响(如赠品出库计入销售费用)
5. 财务核算环节表关联
核算环节
操作/报表
核心表及关系
数据来源
凭证处理
凭证录入/审核
GL_AccVouch(凭证明细表)
手工录入或业务单据自动生成,记录借贷方科目、金额和摘要
记账
凭证记账
GL_AccVouch → GL_AccSum(科目总账表)
→ GL_Accass(辅助总账表)将凭证明细汇总到科目总账和辅助核算账,为报表提供数据基础
期末处理
自动转账/结账
GL_mpostcond(记账条件表)
GL_mend(结账状态表)定义转账规则,记录各模块结账状态,控制结账顺序(上月未结,本月不能结)
财务报表
资产负债表/利润表
取数公式关联GL_AccSum和IA_Summary等
资产负债表"未分配利润"期末-期初 = 利润表"净利润"累计,确保报表勾稽关系
四、模块间数据流转全景
1. 采购-库存-财务联动
采购订单(PO_Pomain) → 进货单(AP_Vouch) → 采购入库单(ST_RDRecord:iType=II) →
存货核算(IA_Subsidiary) → 凭证(GL_AccVouch:借库存商品,贷应付账款)2. 销售-库存-财务联动
销售订单(SO_SODetails) → 销货单 → 销售出库单(ST_RDRecord:iType=IO) →
存货核算(IA_Subsidiary) → 凭证(GL_AccVouch:借应收账款,贷收入;借成本,贷库存商品)3. 生产-库存-财务联动
生产订单(ME_Order) → 材料出库单(ST_RDRecord:iType=MD) →
产成品入库单(ST_RDRecord:iType=MC) → 存货核算 →
凭证(借生产成本,贷原材料;借库存商品,贷生产成本)4. 财务报表数据来源
GL_AccSum(科目总账) → 资产负债表/利润表
IA_Summary(存货总账) → 资产负债表"存货"项目
AP_Sum/AR_Sum(往来总账) → 资产负债表"应付账款/应收账款"项目
五、常见问题与排查方向
总结
Markdown 命令
Markdown 是一种轻量级标记语言,语法简洁直观,常用于编写文档、笔记、博客等。以下是 常用 Markdown 语法命令,按功能分类整理,附带示例和效果说明:
通过 # 符号表示不同级别标题,# 数量越多,标题级别越低(共 6 级)。
语法:
# 一级标题(最大)
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题(最小)
效果:
用于设置文本的加粗、斜体、删除线等样式。
| 语法 | 效果 | 说明 |
|---|---|---|
*斜体文本* |
斜体文本 | 单个 * 或 _ 包裹 |
_斜体文本_ |
斜体文本 | |
**加粗文本** |
加粗文本 | 两个 * 或 _ 包裹 |
__加粗文本__ |
加粗文本 | |
***加粗斜体*** |
加粗斜体 | 三个 * 包裹 |
~~删除线文本~~ |
两个 ~ 包裹 |
|
==高亮文本== |
==高亮文本== | 两个 = 包裹(部分编辑器支持) |
^上标^ |
^上标^ | 单个 ^ 包裹(部分编辑器支持) |
~下标~ |
~下标~ | 单个 ~ 包裹(部分编辑器支持) |
示例:
这是 *斜体*,这是 **加粗**,这是 ***加粗斜体***,这是 ~~删除线~~。
H<sub>2</sub>O(水的化学式),2<sup>2</sup>=4(平方)。
Markdown 中,段落之间需空一行;若想在同一段落内换行,可在末尾加 两个及以上空格 后回车。
语法:
这是第一个段落。(回车后空一行)
这是第二个段落。
这是同一段落内的换行(末尾加了两个空格)。
效果:
这是第一个段落。(回车后空一行)
这是第二个段落。
这是同一段落内的换行(末尾加了两个空格)。
支持有序列表(带编号)和无序列表(带符号),可嵌套使用。
用 *、+ 或 - 作为列表项前缀,符号可互换。
语法:
- 列表项 1
- 列表项 2
- 嵌套列表项 2.1(前加 2 个空格)
- 嵌套列表项 2.2
+ 列表项 3(用 + 也可以)
* 列表项 4(用 * 也可以)
效果:
用数字加 . 作为前缀,编号自动递增(即使手动写乱,渲染后也会按顺序排列)。
语法:
1. 第一步
2. 第二步
1. 第二步的子步骤 1(前加 2 个空格)
2. 第二步的子步骤 2
3. 第三步
效果:
用于插入网页链接、本地文件链接等,支持自定义显示文本。
语法:
[显示文本](链接地址 "可选标题,hover 时显示")
示例:
[GitHub 官网](https://github.com "GitHub - 全球最大的代码托管平台")
效果:
GitHub 官网
先定义链接标识,再在文末统一指定链接地址。
语法:
[显示文本][链接标识]
<!-- 文末定义链接地址 -->
[链接标识]: 链接地址 "可选标题"
示例:
我常用的代码托管平台是 [GitHub][1] 和 [Gitee][2]。
[1]: https://github.com "GitHub"
[2]: https://gitee.com "Gitee - 码云"
效果:
我常用的代码托管平台是 GitHub 和 Gitee。
语法与链接类似,仅在开头多一个 ! 符号,支持本地图片和网络图片。
语法:

示例:
<!-- 网络图片 -->

<!-- 本地图片(路径相对当前文件) -->

效果:
![]()
用于引用他人的话、文献内容等,用 > 作为前缀,可嵌套多层。
语法:
> 这是一级引用块。
> 引用内容可以换行,只需在每一行开头加 >。
>
> > 这是嵌套的二级引用块(前加两个 >)。
效果:
这是一级引用块。 引用内容可以换行,只需在每一行开头加 >。
这是嵌套的二级引用块(前加两个 >)。
用于展示代码片段,支持单行代码和多行代码块,可指定编程语言实现语法高亮。
用 ` `(反引号)包裹代码片段。
语法:
`print("Hello, Markdown!")`
效果:
print("Hello, Markdown!")
用 三个反引号 包裹代码,开头的反引号后可指定编程语言(如 python、javascript)实现语法高亮。
语法:
```python
# Python 示例代码
def add(a, b):
return a + b
result = add(10, 20)
print(f"结果:{result}")
**效果**:
```python
# Python 示例代码
def add(a, b):
return a + b
result = add(10, 20)
print(f"结果:{result}")
用于分隔不同内容区块,用 三个及以上 的 *、- 或 _ 表示,单独占一行。
语法:
---(三个减号)
***(三个星号)
___(三个下划线)
用于展示结构化数据,支持对齐方式设置(左对齐、居中、右对齐)。
语法:
| 表头 1 | 表头 2 | 表头 3 |
|--------|--------|--------|
| 内容 1 | 内容 2 | 内容 3 |
| 内容 4 | 内容 5 | 内容 6 |
<!-- 带对齐方式的表格 -->
| 左对齐 | 居中对齐 | 右对齐 |
| :----- | :------: | ----: |
| 内容 1 | 内容 2 | 内容 3 |
| 内容 4 | 内容 5 | 内容 6 |
说明:
: 用于指定对齐方式:: 在左边表示左对齐,两边都有 : 表示居中,: 在右边表示右对齐。 效果:
| 表头 1 | 表头 2 | 表头 3 |
|--------|--------|--------|
| 内容 1 | 内容 2 | 内容 3 |
| 内容 4 | 内容 5 | 内容 6 |
| 左对齐 | 居中对齐 | 右对齐 |
|---|---|---|
| 内容 1 | 内容 2 | 内容 3 |
| 内容 4 | 内容 5 | 内容 6 |
用于创建待办事项清单,用 - [ ] 表示未完成,- [x] 表示已完成(部分编辑器支持)。
语法:
- [x] 完成 Markdown 语法学习
- [ ] 编写示例文档
- [ ] 提交作业
效果:
用于添加文档注释或引用说明,在正文中标注脚注标识,文末显示脚注内容(部分编辑器支持)。
语法:
这是需要注释的文本[^1]。
这是另一个需要注释的文本[^2]。
<!-- 文末定义脚注内容 -->
[^1]: 脚注 1 的详细说明。
[^2]: 脚注 2 的详细说明,可包含链接 [GitHub](https://github.com)。
效果:
这是需要注释的文本[^1]。
这是另一个需要注释的文本[^2]。
[^1]: 脚注 1 的详细说明。 [^2]: 脚注 2 的详细说明,可包含链接 GitHub。
自动生成文档目录,基于标题层级(部分编辑器支持,语法可能略有差异)。
语法:
[TOC]
效果:
自动列出所有标题,点击可跳转至对应章节(示例中因无实际标题层级,暂不展示)。
以上是最常用的 Markdown 语法,覆盖了日常文档编写的 90% 以上场景。不同编辑器对语法的支持可能略有差异,可根据实际使用场景灵活调整。
LINUX管理员需要掌握的命令
作为一名 Linux 服务器维护管理人员,掌握一些核心命令是日常工作的基础。以下是一份常用命令的整理,包含用法说明和注意事项,希望能帮助你更高效地工作。
这类命令用于快速了解服务器的硬件、系统和运行状态。 这份清单涵盖了最基础和常用的命令,但远非全部。根据你管理的服务器类型(Web 服务器、数据库服务器等)和具体业务场景,还需要深入学习相关的专业知识和命令。一、系统信息查看
uname
uname [选项]
-a:显示所有系统信息(内核版本、主机名、硬件架构等)。-r:仅显示内核版本。uname -ahostname
hostname [选项]
-I:显示所有网络接口的 IP 地址。hostname -Iuptime
uptimeuptimeload average 值若长期高于服务器 CPU 核心数,可能表示系统负载过高。free
free [选项]
-h:以人类可读的格式显示内存大小(如 GB, MB)。-m:以 MB 为单位显示。free -havailable 内存,它代表真正可用的内存大小。buff/cache 占用过高通常是正常的,系统会在需要时释放。df
df [选项] [目录或文件]
-h:以人类可读的格式显示磁盘空间。-T:显示文件系统类型。df -h / (查看根目录的磁盘空间)top / htop
top 或 htophtop 是 top 的增强版,界面更友好。
P:按 CPU 使用率排序。M:按内存使用率排序。k:终止指定进程(需输入 PID)。q:退出。top 是排查系统性能瓶颈和定位耗资源进程的利器。二、用户与权限管理
useradd / usermod / userdel
useradd [选项] 用户名usermod [选项] 用户名userdel [选项] 用户名
-m:创建用户时同时创建家目录。-s:指定用户的登录 shell。-G:将用户添加到附加组。-r:创建系统用户。useradd -m -s /bin/bash newuser
userdel -r 用户名 会同时删除用户的家目录,务必谨慎。root 用户进行日常操作。passwd
passwd [用户名]
passwd username <<< "newpassword"),这会在历史记录中留下明文密码。chmod
chmod [选项] 模式 文件或目录755)或符号(如 u+x)表示。
u:所有者,g:所属组,o:其他人,a:所有人。+:添加权限,-:移除权限,=:设置权限。r:读(4),w:写(2),x:执行(1)。chmod 755 script.sh 或 chmod u+x script.sh
x) 是进入该目录的必要条件。chmod 777,它会给所有用户完全权限,存在严重安全风险。chown
chown [选项] 所有者:所属组 文件或目录chown www-data:www-data /var/www/htmlroot 权限执行。三、文件与目录操作
ls
ls [选项] [目录]
-l:长格式显示(包含权限、大小、修改时间等)。-a:显示所有文件,包括隐藏文件(以 . 开头)。-h:与 -l 配合,以人类可读格式显示大小。ls -lhals -l 的输出中,第一个字符为 d 表示目录,- 表示文件,l 表示链接。cd
cd [目录路径]
cd ..:返回上一级目录。cd ~ 或 cd:回到当前用户的家目录。cd -:回到上一次所在的目录。pwd
pwdmkdir
mkdir [选项] 目录名
-p:递归创建目录,即使父目录不存在也不会报错。mkdir -p /data/logs/apprm
rm [选项] 文件或目录
-r:递归删除目录及其内容。-f:强制删除,不提示确认。rm -rf old_directoryrm -rf 是极其危险的命令! 一旦执行,数据很难恢复。操作前务必确认路径和文件无误,尤其是在使用 root 权限时。cp
cp [选项] 源文件 目标文件 或 cp [选项] 源文件... 目标目录
-r:递归复制目录。-a:归档复制,保留文件的权限、所有者、时间戳等所有属性,常用于备份。-v:显示复制过程。cp -av /etc /backup/etc.bakmv
mv [选项] 源文件 目标文件 或 mv [选项] 源文件... 目标目录四、网络操作
ip
ip [选项] 操作对象
ip addr:查看所有网络接口的 IP 地址配置。ip route:查看路由表。ip link set dev <接口名> up/down:启用或禁用网络接口。ip addr show eth0ip 命令是现代 Linux 系统中推荐的网络配置工具,正在逐步替代传统的 ifconfig, route 等命令。ping
ping [选项] 主机名或IP地址
-c <次数>:指定发送 ICMP Echo 请求的次数。-i <间隔>:指定发送请求的时间间隔(秒)。ping -c 4 8.8.8.8ping 使用 ICMP 协议,某些防火墙可能会禁止 ICMP,导致 ping 不通但服务可能正常。netstat / ss
netstat [选项] 或 ss [选项]ss 是 netstat 的替代工具,速度更快,功能更强大。
netstat -tulpn:显示所有正在监听的 TCP 和 UDP 端口,并显示对应的进程。ss -tulpn:ss 的 equivalent 命令。ss -tulpn | grep nginx五、日志查看
tail
tail [选项] 文件
-f:实时跟踪文件内容的变化(最常用)。-n <行数>:显示文件的最后 N 行。tail -f /var/log/nginx/access.logCtrl + C 可以退出实时跟踪模式。less / more
less 文件 或 more 文件less 功能更强大,可以向前/向后翻页、搜索等。less 中):
空格键:向下翻一页。b:向上翻一页。/关键词:向下搜索关键词。n:跳转到下一个匹配项。q:退出。less /var/log/messagesgrep
grep [选项] "搜索模式" 文件
-i:忽略大小写。-n:显示匹配行的行号。-r:递归搜索目录下的所有文件。-E:使用扩展正则表达式。grep -rn "error" /var/log/grep 是日志分析中不可或缺的工具,用于快速定位关键信息。六、系统管理与维护
systemctl
systemctl [选项] 服务名
systemctl start 服务名:启动服务。systemctl stop 服务名:停止服务。systemctl restart 服务名:重启服务。systemctl status 服务名:查看服务状态。systemctl enable 服务名:设置服务开机自启。systemctl disable 服务名:禁止服务开机自启。systemctl status nginxsystemctl 是 Systemd 系统(CentOS 7+, Ubuntu 16.04+ 等)的服务管理命令。在较旧的系统(如 CentOS 6)中,使用 service 和 chkconfig 命令。tar
tar [选项] 归档文件名 源文件或目录
-c:创建新的归档文件。-x:从归档文件中提取文件。-v:显示操作过程。-f:指定归档文件名(这个选项必须放在最后)。-z:通过 gzip 压缩/解压。-j:通过 bzip2 压缩/解压。
tar -czvf backup.tar.gz /home/user/datatar -xzvf backup.tar.gz -C /path/to/extracttar 是 Linux 中最常用的归档工具,常与压缩算法结合使用。find
find [搜索路径] [选项] [表达式]
-name "文件名":按文件名查找(支持通配符 * 和 ?)。-type f/d:查找文件(f)或目录(d)。-size +100M:查找大于 100MB 的文件。-mtime -7:查找最近 7 天内修改过的文件。-exec 命令 {} \;:对找到的每个文件执行指定命令。find /var/log -name "*.log" -mtime +30 -exec rm {} \; (删除 /var/log 目录下 30 天前的 .log 文件)find 命令功能强大,但在大型文件系统上递归搜索可能会比较耗时。通用注意事项
rm, mv, chmod, chown)之前,尤其是在生产环境中,务必先备份相关文件或目录。sudo 或切换到 root 用户。这可以有效防止误操作带来的灾难性后果。rm, cp 等命令中使用 * 等通配符时,一定要仔细检查,避免匹配到不该操作的文件。history 命令查看之前执行过的命令。可以通过 !编号 快速重复执行,或使用 Ctrl + R 进行反向搜索。
DOS命令
netstat -ano|findstr "80"
查看应用占用的端口,并且显示pid号,可以直接任务管理器kill掉。
arp命令:
① arp –a:用于查看高速缓存中的所有项目。
② arp -a IP:如果有多个网卡,那么使用arp -a加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。
③ arp -s IP 物理地址:向ARP高速缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。
④ arp -d IP:使用本命令能够人工删除一个静态项目。
tracert命令 就是trace route命令,用来跟踪路由的。格式为:tracert ip_address
route命令
route print:用于显示路由表中的当前项目,在单个路由器网段上的输出结果
routeadd:使用本命令,可以将路由项目添加给路由表。
例如,如果要设定一个到目的网络209.99.32.33的路由,其间要经过5个路由器网段,首先要经过本地网络上的一个路由器IP为202.96.123.5,子网掩码为255.255.255.224,那么用户应该输入以下命令:
route add 209.99.32.33 mask 255.255.255.224 202.96.123.5 metric 5
routechange:可以使用本命令来修改数据的传输路由,不过,用户不能使用本命令来改变数据的目的地。下面这个例子将上例路由改变采用一条包含3个网段的路径:
route add 209.99.32.33 mask 255.255.255.224 202.96.123.250 metric 3
route delete 使用本命令可以从路由表中删除路由。例如:route delete 209.99.32.33
nslookup的功能是查询任何一台机器的IP地址和其对应的域名。它通常需要一台域名服务器来提供域名。如果用户已经设置好域名服务器,就可以用这个命令查看不同主机的IP地址对应的域名。
nbtstat命令可以查看计算机上网络配置的一些信息。使用这条命令还可以查找出别人计算机上一些私人信息。如果想查看自己计算机上的网络信息,可以运行nbtstat -n,可以得到你所在的工作组,计算机名以及网卡地址等等;想查看网络上其他的电脑情况,就,运行nbtstat -a *.*.*.*,此处的*.*.*.*用IP地址代替就会返回得到那台主机上的一些信息。
netstat命令能够显示活动的TCP连接、计算机侦听的端口、以太网统计信息、IP路由表、IPv4统计信息(对于IP、ICMP、TCP和UDP协议)以及IPv6统计信息(对于IPv6、ICMPv6、通过IPv6的TCP以及UDP协议)。使用时如果不带参数,netstat显示活动的TCP连接。① netstat –a:-a选项显示所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接。② netstat –n:以点分十进制的形式列出IP地址,而不是象征性的主机名和网络名。③ netstat -e:-e选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据包的总字节数、错误数、删除数、数据包的数量和广播的数量。这些统计数据既有发送的数据包数量,也有接收的数据包数量。使用这个选项可以统计一些基本的网络流量。④ netstat -r:-r选项可以显示关于路由表的信息,类似于route print命令时看到的信息。除了显示有效路由外,还显示当前有效的连接。
net命令很强大 所有的net命令都可以加入/y 和/n参数,使用net /?来寻找对应的对象,例如:net account 就是对账户的操作,
LINUX命令
alias:给命令起别名
awk = "Aho Weiberger and Kernighan" ,三个作者的姓的第一个字母
bash:GNU Bourne-Again Shell,大多Linux的默认shell
bc = Basic Calculator,基础计算器,scale设定小数位,quit退出
bg = BackGround,后台运行任务
bye = bye,用于在FTP时退出FTP执行
cal = calendar,日历,后跟月份数、年份数可显示指定月日历
cat = catenate,连续,输出文件内容,-n显示行号,-b不显示空行,有意思的是tac则从后向前输出
cd = Change Directory,切换目录
chgrp = Change group,改变文件归属用户组
clear = clear,清屏
chmod = Change mode,改变读写权限,-R递归更改,a默认所有用户u本用户g本群组o其他用户,+-rwx增减读写执行权限,rwx421
chown = Change owner,改变所有者
cp = copy,复制
crontab = Chronos,希腊文时间,定时执行工具,* * * * *分别为分时日月星期,*代表所有,"-"为范围","为多值"/"为频率,-u指定用户,-l查看任务,-r删除任务,-e编辑任务。
cut = cut,从文件中的每行文本中剪出指定字符,功能类似grep,-b以字节为单位,-c以字符为单位,-d自定义分隔符默认制表符
date = date,日期时间,date "+option",-d显示指定时间,-r显示文件最后修改时间,-s修改时间,%x日期,%X时间,%F日期,%D月日年,%Y4位年份,%y2位年份,%m月份,%d日,%H24制时,%I12制时,%M分,%S秒
declare = declare,用于声明shell变量,-a数组,-i指定整数型
df = Disk Free,剩余磁盘空间,-h以适阅读单位显示,后跟文件则显示其所在挂载点磁盘剩余空间
dirs = directories,从目录栈中读取,功能类似于一个数组,先显示本目录再显示目录栈,-c删除目录栈中所有记录,-p每行显示一个(默认连续显示),-v每行显示一个并加编号,+N显示第N个目录(数字从0开始),-N显示倒数第N个目录
du = Disk Usage,磁盘使用情况,统计文件大小,-h以适阅读单位显示,-s不迭代仅合计统计,--max-depth n指定统计深度
egrep = Extended GREP,可使用扩展正则的grep
exec =execute,执行 ,内部命令
find = find,查找,find PATH -OPTION [-print] [-exec cmd] {} \;,PATH为查找数据若为当前目录下则为“.”,-name文件名,-mtime +/- N N天前或内更改的文件,-ctime +/-N N天前或内创建的文件,-type文件类型d为目录f为文件,-size 大于指定字节的文件,
fg = ForeGround,前台运行任务
fmt = format,简单的文本格式化
ftp = File Transfer Protocol,文件传输,后跟IP地址,get从远程FTP机下载到本机,mget批量下载,put将本机文件上传到远程FTP机,mput批量上传
free = free,内存使用情况,-s间隔N秒查询一次,-m -k -b以M、KB、Byte为单位显示
gawk = GNU AWK
grep = global regular expression print,全局正则表达式打印,强大的文本搜索工具,-c只输出计数,-i忽略大小写,-n输出行号,-v取反,-h多文件时不显文件名,-r递归搜索
head = head,查看前n行
iostat = in out status,IO及CPU状态
iostat = in out status,IO及CPU状态
less = less,分页展示文件内容
logname = loginname,显示当前登录用户名
ln = link,建立链接,-s建立软链接(默认硬链接)
locate = locate,查找文件地址,并不查硬盘,而是在/var/lib/slocate/slocate.db中查看,速度快省资源
ls = list,列出文件,-l详细信息,-h合适单位显示,-S大小排序,-t时间排序
lsof = List Open Files,列出当前系统打开的文件,ROOT权限,-c某进程打开的文件,-p某进程打开的文件,-u某用户打开的文件,跟目录为目录下打开的文件,跟文件为文件相关打开信息,-i某端口或IP打开的文件
man = Manual意思是手册,可以用这个命令查询其他命令的用法。
mkdir = Makedirectory,创建目录,-p指定路径,-m指定权限
mv = Move,移动文件,同目录下则为重命名,-i询问试覆盖,-f同名强制覆盖,-b备份旧文件(文件名后加~),-u若本文件较新则覆盖旧文件
more = more,分页显示
nl = Number of Lines,计算文件行号,类似cat,-b a 计算空行(默认不计算),-n rz以6位数字显示行号前补0,-w指定占位数(默认6)
passwd = PassWord
pg = pager,分页显示文件内容
ping = Packet InterNet Grouper,测试网络,-c指定次数,-i指定间隔秒数
printf = Print Format
ps = Processes Status,进程状态 ,命令执行时刻进程信息,-a同终端进程,-A所有进程,-u指定用户,-e同-A,-f展示所有信息,aux查看进程详细信息类似-ef,-C可跟搜索词,--sort=-pcpu,+pmem按cpu降序按mem内存升序排序
pushd = push Directory,当目录放入目录栈,+/-N将正数/倒数第N个目录移到栈顶并切换到该目录,-n在切目录栈时不切目录
popd = pop Directory,从目录栈弹出目录,+/-N将正数/倒数第N个目录从目录栈中移除
pwd = print working Directory,打印工作目录
rcp = remote copy,远程拷贝,-r递归,-p保留修改时间和权限,将远程文件拷贝到本机,限制条件较多
rm = ReMove,删除文件,-r递归,-f不询问强制删除
rmdir = Remove directory,删除目录
rlogin = remote login,-l指定登录用户名,rlogin IP/主机名
rsh = remote shell,远程执行shell,-l指定用户
rmp = RedHat Package Manager,RedHat软件包管理工具,类似Windows里面的“添加/删除程序”,-a查询所有,-e卸载,-h显示进度,-i显示相关信息,-l列出软件所有文件名,-q查询,-p软件包内文件,-v显示执行过程;常用参数:-ivh安装并显示进度,-qpl查看软件包内文件,-qa查询一个软件是否安装过,--relocate指定安装目录,--rebuild编译+打包,--recompile编译+打包+安装
reboot=Restart your computer,重启
scp = secure copy,用于Linux间复制,基于ssh远程复制,-p保留修改时间权限,-r递归,-P指定端口,-v显示进度,
sed = Stream Editor,流编辑器,本身即先查,在CMD中匹配字符两侧要有//,sed -OPTION 'CMD' file,选项:-n安静模式,-i直接修改不屏幕输出,-r支持扩展正则,-e多命令,-f文件指定动作;命令:a增,d删除,i插,c改,s正则查,p屏幕输出,g获取内存缓冲区内容并替代当前模板块中文字,G获取内容追加,h内容拷贝到内存,H内容追加到内存
set = set,主要作用是显示系统中已经存在的shell变量,以及设置shell变量的新变量值,不能够定义新的shell变量,定义新的变量使用declare命令。
shutdown,关机,-t设定延迟时间,-k通知所有用户,-r重启,-h关机后停机,-c取消关机,-f强制关机,time设定关机时间
sleep = sleep,动作延迟
sort = sort,排序,-b忽略行首空格,-r反向,-n以数值,-o排序结果输出文件,-t指定列分隔符,-k指定排序列,-f忽略大小
split = split,将大文件分割成小文件,-N每N行分割成一个文件,-bN每N字节分割成一个文件,-C按字节分割保证完整性
ssh = Secure Shell,远程登录Linux,-l指定用户,-p指定端口
sshpass,一款ssh免密码输入软件
su = switch user,切换用户,root切任何用户不需要密码,但其他用户之间切换需要密码,- user表示切换到用户user并将用户环境一并切换,-c执行命令再退回原用户
sudo = super user do,受限制的su
svn = SubVersioN
sync = 强制将内存写入硬盘
tar = tape archive,打包归档文件,-c创建create,-x提取extract,-t查看list,-f指定归档文件,-m解压时不变更文件更改时间,-p解压时原权限不变,-v显示执行详情,-r向归档文件中追加,-u更新归档文件中文件
tail = tail,查看尾部n行
touch = touch,创建,修改文件或者目录的时间属性,若文件不存在,系统会建立一个新的文件,更改文件权限再结合chmod
top = top,实时显示系统中各个进程的资源占用状况,该命令可以按CPU使用、内存使用和执行时间对任务进行排序
umount = Unmount 卸载,可以通过设备名卸载或挂载点卸载
unset = unset,用于删除变量或函数
useradd、userdel、usermod,新增用户、删除用户、修改用户
w = who,显示目前登入系统的用户信息
xargs = eXtended ARGuments,给命令传递参数的一个过滤器,也是组合多个命令的一个工具,它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理
wc = Word Count,计算文件的Byte数、字数、或是列数,-c只显示字节数,-l只显示行数,-w只统计单词数
who = who,显示当前系统所有使用者等信息
whoami = whoami,命令用于显示自身用户名称。
which = which,命令用于查找文件
whereis = where is,查看文件
命令:rm -rf test (注意,这样做是非常危险的!)
rm是删除命令。rm -r 并不是一个完整的命令后面还需要加上需要删除的路径
例如:rm -r test 就是删除test 不管他是文件还是目录,rm的使用详情如下:
语法 rm (选项)(参数)
选项
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
参数 文件:指定被删除的文件列表,如果参数中含有目录,则必须加上-r或者-R选项。 实例 交互式删除当前目录下的文件test和example rm -i test example Remove test ?n(不删除文件test) Remove example ?y(删除文件example)
删除当前目录下除隐含文件外的所有文件和子目录
# rm -r *
su:Swith user 切换用户,切换到root用户
cat: Concatenate 串联
uname: Unix name 系统名称
df: Disk free 空余硬盘
du: Disk usage 硬盘使用率
chown: Change owner 改变所有者
chgrp: Change group 改变用户组
ps:Process Status 进程状态
tar:Tape archive 解压文件
chmod: Change mode 改变模式
umount: Unmount 卸载
ldd:List dynamic dependencies 列出动态相依
insmod:Install module 安装模块
rmmod:Remove module 删除模块
lsmod:List module 列表模块
alias :Create your own name for a command
bash :GNU Bourne-Again Shell linux内核
grep:global regular expression print
httpd :Start Apache
ipcalc :Calculate IP information for a host
ping :Send ICMP ECHO_Request to network hosts
reboot: Restart your computer
sudo:Superuser do
/bin = BINaries
/dev = DEVices
/etc = ETCetera
/lib = LIBrary
/proc = PROCesses
/sbin = Superuser BINaries
/tmp = TeMPorary
/usr = Unix Shared Resources
/var = VARiable ?
FIFO = First In, First Out
GRUB = GRand Unified Bootloader
IFS = Internal Field Seperators
LILO = LInux LOader
MySQL = My最初作者的名字SQL = Structured Query Language
PHP = Personal Home Page Tools = PHP Hypertext Preprocessor
PS = Prompt String
Perl = “Pratical Extraction and Report Language” = “Pathologically Eclectic Rubbish Lister”
Python Monty Python’s Flying Circus
Tcl = Tool Command Language
Tk = ToolKit
VT = Video Terminal
YaST = Yet Another Setup Tool
apache = “a patchy” server
apt = Advanced Packaging Tool
ar = archiver
as = assembler
bash = Bourne Again SHell
bc = Basic (Better) Calculator
bg = BackGround
cal = CALendar
cat = CATenate
cd = Change Directory
chgrp = CHange GRouP
chmod = CHange MODe
chown = CHange OWNer
chsh = CHange SHell
cmp = compare
cobra = Common Object Request Broker Architecture
comm = common
cp = CoPy
cpio = CoPy In and Out
cpp = C Pre Processor
cups = Common Unix Printing System
cvs = Current Version System
daemon = Disk And Execution MONitor
dc = Desk Calculator
dd = Disk Dump
df = Disk Free
diff = DIFFerence
dmesg = diagnostic message
du = Disk Usage
ed = editor
egrep = Extended GREP
elf = Extensible Linking Format
elm = ELectronic Mail
emacs = Editor MACroS
eval = EVALuate
ex = EXtended
exec = EXECute
fd = file descriptors
fg = ForeGround
fgrep = Fixed GREP
fmt = format
fsck = File System ChecK
fstab = FileSystem TABle
fvwm = F*** Virtual Window Manager
gawk = GNU AWK
gpg = GNU Privacy Guard
groff = GNU troff
hal = Hardware Abstraction Layer
joe = Joe’s Own Editor
ksh = Korn SHell
lame = Lame Ain’t an MP3 Encoder
lex = LEXical analyser
lisp = LISt Processing = Lots of Irritating Superfluous Parentheses
ln = LiNk
lpr = Line PRint
ls = list
lsof = LiSt Open Files
m4 = Macro processor Version 4
man = MANual pages
mawk = Mike Brennan’s AWK
mc = Midnight Commander
mkfs = MaKe FileSystem
mknod = MaKe NODe
motd = Message of The Day
mozilla = MOsaic GodZILLa
mtab = Mount TABle
mv = MoVe
nano = Nano’s ANOther editor
nawk = New AWK
nl = Number of Lines
nm = names
nohup = No HangUP
nroff = New ROFF
od = Octal Dump
passwd = PASSWorD
pg = pager
pico = PIne’s message COmposition editor
pine = “Program for Internet News & Email” = “Pine is not Elm”
ping = Packet InterNet Grouper
pirntcap = PRINTer CAPability
popd = POP Directory
pr = pre
printf = PRINT Formatted
ps = Processes Status
pty = pseudo tty
pushd = PUSH Directory
pwd = Print Working Directory
rc = runcom = run command, shell
rev = REVerse
rm = ReMove
rn = Read News
roff = RunOFF
rpm = RPM Package Manager = RedHat Package Manager
rsh, rlogin, = Remote
rxvt = ouR XVT
sed = Stream EDitor
seq = SEQuence
shar = SHell ARchive
slrn = S-Lang rn
ssh = Secure SHell
ssl = Secure Sockets Layer
stty = Set TTY
su = Substitute User
svn = SubVersioN
tar = Tape ARchive
tcsh = TENEX C shell
telnet = TEminaL over Network
termcap = terminal capability
terminfo = terminal information
tr = traslate
troff = Typesetter new ROFF
tsort = Topological SORT
tty = TeleTypewriter
twm = Tom’s Window Manager
tz = TimeZone
udev = Userspace DEV
ulimit = User’s LIMIT
umask = User’s MASK
uniq = UNIQue
vi = VIsual = Very Inconvenient
vim = Vi IMproved
wall = write all
wc = Word Count
wine = WINE Is Not an Emulator
xargs = eXtended ARGuments
xdm = X Display Manager
xlfd = X Logical Font Description
xmms = X Multimedia System
xrdb = X Resources DataBase
xwd = X Window Dump
yacc = yet another compiler compiler
Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考:后面还要发布关于对应英文的,以便记忆。
系统信息
arch 显示机器的处理器架构
uname -m 显示机器的处理器架构
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 关闭系统
init 0 关闭系统
telinit 0 关闭系统
shutdown -h hours:minutes & 按预定时间关闭系统
shutdown -c 取消按预定时间关闭系统
shutdown -r now 重启
reboot 重启
logout 注销
文件和目录
cd /home 进入 '/ home' 目录'
cd .. 返回上一级目录
cd ../.. 返回上两级目录
cd 进入个人的主目录
cd ~user1 进入个人的主目录
cd - 返回上次所在的目录
pwd 显示工作路径
ls 查看目录中的文件
ls -F 查看目录中的文件
ls -l 显示文件和目录的详细资料
ls -a 显示隐藏文件
ls *[0-9]* 显示包含数字的文件名和目录名
tree 显示文件和目录由根目录开始的树形结构
lstree 显示文件和目录由根目录开始的树形结构
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 复制一个目录
cp -r 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 -jxvf archive.tar.bz2 解压一个bzip2格式的压缩包
tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包
tar -zxvf 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 比较两个文件的内容只删除两个文件共有的部分
字符设置和文件格式转换
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
nslookup www.example.com lookup hostname to resolve name to ip address and viceversa
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
一、系统监控
1、free命令
free 命令能够显示系统中物理上的空闲和已用内存,还有交换内存,同时,也能显示被内核使用的缓冲和缓存
语法:free [param]
param可以为:
-b:以Byte为单位显示内存使用情况;
-k:以KB为单位显示内存使用情况;
-m:以MB为单位显示内存使用情况;
-o:不显示缓冲区调节列;
-s<间隔秒数>:持续观察内存使用状况;
-t:显示内存总和列;
-V:显示版本信息。
Mem:表示物理内存统计
total:表示物理内存总数(total=used+free)
used:表示系统分配给缓存使用的数量(这里的缓存包括buffer和cache)
free:表示未分配的物理内存总数
shared:表示共享内存
buffers:系统分配但未被使用的buffers 数量。
cached:系统分配但未被使用的cache 数量。
-/+ buffers/cache:表示物理内存的缓存统计
(-buffers/cache) 内存数: (指的第一部分Mem行中的used – buffers – cached)
(+buffers/cache) 内存数: (指的第一部分Mem行中的free + buffers + cached)
(-buffers/cache)表示真正使用的内存数, (+buffers/cache) 表示真正未使用的内存数
Swap:表示硬盘上交换分区的使用情况
2、ulimit命令
ulimit用于显示系统资源限制的信息
语法:ulimit [param]
param参数可以为:
-a 显示目前资源限制的设定。
-c <core文件上限> 设定core文件的最大值,单位为区块。
-d <数据节区大小> 程序数据节区的最大值,单位为KB。
-f <文件大小> shell所能建立的最大文件,单位为区块。
-H 设定资源的硬性限制,也就是管理员所设下的限制。
-m <内存大小> 指定可使用内存的上限,单位为KB。
-n <文件数目> 指定同一时间最多可开启的文件数。
-p <缓冲区大小> 指定管道缓冲区的大小,单位512字节。
-s <堆叠大小> 指定堆叠的上限,单位为KB。
-S 设定资源的弹性限制。
-t <CPU时间> 指定CPU使用时间的上限,单位为秒。
-u <程序数目> 用户最多可开启的程序数目。
-v <虚拟内存大小> 指定可使用的虚拟内存上限,单位为KB
3、top命令
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具
语法:top [param]
param为:
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-u [用户名]:指定用户名;
-p [进程号]:指定进程;
-n [次数]:循环显示的次数。
4、df命令 :df -h查看磁盘使用情况 ;df -i 查看inode使用情况
5、ps命令 :ps命令用于查看进程统计信息
常用参数:
a:显示当前终端下的所有进程信息,包括其他用户的进程。
u:使用以用户为主的格式输出进程信息。
x:显示当前用户在所有终端下的进程。
-e:显示系统内的所有进程信息。
-l:使用长(long)格式显示进程信息。
-f:使用完整的(full)格式显示进程信息。
在使用中可以加上grep命令一起使用,也可以单独使用
# ps命令单独使用的情况 :ps -elf tomcat
#结合管道操作和grep命令进行过滤,用于查询某一个进程的信息 :ps -elf | grep tomcat
二、文件操作
1、tail命令
tail 命令可用于查看文件的内容,语法为 :tail [param] [filename]
其中param可为:
-f :循环读取
-q :不显示处理信息
-v :显示详细的处理信息
-c [数目]: 显示的字节数
-n [行数]: 显示文件的尾部 n 行内容
–pid=PID :与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent :从不输出给出文件名的首部
-s, --sleep-interval=S :与-f合用,表示在每次反复的间隔休眠S秒
2、ll -ah :ll -ah命令,可以用于查看文件情况 ll -ah
三、网络通信
1、netstat
netstat命令是用于监控进出网络的包和网络接口统计的命令行工具 :语法:netstat [param]
param参数可以为:-h : 查看帮助 -r : 显示路由表 -i : 查看网络接口 2、重启网络
设置了linux网络,需要重启网络,可以用命令:service network restart
3、SELinux
SELinux全称是 Security-Enhanced Linux,它是由美国国家安全局(NSA)贡献的,它为 Linux 内核子系统引入了一个健壮的强制控制访问Mandatory Access Control架构。详情可以参考SELinux 入门,SELINUX工作原理
其实SELinux的功能也就是类似于防火墙的功能,不过安全相对比较好,ok,所以本博客介绍一下SELinux的使用命令
查看selinux状态 : getenforce
临时禁用SELINUX(学习用的linux才可以禁用,生产的不建议禁用SELINUX) : setenforce
永久禁用SELINUX(学习用的linux才可以禁用,生产的不建议禁用SELINUX)
# 将SELINUX=enforce改成SELINUX=disabled
vi /etc/selinux/config
4、防火墙
查询linux系统防火墙开启状态 : firewall-cmd --state
临时关闭防火墙(学习用的linux才可以禁用,生产的不建议禁用SELINUX) : systemctl stop firewalld.service
永久关闭防火墙(学习用的linux才可以禁用,生产的不建议禁用SELINUX) :systemctl disable firewalld.service
四、系统管理
1、uname :uname命令用于查看内核版本
2、ip addr :查看linux的ip地址:可以用命令 ip addr
查询sqlserver表大小
--itlearner注:显示表信息
select * from tablespaceinfo order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc
--在查询分析器中运行
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table tablespaceinfo --创建结果存储表
(nameinfo varchar(50) ,
rowsinfo int , reserved varchar(20) ,
datainfo varchar(20) ,
index_size varchar(20) ,
unused varchar(20) )
delete from tablespaceinfo --清空数据表
declare @tablename varchar(255) --表名称
declare @cmdsql varchar(500)
DECLARE Info_cursor CURSOR FOR select o.name from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1
and o.name not like N'#%%' order by o.name
OPEN Info_cursor
FETCH NEXT FROM Info_cursor INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
execute sp_executesql
N'insert into tablespaceinfo exec sp_spaceused @tbname',
N'@tbname varchar(255)',
@tbname = @tablename
FETCH NEXT FROM Info_cursor INTO @tablename
END
CLOSE Info_cursor
DEALLOCATE Info_cursor
GO
修正sqlserver索引错误
DBCC UPDATEUSAGE(ufdata_808_2002);
运行位置:查询分析器
主要用途: 意外关机或者日志被删除后,表发生紊乱,表保留空间过多,可使用本方法。使用后再进行数据库收缩,可缩小10%空间,并提高速度。基本每个数据库都有错误。
我单位用友数据库就是出现骉紊乱的情况,使用本命令就可以解决问题。
sqlserver 多表查询
UPDATE RP_bankrecp SET RP_bankrecp.iflag = rp_bankrecp_2011.iflag FROM RP_bankrecp LEFT JOIN RP_bankrecp_2011 ON RP_bankrecp.i_id = RP_bankrecp_2011.i_id
update table1 set table1.field1=table2.field2 from table1 left join table2 on table1.fieldX=table2.fieldy
用友问题:发票参照发货单可以修改,但无法保存的问题
用友T6、U8都存在的问题,发票参照发货单可以修改,但无法保存的问题。 检查表SA_INIMain中,因为用友T6将单据参照竟然按照使用者的电脑来进行存储, 换电脑了,定义的参照就不好用了。不得不说是个很不方便的地方,而且一旦有人操作销售模块,立马提示:有人在使用。 到这里进行修改就行了。修改ibilldef字段的值就可以了。 其他发票、发货单、退货单参照都在这里进行修改
解决用友固定资产出现的“不能月末结账,可能月末未结账”的处理办法
用友官方处理的很粗暴,就是你操作的不对,按照他的要求来就是了。
但其实这个问题在用友固定资产中很常见,因为用友固定资产编写的太糟糕了,对异常处理的很粗,比方你在3月份中以2月份的日期进行查询或者处理,就很容易导致出现这种情况。
查看数据库发现,最后一次折旧日期哪里的date类型的数据里,填写竟然是00:00:00,问题找到了,那么你只需要把时间删除,填写最后一个提折旧的日期就好了,你会发现问题就得到解决。
另外你要看两个月份哪里是否正常:一个是最后一次提折旧的月份,一个是最新的日期月份,是否和你的实际业务相符。
相关的查询语句为:select * from accinformation where csysid like ‘fa’ ,这样里面的数据就很好找了。
用友打印设置修改后,预览没有变化:
设置打印模板后预览没有变化
原因分析:操作员在进行打印预览时如果在预览界面选择“保存当前设置”,此时会在C盘下生成一个XML格式的文件,无论如何修改单据打印模板,预览调取的都是保存在C盘下的XML格式的文件。
问题解答:将C:\WINDOWS\system32\UFCOMSQL\PrintSetting 中对应的XML文件删除后,在进行单据预览,即可按照修改后的单据模板效果显示。
提示:在用友T6中,VoucherTemplates 表是负责单据显示和打印的题目,如果新增单据,其中vt_id可以设置为最大+1, 其中字段vt_templatemode=1 表示的是打印模板,指向VoucherItems_Prn表,vt_templatemode=0,则是指向 VoucherItems表
linux ssh
linux下登录日志在下面的目录里:
cd /var/log
查看ssh用户的登录日志:
less secure
linux日志管理:
1. 日志简介
日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等。
在Linux系统中,有三个主要的日志子系统:
连接时间日志--由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和 utmp文件,使系统管理员能够跟踪谁在何时登录到系统。进程统计--由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。
错误日志--由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。另外有许多UNIX程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。 常用的日志文件如下:
access-log 纪录HTTP/web的传输
acct/pacct 纪录用户命令
aculog 纪录MODEM的活动
btmp 纪录失败的纪录
lastlog 纪录最近几次成功登录的事件和最后一次不成功的登录
messages 从syslog中记录信息(有的链接到syslog文件)
sudolog 记录使用sudo发出的命令
sulog 记录使用su命令的使用
syslog 从syslog中记录信息(通常链接到messages文件)
utmp 记录当前登录的每个用户
wtmp 一个用户每次登录进入和退出时间的永久纪录
xferlog 记录FTP会话
utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键--保持用户登录进入和退出的纪录。有关当前登录用户的信息记录在文件utmp中;登录进入和退出纪录在文件wtmp中;最后一次登录文件可以用lastlog命令察看。数据交换、关机和重起也记录在wtmp文件中。所有的纪录都包含时间戳。这些文件(lastlog通常不大)在具有大量用户的系统中增长十分迅速。例如wtmp文件可以无限增长,除非定期截取。许多系统以一天或者一周为单位把wtmp配置成循环使用。它通常由cron运行的脚本来修改。这些脚本重新命名并循环使用wtmp文件。通常,wtmp在第一天结束后命名为wtmp.1;第二天后wtmp.1变为wtmp.2等等,直到wtmp. 7。
每次有一个用户登录时,login程序在文件lastlog中察看用户的UID。如果找到了,则把用户上次登录、退出时间和主机名写到标准输出中,然后login程序在lastlog中纪录新的登录时间。在新的lastlog纪录写入后,utmp文件打开并插入用户的utmp纪录。该纪录一直用到用户登录退出时删除。utmp文件被各种命令文件使用,包括who、w、users和finger。
下一步,login程序打开文件wtmp附加用户的utmp纪录。当用户登录退出时,具有更新时间戳的同一utmp纪录附加到文件中。wtmp文件被程序last和ac使用。
2. 具体命令
wtmp和utmp文件都是二进制文件,他们不能被诸如tail命令剪贴或合并(使用cat命令)。用户需要使用who、w、users、last和ac来使用这两个文件包含的信息。
who:who命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机。例如:who(回车)显示
ynguo pts/7 Aug 18 14:12
ylou pts/8 Aug 18 14:15
如果指明了wtmp文件名,则who命令查询所有以前的纪录。命令who /var/log/wtmp把报告自从wtmp文件创建或删改以来的每一次登录。
w:w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息。例如:w(回车)显示:3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
chyang pts/0 202.38.68.242 3:06pm 2:04 0.08s 0.04s -bash
ynguo pts/2 202.38.79.47 3:32pm 0.00s 0.14s 0.05 w
ylou pts/8 202.38.64.235 2:15pm 1:09m 0.10s 0.04s -bash
users:users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名把显示相同的次数。例如:users(回车)显示:chyang lewis lewis ylou ynguo ynguo
last:last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户。例如:
chyang pts/9 202.38.68.242 Tue Aug 1 08:34 - 11:23 (02:49)
cfan pts/6 202.38.64.224 Tue Aug 1 08:33 - 08:48 (00:14)
chyang pts/4 202.38.68.242 Tue Aug 1 08:32 - 12:13 (03:40)
lewis pts/3 202.38.64.233 Tue Aug 1 08:06 - 11:09 (03:03)
lewis pts/2 202.38.64.233 Tue Aug 1 07:56 - 11:09 (03:12)
linux查看日志:
# cd /var/log
# less secure
或者
# less messages
最近登录的日志:
# last
LINUX命令
1、查看当前目录下所有文档的内容行数 : wc -l *
2、查看当前目录下所有文档的大小 : du -sh *
3、后台启动Python脚本输出日志到文件,查看日志文件
4、查看服务器磁盘使用情况
df -h
5、查看服务器内存状况
free -g
6、查看当前目录下文件数量
ls -l |grep "^-"|wc -l
7、查看运行这的Python进程 , 并杀掉指定进程
ps -ef | grep python3
kill -9 进程号
8、显示脚本当前光标所在行号
切换到命令行模式nu
9、显示脚本所有行号
命令行模式下set nu
10、统计当前目录下的文件个数:
ls -l | grep "^-" | wc -l
11、统计当前目录下的目录个数:
ls -l | grep "^d" | wc -l
12、统计当前目录下的文件个数,包括子目录中的(R必须大写,否则无效)
ls -lR | grep "^-"|wc -l
13、统计当前目录下的目录个数,包括所有子目录中
ls -lR | grep "^d" | wc -l
14、批量替换文件指定内容
find -name 'nohup.out' | xargs perl -pi -e 's|old_str|new_str|g'
find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'
php调用linux命令
1、exec函数
<?php
$test = "ls /tmp/test"; //ls是linux下的查目录,文件的命令
exec($test,$array); //执行命令
print_r($array);
?>
2、system函数
<?php
$test = "ls /tmp/test";
$last = system($test);
print "last: $last\n";
?>
3、passthru函数
<?php
$test = "ls /tmp/test";
passthru($test);
?>
4、popen函数
<?php
$test = "ls /tmp/test";
$fp = popen($test,"r"); //popen打一个进程通道
while (!feof($fp)) { //从通道里面取得东西
$out = fgets($fp, 4096);
echo $out; //打印出来
}
pclose($fp);
?>
5、proc_open函数
<?php
$test = "ls /tmp/test";
$arrayarray = array(
array("pipe","r"), //标准输入
array("pipe","w"), //标准输出内容
array("pipe","w") //标准输出错误
);
$fp = proc_open($test,$array,$pipes); //打开一个进程通道
echo stream_get_contents($pipes[1]); //为什么是$pipes[1],因为1是输出内容
proc_close($fp);
?>
6、proc_open函数
<?php
$test = "ls /tmp/test";
$arrayarray = array(
array("pipe","r"), //标准输入
array("pipe","w"), //标准输出内容
array("pipe","w") //标准输出错误
);
$fp = proc_open($test,$array,$pipes); //打开一个进程通道
echo stream_get_contents($pipes[1]); //为什么是$pipes[1],因为1是输出内容
proc_close($fp);
?>
7、shell_exec函数
<?php
$test = "ls /tmp/test";
$out = shell_exec($test);
echo $out;
?>
问题描述:用友多个版本的固定资产处理模块“处理”菜单中的项目会消失大半
问题分析:日期格式不同导致的,属于软件bug,客户端区域修改日期格式为长格式
用友T6固定资产模块处理菜单中的项目会突然消失
解决办法:首先进入数据库,accinformation中,执行:
SELECT *
FROM AccInformation
WHERE (cName LIKE 'dWritableDate') OR
(cName LIKE 'iLastPeriod')
将最新会计期间改为:3
将最新会计日期改为:2021-03-01
以上根据具体情况进行修改。
jiaja2 操作
数学运算 +, -, *, /, **, //, %等数学运算符都支持.
逻辑运算 and, or, not也同样支持
1. in 判断元素是否在集合中
2. | 管道操作符, 默认使用Apply调用一个方法
3. ~ 字符串连接
4 () 调用可调用对象
5. . 和 [ ]获取属性
6. 三元操作: value1 if expression else value2支持
7. 内建filter: (对于内建filter的别名, 可以在jinja2的filters.py文件中查找)
8. abs(number) 返回一个值的绝对值
9. batch(value, lincount, fill_with = None): 接 受的value是一个序列对象, linecount表明个数, 最后生成一个列表, 列表个数为linecount, 如果提供的value长度小于 linecount, 不足的使用fill_with填充
10. capitalize(string): 接受一个字符串, 将其转换为首字母大写, 其他字母小写的形式返回
11. center(value, width = 80): 接受一个字符串, 将其至于80的长度中居中, 不足的字符使用空格填充
12. default(value, default_value = u””, boolean = False): 返回value指定的变量的值, 如果value是Undefined那么返回default_value指定的值, boolean意义未知
13. dictsort(value, case_sensitive = False, by = ‘key’): value 为要遍历的字典, case_sensitive指示是否立即加载, 设置为False表示延时加载, by表示以什么排序, 可以通过设置 by = ‘value’来以值排序.
14. escape(string): 返回一个转码的安全HTML
15. filesizeformat(value): 接受一个数值, 返回人易读的文件大小表示.
16. first(sequence): 返回序列的第一个元素
17. float(value, default = 0.0): 将接受到的value转换成float类型, 如果转换失败返回指定的default值
18. forceescape(value): 强制进行HTML转码, 也就是说不检查要转码的字符串是否是标记为安全的,这样可能会发生二次转码
19. format(value, *attribute): 类似于字符串格式化’%d %s’这样的功能value是格式定义, attribute不定参数接受占位符代表的值.
20. groupby(value, attribute): 按照指定的共有属性将集合进行分组, 返回元组组成的列表, 元组中第一个元素是用来分组的属性的值, 第二个元素是分组得到的所有原集合元素的列表.
21. indent(string, width = 4, indentfirst = False): 将接受到的string, 每行缩进width指定的字符数, indentfirst用来指定首行是否缩进.
22. int(value, default = 0): 将接受到的value转换成int型, 如果转换失败, 返回default指定的值
23. join(value, d = u””): 接受一个序列类型的对象, 向序列中进行插空d指定的字符串返回一个字符串
24. last(seq): 返回指定序列的最后一个元素
25. length(obj): 返回序列或者字典的项数
26. list(value): 将接受到的value转换成一个list
27. lower(string): 将接受到的字符串转换成小写形式.
28. pprint(value, verbose = False): 漂亮的打印一个变量的值, 多用于调试, verbose表示是否显示冗长的信息
29. random(seq): 接受一个序列对象, 随机返回其中的一个元素
30. replace(string, old, new, count = None): 接受一个字符串, 将其中的old表示的子串替换成new指定的子串, 从左到右替换count次, 如果count不指定, 则替换一次
31. reverse(value): 接受一个可迭代对象, 返回逆序的迭代器
32. round(value, precision = 0, method = ‘common’): 舍 去运算, 接受一个值, precision表示精度(小数点后保留几位), method可以取值common | ceil | floor, 分别 表示四舍五入 | 进位 | 舍去
33. safe(value): 标记传入的value值是安全的, 使用escape转码时不会发生二次转码
34. slice(value, slices, fill_width = None): 切片, 接受一个可迭代对象, 返回slices指定的前n个元素, 不足n个使用fill_width指定的对象进行填充
35. sort(value, reverse = False): 接受一个序列对象, 进行排序, reverse指定是否逆序
36. string(obj): 接受一个对象, 转换成一个string字符串
37. striptags(values): 接受一个字符串, 剥离SGML/XML标签, 并且将多个空白字符转换成单空格
38. sum(sequence, start = 0): 接受一个序列对象, 返回序列对象的元素和start的总和, 如果指定的序列对象是空的, 就返回start指定的值
39. title(string): 将接受到的字符串转换成标题模式, 即每个单词的首字母大写
40. trim(value): 去掉字符串开始和末尾多余的空白字符
41. truncate(string, length = 255, killwords = False, end = “…”): 切 断接受到的字符串, 截取前length个字符, 如果字符串比length长, 切断后追加end指定的字符串, 如果 killwords = True可以返回, 如果killwords = False不会有任何输出, 不明白.
42. upper(string) 把接受到的字符串转成大写
43. urlize(value, trim_url_limit = None, nofollow = False): 接 受一个url, 转换成一个标签表示的link, 这个link的href为传入的url, innerText是url截取前 trim_url_limit个字符, nofollow设置为true时, 会为这个link加入一个属性 rel=’nofollow’
44. wordcount(string): 计算string中的单词数
45. wordwrap(string, width = 79, break_long_words = True): 返 回经过包装的width指定宽度的字符, 也就是说每读取width个字符就会换行. , break_long_words表明在获取到width个字 符之后, 如果一个单词还没有结束, 是否截断单词, False将不会截断
46. xmlattr(d, autospace = True): 通过接受一个字典, 创建一个SGML/XML属性列表, 例如:
可以得到输出
字典中指定的值为none的, 将不会被解析成标签属性.
23 内建测试:
23.1 callable(object): 测试一个对象是否是可调用对象
23.2 defined(value): 测试传入的对象是否已经定义了
23.3 divisibleby(value, num)测试传入的数值是否可以被num整除
23.4 escaped(value): 检查传入的对象是否被转码了
23.5 even(value): 如果传入的对象是even的返回True, 不懂even是什么样的对象
23.6 iterable(value): 检查对象是否是可迭代的
23.7 lower(value): 检查传入的字符串是否都是小写
23.8 none(value): 检查对象是否是空对象None
23.9 number(value): 检查对象是否是一个数字
23.10 odd(value): 检查传入的数字是否是奇数
23.11 sameas(value, other): 检查传入的对象和other指定的对象是否在内存中的同一块地址(同一个对象)
23.12 sequence(value): 检查对象是否是序列, 序列同样是可迭代对象
23.13 string(value): 检查对象是否是string
23.14 undefined(value): 检查一个对象是否未定义
23.15 upper(value): 检查一个字符串是否全部大写
24 全局函数:
24.1 range([start, ]stop[, step]):
{% for i in range(10) %}
{{ i }}
{% endfor %}
24.2 lipsum(n = 5, html = True, min = 20, max = 100): 不知道用途
24.3 dict(**items) 根据传入的关键字参数构造一个字典对象.
for
循环打印一个序列,例如:
h1>Members
{% for user in users %}
{% endfor %}
在循环内部,你可以访问一些特殊的变量
Variable Description
loop.index 当 前迭代的索引,从1开始算
loop.index0 当前迭代的索引,从0开始算
loop.revindex 相 对于序列末尾的索引,从1开始算
loop.revindex0 相对于序列末尾的索引,从0开始算
loop.first 相 当于 loop.index == 1.
loop.last 相当于 loop.index == len(seq) - 1
loop.length 序列的长度.
loop.cycle 是 一个帮助性质的函数,可以接受两个字符串参数,如果当前循环索引是偶数,则显示第一个字符串,是奇数则显示第二个字符串。它常被在表格中用来用不同的背景 色区分相邻的行。
设置变量值 {% set variable_name = value %}
宏
{% macro last_tweets(count=20) %}
{% for tweet in models.twitter.get_last_tweets(count) %}
{{ tweet.username|e }}:
{{ tweet.parsed_text }}
{% endfor %}
{% endmacro %}
Why do you need an extension for that? A function is perfectly fine:
from jinja2 import contextfunction
@contextfunction
def widget(context, template_name, **extra_context):
t = jinja_env.get_template('widgets/' + template_name)
ctx = dict(context.items())
ctx.update(extra_context)
return t.render(ctx)
jinja_env.globals['widget'] = widget
And then in the template::
{{ widget('last_tweets.html') }}
1{% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %}
2{% set key, value = call_something() %}
global functions和filters类似,注册方法都是将其保存于Environment中,前者保存在Environment.globals字典中,后者保存在Environment.filters字典中即可。
01 env.filters['filter_name'] = filter_func
02 env.filters['globalfunction_name'] = global_func
03 macro:
04 {% macro input(name, value='', type='text', size=20) %}
05
07 {% endmacro %}
08
09{{ input('username') }}
10
11 {% macro render_dialog(title, class='dialog') -%}
12
13
14
15 {{ caller() }}
16
17
18
19 {%- endmacro %}
20
21 {% call render_dialog('Hello World') %}
22 This is a simple dialog rendered by using a macro and
23 a call block.
24 {% endcall %}
PYTHON操作excel
pip install openpyxl
from openpyxl import load_workbook
wb = load_workbook('file_name')
ws = wb['sheet_name']
for sheet in wb:
wb.close()
wb.save(filename)
sheet[1] #第一行
sheet['A'] #A列
sheet['A1'] #指定单元格
sheet['A2:D2'] # 获取行
sheet['A2:A4'] # 获取列
sheet['A1:D4'] # 获取4行4列
ws.cell(1,1).value
for row in ws.iter_rows(min_row=3,max_row=5,min_col=2,max_col=5):
print(*[r.value for r in row])
ws.append(['cell1', 'cell 2'])
在指定行插入
ws.insert_rows(7)
for cell in ws[7]:
cell.value = 'cell value'
在指定列插入
ws.insert_cols(2)
for i in ws.max_row:
cell = ws.cell(i, 2)
cell.value = 'cell value'
ws.delete_rows(2) 删除行
ws.delete_cols(2)删除列
worksheet.append() 增加一行
save()方面是'w'的模式写入,会覆盖
worksheet 表存在属性:
dimensions:返回包含数据的所有单元格的最小边界范围
max_column:包含数据的最大列数
max_row:包含数据的最大行数
values:按行获取所有单元格的值,返回一个生成器
cell 属性
row:单元格的行号(从1开始)
column:单元格的列索引字母(从A开始)
col_idx:单元格的列号(从1开始)
column_letter:单元格的字母索引(A, B, ...)
coordinate: 单元格的坐标(比如:A1)
parent:单元格所在的worksheet
data_type:单元格值的类型
选择文件窗口
import win32ui
dlg = win32ui.CreateFileDialog(1) # 1表示打开文件对话框
dlg.SetOFNInitialDir('E:/Python') # 设置打开文件对话框中的初始显示目录
dlg.DoModal()
filename = dlg.GetPathName() # 获取选择的文件名称
self.lineEdit_InputId_AI.setText(filename) #将获取的文件名称写入名为“lineEdit_InputId_AI”可编辑文本框
mysql子增加字段ID sql代码
ALTER TABLE users MODIFY id smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=13;
ALTER TABLE users MODIFY id smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=13;
ALTER TABLE users MODIFY id smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=13;
ALTER TABLE users MODIFY id smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=13;
c# 操作数据库
SqlConnection conn = new SqlConnection("server=172.31.9.9;uid=sa;pwd=sa;database=ufdata_101_2020");
conn.Open();
string sql;
cinvcode = '100%'
sql = $@"select top 1000 * from inventory where cinvcode like {cinvcode}";
SqlCommand command = new SqlCommand(sql,conn);
//int result = command.ExecuteNonQuery();//这里是update delete等引起的行号变化
//以下使用reader取得,然后送给grid
SqlDataReader reader = command.ExecuteReader();
BindingSource source = new BindingSource();
source.DataSource = reader;
dataGridView1.DataSource = source;
conn.Close();
//以下为reader使用table传递到datagrid
DataTable data = new DataTable();
SqlDataReader reader = command.ExecuteReader();
data.Load(reader);
dataGridView1.DataSource = data;
conn.Close();
//以下为使用dataadapter送到table里面
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sql, conn);
DataTable data = new DataTable();
sqlDataAdapter.Fill(data);
dataGridView1.DataSource = data;
conn.Close();
MONGO操作
show dbs 查看所有数据库
use runoob 打开和创建数据库
db.dropDatabase() 删除数据库
db.createCollection("集合名") 创建集合
db.collection.drop() 删除集合
db.集合名.insert(document) 或者 db.集合名.save(document)
3.2后增加了:
db.collection.insertOne()用于向集合插入一个新文档
db.collection.insertMany()用于向集合插入多个文档
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}}) 替换文档
db.col.find().pretty() 查询文档
db.col.remove({'':''})删除指定记录
db.col.remove({}) 删除所有记录
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
安全验证:
use admin
#创建超级用户
db.createUser({user:"root",pwd:"123123",roles:[{role:"root",db:"admin}]})
db.createUser({ user : 'root', pwd : 'lxb20010729B~', roles : [ 'clusterAdmin', 'dbAdminAnyDatabase', 'userAdminAnyDatabase', 'readWriteAnyDatabase' ]})
#创建普通用户
use mydb1
db.createUser({user:"zhangsan",pwd:"123123",roles:[{role:"readWrite",db:"mydb1"}]})
db.createUser({user:"lisi",pwd:"123123",roles:[{role:"read",db:"mydb1"}]})
1、创建集合
show dbs
show dbs.user
admin数据库
use wjh2021 :创建或者打开数据库
use 以后再db.dropDatabase(),可以删除数据库
show tables :显示wjh2021下所有的表
比方有个inventory表,或者说集合,里面的记录叫做文档
db.inventory.find() 显示所有的记录
db.inventory.find().count() 记录数,也可以灵活一点,比如在find后面加上条件
db.inventory.find('cinvcode':'0101001') 这样只显示符合cinvcode=0101001的条件,记住:字段要加引号
db.inventory.remove('字段名':'值') 注意,这是删除字段名=值的
db.inventory.sort() 排序
db.inventory.drop()删除表 db.inventory.remove()
正文:网上几乎你能看到的所有的Kms-pico都是木马,正宗的Kms-pico是没有病毒软件警告的,至少我使用的腾讯的安全管家没有报。
记住以下几点:
1、正确的Kms-pico为3.5M,而带毒的几乎都10多M
2正确的Kms-pico直接就是安装界面,而带毒的几乎都是所谓的绿色的正确的不会弹出带毒窗口,提示广告、木马之类的,而带毒的都会正确的Kms-pico最后一个版本是10.2,网上所有的高版本都是带毒的。5、正确的Kms-pico地址是:getkmspico.com
(我是在墙外可以访问,墙内不知道)
最后我鄙视下国人,你加个壳表示你做的也行,竟然加上了广告和木马,也太会做买卖了,真是心眼长歪了!!!
不知道有没有人开放类似的数据库,因为有服务器和带宽资源,所以就开放了,没有对最大请求数量和最大连接数进行限制,服务器内存16G,希望善用。有需要的,可以直接保存到本地,占用空间8.4G。
数据库类型:mysql
IP:221.2.156.42
端口:13306
用户名:guest
密码:lan24wf3
数据库名称:bookdata
表名:bookdata
字段:`id`, `title`, `keyword`, `content`, `type`
对应的`title`, `keyword`, `content`分别为:标题,分类,内容
权限:select
连接字符串:"Database = bookdata;Server = 221.2.156.42;Port = 13306;Password = lan24wf3;UserID = guest;charset = utf8mb4"
内容:关于c#,c++,java,golang,python,php等语言的50万条代码示例和函数示例,来源于各类代码平台,会持续补充。
用途:供开发自行进行查询的代码示例数据库,方便开发查询。
时间:长期