Guo Qiang

一些疑难问题

Frequently Asked Questions
image
当遇到困难时,一定要勇敢的去面对

我们总是被各种各样的问题困扰,有时为了解决这一个问题,可能需要话费几小时甚至几天的时间,有的问题确实复杂,而有的问题真得好简单,只是我们当时没有找对方向。

FreeBSD 如何挂载 exFat 分区

前不久入手了一块移动硬盘,考虑到可能会在 windows / Mac / FreeBSD 之间传输,exFat 分区是个不错的选择,windows 和 Mac 都自动识别 exFat,只有 FreeBSD 是需要安装 fusefs-exfat 才能识别


pkg install fusefs-exfat


然后,在 /etc/rc.conf 和 /boot/loader.conf 中各添加一行配置:


# 编辑文件 /etc/rc.conf,添加如下行
fusefs_enable="YES"

# 编辑文件 /boot/loader.conf,添加如下行
fusefs_load="YES"


这些都准备好后,重启系统后就可以正常挂载了:


mount.exfat /dev/da0s1 /mnt


腾讯云 CentOS 主机不断收到系统邮件的问题

腾讯云主机的 CentOS 系统,登录到控制台后经常会收到下面这种邮件,几天不清理可能就上千封


Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 7 messages 7 new
>N  1 (Cron Daemon)         Wed Mar 10 12:00  25/893   "Cron <root@vps> /usr/local/qcloud/YunJing/YDCrontab.sh"
 N  2 (Cron Daemon)         Wed Mar 10 12:30  25/893   "Cron <root@vps> /usr/local/qcloud/YunJing/YDCrontab.sh"
 N  3 (Cron Daemon)         Wed Mar 10 13:00  25/893   "Cron <root@vps> /usr/local/qcloud/YunJing/YDCrontab.sh"
 N  4 (Cron Daemon)         Wed Mar 10 13:30  25/893   "Cron <root@vps> /usr/local/qcloud/YunJing/YDCrontab.sh"
 N  5 (Cron Daemon)         Wed Mar 10 14:00  25/893   "Cron <root@vps> /usr/local/qcloud/YunJing/YDCrontab.sh"
 N  6 (Cron Daemon)         Wed Mar 10 14:30  25/893   "Cron <root@vps> /usr/local/qcloud/YunJing/YDCrontab.sh"
 N  7 (Cron Daemon)         Wed Mar 10 15:00  25/893   "Cron <root@vps> /usr/local/qcloud/YunJing/YDCrontab.sh"


咨询了客服得到解决方案:


# echo "unset MAILCHECK" >> /etc/profile
# source /etc/profile
# cat /dev/null > /var/spool/mail/root


一周后,再次登录控制台,依然收到几百封同样的邮件,看来之前的这个解决方案没起作用,再次联系客服,得知此邮件信息是云镜检测后进行发送的,关闭邮件发送一般需要关闭此检测任务,考虑云镜进程运行稳定,目前不建议您关闭此任务。

若需要进一步关闭,可将此计划任务转移至其他目录下,但对应的程序进程状况将不再进行检测,无法及时获取云镜进程运行状况。

具体的关闭方法执行以下命令即可:


mv /etc/cron.d/yunjing /root/yunjin.bak


这个云镜是腾讯云的服务器监控组件,作用有点类似乎电脑上的杀毒软件,负责提供黑客入侵检测和漏洞风险预警等安全防护服务,觉得这个监控程序还是比较有用的,解决继续使用,就不关闭它了。在腾讯云的文档中心找到了监控组件的安装与卸载的方法。

安装方法如下:


wget https://imgcache.qq.com/qcloud/csec/yunjing/static/ydeyesinst_linux64.tar.gz -O ydeyesinst_linux64.tar.gz && tar zxvf ydeyesinst_linux64.tar.gz && sh self_cloud_install_linux64.sh


执行完安装命令后查看 YDService,YDLive 进程是否有调用,有调用则安装成功。命令为:


ps -ef | grep YD


如果进程没有起来,可以使用 root 用户手动执行命令,启动程序。命令为:


/usr/local/qcloud/YunJing/YDEyes/YDService


若不再需要主机安全防护,可将其卸载:


/usr/local/qcloud/YunJing/uninst.sh


FreeBSD 执行 portsnap fetch update 出现错误

曾经遇到过几次更新 ports 时出现如下的错误信息


# portsnap fetch update

Fetching 4 metadata patches... done.
Applying metadata patches... done.
Fetching 5 metadata files... gunzip: (stdin): unexpected end of file
metadata is corrupt.


这种情况只要清理一下 ports 缓存就能解决


# rm /var/db/portsnap/tag


FreeBSD 安装 git 出现 pw: user _tss disappeared during update

说来也是奇怪,今天在一台 FreeBSD 服务器上安装 git 时,出现了一个错误:


# pkg install git

...
Checking integrity... done (0 conflicting)
[1/48] Installing tpm-emulator-0.7.4_2...
===> Creating groups.
Using existing group '_tss'.
===> Creating users
Creating user '_tss' with uid '601'.
pw: user '_tss' disappeared during update
pkg: PRE-INSTALL script failed


最后解决的办法却是出奇的简单,输入命令 vipw,然后直接 :wq 保存退出,最后再重新安装 git 就可以了。


# vipw
# pkg install git


FreeBSD 无线网卡配置

一台老的笔记本电脑一直闲置着,打算装上 FreeBSD ,但 Thinkpad 内置无线网卡博通 BCM43142 无法被 FreeBSD 识别,最后索性换个网卡,本来要换块高通的,可受 Thinkpad BIOS 白名单的限制,只能买了块 Intel 2230 的网卡,好在一些正常,顺利连上网。

  • 首先确定网卡名称

# dmesg | grep Wireless
iwn0: <Intel Centrino Wireless-N 2230> mem 0xf2d00000-0xf2d01fff irq 17 at device 0.0 on pci2


  • 编辑 /boot/loader.conf 文件,载入所需模块

if_iwn_load="YES"
iwn2000fw_load="YES"
iwn2030fw_load="YES"
iwn2230fw_load="YES"


  • 编辑 /etc/wpa_supplicant.conf 文件,设置 Wi-Fi 名称和密码

ctrl_interface=/var/run/wpa_supplicant
eapol_version=2
ap_scan=1
fast_reauth=1
network={
	ssid="无线网名称"
	psk="无线网密码"
}


  • 编辑 /etc/rc.conf 文件,绑定网卡

wlans_iwn0="wlan0"
#如果使用固定 IP 地址:
ifconfig_wlan0="WPA inet 192.168.1.10/24";
# 如果使用 dhcp 分配:
ifconfig_wlan0="WAP dhcp"
defaultrouter="192.168.1.1"


  • 重启网络

# service netif restart
# /etc/netstart


GitHub 常用命令

  • 设置 user.name 和 user.email

git config --global user.name "输入你的用户名"
git config --global user.email "输入你的邮箱"

#查看结果
git config --list


  • 将文件添加到暂存区中

#仅添加 README.md 文件
git add README.md
#添加所有 c 文件
git add *.c
#添加当前目录下的所有文件
git add .


  • 将暂存区中的内容提交到当前分支

#仅提交filename文件
git commit -m "msg of commit" filename
#提交 stage 中所有内容
git commit -m "msg of commit"

#提交所有修改的内容(无需 git add)
git commit -a -m "msg of commit"


  • 比较版本区别

#比较文件在暂存区和工作区的差异
git diff
#查看工作区和本地仓库的差别
git diff HEAD
#查看这一版本的代码和上一版本的代码区别
git diff HEAD^
#查看这一版本的代码和上 n 版本的代码区别
git diff HEAD~n


  • git 分支

#新建分支
git branch <newbranch>
#切换到分支
#注意:在切换分支前,先进行一次 commit,否则修改的文件会被带过来
git checkout <branch>
#新建分支并切到新分支
git checkout -b <newbranch>


  • 个人访问令牌的使用

从 2021 年 8 月 13 日开始,Git 操作进行身份验证时不再接受帐户密码,并将要求使用基于令牌(token)的身份验证。
1. 打开Github,在个人设置页面,找到【Setting】,然后打开找到【Devloper Settting】然后,选择个人访问令牌【Personal access tokens】,然后选中生成令牌【Generate new token】。
2. 生成token后,记得把你的token保存下来,以便进行后面的操作。把token直接添加远程仓库链接中,这样就可以避免同一个仓库每次提交代码都要输入token了。

git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git

<your_token>:换成你自己得到的 token
<USERNAME>:是你自己 github 的用户名
<REPO>:是你的仓库名称


  • 一些使用技巧

#筛选出仓库中有变化的文件,并复制到指定文件夹中
git status --porcelain | awk '$1 ~ /^[MADRC]/ {print $2}' | xargs -I {} cp {} /path/to/destination/