科技江湖 https://bbs.viyf.org/ zh-CN VIYF 社区 Sun, 28 Apr 2024 01:22:40 +0800 Sun, 28 Apr 2024 01:22:40 +0800 转载,“熊孩子”乱敲键盘就攻破了Linux桌面,大神:17年前我就警告过你们 https://bbs.viyf.org/?thread-index-fid-6-tid-234.htm https://bbs.viyf.org/?thread-index-fid-6-tid-234.htm Mon, 17 Apr 2023 08:15:20 +0800 AllenLI Linux系统,居然被两个不懂任何技术的小孩“攻破”了。
他们只是在键盘和屏幕上一通乱按,就轻松绕过密码,进入了被锁定的Linux系统桌面。
最近,一位程序员父亲就这样,眼睁睁地看着自己的电脑被孩子“玩坏”。

作为一名程序员,他首先想到的不是打骂孩子,而是——如何复现漏洞。
他发现这个漏洞确实是孩子乱按导致的,在某些特殊按键组合下,Linux的屏幕锁定进程会崩溃,从而绕过了密码。
也就是说,只要有人知道了这个漏洞,无需密码就可以偷偷打开别人已经锁定的Linux电脑。
他将情况反馈到官方GitHub上,最终这个奇怪的漏洞上周被正式修复了。
但这并不能让程序员们放心,这些年因Linux桌面进程崩溃导致的安全漏洞层出不穷,屡见不鲜,你永远不知道下一个bug会是什么。
孩子们“乱杀”的桌面系统漏洞
这两个小孩,是怎么“发现”这一漏洞的呢?
这位程序员父亲将自己的电脑锁定后,孩子们试图解锁它,就开始在电脑键盘上瞎打。

 
△ 大致是这个画风
突然,屏保界面消失,孩子们成功进入了Linux系统。
什么?连密码都没有输入?
他让他们再演示一次。这次,孩子们同样做到了,但依旧只是“乱敲”键盘而已。
  
太奇怪了。
他在两个小孩离开后,自己又悄悄地试了一下,没能成功。
不过他认为,这肯定是个漏洞,因为已经亲眼见过两次了。
这位程序员父亲所用的桌面系统是Cinnamon(Linux桌面环境之一),他推测,Cinnamon是不是有什么奇怪的bug,在不输入密码的情况下也能解锁桌面。

当天晚上10点半,他在Linux Mint的GitHub页面上反馈了这一bug,并描述了孩子们敲击键盘的场景:
他们同时按下了物理键盘和屏幕虚拟键盘,而且,尽量多按一些虚拟键盘。
消息一出,马上就有网友表示,自己同样遇到了这种问题,而且用的桌面系统也是Cinnamon。
随后,Linux Mint程序员火速赶往现场。
检查后发现,这的确是一个bug,而且Cinnamon 4.2以上的桌面系统,都会受到影响,因为这一版开始支持屏幕虚拟键盘了。

导致这个bug的具体行为是:长按“e”键,并在虚拟键盘上选中“ē”。
现在,Linux Mint已经为这个漏洞推出了一个新补丁,不过需要自己手动安装。
人生苦短,不如用KDE(手动狗头)。
大神:17年前我就警告过他们
对于如此荒谬而简单的漏洞,自然引起各路程序员对Linux桌面的吐槽。
关于这个问题的GitHub issue页面都被程序员们玩坏了。
有人说:这个CVE应该归功于孩子们…

还有人在回帖中发个表情包:我想程序员们应该会这样复现bug。

 

但要论吐槽最狠的,还是著名程序员大神jwz。
今天凌晨,这位大神又双叒叕发了一篇文章来吐槽此事,标题是《我已经告诉过你们之2021版》。

因为早在17年前,他就警告过Cinnamon和GNOME官方:
如果没有在Linux上运行XScreenSaver,那么可以你的屏幕就相当于没有锁定。
之后每隔几年,jwz都会出来把这段话再说一遍。
jwz还调侃说:“翻车”一次是偶然,两次是巧合,三次是敌人的破坏,四次是GNOME官方。
而这四次安全漏洞,jwz都有详细的记录:
• 
CVE-2019-3010,从Oracle Solaris屏幕保护程序可以获得特殊权限升级;
• 
CVE-2014-1949, MDVSA-2015:162:在Cinnamon屏幕保护程序中按菜单键,再按ESC键,就可以进入shell;
• 
按住向下键,解锁Cinnamon屏幕保护程序;
• 
按住回车键,解锁GNOME屏幕保护程序。
修bug引发的新漏洞
导致Linux Mint漏洞是由于3月前修复另一个bug引起的。

这个漏洞存在于Linux显示服务xorg-x11-server中,其最大威胁是对数据机密性和完整性以及系统可用性的威胁。
更让人哭笑不得的是,Ubuntu 20.04在向后移植xorg的时候,由于使用了没有该bug的1.20.9版,反而逃过一劫。
当Ubuntu的开发人员意识到没有打上CVE-2020-25712补丁后,他们又中了新的漏洞。
结果就是,xorg更新修复以后,任何人都可以让屏幕锁定程序崩溃,然后进入桌面。
无独有偶,这不禁让人想起GNOME两个月前的另一个“低级”漏洞。
一位程序员通过将账户服务陷入无限循环,使GNOME的账户守护程序崩溃。之后就能在锁定界面添加新的sudo用户,并获取root权限。

这个锅该让GNOME来背吗?jwz认为,归根结底是因为现在的Linux图形化界面根基X11存在着不可修复的严重问题:
1、锁定和身份验证是操作系统级别的问题。
尽管X11是Linux计算机操作系统的核心,但它的设计没有安全性可言,锁定程序必须以普通的、非特权的用户级应用程序一样运行。
2、X11体系结构的这一错误永远无法修复。
X11太旧、太僵化,并且有太多利益相关者无法对它进行任何有意义的更改。这就是为什么人们不断尝试替换X11的原因并失败了,因为它根深蒂固。
虽然现在有Wayland作为X11的替代品,但仍有网友替换为Wayland后,Ubuntu桌面依然存在某些缺陷。
比如唤醒电脑后,会在原来的桌面停留10~20秒才能进入锁屏状态,这个过程中桌面的隐私会一览无余。
鉴于Linux桌面的安全性问题漏洞百出,为了防止未被发现漏洞遭利用,有用户建议先安装XSecureLock,多上一把锁。
我热切期待着听到他们如何解决这个问题。
jwz在自己的博客里如是说。
参考链接:
https://github.com/linuxmint/cinnamon-screensaver/issues/354...
https://www.zdnet.com/article/linux-mint-fixes-screensaver-bypass-discovered-by-two-kids/...
https://web.archive.org/web/20210116101222/https://www.jwz.org/blog/2021/01/i-told-you-so-2021-edition/...
—完—

]]>
Linux系统,居然被两个不懂任何技术的小孩“攻破”了。
他们只是在键盘和屏幕上一通乱按,就轻松绕过密码,进入了被锁定的Linux系统桌面。
最近,一位程序员父亲就这样,眼睁睁地看着自己的电脑被孩子“玩坏”。

作为一名程序员,他首先想到的不是打骂孩子,而是——如何复现漏洞。
他发现这个漏洞确实是孩子乱按导致的,在某些特殊按键组合下,Linux的屏幕锁定进程会崩溃,从而绕过了密码。
也就是说,只要有人知道了这个漏洞,无需密码就可以偷偷打开别人已经锁定的Linux电脑。
他将情况反馈到官方GitHub上,最终这个奇怪的漏洞上周被正式修复了。
但这并不能让程序员们放心,这些年因Linux桌面进程崩溃导致的安全漏洞层出不穷,屡见不鲜,你永远不知道下一个bug会是什么。
孩子们“乱杀”的桌面系统漏洞
这两个小孩,是怎么“发现”这一漏洞的呢?
这位程序员父亲将自己的电脑锁定后,孩子们试图解锁它,就开始在电脑键盘上瞎打。

 
△ 大致是这个画风
突然,屏保界面消失,孩子们成功进入了Linux系统。
什么?连密码都没有输入?
他让他们再演示一次。这次,孩子们同样做到了,但依旧只是“乱敲”键盘而已。
  
太奇怪了。
他在两个小孩离开后,自己又悄悄地试了一下,没能成功。
不过他认为,这肯定是个漏洞,因为已经亲眼见过两次了。
这位程序员父亲所用的桌面系统是Cinnamon(Linux桌面环境之一),他推测,Cinnamon是不是有什么奇怪的bug,在不输入密码的情况下也能解锁桌面。

当天晚上10点半,他在Linux Mint的GitHub页面上反馈了这一bug,并描述了孩子们敲击键盘的场景:
他们同时按下了物理键盘和屏幕虚拟键盘,而且,尽量多按一些虚拟键盘。
消息一出,马上就有网友表示,自己同样遇到了这种问题,而且用的桌面系统也是Cinnamon。
随后,Linux Mint程序员火速赶往现场。
检查后发现,这的确是一个bug,而且Cinnamon 4.2以上的桌面系统,都会受到影响,因为这一版开始支持屏幕虚拟键盘了。

导致这个bug的具体行为是:长按“e”键,并在虚拟键盘上选中“ē”。
现在,Linux Mint已经为这个漏洞推出了一个新补丁,不过需要自己手动安装。
人生苦短,不如用KDE(手动狗头)。
大神:17年前我就警告过他们
对于如此荒谬而简单的漏洞,自然引起各路程序员对Linux桌面的吐槽。
关于这个问题的GitHub issue页面都被程序员们玩坏了。
有人说:这个CVE应该归功于孩子们…

还有人在回帖中发个表情包:我想程序员们应该会这样复现bug。

 

但要论吐槽最狠的,还是著名程序员大神jwz。
今天凌晨,这位大神又双叒叕发了一篇文章来吐槽此事,标题是《我已经告诉过你们之2021版》。

因为早在17年前,他就警告过Cinnamon和GNOME官方:
如果没有在Linux上运行XScreenSaver,那么可以你的屏幕就相当于没有锁定。
之后每隔几年,jwz都会出来把这段话再说一遍。
jwz还调侃说:“翻车”一次是偶然,两次是巧合,三次是敌人的破坏,四次是GNOME官方。
而这四次安全漏洞,jwz都有详细的记录:
• 
CVE-2019-3010,从Oracle Solaris屏幕保护程序可以获得特殊权限升级;
• 
CVE-2014-1949, MDVSA-2015:162:在Cinnamon屏幕保护程序中按菜单键,再按ESC键,就可以进入shell;
• 
按住向下键,解锁Cinnamon屏幕保护程序;
• 
按住回车键,解锁GNOME屏幕保护程序。
修bug引发的新漏洞
导致Linux Mint漏洞是由于3月前修复另一个bug引起的。

这个漏洞存在于Linux显示服务xorg-x11-server中,其最大威胁是对数据机密性和完整性以及系统可用性的威胁。
更让人哭笑不得的是,Ubuntu 20.04在向后移植xorg的时候,由于使用了没有该bug的1.20.9版,反而逃过一劫。
当Ubuntu的开发人员意识到没有打上CVE-2020-25712补丁后,他们又中了新的漏洞。
结果就是,xorg更新修复以后,任何人都可以让屏幕锁定程序崩溃,然后进入桌面。
无独有偶,这不禁让人想起GNOME两个月前的另一个“低级”漏洞。
一位程序员通过将账户服务陷入无限循环,使GNOME的账户守护程序崩溃。之后就能在锁定界面添加新的sudo用户,并获取root权限。

这个锅该让GNOME来背吗?jwz认为,归根结底是因为现在的Linux图形化界面根基X11存在着不可修复的严重问题:
1、锁定和身份验证是操作系统级别的问题。
尽管X11是Linux计算机操作系统的核心,但它的设计没有安全性可言,锁定程序必须以普通的、非特权的用户级应用程序一样运行。
2、X11体系结构的这一错误永远无法修复。
X11太旧、太僵化,并且有太多利益相关者无法对它进行任何有意义的更改。这就是为什么人们不断尝试替换X11的原因并失败了,因为它根深蒂固。
虽然现在有Wayland作为X11的替代品,但仍有网友替换为Wayland后,Ubuntu桌面依然存在某些缺陷。
比如唤醒电脑后,会在原来的桌面停留10~20秒才能进入锁屏状态,这个过程中桌面的隐私会一览无余。
鉴于Linux桌面的安全性问题漏洞百出,为了防止未被发现漏洞遭利用,有用户建议先安装XSecureLock,多上一把锁。
我热切期待着听到他们如何解决这个问题。
jwz在自己的博客里如是说。
参考链接:
https://github.com/linuxmint/cinnamon-screensaver/issues/354...
https://www.zdnet.com/article/linux-mint-fixes-screensaver-bypass-discovered-by-two-kids/...
https://web.archive.org/web/20210116101222/https://www.jwz.org/blog/2021/01/i-told-you-so-2021-edition/...
—完—

]]>
1 https://bbs.viyf.org/?thread-index-fid-6-tid-234.htm https://bbs.viyf.org/?thread-index-fid-6-tid-234.htm
转载,[干货]为什么杀不掉应用,详解Android的后台管理机制 https://bbs.viyf.org/?thread-index-fid-6-tid-233.htm https://bbs.viyf.org/?thread-index-fid-6-tid-233.htm Wed, 01 Feb 2023 16:13:04 +0800 AllenLI Android系统长期存在应用后台管理机制。在多数人的认知中,应用分前台和后台。最简单的判别方式:显示界面的应用就是前台应用,在运行不显示界面的应用就是后台应用。
安卓十多年发展至今,应用数量庞大,实现的功能各不相同,那么简单的后台机制肯定无法满足需求。本篇图文详细解释一下Android的后台管理机制。具体分三节。
目录:

• 
Android后台机制的根本-内存管理:应用状态分级、LMK机制、与其他系统的区别。
• 
为什么后台应用关不掉:应用保活、自唤醒、关联启动。
• 
斩杀恶性应用的利剑:后台纯净、切断唤醒、持剑人Google的手段。


一、Android后台管理的根本
安卓内存管理方案:
Android沿用了Linux的内存管理方案,为低内存回收机制。与开多少就占用多少的Windows不同,Android是你不开应用,也会占用内存。在空载状态下,Android P占用下限约为500mb(大概,我测试可以正常运行),上限为设备物理内存的1/2,即开机占用一半内存。
而安卓应用不存在关闭一说,退出之后仍然会留在内存中。直至剩余内存过低,才会由系统机制将其杀掉,回收它占用的那部分内存。
了解应用状态的分级:

• 
foreground 前台。设备当前运行的应用,你打开什么软件,前台应用就是什么,很容易理解吧。
• 
visible 可见。与前台类似,同样可以显示在屏幕上,让用户看到,以及交互操作,如输入法、浮窗。
• 
secondary 次级。后台运行的服务,通常占用资源不大,但用户很需要其功能,比如各家系统的云服务。
• 
hidden 后台。后台运行的进程,在应用运行时直接按下home键,应用仍在运行。如果应用的优化没做好,那么将占用大量资源。
• 
content_provider 内容。与用户关系不大,通常感知不强。
• 
empty 空白。应用已经停止运行,没有进程与服务,只留下一个缓存,确保下一次打开时更迅速。

  上述六种状态,越往下,重要性越低,越容易被杀掉。
Android后台的杀手-Low Memory Killer:
应用在后台运行,固然可以增加启动速度,或便于推送信息,但内存大小和电池容量都不是无限的。当后台一多,就会拖累性能,降低续航。系统自然不可能坐以待毙,等着内存爆满死机。Android系统使用了的低内存杀后台机制LowMemoryKiller,以下简称lmk。
  可以看到,lmk对每个应用状态都有对应数值。当剩余内存大小达到数值时,lmk就会杀掉对应状态的应用,以释放内存。若杀掉应用,剩余内存仍然不足,便会继续杀掉上一个状态级别的应用,以此类推。一直杀到前台应用,这便会造成正运行的应用或游戏闪退。
  当然,目前安卓机动辄4g、8g内存的时代,能让lmk杀到前台的应用应该不存在了吧,除非是出现bug。
应用在后台占用的资源:
在固有印象中,安卓后台应用一多,就会十分卡顿。因为应用运行是要消耗硬件资源的,不论前台和后台。可能在500mb内存的时代没有那么明显的感知,因为内存太小,应用留不住后台。但从安卓机进入了1g、2g内存的时代,这个缺陷就一下子暴露出来了:后台杀不死,杀死后自启动,一个应用拖好几条进程,一条进程又有好几项服务,堪称群魔乱舞。此现象持续了至少六年。
  那这些应用消耗的是哪些资源呢?看上文的后台分级,这些应用一般属于次级或后台,与前台应用一样运行,会占用CPU运算资源,数据操作会占用闪存的读写资源,这两项就足以死死卡住设备,使其无法正常运行。这些资源总量是一定的,在当时性能普遍不强时,资源用一点就少一点,后台占用大了,前台自然要卡。
空载:
后台开启百度地图:
  此时已经卡到没法正常运行了,各种动画掉帧。
Android与其他系统后台的区别:
对于各个系统的应用,一般可以用两种状态来表示:Android分为“运行”和“停止”,iOS分为“前台”和“冻结”,Windows分为“启动”和“关闭”。
解释一下:iOS的特点是冻结式后台,即应用留后台但不运行,只有前台应用能运行。这样可以做到打开应用时秒开,但退入后台也不消耗资源,只占用内存;Windows特点是打开哪个应用,哪个应用就运行,点击关闭就停止运行,并清出内存。
内存占用也是与后台有关,旧时Android日常会占用50%;iOS内存在开机不久会爆满,始终居于95%以上;而Windows则是应用多大,内存占用就多大,没有应用时占用很低。
win空载占用
还有一个Windows Phone系统,是Microsoft基于win为智能手机设计的系统,它的特点不是杀死,而是限制,对后台应用数量限制,对每个应用占用内存限制。这种单个体小,个体总数少的限制,是非常简单且有效的,逼开发者不得不优化。不愧是你,微软。

二、为什么后台应用关不掉?
有些用户会刻意关闭后台,以释放内存或增加续航,但发现无法关闭后台运行的应用。这是什么原因呢?来详细分析一下后台管理手段与应用的关系。
首先看一下后台界面。
在这个界面中,可以展示出你打开过的应用,并生成缩略图。前面说过,安卓应用不存在关闭,退出后应用会进入后台运行。这个界面,可以手动停止后台的应用进程,就是点击那个×号,或在高版本上是滑动。但此行为并不等同于强行停止!
这个界面并不是强制性停止应用,而是清理掉应用的界面,并通知应用,应该停止自己的后台进程了。至于停止哪些服务,就是应用自己说了算。旧时安卓这个机制问题真的很大,尤其Android K-N,和恶意应用对线简直被爆锤。当时定制化系统对这些机制进行了修改,划掉卡片即强行停止,才能对恶意应用进行反击。
应用保活:
应用的开发者为了一些功能运行,或是一些利益原因,会对应用的后台进程进行保护,防止被杀掉,此行为称为应用保活。
常见的保活手段,就是留通知。在通知栏中留一条不可清除的通知,即可实现避免被杀。即便你在后台界面划掉了卡片,只要这条通知还在,那么这项服务就在,可以随时拉起主进程,继续运行。这样的应用有很多,比如在通知栏里放个资讯窗口、搜索框,就是这种思路。
最直接的保活手段,就是向用户请求权限。在定制系统上,通常会有“允许应用在后台运行”权限,应用可以找一个正当的借口,让用户主动把这个权限打开,就能在后台畅通无阻的运行了。
除此之外还有一些奇妙操作,比如建立透明悬浮窗,可以直接提高应用状态分级,就难以被lmk杀掉;进程守护,一个应用建立几个进程,有一个进程掉了,立马由另外一个进程拉起来;还有更强的,以毫秒级速度不停尝试拉起自己的进程,这种方法甚至可以无视强行停止(只要我启动的够快,强行停止就关不掉我),这已经是破坏型行为了。
应用唤醒:
应用会通过一些方式,在用户未手动打开的情况下自行启动,即应用唤醒,也称应用自启动。此时没有前台界面,启动的只是进程与服务。
Android应用开发时,会给应用加上BroadcastReceiver(广播接收器,以接收系统的广播),以对一些状态作出对应的响应,比方说此设备收到电话,系统就会发出广播“来电话了”,应用“拨号”就会自启动,响铃提醒用户接听。存储空间低于一定量时,系统会发广播,文件管理类应用会提示用户清理文件以释放空间。合理使用可以使应用极大提升功能性,但不合理使用的话,就是给用户找麻烦。
借用知乎老哥的图。可以看出百度云会接收图中的广播,实现自启动。WiFi更改、存储变动时自启动也就罢了,毕竟功能联网还要依赖存储,但收发短信、拨打电话还要启动干什么呢?安装卸载应用时也启动,充电断电也启动,你是多么怕自己的服务拉不起来啊?即便杀掉了后台,没一会又自启了,跟没杀一样。
关联启动:
应用的广播接收器,不止可以接收系统的广播,也可以接收其它应用的广播,从而被其他应用拉起。此现象称为关联启动,或链式启动。
关联启动的常见场景:在“手机淘宝”中购买某件商品,选择付款方式支付宝付款,那么就可以直接拉起“支付宝”的应用界面,进行付款操作。
而不合理的使用场景,对于长期的安卓用户应该都深有感知了吧,拉起其他应用的后台服务,收集用户数据,推送广告。
可以看到,同一家的应用之间都会自动唤醒,保持后台活跃。这有什么用吗?我也不知道啊 一开始的时候就是如此,后期此现象愈演愈烈,一些公司推出了关联SDK,只要你接入了此SDK,有接入相同SDK的应用启动,就会顺带拉起你的应用。
链式启动成为了一种交♂易:“接入我的SDK吧,你的应用可以享受后台杀不掉的待遇,消息直达,数据收集无阻碍。”于是,大量的应用开始接入这种SDK,后台是不掉了。
开发者笑嘻嘻,可苦了用户,后台杀也杀不掉,停止了还能自启、链起。内存不大的机子,在那么多的应用下不停的触发lmk杀后台,刚杀掉就又起来了,陷入死循环,致使负载居高不下,续航也是血崩。
三、斩杀恶性应用的利剑
对于那些恶性应用,就只看着它们胡作非为、为所欲为吗?当然不行。反击之战早已打响,垃圾应用们,接招!
斩杀 - 应用后台进程:后台纯净机制
后台纯净并不是Android官方提出的说法,而是第三方定义的一种应用状态。即应用退出到后台,不留下任何无用服务(无用指用户用不到),全部归进缓存(即上文分级中的空白进程)。既不拖累系统性能,也能实现启动时秒开。
此说法来自于绿色公约,也就是说绿色公约中的应用可以做到这一点。但几年过去,自愿遵守的公约已成为来自Google强制的规定。如你当前运行的系统为Android O及以上,且应用目标API在26以上,那么该应用退出后便可以进入缓存,实现无损保后台。
你可以尝试打开应用,使用主页键退出应用界面,进入系统设置-开发者选项-正在运行的服务,观察是否有刚才应用的进程和服务。然后点击右上方的显示缓存,是否有刚才应用的缓存。如果没有进程服务,只留下了一个百来mb大小的缓存进程,那么这个应用就大概符合后台纯净了。
能看出,我常用的应用均支持后台纯净。
当然万事无绝对,比如一个音乐播放器,在播放音乐,退出之后肯定要留一条进程的,毕竟后台还要运行的,不能说它不支持后台纯净。

还有一些奇怪的事情,就是内存显示错误,有时应用占的内存会直接算进系统占用里面,不知是逻辑bug还是应用的奇妙操作,如图:


斩杀 - 链式启动:切断唤醒
为了应对应用的自启动和链式启动,在早期的安卓定制系统中,提供了应用自启动的开关,由用户控制自启动。
关闭此开关,则系统会屏蔽应用的广播接收,使其无法通过广播自启。
对于非深度定制系统,并没有这类限制。如果有root权限,可以使用工具 【My Android Tools】 ,手动管理应用的各种组件,不但可以关闭广播接收器,也能控制应用的后台服务。有用不到、但却在运行的服务,可以直接停掉。
如果有xposed框架,则可以使用 【应用管理Xposed】 ,功能更多,效果更强,操作更简单。
后台应用,就应该有后台的样子。有些应用进入后台还不安分,不停交换数据,拖慢速度,吃掉大量资源。最过分的是唤醒锁,使设备无法休眠。那么目标已明确,就是降低它们对资源的占用。
自安卓8开始,系统对于后台应用进行了一次整治。如果系统是安卓8,且应用的目标API是26及以上,那么这个应用会自动实现后台纯净。若应用API低于26,则可以到 开发者选项-后台检查 中手动限制,若不需要这个应用的后台,则关闭即可。
到了安卓9,限后台就更狠了。智能待机上线,可根据应用使用频率、使用时间进行自动化管理,分活跃、工作、常用、极少这几个等级,为后台分配不同的资源。这也是为什么用过一段时间的机子,续航比新机还长的原因,就是机器学习记录了你的使用习惯。

如果是不规范应用,迟迟不适配新特性呢?Google还有更绝的招式。在Android P上还提供了后台限制功能,若应用的API较低,且在后台有大量进程,或长时间控制唤醒锁,系统将会在通知栏将应用列出,提示为:**应用正在后台耗电 之类的,用户可以对其进行一键限制。这个限制可不是前文所说的限制分配资源,而是直接禁止应用的一切后台,禁止应用的一切响应,退出即停止。
此限制也可由用户手动打开,在设置-应用-查看全部应用,找到要限制的应用,高级-电池-后台限制,点击限制,世界都清净了。
另一种方法: 【App Ops】 中更改应用权限,“在后台运行”这个权限在安卓9是这样的
严格限制就是上面的限制应用。API在26及以上的应用默认为基础限制,低于26的应用默认为不限制,用户都可以手动更改为严格限制。
能看出来,越是原生系统,干扰越少,不存在白名单,越能体现出开发者的优化水平。优化越垃圾,在原生ROM上越是挂不住后台,推不出消息。比如我的机子,就从来收不到酷安的消息通知。
斩杀 - 恶性应用最后的倔强:Google的手段
从这几次底层的大改动可以看出,Google已经要大力整治这些恶性应用了,可以说是无差别打击,只要不规范,就要受波及。
后台限制,就是你能规范起来,那你可以在后台合理运行,不影响功能,用户的体验也不会受损,你好我也好。如果就是头铁,就想跟系统比划比划,那好,后台直接别运行了,你一个功能都实现不了。
play商店有着强制要求,目标API必须在26以上,且很快就要成为28。这就意味着应用想不规范都不行,API越高,应用受约束越多。不提升API?也行,我不会给你下架,但我会禁止你发布更新 如果你能做到永远不更新,那你可以这么做。
如果不上架play商店呢?毕竟Google管不到第三方分发渠道。没关系,我不能禁止你分发,但我能干扰你运行。已知API低于23,运行时会提示风险应用,谨慎使用。API远低于当前系统,为了兼容运行,我会降低你的一些性能 还不能抢占国际市场,完全得不偿失啊!

四、文末的闲聊
总有人抱怨安卓生态太差,跟竞争者iOS相比落后太多,这样比较就有失公允了。想想iOS的出身,苹果早在上个世纪就设计了mac操作系统,针对优化十几年,积累了大量经验,并有了一定的生态基础,设计iOS系统自然十分轻松,打好iOS生态也没啥压力。
反观Android,一个Linux内核,从零开始制作系统,且最开始还不是为智能手机设计的。这样的一个存在,经历了几年发展,体量竟是完全压着iOS打,应用数量多于iOS,市场占有量更是iOS的数倍。
如果这样还不能理解,再看看Windows,发展数十年,生态依旧稀烂权限管理混乱、uwp生态半残。这样是不是就感觉到Android的强大了?
-问:如何正确查看剩余内存?
-答:设置-开发者选项-正在运行的服务,点击右上方的“显示缓存进程”,即可查看真实剩余内存。剩余内存大小一般在lmk的最大值再多一点。通常是几百mb。
-问:我就是不想让应用留后台,就想看到剩余内存大大的?
-答:设置-开发者选项 拉到底,后台进程限制,改为不允许后台进程。简单概括:剩余极大,体验极差。
-问:现在手机内存到底几g合适?
-答:要我说,3g勉强,4g足矣,6g有余,8g巅峰。12g 16g?方向错了。厂商不想着优化好,净想着比友商参数好看,成本压不下来,最后用户买旗舰机还要提高预算。
-问:文章太长懒得看,给总结一下?
-答:杀后台只有 lmk机制 和 用户手动停止。安装应用API越高越好,剩余内存越少越好。至于优化,自己爬回去看完。

]]>
Android系统长期存在应用后台管理机制。在多数人的认知中,应用分前台和后台。最简单的判别方式:显示界面的应用就是前台应用,在运行不显示界面的应用就是后台应用。
安卓十多年发展至今,应用数量庞大,实现的功能各不相同,那么简单的后台机制肯定无法满足需求。本篇图文详细解释一下Android的后台管理机制。具体分三节。
目录:

• 
Android后台机制的根本-内存管理:应用状态分级、LMK机制、与其他系统的区别。
• 
为什么后台应用关不掉:应用保活、自唤醒、关联启动。
• 
斩杀恶性应用的利剑:后台纯净、切断唤醒、持剑人Google的手段。


一、Android后台管理的根本
安卓内存管理方案:
Android沿用了Linux的内存管理方案,为低内存回收机制。与开多少就占用多少的Windows不同,Android是你不开应用,也会占用内存。在空载状态下,Android P占用下限约为500mb(大概,我测试可以正常运行),上限为设备物理内存的1/2,即开机占用一半内存。
而安卓应用不存在关闭一说,退出之后仍然会留在内存中。直至剩余内存过低,才会由系统机制将其杀掉,回收它占用的那部分内存。
了解应用状态的分级:

• 
foreground 前台。设备当前运行的应用,你打开什么软件,前台应用就是什么,很容易理解吧。
• 
visible 可见。与前台类似,同样可以显示在屏幕上,让用户看到,以及交互操作,如输入法、浮窗。
• 
secondary 次级。后台运行的服务,通常占用资源不大,但用户很需要其功能,比如各家系统的云服务。
• 
hidden 后台。后台运行的进程,在应用运行时直接按下home键,应用仍在运行。如果应用的优化没做好,那么将占用大量资源。
• 
content_provider 内容。与用户关系不大,通常感知不强。
• 
empty 空白。应用已经停止运行,没有进程与服务,只留下一个缓存,确保下一次打开时更迅速。

  上述六种状态,越往下,重要性越低,越容易被杀掉。
Android后台的杀手-Low Memory Killer:
应用在后台运行,固然可以增加启动速度,或便于推送信息,但内存大小和电池容量都不是无限的。当后台一多,就会拖累性能,降低续航。系统自然不可能坐以待毙,等着内存爆满死机。Android系统使用了的低内存杀后台机制LowMemoryKiller,以下简称lmk。
  可以看到,lmk对每个应用状态都有对应数值。当剩余内存大小达到数值时,lmk就会杀掉对应状态的应用,以释放内存。若杀掉应用,剩余内存仍然不足,便会继续杀掉上一个状态级别的应用,以此类推。一直杀到前台应用,这便会造成正运行的应用或游戏闪退。
  当然,目前安卓机动辄4g、8g内存的时代,能让lmk杀到前台的应用应该不存在了吧,除非是出现bug。
应用在后台占用的资源:
在固有印象中,安卓后台应用一多,就会十分卡顿。因为应用运行是要消耗硬件资源的,不论前台和后台。可能在500mb内存的时代没有那么明显的感知,因为内存太小,应用留不住后台。但从安卓机进入了1g、2g内存的时代,这个缺陷就一下子暴露出来了:后台杀不死,杀死后自启动,一个应用拖好几条进程,一条进程又有好几项服务,堪称群魔乱舞。此现象持续了至少六年。
  那这些应用消耗的是哪些资源呢?看上文的后台分级,这些应用一般属于次级或后台,与前台应用一样运行,会占用CPU运算资源,数据操作会占用闪存的读写资源,这两项就足以死死卡住设备,使其无法正常运行。这些资源总量是一定的,在当时性能普遍不强时,资源用一点就少一点,后台占用大了,前台自然要卡。
空载:
后台开启百度地图:
  此时已经卡到没法正常运行了,各种动画掉帧。
Android与其他系统后台的区别:
对于各个系统的应用,一般可以用两种状态来表示:Android分为“运行”和“停止”,iOS分为“前台”和“冻结”,Windows分为“启动”和“关闭”。
解释一下:iOS的特点是冻结式后台,即应用留后台但不运行,只有前台应用能运行。这样可以做到打开应用时秒开,但退入后台也不消耗资源,只占用内存;Windows特点是打开哪个应用,哪个应用就运行,点击关闭就停止运行,并清出内存。
内存占用也是与后台有关,旧时Android日常会占用50%;iOS内存在开机不久会爆满,始终居于95%以上;而Windows则是应用多大,内存占用就多大,没有应用时占用很低。
win空载占用
还有一个Windows Phone系统,是Microsoft基于win为智能手机设计的系统,它的特点不是杀死,而是限制,对后台应用数量限制,对每个应用占用内存限制。这种单个体小,个体总数少的限制,是非常简单且有效的,逼开发者不得不优化。不愧是你,微软。

二、为什么后台应用关不掉?
有些用户会刻意关闭后台,以释放内存或增加续航,但发现无法关闭后台运行的应用。这是什么原因呢?来详细分析一下后台管理手段与应用的关系。
首先看一下后台界面。
在这个界面中,可以展示出你打开过的应用,并生成缩略图。前面说过,安卓应用不存在关闭,退出后应用会进入后台运行。这个界面,可以手动停止后台的应用进程,就是点击那个×号,或在高版本上是滑动。但此行为并不等同于强行停止!
这个界面并不是强制性停止应用,而是清理掉应用的界面,并通知应用,应该停止自己的后台进程了。至于停止哪些服务,就是应用自己说了算。旧时安卓这个机制问题真的很大,尤其Android K-N,和恶意应用对线简直被爆锤。当时定制化系统对这些机制进行了修改,划掉卡片即强行停止,才能对恶意应用进行反击。
应用保活:
应用的开发者为了一些功能运行,或是一些利益原因,会对应用的后台进程进行保护,防止被杀掉,此行为称为应用保活。
常见的保活手段,就是留通知。在通知栏中留一条不可清除的通知,即可实现避免被杀。即便你在后台界面划掉了卡片,只要这条通知还在,那么这项服务就在,可以随时拉起主进程,继续运行。这样的应用有很多,比如在通知栏里放个资讯窗口、搜索框,就是这种思路。
最直接的保活手段,就是向用户请求权限。在定制系统上,通常会有“允许应用在后台运行”权限,应用可以找一个正当的借口,让用户主动把这个权限打开,就能在后台畅通无阻的运行了。
除此之外还有一些奇妙操作,比如建立透明悬浮窗,可以直接提高应用状态分级,就难以被lmk杀掉;进程守护,一个应用建立几个进程,有一个进程掉了,立马由另外一个进程拉起来;还有更强的,以毫秒级速度不停尝试拉起自己的进程,这种方法甚至可以无视强行停止(只要我启动的够快,强行停止就关不掉我),这已经是破坏型行为了。
应用唤醒:
应用会通过一些方式,在用户未手动打开的情况下自行启动,即应用唤醒,也称应用自启动。此时没有前台界面,启动的只是进程与服务。
Android应用开发时,会给应用加上BroadcastReceiver(广播接收器,以接收系统的广播),以对一些状态作出对应的响应,比方说此设备收到电话,系统就会发出广播“来电话了”,应用“拨号”就会自启动,响铃提醒用户接听。存储空间低于一定量时,系统会发广播,文件管理类应用会提示用户清理文件以释放空间。合理使用可以使应用极大提升功能性,但不合理使用的话,就是给用户找麻烦。
借用知乎老哥的图。可以看出百度云会接收图中的广播,实现自启动。WiFi更改、存储变动时自启动也就罢了,毕竟功能联网还要依赖存储,但收发短信、拨打电话还要启动干什么呢?安装卸载应用时也启动,充电断电也启动,你是多么怕自己的服务拉不起来啊?即便杀掉了后台,没一会又自启了,跟没杀一样。
关联启动:
应用的广播接收器,不止可以接收系统的广播,也可以接收其它应用的广播,从而被其他应用拉起。此现象称为关联启动,或链式启动。
关联启动的常见场景:在“手机淘宝”中购买某件商品,选择付款方式支付宝付款,那么就可以直接拉起“支付宝”的应用界面,进行付款操作。
而不合理的使用场景,对于长期的安卓用户应该都深有感知了吧,拉起其他应用的后台服务,收集用户数据,推送广告。
可以看到,同一家的应用之间都会自动唤醒,保持后台活跃。这有什么用吗?我也不知道啊 一开始的时候就是如此,后期此现象愈演愈烈,一些公司推出了关联SDK,只要你接入了此SDK,有接入相同SDK的应用启动,就会顺带拉起你的应用。
链式启动成为了一种交♂易:“接入我的SDK吧,你的应用可以享受后台杀不掉的待遇,消息直达,数据收集无阻碍。”于是,大量的应用开始接入这种SDK,后台是不掉了。
开发者笑嘻嘻,可苦了用户,后台杀也杀不掉,停止了还能自启、链起。内存不大的机子,在那么多的应用下不停的触发lmk杀后台,刚杀掉就又起来了,陷入死循环,致使负载居高不下,续航也是血崩。
三、斩杀恶性应用的利剑
对于那些恶性应用,就只看着它们胡作非为、为所欲为吗?当然不行。反击之战早已打响,垃圾应用们,接招!
斩杀 - 应用后台进程:后台纯净机制
后台纯净并不是Android官方提出的说法,而是第三方定义的一种应用状态。即应用退出到后台,不留下任何无用服务(无用指用户用不到),全部归进缓存(即上文分级中的空白进程)。既不拖累系统性能,也能实现启动时秒开。
此说法来自于绿色公约,也就是说绿色公约中的应用可以做到这一点。但几年过去,自愿遵守的公约已成为来自Google强制的规定。如你当前运行的系统为Android O及以上,且应用目标API在26以上,那么该应用退出后便可以进入缓存,实现无损保后台。
你可以尝试打开应用,使用主页键退出应用界面,进入系统设置-开发者选项-正在运行的服务,观察是否有刚才应用的进程和服务。然后点击右上方的显示缓存,是否有刚才应用的缓存。如果没有进程服务,只留下了一个百来mb大小的缓存进程,那么这个应用就大概符合后台纯净了。
能看出,我常用的应用均支持后台纯净。
当然万事无绝对,比如一个音乐播放器,在播放音乐,退出之后肯定要留一条进程的,毕竟后台还要运行的,不能说它不支持后台纯净。

还有一些奇怪的事情,就是内存显示错误,有时应用占的内存会直接算进系统占用里面,不知是逻辑bug还是应用的奇妙操作,如图:


斩杀 - 链式启动:切断唤醒
为了应对应用的自启动和链式启动,在早期的安卓定制系统中,提供了应用自启动的开关,由用户控制自启动。
关闭此开关,则系统会屏蔽应用的广播接收,使其无法通过广播自启。
对于非深度定制系统,并没有这类限制。如果有root权限,可以使用工具 【My Android Tools】 ,手动管理应用的各种组件,不但可以关闭广播接收器,也能控制应用的后台服务。有用不到、但却在运行的服务,可以直接停掉。
如果有xposed框架,则可以使用 【应用管理Xposed】 ,功能更多,效果更强,操作更简单。
后台应用,就应该有后台的样子。有些应用进入后台还不安分,不停交换数据,拖慢速度,吃掉大量资源。最过分的是唤醒锁,使设备无法休眠。那么目标已明确,就是降低它们对资源的占用。
自安卓8开始,系统对于后台应用进行了一次整治。如果系统是安卓8,且应用的目标API是26及以上,那么这个应用会自动实现后台纯净。若应用API低于26,则可以到 开发者选项-后台检查 中手动限制,若不需要这个应用的后台,则关闭即可。
到了安卓9,限后台就更狠了。智能待机上线,可根据应用使用频率、使用时间进行自动化管理,分活跃、工作、常用、极少这几个等级,为后台分配不同的资源。这也是为什么用过一段时间的机子,续航比新机还长的原因,就是机器学习记录了你的使用习惯。

如果是不规范应用,迟迟不适配新特性呢?Google还有更绝的招式。在Android P上还提供了后台限制功能,若应用的API较低,且在后台有大量进程,或长时间控制唤醒锁,系统将会在通知栏将应用列出,提示为:**应用正在后台耗电 之类的,用户可以对其进行一键限制。这个限制可不是前文所说的限制分配资源,而是直接禁止应用的一切后台,禁止应用的一切响应,退出即停止。
此限制也可由用户手动打开,在设置-应用-查看全部应用,找到要限制的应用,高级-电池-后台限制,点击限制,世界都清净了。
另一种方法: 【App Ops】 中更改应用权限,“在后台运行”这个权限在安卓9是这样的
严格限制就是上面的限制应用。API在26及以上的应用默认为基础限制,低于26的应用默认为不限制,用户都可以手动更改为严格限制。
能看出来,越是原生系统,干扰越少,不存在白名单,越能体现出开发者的优化水平。优化越垃圾,在原生ROM上越是挂不住后台,推不出消息。比如我的机子,就从来收不到酷安的消息通知。
斩杀 - 恶性应用最后的倔强:Google的手段
从这几次底层的大改动可以看出,Google已经要大力整治这些恶性应用了,可以说是无差别打击,只要不规范,就要受波及。
后台限制,就是你能规范起来,那你可以在后台合理运行,不影响功能,用户的体验也不会受损,你好我也好。如果就是头铁,就想跟系统比划比划,那好,后台直接别运行了,你一个功能都实现不了。
play商店有着强制要求,目标API必须在26以上,且很快就要成为28。这就意味着应用想不规范都不行,API越高,应用受约束越多。不提升API?也行,我不会给你下架,但我会禁止你发布更新 如果你能做到永远不更新,那你可以这么做。
如果不上架play商店呢?毕竟Google管不到第三方分发渠道。没关系,我不能禁止你分发,但我能干扰你运行。已知API低于23,运行时会提示风险应用,谨慎使用。API远低于当前系统,为了兼容运行,我会降低你的一些性能 还不能抢占国际市场,完全得不偿失啊!

四、文末的闲聊
总有人抱怨安卓生态太差,跟竞争者iOS相比落后太多,这样比较就有失公允了。想想iOS的出身,苹果早在上个世纪就设计了mac操作系统,针对优化十几年,积累了大量经验,并有了一定的生态基础,设计iOS系统自然十分轻松,打好iOS生态也没啥压力。
反观Android,一个Linux内核,从零开始制作系统,且最开始还不是为智能手机设计的。这样的一个存在,经历了几年发展,体量竟是完全压着iOS打,应用数量多于iOS,市场占有量更是iOS的数倍。
如果这样还不能理解,再看看Windows,发展数十年,生态依旧稀烂权限管理混乱、uwp生态半残。这样是不是就感觉到Android的强大了?
-问:如何正确查看剩余内存?
-答:设置-开发者选项-正在运行的服务,点击右上方的“显示缓存进程”,即可查看真实剩余内存。剩余内存大小一般在lmk的最大值再多一点。通常是几百mb。
-问:我就是不想让应用留后台,就想看到剩余内存大大的?
-答:设置-开发者选项 拉到底,后台进程限制,改为不允许后台进程。简单概括:剩余极大,体验极差。
-问:现在手机内存到底几g合适?
-答:要我说,3g勉强,4g足矣,6g有余,8g巅峰。12g 16g?方向错了。厂商不想着优化好,净想着比友商参数好看,成本压不下来,最后用户买旗舰机还要提高预算。
-问:文章太长懒得看,给总结一下?
-答:杀后台只有 lmk机制 和 用户手动停止。安装应用API越高越好,剩余内存越少越好。至于优化,自己爬回去看完。

]]>
0 https://bbs.viyf.org/?thread-index-fid-6-tid-233.htm https://bbs.viyf.org/?thread-index-fid-6-tid-233.htm
转载:Linux 可访问性:未维护的混乱 https://bbs.viyf.org/?thread-index-fid-6-tid-230.htm https://bbs.viyf.org/?thread-index-fid-6-tid-230.htm Tue, 07 Feb 2023 16:45:08 +0800 AllenLI 这篇文章来自https://scribe.rip/@r.d.t.prater/linux-accessibility-an-unmaintained-mess-8fbf9decaf8a,比较全面的表达了视障用户使用linux的当前状态,以下是正文,由google翻译。

Linux 可访问性:未维护的混乱
德文普拉特于 2022-05-08
为什么我暂时不会使用 Linux
Linux 主要被称为服务器操作系统。它在这方面的表现令人印象深刻,几乎每家公司都在使用它。但多年来,科技界的一些人也将其作为个人的家庭计算机操作系统。
有几个播客,人们在其中谈论 Linux 在桌面上的可行性。然而,随着 Linux 接触到越来越多的主流用户,它揭示了一个令人失望的事实,即并非每个人都可以使用它。那些可以从其开源性质中获得最大帮助的残障人士,反而被留给了营利性公司,无论他们做了什么,至少已经或多或少地提供了他们的产品。
在本文中,我将概述我过去几年使用 Linux 的经历。我不是唯一尝试过 Linux 的残障用户,但我只能谈谈我的经验,以及我所知道的最糟糕部分的解决方法。
Vinux 和 Sonar——早期
早在 Gnome 2 是首选桌面的日子里,我就开始使用 Linux。它易于访问,易于使用,所有 Vinux 维护人员需要做的就是让 Orca,Linux GUI 屏幕阅读器,在安装过程中和在新系统上启动。它并不完美——没有什么是完美的——但这是一个很好的开始。我在一台旧笔记本电脑上使用它,无论出于何种原因,硬盘驱动器都被锁定了。那个可怜的硬盘,只有 74 GB 的存储空间。
2015 年左右,Sonar 作为替代方案出现了。它基于 Antergos,后者基于 Arch Linux。它有一个简单的安装程序,并在安装期间和安装后启用 Orca。这两个项目都没有了。明争暗斗和责备使他们在计划合并时分崩离析。
破碎——现在
在 Vinux 和 Sonar 被抛弃后,许多盲目 Linux 用户干脆转向主流发行版。Arch 是许多人的首选发行版,因为它的软件包是最新的。这意味着一旦包维护者发布它们,任何可访问性修复都在他们手中。已经有一些针对盲人发行版的尝试,例如 F123、Stormux 和 Slint,但是 F123 失败了,Stormux 是针对 Raspberry Pi 的,并且只有一个维护者。Slint 也只有一名维护者,并且基于 Slackware。因此,每个人基本上都走了自己的路,有的去 Arch,有的去 Ubuntu Mate,有的去 Mint,有的去 Debian,还有的去 Fedora。这些发行版中只有少数,主要是 Arch 和 Debian,甚至在安装过程中主动并有意识地支持盲人用户,
我想花点时间谈谈 Gnome 2。它简单、易用且干净。首次启动系统时,您使用登录管理器登录,然后进入桌面。按 Alt + F1 打开您的应用程序列表,按类别排序,然后按 Alt + F2 打开您的运行框。简单干净。设置类别也在应用程序的菜单中,因此无需处理设置管理器。
Gnome 3 改变了这一切。他们几乎重新制作了整个桌面。而且,如果您重新制作某些东西,则必须重新制作可访问性。除了他们忘记了那部分。没有人知道这件事。没有人听。我想,他们的借口是他们不是辅助功能专家。当然,有人会进来做这件事。但这从未发生过。
现在,我们使用的是 Gnome 版本 4。当您按下 Super 键打开应用程序屏幕和搜索工具时,您会听到“window”。就是这样。高级用户知道只需开始键入,但新 Linux 用户将不知道他们在哪里,甚至认为发生了不好的事情。
那么,让我们不要过多关注 Gnome。KDE 呢?他们是一个非常注重可用性的桌面,对吧?
恐怕直到最近。我们还不能有效地使用 KDE 桌面。工作正在进行中,但就像访问技术世界中的一切一样,它非常缓慢。只有当一个新视力的人受到启发去提供帮助时,事情才会发生,直到他们因缺乏开源社区的帮助和更广泛的盲人社区缺乏兴趣而筋疲力尽。
我们唯一需要坚持的桌面环境是 Mate。那只是因为它是 Gnome 2 的延续,带有更名的应用程序。它有效,是的。但它开始随着年龄的增长而衰退。
使用 Mate 桌面时,如果您退出基于 Chromium 的应用程序、Orca 或辅助功能服务,除非您立即转到桌面或调用 Orca 对话框,否则将丢失任何焦点。这可能只是一个开始。我唯一的希望是,在 Mate 完全失修之前,有另一个桌面可以取代它。
好吧,好吧,让我们忘掉桌面吧。基于文本的界面怎么样?命令行是可以访问的,对吧?
从技术上讲,是的。文本非常有利于许多残障人士的无障碍访问。但是谁会使用命令行来查看电子邮件、浏览网页、使用 Facebook、收听 YouTube Music、浏览、阅读以及与 Reddit、Twitter、Hacker News、Medium、Mastodon、Telegram、短信、视频游戏和书籍进行交互有多种格式?如果您可以使用命令行来完成所有这些,那么我想听听您是如何做到的。有一些人使用命令行进行大量计算,但他们并没有做我列出的所有事情?哦,我有提到 Salesforce 吗?祝你在命令行上与那个野兽互动时好运。我必须用它来工作。如果你不这样做,你很幸运。
我使用 Fedora 的经历
正如我在上面所写的,在 Vinux 和 Sonar 崩溃之后,我们只剩下主流发行版了。我选择了 Fedora,发现它是 Debian 和 Ubuntu 的缓慢发布周期与 Arch Linux 的较难安装程序之间的一个很好的折衷。即使在 Arch 添加了他们的安装程序脚本之后,仍然需要使用一个奇怪的iwconfig命令来启用 Wi-fi,而我不知道如何使用它。因此,我放入了在 Windows 上使用 Rufus 制作的 Fedora Mate 35 USB,然后启动了计算机。
按几次 Enter 后,我用手机扫描屏幕,打开一个应用程序,它可以对相机看到的任何内容进行 OCR。我终于听到了 Mate 用户界面的一部分,我按下了启动 Orca 的常用键盘命令——Alt + Windows + S。没有任何反应。如果我是一个普通的盲人,我什至不知道启动 Orca 的实际隐藏的键盘命令。如果我这样做了,并且该命令不起作用,我会匆匆回到 Windows 的安全环境。无论如何我应该这样做。
但是,唉,我不是普通用户。我不想对好的 ol' Windows 感到满意,而是想要 Linux 的强大功能,它支持开发人员或高级用户可能需要的一切。如果我是那个普通用户就好了。我的生活会简单得多,没有压力,而且我可能会找到一份更好的工作。
因此,我按 Alt + F2 运行命令,键入orca并按 Enter。逆戟鲸跑了。我能够安装 Fedora,重新启动后,登录管理器出现了。但是没有说话。不过没关系,我只是做了同样的命令,Orca 开始说话了。我登录了,并且在桌面上。
出口辅助技术
在桌面上打开 Orca 后,是的,我必须在那里打开它,我更新了系统并尝试了 Firefox。它没有读取任何内容。如果我们亲爱的普通用户已经走到这一步,多亏了论坛上的一些高级 Linux 用户,他们就会回头重新安装 Windows,或者认真考虑一下。然而,挨了一个耳光之后,我准备接受更多的惩罚。我很擅长这个,我想。龟熊,有人吗?
您要做的是进入应用程序设置,进入个性化,然后进入辅助技术。在那里,您会找到一个开关来打开或关闭辅助技术支持。这使 Orca 能够使用诸如 Gnome GTK 应用程序之类的东西,并让应用程序知道有辅助技术在运行。为什么有人会想要这个,我不知道。我想这是 Linux 具有“良好”默认值的传统的一部分。幸运的是,如果您的硬件支持 Debian,并且您使用可访问的安装程序,这将为您打开。
任何人都必须打开它这一事实表明开放源代码文化是多么有能力。没有其他操作系统需要这个。当您在 Mac 上打开 VoiceOver 时,您可以访问所有可访问的程序。当您在 Windows 上打开讲述人或 NvDA 时,您可以访问所有可访问的程序。当您在 ChromeBook 上打开 ChromeVox 时,您可以访问所有可访问的程序。它仅适用于 Linux,您必须选中一个框才能启用辅助功能。
但是等等,还有更多!完成之后,您就可以访问 GTK 程序了。铬呢?不可以。您必须导出一个可访问性变量,我手头没有,才能使用任何基于 Chromium 的应用程序或浏览器。从 Etcher 到 web torrent 到 Element 到 Chrome,Electron 正在成为开发人员制作跨平台应用程序的一种非常流行的方式。如果我们的用户没有因为需要选中一个框而被赶走,他们肯定会因为基本上需要一个作弊代码来启用其余的可访问性。
然而,我坚持了下来,并找到了一篇博文,其中放置了大约一年前我尝试使用 Arch 时使用的所有导出行。我将它们粘贴到“.bash配置文件”文件中,获取它的源代码,并且能够使用 Chrome 和 VS Code。哦对了,我有没有提到 VS-Code 使用 Electron?那个app基本上都是开发者用的?不是很好吗?
漏水的洋泾浜
Pidgin 是我用过的第二酷的 Linux 应用程序,仅次于带有 Emacspeak 的 Emacs。几乎所有消息传递平台都可以使用相同的、可访问的界面,这真是太棒了。但我发现,随着时间的推移,如果我在 Pidgin 中键入一条很长的消息,可能有两段那么长,它就会崩溃,并且会导致整个可访问性堆栈崩溃。这不好。我认为这是安全启动的原因,因为有些人说它会扰乱这样的系统,但在禁用它并重新安装 Fedora 后,一段时间后它仍然发生。
原来lib purple存在内存泄漏。所以,Pidgin 就这么多了。Lib-purple 赋予了 Pidgin 连接 Telegram、IRC、Matrix 等所有功能的能力。我在工作中使用 Matrix,所以我需要能够快速连接到它。
“好吧,”我想,“我将只在 Linux 上使用 Element,尽管 Element 不如 Pidgin 可访问,并且只将 Irssi 用于 IRC。” 第二天,有史以来最大的一记耳光以雷鸣般的结局击中了我,结束了我对 Linux 的尊重和大部分的爱。
结束
更新Fedora后,发现翻了几页,Chromium浏览器就不能用了。Orca 可以看到 Chrome 用户界面,但看不到网页。无奈之下,我尝试了 Microsoft Edge 和 Brave。这两个都有同样的问题。我严重依赖个人资料来区分家庭、全职工作和兼职工作。是的,要分开很多。Firefox 无法将所有这些分开并在它们之间快速切换。因此,怀着沉重的心情,在上班前几个小时,我重新安装了 Windows 并开始整理我的东西。
那么,其他人是怎么做到的呢?
我之前提到过,我不是唯一的盲人 Linux 用户。其他人使用不同的策略来应对 Linux 的可访问性差。
• 窗口管理器:一些使用带有自定义脚本的 Rat-poison 来消除 Mate 的任何衰减或拥有更轻的系统。
• CLI:有些人尽可能多地使用 CLI,将 X11 用于 Web 浏览器。
• 回退:当像 Pidgin 这样的东西消耗了太多内存时,它们就会回退到 IRSSI。我听说过甚至只是将 Android 作为桌面系统运行。
结论
撰写本文的目的是将重点放在 Linux 桌面的可访问性上。随着 Raspberry Pi 计算机在学校中越来越普及,我希望盲人学生能够享受学习编码、管理系统和探索计算的乐趣。我希望盲人能够在学习计算机的过程中成长到这样的地步,当他们 20 岁出头时,他们可以构建应用程序,为旧系统制作仿真层,或者自动化他们的工作。我希望盲人孩子有我没有的机会。此外,我希望他们能够学习 Python,而不是 Quorum。我希望他们了解 Linux 的内部结构,而不是为了每个高级设置或更改而与 Windows 抗争。如果一个盲人厌倦了他们专为盲人设计的工作,
对于有视力的计算机爱好者来说,所有这些情况或多或少都是容易的。事实上,The Odin Project 根本不支持使用 Windows,而是希望您从一开始就使用 Linux。您还可以使用 macOS 或 ChromeOS。这表明用不了多久,成为一名开发人员就意味着使用 Linux。与其他任何群体相比,残障人士应该能够迈出第一步。我们常常一贫如洗,要么没有工作,要么从事的是一份低薪的入门级工作,没有迹象表明可以提升价值链,也无法使用技术来帮助我们的日常生活。我们只需要开源社区足够关心来清理他们开始的可访问性混乱。

]]>
这篇文章来自https://scribe.rip/@r.d.t.prater/linux-accessibility-an-unmaintained-mess-8fbf9decaf8a,比较全面的表达了视障用户使用linux的当前状态,以下是正文,由google翻译。

Linux 可访问性:未维护的混乱
德文普拉特于 2022-05-08
为什么我暂时不会使用 Linux
Linux 主要被称为服务器操作系统。它在这方面的表现令人印象深刻,几乎每家公司都在使用它。但多年来,科技界的一些人也将其作为个人的家庭计算机操作系统。
有几个播客,人们在其中谈论 Linux 在桌面上的可行性。然而,随着 Linux 接触到越来越多的主流用户,它揭示了一个令人失望的事实,即并非每个人都可以使用它。那些可以从其开源性质中获得最大帮助的残障人士,反而被留给了营利性公司,无论他们做了什么,至少已经或多或少地提供了他们的产品。
在本文中,我将概述我过去几年使用 Linux 的经历。我不是唯一尝试过 Linux 的残障用户,但我只能谈谈我的经验,以及我所知道的最糟糕部分的解决方法。
Vinux 和 Sonar——早期
早在 Gnome 2 是首选桌面的日子里,我就开始使用 Linux。它易于访问,易于使用,所有 Vinux 维护人员需要做的就是让 Orca,Linux GUI 屏幕阅读器,在安装过程中和在新系统上启动。它并不完美——没有什么是完美的——但这是一个很好的开始。我在一台旧笔记本电脑上使用它,无论出于何种原因,硬盘驱动器都被锁定了。那个可怜的硬盘,只有 74 GB 的存储空间。
2015 年左右,Sonar 作为替代方案出现了。它基于 Antergos,后者基于 Arch Linux。它有一个简单的安装程序,并在安装期间和安装后启用 Orca。这两个项目都没有了。明争暗斗和责备使他们在计划合并时分崩离析。
破碎——现在
在 Vinux 和 Sonar 被抛弃后,许多盲目 Linux 用户干脆转向主流发行版。Arch 是许多人的首选发行版,因为它的软件包是最新的。这意味着一旦包维护者发布它们,任何可访问性修复都在他们手中。已经有一些针对盲人发行版的尝试,例如 F123、Stormux 和 Slint,但是 F123 失败了,Stormux 是针对 Raspberry Pi 的,并且只有一个维护者。Slint 也只有一名维护者,并且基于 Slackware。因此,每个人基本上都走了自己的路,有的去 Arch,有的去 Ubuntu Mate,有的去 Mint,有的去 Debian,还有的去 Fedora。这些发行版中只有少数,主要是 Arch 和 Debian,甚至在安装过程中主动并有意识地支持盲人用户,
我想花点时间谈谈 Gnome 2。它简单、易用且干净。首次启动系统时,您使用登录管理器登录,然后进入桌面。按 Alt + F1 打开您的应用程序列表,按类别排序,然后按 Alt + F2 打开您的运行框。简单干净。设置类别也在应用程序的菜单中,因此无需处理设置管理器。
Gnome 3 改变了这一切。他们几乎重新制作了整个桌面。而且,如果您重新制作某些东西,则必须重新制作可访问性。除了他们忘记了那部分。没有人知道这件事。没有人听。我想,他们的借口是他们不是辅助功能专家。当然,有人会进来做这件事。但这从未发生过。
现在,我们使用的是 Gnome 版本 4。当您按下 Super 键打开应用程序屏幕和搜索工具时,您会听到“window”。就是这样。高级用户知道只需开始键入,但新 Linux 用户将不知道他们在哪里,甚至认为发生了不好的事情。
那么,让我们不要过多关注 Gnome。KDE 呢?他们是一个非常注重可用性的桌面,对吧?
恐怕直到最近。我们还不能有效地使用 KDE 桌面。工作正在进行中,但就像访问技术世界中的一切一样,它非常缓慢。只有当一个新视力的人受到启发去提供帮助时,事情才会发生,直到他们因缺乏开源社区的帮助和更广泛的盲人社区缺乏兴趣而筋疲力尽。
我们唯一需要坚持的桌面环境是 Mate。那只是因为它是 Gnome 2 的延续,带有更名的应用程序。它有效,是的。但它开始随着年龄的增长而衰退。
使用 Mate 桌面时,如果您退出基于 Chromium 的应用程序、Orca 或辅助功能服务,除非您立即转到桌面或调用 Orca 对话框,否则将丢失任何焦点。这可能只是一个开始。我唯一的希望是,在 Mate 完全失修之前,有另一个桌面可以取代它。
好吧,好吧,让我们忘掉桌面吧。基于文本的界面怎么样?命令行是可以访问的,对吧?
从技术上讲,是的。文本非常有利于许多残障人士的无障碍访问。但是谁会使用命令行来查看电子邮件、浏览网页、使用 Facebook、收听 YouTube Music、浏览、阅读以及与 Reddit、Twitter、Hacker News、Medium、Mastodon、Telegram、短信、视频游戏和书籍进行交互有多种格式?如果您可以使用命令行来完成所有这些,那么我想听听您是如何做到的。有一些人使用命令行进行大量计算,但他们并没有做我列出的所有事情?哦,我有提到 Salesforce 吗?祝你在命令行上与那个野兽互动时好运。我必须用它来工作。如果你不这样做,你很幸运。
我使用 Fedora 的经历
正如我在上面所写的,在 Vinux 和 Sonar 崩溃之后,我们只剩下主流发行版了。我选择了 Fedora,发现它是 Debian 和 Ubuntu 的缓慢发布周期与 Arch Linux 的较难安装程序之间的一个很好的折衷。即使在 Arch 添加了他们的安装程序脚本之后,仍然需要使用一个奇怪的iwconfig命令来启用 Wi-fi,而我不知道如何使用它。因此,我放入了在 Windows 上使用 Rufus 制作的 Fedora Mate 35 USB,然后启动了计算机。
按几次 Enter 后,我用手机扫描屏幕,打开一个应用程序,它可以对相机看到的任何内容进行 OCR。我终于听到了 Mate 用户界面的一部分,我按下了启动 Orca 的常用键盘命令——Alt + Windows + S。没有任何反应。如果我是一个普通的盲人,我什至不知道启动 Orca 的实际隐藏的键盘命令。如果我这样做了,并且该命令不起作用,我会匆匆回到 Windows 的安全环境。无论如何我应该这样做。
但是,唉,我不是普通用户。我不想对好的 ol' Windows 感到满意,而是想要 Linux 的强大功能,它支持开发人员或高级用户可能需要的一切。如果我是那个普通用户就好了。我的生活会简单得多,没有压力,而且我可能会找到一份更好的工作。
因此,我按 Alt + F2 运行命令,键入orca并按 Enter。逆戟鲸跑了。我能够安装 Fedora,重新启动后,登录管理器出现了。但是没有说话。不过没关系,我只是做了同样的命令,Orca 开始说话了。我登录了,并且在桌面上。
出口辅助技术
在桌面上打开 Orca 后,是的,我必须在那里打开它,我更新了系统并尝试了 Firefox。它没有读取任何内容。如果我们亲爱的普通用户已经走到这一步,多亏了论坛上的一些高级 Linux 用户,他们就会回头重新安装 Windows,或者认真考虑一下。然而,挨了一个耳光之后,我准备接受更多的惩罚。我很擅长这个,我想。龟熊,有人吗?
您要做的是进入应用程序设置,进入个性化,然后进入辅助技术。在那里,您会找到一个开关来打开或关闭辅助技术支持。这使 Orca 能够使用诸如 Gnome GTK 应用程序之类的东西,并让应用程序知道有辅助技术在运行。为什么有人会想要这个,我不知道。我想这是 Linux 具有“良好”默认值的传统的一部分。幸运的是,如果您的硬件支持 Debian,并且您使用可访问的安装程序,这将为您打开。
任何人都必须打开它这一事实表明开放源代码文化是多么有能力。没有其他操作系统需要这个。当您在 Mac 上打开 VoiceOver 时,您可以访问所有可访问的程序。当您在 Windows 上打开讲述人或 NvDA 时,您可以访问所有可访问的程序。当您在 ChromeBook 上打开 ChromeVox 时,您可以访问所有可访问的程序。它仅适用于 Linux,您必须选中一个框才能启用辅助功能。
但是等等,还有更多!完成之后,您就可以访问 GTK 程序了。铬呢?不可以。您必须导出一个可访问性变量,我手头没有,才能使用任何基于 Chromium 的应用程序或浏览器。从 Etcher 到 web torrent 到 Element 到 Chrome,Electron 正在成为开发人员制作跨平台应用程序的一种非常流行的方式。如果我们的用户没有因为需要选中一个框而被赶走,他们肯定会因为基本上需要一个作弊代码来启用其余的可访问性。
然而,我坚持了下来,并找到了一篇博文,其中放置了大约一年前我尝试使用 Arch 时使用的所有导出行。我将它们粘贴到“.bash配置文件”文件中,获取它的源代码,并且能够使用 Chrome 和 VS Code。哦对了,我有没有提到 VS-Code 使用 Electron?那个app基本上都是开发者用的?不是很好吗?
漏水的洋泾浜
Pidgin 是我用过的第二酷的 Linux 应用程序,仅次于带有 Emacspeak 的 Emacs。几乎所有消息传递平台都可以使用相同的、可访问的界面,这真是太棒了。但我发现,随着时间的推移,如果我在 Pidgin 中键入一条很长的消息,可能有两段那么长,它就会崩溃,并且会导致整个可访问性堆栈崩溃。这不好。我认为这是安全启动的原因,因为有些人说它会扰乱这样的系统,但在禁用它并重新安装 Fedora 后,一段时间后它仍然发生。
原来lib purple存在内存泄漏。所以,Pidgin 就这么多了。Lib-purple 赋予了 Pidgin 连接 Telegram、IRC、Matrix 等所有功能的能力。我在工作中使用 Matrix,所以我需要能够快速连接到它。
“好吧,”我想,“我将只在 Linux 上使用 Element,尽管 Element 不如 Pidgin 可访问,并且只将 Irssi 用于 IRC。” 第二天,有史以来最大的一记耳光以雷鸣般的结局击中了我,结束了我对 Linux 的尊重和大部分的爱。
结束
更新Fedora后,发现翻了几页,Chromium浏览器就不能用了。Orca 可以看到 Chrome 用户界面,但看不到网页。无奈之下,我尝试了 Microsoft Edge 和 Brave。这两个都有同样的问题。我严重依赖个人资料来区分家庭、全职工作和兼职工作。是的,要分开很多。Firefox 无法将所有这些分开并在它们之间快速切换。因此,怀着沉重的心情,在上班前几个小时,我重新安装了 Windows 并开始整理我的东西。
那么,其他人是怎么做到的呢?
我之前提到过,我不是唯一的盲人 Linux 用户。其他人使用不同的策略来应对 Linux 的可访问性差。
• 窗口管理器:一些使用带有自定义脚本的 Rat-poison 来消除 Mate 的任何衰减或拥有更轻的系统。
• CLI:有些人尽可能多地使用 CLI,将 X11 用于 Web 浏览器。
• 回退:当像 Pidgin 这样的东西消耗了太多内存时,它们就会回退到 IRSSI。我听说过甚至只是将 Android 作为桌面系统运行。
结论
撰写本文的目的是将重点放在 Linux 桌面的可访问性上。随着 Raspberry Pi 计算机在学校中越来越普及,我希望盲人学生能够享受学习编码、管理系统和探索计算的乐趣。我希望盲人能够在学习计算机的过程中成长到这样的地步,当他们 20 岁出头时,他们可以构建应用程序,为旧系统制作仿真层,或者自动化他们的工作。我希望盲人孩子有我没有的机会。此外,我希望他们能够学习 Python,而不是 Quorum。我希望他们了解 Linux 的内部结构,而不是为了每个高级设置或更改而与 Windows 抗争。如果一个盲人厌倦了他们专为盲人设计的工作,
对于有视力的计算机爱好者来说,所有这些情况或多或少都是容易的。事实上,The Odin Project 根本不支持使用 Windows,而是希望您从一开始就使用 Linux。您还可以使用 macOS 或 ChromeOS。这表明用不了多久,成为一名开发人员就意味着使用 Linux。与其他任何群体相比,残障人士应该能够迈出第一步。我们常常一贫如洗,要么没有工作,要么从事的是一份低薪的入门级工作,没有迹象表明可以提升价值链,也无法使用技术来帮助我们的日常生活。我们只需要开源社区足够关心来清理他们开始的可访问性混乱。

]]>
2 https://bbs.viyf.org/?thread-index-fid-6-tid-230.htm https://bbs.viyf.org/?thread-index-fid-6-tid-230.htm
给你的openwrt根分区扩容 https://bbs.viyf.org/?thread-index-fid-6-tid-222.htm https://bbs.viyf.org/?thread-index-fid-6-tid-222.htm Mon, 28 Nov 2022 21:33:10 +0800 AllenLI 当你安装较多插件时,默认的根目录容量实在有些捉襟见肘,或是默认根分区不符合硬盘的大小,此时你可以增加根目录的容量。

扩展虚拟硬盘,实体硬盘可忽略此步骤。

vmware
在你需要操作的虚拟机点击编辑按钮进入虚拟机设置,选择硬盘,点击扩展,然后输入你需要的容量后点击确定。
hyper-v
使用bootice打开虚拟硬盘,点击vhd信息,然后点击重设容量,输入你需要的容量后点击确定,关闭bootice。

分区和转移根目录

使用ssh工具连接路由器,然后安装以下软件。
lsblk 用于列出硬盘。
cfdisk 用于硬盘分区,支持EFI带有容易操作的文本菜单。
block-mount 用于在luci界面控制设备挂在和分区调整。
可输入以下命令
opkg update && opkg install cfdisk lsblk block-mount
安装完成后输入cfdisk /dev/sda打开cfdisk界面,注意此处的/dev/sda应输入你硬盘的位置,可使用lsblk查看硬盘,一般主板识别的第一个sata硬盘可能是sda,第一个nvme硬盘可能是nvme0n1,第一个emmc闪存盘可能是mmcblk0。
在此界面,上下箭头是选择分区或选择文件系统,左右箭头是选择菜单向,回车确定。
使用上下箭头移动到 create partition并回车,在partition size输入框输入你需要的大小,如果保持默认,就是所有容量,回车确认。
设置完大小后,使用左右箭头移动到 change partition type菜单项回车,在分区类型中选择linux file system,如果你只听到了uuid而不是分区类型,你可以选择                       0FC63DAF-8483-4772-8E79-3D69D8477DE4                     菜单项,选择完成后回车确认。
选择好分区类型后,选择write回车,然后输入yes回车,然后选择quit回车离开cfdisk。
创建好分区后你需要格式化才能使用,你可以使用各种linux支持的文件系统,一般使用ext4或f2fs,如果你是大容量固态硬盘或者闪存盘或者存储卡建议使用f2fs,否则使用ext4。
再次使用lsblk命令,查看新分区的设备文件位置,了解之后输入格式化命令。
如果你的新分区是/dev/sda4,想要使用ext4文件系统,可输入以下命令格式化。
mkfs.ext4 /dev/sda4
如果你的新分区是/dev/nvme0n1p4,想要使用f2fs文件系统,可输入以下命令。
mkfs.f2fs /dev/nvme0n1p4
格式化完成后,登陆路由器后台,选择挂载点选项,点击生成配置,然后找到你的新分区,点击编辑,然后选择作为跟文件系统使用,然后选择保存并应用。
改变跟文件系统分区后,在之前ssh连接的命令行界面输入以下命令转移你的根目录。
mkdir -p /tmp/introot
mkdir -p /tmp/extroot
mount --bind / /tmp/introot
mount /dev/sda4 /tmp/extroot
tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -
umount /tmp/introot
umount /tmp/extroot
注意,挂在命令需要替换为你的分区位置。
转移完成后,输入reboot重启。
重启完成后再次登陆路由器后台查看存储空间,或用ssh登陆命令行界面,输入df -h查看变化。
至此,路由器根分区扩容结束。

]]>
当你安装较多插件时,默认的根目录容量实在有些捉襟见肘,或是默认根分区不符合硬盘的大小,此时你可以增加根目录的容量。

扩展虚拟硬盘,实体硬盘可忽略此步骤。

vmware
在你需要操作的虚拟机点击编辑按钮进入虚拟机设置,选择硬盘,点击扩展,然后输入你需要的容量后点击确定。
hyper-v
使用bootice打开虚拟硬盘,点击vhd信息,然后点击重设容量,输入你需要的容量后点击确定,关闭bootice。

分区和转移根目录

使用ssh工具连接路由器,然后安装以下软件。
lsblk 用于列出硬盘。
cfdisk 用于硬盘分区,支持EFI带有容易操作的文本菜单。
block-mount 用于在luci界面控制设备挂在和分区调整。
可输入以下命令
opkg update && opkg install cfdisk lsblk block-mount
安装完成后输入cfdisk /dev/sda打开cfdisk界面,注意此处的/dev/sda应输入你硬盘的位置,可使用lsblk查看硬盘,一般主板识别的第一个sata硬盘可能是sda,第一个nvme硬盘可能是nvme0n1,第一个emmc闪存盘可能是mmcblk0。
在此界面,上下箭头是选择分区或选择文件系统,左右箭头是选择菜单向,回车确定。
使用上下箭头移动到 create partition并回车,在partition size输入框输入你需要的大小,如果保持默认,就是所有容量,回车确认。
设置完大小后,使用左右箭头移动到 change partition type菜单项回车,在分区类型中选择linux file system,如果你只听到了uuid而不是分区类型,你可以选择                       0FC63DAF-8483-4772-8E79-3D69D8477DE4                     菜单项,选择完成后回车确认。
选择好分区类型后,选择write回车,然后输入yes回车,然后选择quit回车离开cfdisk。
创建好分区后你需要格式化才能使用,你可以使用各种linux支持的文件系统,一般使用ext4或f2fs,如果你是大容量固态硬盘或者闪存盘或者存储卡建议使用f2fs,否则使用ext4。
再次使用lsblk命令,查看新分区的设备文件位置,了解之后输入格式化命令。
如果你的新分区是/dev/sda4,想要使用ext4文件系统,可输入以下命令格式化。
mkfs.ext4 /dev/sda4
如果你的新分区是/dev/nvme0n1p4,想要使用f2fs文件系统,可输入以下命令。
mkfs.f2fs /dev/nvme0n1p4
格式化完成后,登陆路由器后台,选择挂载点选项,点击生成配置,然后找到你的新分区,点击编辑,然后选择作为跟文件系统使用,然后选择保存并应用。
改变跟文件系统分区后,在之前ssh连接的命令行界面输入以下命令转移你的根目录。
mkdir -p /tmp/introot
mkdir -p /tmp/extroot
mount --bind / /tmp/introot
mount /dev/sda4 /tmp/extroot
tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -
umount /tmp/introot
umount /tmp/extroot
注意,挂在命令需要替换为你的分区位置。
转移完成后,输入reboot重启。
重启完成后再次登陆路由器后台查看存储空间,或用ssh登陆命令行界面,输入df -h查看变化。
至此,路由器根分区扩容结束。

]]>
0 https://bbs.viyf.org/?thread-index-fid-6-tid-222.htm https://bbs.viyf.org/?thread-index-fid-6-tid-222.htm
分享一个网站 https://bbs.viyf.org/?thread-index-fid-6-tid-209.htm https://bbs.viyf.org/?thread-index-fid-6-tid-209.htm Sun, 09 Oct 2022 06:16:49 +0800 张凯 生活中你是否经常使用智能家居设备,而使用智能家居的朋友们,是否同时用着好几个平台的设备,比如我,手边目前就有小米和苹果的平台设备,小米这边,则是几乎一整套的智能家居设备,而苹果这边,就只是两个迷你音响而已。之前就看过有人拿苹果的音响去控制米家设备,但很多操作,都是要在命令层面上实现,而现在这方面简化了不少,只需要一个服务器,就可以实现上述的功能,之前,还要有访问外网的能力,才能拿到这些资源,而就在几天前,国内热心网友,搭建了个这方面的网站,感兴趣的可以进去看看,有编程能力的大佬,有可能还能给添砖加瓦,让国内用户使用起来更加方便一些,下面是网址,在这里,能得到这个服务器的较新版本,更新的时候,也不完全要去访问外网了。

Hasshome

]]>
生活中你是否经常使用智能家居设备,而使用智能家居的朋友们,是否同时用着好几个平台的设备,比如我,手边目前就有小米和苹果的平台设备,小米这边,则是几乎一整套的智能家居设备,而苹果这边,就只是两个迷你音响而已。之前就看过有人拿苹果的音响去控制米家设备,但很多操作,都是要在命令层面上实现,而现在这方面简化了不少,只需要一个服务器,就可以实现上述的功能,之前,还要有访问外网的能力,才能拿到这些资源,而就在几天前,国内热心网友,搭建了个这方面的网站,感兴趣的可以进去看看,有编程能力的大佬,有可能还能给添砖加瓦,让国内用户使用起来更加方便一些,下面是网址,在这里,能得到这个服务器的较新版本,更新的时候,也不完全要去访问外网了。

Hasshome

]]>
2 https://bbs.viyf.org/?thread-index-fid-6-tid-209.htm https://bbs.viyf.org/?thread-index-fid-6-tid-209.htm
安装 Windows 11 Build 22H2 时绕过 TPM 检查及联网 https://bbs.viyf.org/?thread-index-fid-6-tid-208.htm https://bbs.viyf.org/?thread-index-fid-6-tid-208.htm Sun, 23 Oct 2022 17:19:57 +0800 armstrong 特别提示

建议将本文保存到手机上,便于稍后查阅。其外,本文的方法仅在 Windows 11 Build 22H2 上试验通过,不保证将来的版本也一样可用。

在安装阶段绕开 TPM 检查

如果电脑没有可信平台模块(TPM),成功通过 Windows 11 Build 22H2 ISO 引导机器后,请按 Shift+F11 打开命令提示符,然后输入 regedit 并按回车键进入注册表,来到

HKEY_LOCAL_MACHINE\SYSTEM\Setup

,然后建立注册表项,命名为

LabConfig

,在 LabConfig 中,建立 DWORD 值,命名为

BypassTPMCheck

,将数值改成 1,然后关掉注册表编辑器,开始装系统。

绕过联网和微软账户

在系统装好进入设置地区的步骤,按 Shift + F10 打开命令提示符,然后输入 regedit 打开注册表编辑器。然后转到

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE

,在 OOBE 注册表项中,建立 DWORD 值,命名为

BypassNRO

,然后将值改成 1,退出注册表编辑器。在命令提示符界面,输入 logoff 然后按回车键。重新登录系统即可绕开联网配置,绕过登录微软帐户。

后记

如果需要批量安装,推荐使用新版 Rufus 制作安装 U 盘,在制作时可以选择绕开 TPM 检查等。

]]>
特别提示

建议将本文保存到手机上,便于稍后查阅。其外,本文的方法仅在 Windows 11 Build 22H2 上试验通过,不保证将来的版本也一样可用。

在安装阶段绕开 TPM 检查

如果电脑没有可信平台模块(TPM),成功通过 Windows 11 Build 22H2 ISO 引导机器后,请按 Shift+F11 打开命令提示符,然后输入 regedit 并按回车键进入注册表,来到

HKEY_LOCAL_MACHINE\SYSTEM\Setup

,然后建立注册表项,命名为

LabConfig

,在 LabConfig 中,建立 DWORD 值,命名为

BypassTPMCheck

,将数值改成 1,然后关掉注册表编辑器,开始装系统。

绕过联网和微软账户

在系统装好进入设置地区的步骤,按 Shift + F10 打开命令提示符,然后输入 regedit 打开注册表编辑器。然后转到

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE

,在 OOBE 注册表项中,建立 DWORD 值,命名为

BypassNRO

,然后将值改成 1,退出注册表编辑器。在命令提示符界面,输入 logoff 然后按回车键。重新登录系统即可绕开联网配置,绕过登录微软帐户。

后记

如果需要批量安装,推荐使用新版 Rufus 制作安装 U 盘,在制作时可以选择绕开 TPM 检查等。

]]>
5 https://bbs.viyf.org/?thread-index-fid-6-tid-208.htm https://bbs.viyf.org/?thread-index-fid-6-tid-208.htm
关于我分享steam游戏的一些说明 https://bbs.viyf.org/?thread-index-fid-6-tid-165.htm https://bbs.viyf.org/?thread-index-fid-6-tid-165.htm Thu, 27 Oct 2022 16:29:59 +0800 小草莓 本人从小就是一个游戏玩家,所以,我想要给大家分享一些游戏,但因为我自己没有网盘,并且现在的明眼人游戏普遍体积庞大,动不动就几十gb,就算有网盘也不够,所以,我想了个办法,用别人的链接,说明如下,如果想下载这些游戏,请认真阅读,之所以这样说,因为有点复杂,如果大家需要什么游戏,欢迎联系我,我尽力帮大家寻找。

下载游戏之前,请确认您的硬盘至少有游戏大小两倍的剩余空间,前面说了,现在的游戏一般体积庞大,所以解压和安装会暂时占用很大的空间。

此组织是一个无私分享steam游戏的组织,但网页上有大量的广告,所以寻找下载链接变得十分麻烦,且到达网盘页面之前要经过大量验证和广告页面。这个组织为了避免意外,把同一个游戏上传到了很多不同的网盘。有些网盘我们不能使用,有的不能访问,有的限制下载速度,总之,用起来不爽。因此,我给大家找的是一个尽量好操作的网盘,并且此盘不限制速度,不爽的一点是此网盘页面同样有广告,我尽量给大家直接到网盘下载页面的地址,为什么不给网盘直连呢?因为直连会过期。

此网盘名叫mega up,网站是英文的,打开一个文件的下载页面后,窗口标题应该包含文件名,此时,我们一路往下,找到用英文表示的说明文件名以及文件体积的文本,类似这样

file:xxx.part1.rar

size:4.54GB

下面应该有一个叫做,create download link,的按钮,但是多数情况会让你等一下,例如,wait 3sec,是等待三秒钟,的意思,稍等一下,create download link按钮就会出现,点击此按钮,有两种情况。

第一,浏览器打开一个新标签页,这表明碰到了广告,请按下ctrl+w把广告关闭,再次尝试点击此按钮,一般广告会重复两次,第三次可以正常下载。

第二,直接去下载页面,这样当然最好。

下载页面叫做download page,请等待你的下载工具跳出来,然后验证文件名并开始下载,再次提醒,一定要验证文件名在开始下载,因为,此网站有大量广告,游戏一般是压缩文件,所以,诸如可执行文件,.exe之类的一定不要下载,那些到底是什么我不知道,也不想知道。

体积庞大的游戏一般是分卷压缩的,把所有分卷下载到同一个文件夹,找到第一个分卷,解压,完成之后检验解压的文件,如体积等,确认无误后把压缩文件删除。

每个游戏的安装方法都不一样,没办法统一的说,如果是绿色版的不用安装,至于什么版本我一般会在帖子里面说,如果没有说请大家自行判断,因为游戏会更新。

解压的文件夹里有游戏文件夹,还有一些网站链接,当然我们要游戏,所以进入游戏文件夹看看,如果是ISO,windows10以上,在ISO光盘镜像上点右键弹出菜单,找到打开方式,选择用资源管理器打开,这样就加载到虚拟光驱里。去此电脑里面就有光盘了,里面应该有安装文件,有些游戏可能还有替换的文件,请看清楚在操作。

某些游戏的安装过程中有很大声的音乐,这个我也没办法,安装完成之后去游戏目录,如果有替换的文件请从安装包例如光盘里面复制并替换,打开游戏尝试游玩,确认没问题后,去此电脑里面弹出光盘,把解压的安装包删除,ok,搞定,慢慢的玩吧。

最后的最后,我的帖子写了一大段,很罗嗦,目的是希望大家都能看懂,都能游玩自己想要的游戏,不用受到广告或安装的限制,某些安装包的无障碍不好,那些广告也很讨厌,已经踩过的坑就跟大家说了。

]]>
本人从小就是一个游戏玩家,所以,我想要给大家分享一些游戏,但因为我自己没有网盘,并且现在的明眼人游戏普遍体积庞大,动不动就几十gb,就算有网盘也不够,所以,我想了个办法,用别人的链接,说明如下,如果想下载这些游戏,请认真阅读,之所以这样说,因为有点复杂,如果大家需要什么游戏,欢迎联系我,我尽力帮大家寻找。

下载游戏之前,请确认您的硬盘至少有游戏大小两倍的剩余空间,前面说了,现在的游戏一般体积庞大,所以解压和安装会暂时占用很大的空间。

此组织是一个无私分享steam游戏的组织,但网页上有大量的广告,所以寻找下载链接变得十分麻烦,且到达网盘页面之前要经过大量验证和广告页面。这个组织为了避免意外,把同一个游戏上传到了很多不同的网盘。有些网盘我们不能使用,有的不能访问,有的限制下载速度,总之,用起来不爽。因此,我给大家找的是一个尽量好操作的网盘,并且此盘不限制速度,不爽的一点是此网盘页面同样有广告,我尽量给大家直接到网盘下载页面的地址,为什么不给网盘直连呢?因为直连会过期。

此网盘名叫mega up,网站是英文的,打开一个文件的下载页面后,窗口标题应该包含文件名,此时,我们一路往下,找到用英文表示的说明文件名以及文件体积的文本,类似这样

file:xxx.part1.rar

size:4.54GB

下面应该有一个叫做,create download link,的按钮,但是多数情况会让你等一下,例如,wait 3sec,是等待三秒钟,的意思,稍等一下,create download link按钮就会出现,点击此按钮,有两种情况。

第一,浏览器打开一个新标签页,这表明碰到了广告,请按下ctrl+w把广告关闭,再次尝试点击此按钮,一般广告会重复两次,第三次可以正常下载。

第二,直接去下载页面,这样当然最好。

下载页面叫做download page,请等待你的下载工具跳出来,然后验证文件名并开始下载,再次提醒,一定要验证文件名在开始下载,因为,此网站有大量广告,游戏一般是压缩文件,所以,诸如可执行文件,.exe之类的一定不要下载,那些到底是什么我不知道,也不想知道。

体积庞大的游戏一般是分卷压缩的,把所有分卷下载到同一个文件夹,找到第一个分卷,解压,完成之后检验解压的文件,如体积等,确认无误后把压缩文件删除。

每个游戏的安装方法都不一样,没办法统一的说,如果是绿色版的不用安装,至于什么版本我一般会在帖子里面说,如果没有说请大家自行判断,因为游戏会更新。

解压的文件夹里有游戏文件夹,还有一些网站链接,当然我们要游戏,所以进入游戏文件夹看看,如果是ISO,windows10以上,在ISO光盘镜像上点右键弹出菜单,找到打开方式,选择用资源管理器打开,这样就加载到虚拟光驱里。去此电脑里面就有光盘了,里面应该有安装文件,有些游戏可能还有替换的文件,请看清楚在操作。

某些游戏的安装过程中有很大声的音乐,这个我也没办法,安装完成之后去游戏目录,如果有替换的文件请从安装包例如光盘里面复制并替换,打开游戏尝试游玩,确认没问题后,去此电脑里面弹出光盘,把解压的安装包删除,ok,搞定,慢慢的玩吧。

最后的最后,我的帖子写了一大段,很罗嗦,目的是希望大家都能看懂,都能游玩自己想要的游戏,不用受到广告或安装的限制,某些安装包的无障碍不好,那些广告也很讨厌,已经踩过的坑就跟大家说了。

]]>
3 https://bbs.viyf.org/?thread-index-fid-6-tid-165.htm https://bbs.viyf.org/?thread-index-fid-6-tid-165.htm
alist替代CloudDrive https://bbs.viyf.org/?thread-index-fid-6-tid-164.htm https://bbs.viyf.org/?thread-index-fid-6-tid-164.htm Wed, 02 Nov 2022 04:39:02 +0800 迎着风雨成长 alist替代CloudDrive第一篇“下载、设置、挂在A L云”
https://mp.weixin.qq.com/s/b_B61353-y1AIEYcJiY6dA
alist替代CloudDrive第二篇“把alist映射为本地磁盘、后台无感知运行服务”
https://mp.weixin.qq.com/s/hoLHJtMbl3ERnPgpteFPog

]]>
alist替代CloudDrive第一篇“下载、设置、挂在A L云”
https://mp.weixin.qq.com/s/b_B61353-y1AIEYcJiY6dA
alist替代CloudDrive第二篇“把alist映射为本地磁盘、后台无感知运行服务”
https://mp.weixin.qq.com/s/hoLHJtMbl3ERnPgpteFPog

]]>
2 https://bbs.viyf.org/?thread-index-fid-6-tid-164.htm https://bbs.viyf.org/?thread-index-fid-6-tid-164.htm
QQ 人脸验证总是通不过,这个帖子也许能帮到你 https://bbs.viyf.org/?thread-index-fid-6-tid-160.htm https://bbs.viyf.org/?thread-index-fid-6-tid-160.htm Thu, 29 Sep 2022 06:12:13 +0800 armstrong QQ 会无缘无故暂停登录账号是个众所周知的问题,尤其经常使用非官方客户端,例如 Go-CQHTTP 来登录就更容易遇到了。暂停登陆后,往往扫脸就可以恢复使用,尽管我挺反感这样做的可是没啥办法。对于普通人而言,扫脸的确没啥难度,对于黑老大而言,那就不一定喽!搞不好还会“今日失败次数过多请明日尝试”,嗯,砸手机的心都有了。

既然都碰到扫脸失败了,我想你一定会完成扫脸之前的操作了吧,比如说使用手机版 QQ,输入 QQ 号码和密码,完成短信验证,输入身份证号等一大堆乱七八糟的步骤。如果你不会那就不用往下看了。说实话,腾讯优图确实挺傻缺的,我为什么这样说呢?因为支付宝神马的操作起来,我本人哈,成功的概率实在是太高了,也不需要本文所说的方法。

关闭手机的黑屏模式

黑老大之所以是黑老大,其原因在于,无论使用手机或者电脑,屏幕都是黑色的,要不怎么叫黑老大对吧?要扫脸,建议退出黑屏,有些读屏软件叫做屏幕隐私。每个读屏软件退出黑屏模式的方法也不尽相同,Android 手机的读屏,开关通常都在读屏的主菜单或者是快捷菜单里面。

把屏幕亮度设为 50% 左右

只退出了读屏软件的“黑屏模式”,没有把手机屏幕的亮度调高,看起来依然还是黑色的。所以,需要在通知栏里,把亮度调节到 50% 左右,再进行扫脸,成功率会高一些。

摘下口罩、眼镜等戴在脸上的物件

扫脸时,请摘下口罩、眼镜、耳机等戴在脸上或者头上的物件。如果可能,最好先洗一洗你的脸。如果胡须太长,你可以先把它刮掉。

尽量端正

扫脸时,尽量不要低头,如果实在无法控制好体位,可以倚靠在床上或者凳子上。总之,不要过于低头或者仰头。

调整好手机与脸的距离和角度

这一步很重要,否则,镜头根本无法拍摄整张脸,或者角度歪斜会降低扫脸的成功率。我的操作方法,不一定适合所有人,说出来让大家参考参考吧:

首先,把手机的顶部放置在眼前,手机面向你的脸,尽量让手机跟睑毛持平。慢慢移开手机,两个拳头左右的距离即可,特别注意不要左右或者上下移动手机,也不要改变角度。

完成上述操作后,即可点击开始识别,顺利的话就会通过验证。假如不顺利呢?嘿嘿,其实我就有这么背,继续往下看吧!

注意听扫脸的提示

在扫脸的过程中,QQ 会提示你做一些简单的动作,例如眨眼,把手机移近一点等等。这些提示信息都是有焦点的,你可以通过正向滑动浏览的方法找到该提示。

对于“光线太亮,请换一个地方”这个提示

其实这个提示很有迷惑性,我用了一天的功夫来测试的。扫脸结束,失败后,如果提示光线太亮,其实是光线不合适,我把手机放在被子里,打开黑屏模式,把亮度调到 0%,QQ 也提示“光线太亮”。遇到这种情况,通常表示光线太暗了,可以试着调高手机屏幕的亮度,例如设为 60%。

需要注意:如果是扫脸过程中提示光线太亮,则基本上就是光线太亮了,不要增加亮度哦,而是去一个稍微暗一点的地方,或者把屏幕的亮度调低。

后记

我用上面所说的方法,通过了 QQ 的扫脸验证。如果你还有经验要和大家分享,欢迎跟帖分享。

]]>
QQ 会无缘无故暂停登录账号是个众所周知的问题,尤其经常使用非官方客户端,例如 Go-CQHTTP 来登录就更容易遇到了。暂停登陆后,往往扫脸就可以恢复使用,尽管我挺反感这样做的可是没啥办法。对于普通人而言,扫脸的确没啥难度,对于黑老大而言,那就不一定喽!搞不好还会“今日失败次数过多请明日尝试”,嗯,砸手机的心都有了。

既然都碰到扫脸失败了,我想你一定会完成扫脸之前的操作了吧,比如说使用手机版 QQ,输入 QQ 号码和密码,完成短信验证,输入身份证号等一大堆乱七八糟的步骤。如果你不会那就不用往下看了。说实话,腾讯优图确实挺傻缺的,我为什么这样说呢?因为支付宝神马的操作起来,我本人哈,成功的概率实在是太高了,也不需要本文所说的方法。

关闭手机的黑屏模式

黑老大之所以是黑老大,其原因在于,无论使用手机或者电脑,屏幕都是黑色的,要不怎么叫黑老大对吧?要扫脸,建议退出黑屏,有些读屏软件叫做屏幕隐私。每个读屏软件退出黑屏模式的方法也不尽相同,Android 手机的读屏,开关通常都在读屏的主菜单或者是快捷菜单里面。

把屏幕亮度设为 50% 左右

只退出了读屏软件的“黑屏模式”,没有把手机屏幕的亮度调高,看起来依然还是黑色的。所以,需要在通知栏里,把亮度调节到 50% 左右,再进行扫脸,成功率会高一些。

摘下口罩、眼镜等戴在脸上的物件

扫脸时,请摘下口罩、眼镜、耳机等戴在脸上或者头上的物件。如果可能,最好先洗一洗你的脸。如果胡须太长,你可以先把它刮掉。

尽量端正

扫脸时,尽量不要低头,如果实在无法控制好体位,可以倚靠在床上或者凳子上。总之,不要过于低头或者仰头。

调整好手机与脸的距离和角度

这一步很重要,否则,镜头根本无法拍摄整张脸,或者角度歪斜会降低扫脸的成功率。我的操作方法,不一定适合所有人,说出来让大家参考参考吧:

首先,把手机的顶部放置在眼前,手机面向你的脸,尽量让手机跟睑毛持平。慢慢移开手机,两个拳头左右的距离即可,特别注意不要左右或者上下移动手机,也不要改变角度。

完成上述操作后,即可点击开始识别,顺利的话就会通过验证。假如不顺利呢?嘿嘿,其实我就有这么背,继续往下看吧!

注意听扫脸的提示

在扫脸的过程中,QQ 会提示你做一些简单的动作,例如眨眼,把手机移近一点等等。这些提示信息都是有焦点的,你可以通过正向滑动浏览的方法找到该提示。

对于“光线太亮,请换一个地方”这个提示

其实这个提示很有迷惑性,我用了一天的功夫来测试的。扫脸结束,失败后,如果提示光线太亮,其实是光线不合适,我把手机放在被子里,打开黑屏模式,把亮度调到 0%,QQ 也提示“光线太亮”。遇到这种情况,通常表示光线太暗了,可以试着调高手机屏幕的亮度,例如设为 60%。

需要注意:如果是扫脸过程中提示光线太亮,则基本上就是光线太亮了,不要增加亮度哦,而是去一个稍微暗一点的地方,或者把屏幕的亮度调低。

后记

我用上面所说的方法,通过了 QQ 的扫脸验证。如果你还有经验要和大家分享,欢迎跟帖分享。

]]>
1 https://bbs.viyf.org/?thread-index-fid-6-tid-160.htm https://bbs.viyf.org/?thread-index-fid-6-tid-160.htm
通过 KMS 激活系统非常简单,别再用来历不明的软件了! https://bbs.viyf.org/?thread-index-fid-6-tid-156.htm https://bbs.viyf.org/?thread-index-fid-6-tid-156.htm Thu, 29 Sep 2022 15:31:00 +0800 armstrong 通过 KMS 激活系统非常简单,别再用来历不明的软件了!

说起激活系统这事儿,自己装系统的同学应该都接触过。使用来历不明的破解软件激活系统,导致电脑感染病毒也大有人在。当然了,我并不否认存在一些良心的激活软件,只是很少罢了。

为什么制作流氓软件的人喜欢制作有病毒的系统激活软件呢?原因很简单,主流的杀毒软件都会把激活系统的软件当作病毒杀掉,为了激活系统,很多人在使用激活软件时,都关闭杀毒软件,这就是很大的漏洞。即使是杀毒软件杀掉了有毒的激活软件,大家也会误认为是杀毒软件误报。

使用 VIYF KMS 服务器激活系统

什么是 KMS?微软为了让一些不联网的公司激活他们购买的 Windows 系统,会允许公司在内网部署激活服务器。正常情况下,购买了微软软件授权的公司会把其中一台服务器设为激活服务器,只要通过互联网或者电话联系微软,将该服务器激活后,该服务器就可以为内网的电脑提供激活服务,这个服务器就是 KMS 服务器。显然,微软的激活服务器早已被人破解,甚至还有人制作了运行在路由器上的 KMS 服务器。

KMS 的激活原理是:客户端向 KMS 服务器提交自己的 GVLK,以及电脑的硬件信息(不包括个人信息),KMS 服务器认为该客户端合法,就下发激活凭证,这样,客户端就被激活了。在这个过程中,KMS 服务器并不能控制客户端,客户端也并不会告诉 KMS 服务器自己的用户名及密码。

先决条件

要使用 KMS 激活系统,电脑运行的必须是如下版本的系统:

Windows 10/11 专业版、专业教育版、专业工作站版、教育版、企业版以及远程会话版。

Windows 7 专业版和企业版。

Windows Server 2012/2016/2019/2022 Essentials、Standard 和 Datacenter

(一些不常用的系统就不列出了)

除了需要安装能够激活的版本,想要激活的系统还需要安装有 GVLK(通用批量授权密钥)。可以从[url=/thread-index-fid-10-tid-142.htm]这里[/url]获取对应系统版本的 GVLK 密钥。

操作步骤

确定当前的系统版本

请在“运行”中输入 winver,然后按回车键。在“关于 Windows”对话框,查看当前系统的版本,确定是否符合上面的版本要求。

设置 KMS 服务器

请在管理员权限的 cmd 中输入 slmgr.vbs /skms kms.viyf.org

激活系统

请在管理员权限的 cmd 中输入 slmgr.vbs /ato 命令,然后按回车键。稍等片刻就会显示激活操作的结果。如果提示“成功地激活了产品”就表示激活成功了,如果不是这个提示,那就请接着往下看。

疑难排解

提示“无法联系任何密钥管理服务”

看到这条提示语句通常是因为没有正确配置网络连接导致的。如果电脑能上网,请你回帖告诉我那边的详细情况。

提示“密钥被拒绝”

请安装对应于当前系统的 GVLK 密钥,或者确认当前系统是否支持 KMS 激活。

]]>
通过 KMS 激活系统非常简单,别再用来历不明的软件了!

说起激活系统这事儿,自己装系统的同学应该都接触过。使用来历不明的破解软件激活系统,导致电脑感染病毒也大有人在。当然了,我并不否认存在一些良心的激活软件,只是很少罢了。

为什么制作流氓软件的人喜欢制作有病毒的系统激活软件呢?原因很简单,主流的杀毒软件都会把激活系统的软件当作病毒杀掉,为了激活系统,很多人在使用激活软件时,都关闭杀毒软件,这就是很大的漏洞。即使是杀毒软件杀掉了有毒的激活软件,大家也会误认为是杀毒软件误报。

使用 VIYF KMS 服务器激活系统

什么是 KMS?微软为了让一些不联网的公司激活他们购买的 Windows 系统,会允许公司在内网部署激活服务器。正常情况下,购买了微软软件授权的公司会把其中一台服务器设为激活服务器,只要通过互联网或者电话联系微软,将该服务器激活后,该服务器就可以为内网的电脑提供激活服务,这个服务器就是 KMS 服务器。显然,微软的激活服务器早已被人破解,甚至还有人制作了运行在路由器上的 KMS 服务器。

KMS 的激活原理是:客户端向 KMS 服务器提交自己的 GVLK,以及电脑的硬件信息(不包括个人信息),KMS 服务器认为该客户端合法,就下发激活凭证,这样,客户端就被激活了。在这个过程中,KMS 服务器并不能控制客户端,客户端也并不会告诉 KMS 服务器自己的用户名及密码。

先决条件

要使用 KMS 激活系统,电脑运行的必须是如下版本的系统:

Windows 10/11 专业版、专业教育版、专业工作站版、教育版、企业版以及远程会话版。

Windows 7 专业版和企业版。

Windows Server 2012/2016/2019/2022 Essentials、Standard 和 Datacenter

(一些不常用的系统就不列出了)

除了需要安装能够激活的版本,想要激活的系统还需要安装有 GVLK(通用批量授权密钥)。可以从[url=/thread-index-fid-10-tid-142.htm]这里[/url]获取对应系统版本的 GVLK 密钥。

操作步骤

确定当前的系统版本

请在“运行”中输入 winver,然后按回车键。在“关于 Windows”对话框,查看当前系统的版本,确定是否符合上面的版本要求。

设置 KMS 服务器

请在管理员权限的 cmd 中输入 slmgr.vbs /skms kms.viyf.org

激活系统

请在管理员权限的 cmd 中输入 slmgr.vbs /ato 命令,然后按回车键。稍等片刻就会显示激活操作的结果。如果提示“成功地激活了产品”就表示激活成功了,如果不是这个提示,那就请接着往下看。

疑难排解

提示“无法联系任何密钥管理服务”

看到这条提示语句通常是因为没有正确配置网络连接导致的。如果电脑能上网,请你回帖告诉我那边的详细情况。

提示“密钥被拒绝”

请安装对应于当前系统的 GVLK 密钥,或者确认当前系统是否支持 KMS 激活。

]]>
3 https://bbs.viyf.org/?thread-index-fid-6-tid-156.htm https://bbs.viyf.org/?thread-index-fid-6-tid-156.htm
小康,速语之外不妨还可以试试这些纯净的活跃维护的PE项目。 https://bbs.viyf.org/?thread-index-fid-6-tid-154.htm https://bbs.viyf.org/?thread-index-fid-6-tid-154.htm Thu, 27 Oct 2022 16:35:05 +0800 AllenLI 随着小康在2017年停止更新,速雨发布过1次之后就不维护了,他们的PE到了现在的新机器上面开始出现各种各样的问题,如硬盘显示不了"在10带以上因特尔机型上"甚至导入驱动还会蓝屏,在这种情况我们除了使用原版系统安装环境凑合或改变硬盘模式之外还可以找一个纯净,开放的明眼人PE只需要一点点修改即可使用。

推荐使用的PE项目

1 edgeless

 

edgeless是第一个已模块化,插件话,开放源码作为特色的PE。

网站:去看看

github仓库地址:去了解

使用感受:高可玩性,界面没有无障碍问题但是4.x以上阉割了声音驱动而且反馈并未解决,支持心印件,4.10最新版内核是19041

下载链接:在这里获取镜像和插件

读平插件:点此下载

 

2 "光卡"Hikari PE

 

Hikari PE是第一个在PE上做到类Win11UI的PE项目,而且支持简繁体中文,英语,日本语,韩国语。

网站:去看看

使用体验:兼容edgeless插件,支持5种语言,不支持老设备(只能UEFI引导),开始菜单不支持读平不能读取程序列表和最近使用,桌面空白,支持心印件,内核是win11 22000。

下载链接:点此查看

读平和其他插件在上面的edgeless介绍区域下载

 

3 firPE

FirPE 是一款系统预安装环境(Windows PE),它具有简约、易操作等特点,使用起来十分人性化。以U盘作为使用载体,空间更为充分,携带更为方便。同时整合各种装机必备工具,有效提高系统安装效率。FirPE 将为大家带来全新的用户体验!FirPE 是一款系统预安装环境(Windows PE),它具有简约、易操作等特点,使用起来十分人性化。以U盘作为使用载体,空间更为充分,携带更为方便。同时整合各种装机必备工具,有效提高系统安装效率。FirPE 将为大家带来全新的用户体验!

网站:去看看

使用体验:支持edgeless插件,有一些自己编写的维护工具而且设计比较简单方便操作,由于ui组件混搭导致nvda不能朗读开始菜单,chrome内核浏览器,打开对话框,内核同样win11,提供了2003PE已支持旧电脑,支持从本机系统直接载入驱动,网络连接界面保留了win原生界面。

下载链接:点此下载

 

4kuerPE

 

他提供了多个版本,有维护版,网络版,宽带网络版,非常小的体积,可选择搭配外置工具。

423down分享帖:去查看

使用体验:内置驱动很全,保留原生网络连接窗口和图标,不支持edgeless插件也没有提供随意diy的能力,每次修改软件都需要改动外置工具的压缩包并编辑对应配置文件或修改WIM,没有无障碍使用问题,系统提供了win10和11两个版本。

下载链接:点此下载

 

5 hotPE

 

一个纯净、强大、优雅的开源Win11PE,支持上网、声音、远程、下载、HotPE模块、Edgeless插件、MTP丶RNDIS、Legacy、UEFI、M.2、NVME、USB设备弹出、搜索功能、MSI、BitLocker磁盘解锁、网络共享、U盘启动、本地启动、生成ISO等
HotPE2.4正式版已经发布,采用最新的Win11 内核,欢迎下载使用!
一个纯净、强大、优雅的开源Win11PE,支持上网、声音、远程、下载、HotPE模块、Edgeless插件、MTP丶RNDIS、Legacy、UEFI、M.2、NVME、USB设备弹出、搜索功能、MSI、BitLocker磁盘解锁、网络共享、U盘启动、本地启动、生成ISO等
HotPE2.4正式版已经发布,采用最新的Win11 内核,欢迎下载使用!
官方网站:去看看

github仓库地址:去了解

使用体验:支持edgeless插件和hotpe模块,模块制作工具提供了方便的制作程序,有一些自己编写的维护工具,支持在线一件下载安装系统,没有无障碍使用问题,支持主流硬件。

下载链接:点此下载镜像和模块

 

读平模块"测试中":点此下载

有两种方式可以内置读平并实现快捷键或者开机启动,推荐nvda,不推荐争渡,因为争渡需要.net框架需要占用大量空间而且很难内置。

 

方法1:修改wim方式

准备nvda便携版,文件夹名改为nvda,打开iso,将wim复制到你能找到的位置,使用dism++挂傤wim文件,将便携版nvda放到挂傤文件夹的Program Files目录,然后编辑里面的petools.ini(如果没有,可以编辑windows\system32\pecmd.ini),然后在文件尾粘贴一下行或者放到相对应的配置文件段落位置。



//屏幕阅读器启动热键
HOTK Ctrl + Alt + N,%ProgramFiles%\NVDA\nvda.exe
//创建桌面快捷方式
LINK %Desktop%\NVDA,%ProgramFiles%\NVDA\nvda.exe
//创建开始菜单所有程序快捷方式
LINK %Programs%\辅助功能\NVDA,%ProgramFiles%\NVDA\nvda.exe

保存修改,保存并卸载镜像,使用软碟通替换掉原本文件并保存,如果写入U盘只需要进入U盘目录替换原本文件即可。

方法2:扩展插件

需要根据官方文档选择对应的制作流程,或从帖子中下载插件,制作或下载完成后用软碟通挂在iso放在对应目录或放在PE的U盘对应目录。

以下是PE对应的扩展存放位置。

edgeless

\edgeless\resource

Hikari PE

\EL_Modules

hotPE

\HotPEModule

如果对插件制作感兴趣或了解更多可以前往以下链接:hotPE模块开发文档

edgeless插件开发文档

]]>
随着小康在2017年停止更新,速雨发布过1次之后就不维护了,他们的PE到了现在的新机器上面开始出现各种各样的问题,如硬盘显示不了"在10带以上因特尔机型上"甚至导入驱动还会蓝屏,在这种情况我们除了使用原版系统安装环境凑合或改变硬盘模式之外还可以找一个纯净,开放的明眼人PE只需要一点点修改即可使用。

推荐使用的PE项目

1 edgeless

 

edgeless是第一个已模块化,插件话,开放源码作为特色的PE。

网站:去看看

github仓库地址:去了解

使用感受:高可玩性,界面没有无障碍问题但是4.x以上阉割了声音驱动而且反馈并未解决,支持心印件,4.10最新版内核是19041

下载链接:在这里获取镜像和插件

读平插件:点此下载

 

2 "光卡"Hikari PE

 

Hikari PE是第一个在PE上做到类Win11UI的PE项目,而且支持简繁体中文,英语,日本语,韩国语。

网站:去看看

使用体验:兼容edgeless插件,支持5种语言,不支持老设备(只能UEFI引导),开始菜单不支持读平不能读取程序列表和最近使用,桌面空白,支持心印件,内核是win11 22000。

下载链接:点此查看

读平和其他插件在上面的edgeless介绍区域下载

 

3 firPE

FirPE 是一款系统预安装环境(Windows PE),它具有简约、易操作等特点,使用起来十分人性化。以U盘作为使用载体,空间更为充分,携带更为方便。同时整合各种装机必备工具,有效提高系统安装效率。FirPE 将为大家带来全新的用户体验!FirPE 是一款系统预安装环境(Windows PE),它具有简约、易操作等特点,使用起来十分人性化。以U盘作为使用载体,空间更为充分,携带更为方便。同时整合各种装机必备工具,有效提高系统安装效率。FirPE 将为大家带来全新的用户体验!

网站:去看看

使用体验:支持edgeless插件,有一些自己编写的维护工具而且设计比较简单方便操作,由于ui组件混搭导致nvda不能朗读开始菜单,chrome内核浏览器,打开对话框,内核同样win11,提供了2003PE已支持旧电脑,支持从本机系统直接载入驱动,网络连接界面保留了win原生界面。

下载链接:点此下载

 

4kuerPE

 

他提供了多个版本,有维护版,网络版,宽带网络版,非常小的体积,可选择搭配外置工具。

423down分享帖:去查看

使用体验:内置驱动很全,保留原生网络连接窗口和图标,不支持edgeless插件也没有提供随意diy的能力,每次修改软件都需要改动外置工具的压缩包并编辑对应配置文件或修改WIM,没有无障碍使用问题,系统提供了win10和11两个版本。

下载链接:点此下载

 

5 hotPE

 

一个纯净、强大、优雅的开源Win11PE,支持上网、声音、远程、下载、HotPE模块、Edgeless插件、MTP丶RNDIS、Legacy、UEFI、M.2、NVME、USB设备弹出、搜索功能、MSI、BitLocker磁盘解锁、网络共享、U盘启动、本地启动、生成ISO等
HotPE2.4正式版已经发布,采用最新的Win11 内核,欢迎下载使用!
一个纯净、强大、优雅的开源Win11PE,支持上网、声音、远程、下载、HotPE模块、Edgeless插件、MTP丶RNDIS、Legacy、UEFI、M.2、NVME、USB设备弹出、搜索功能、MSI、BitLocker磁盘解锁、网络共享、U盘启动、本地启动、生成ISO等
HotPE2.4正式版已经发布,采用最新的Win11 内核,欢迎下载使用!
官方网站:去看看

github仓库地址:去了解

使用体验:支持edgeless插件和hotpe模块,模块制作工具提供了方便的制作程序,有一些自己编写的维护工具,支持在线一件下载安装系统,没有无障碍使用问题,支持主流硬件。

下载链接:点此下载镜像和模块

 

读平模块"测试中":点此下载

有两种方式可以内置读平并实现快捷键或者开机启动,推荐nvda,不推荐争渡,因为争渡需要.net框架需要占用大量空间而且很难内置。

 

方法1:修改wim方式

准备nvda便携版,文件夹名改为nvda,打开iso,将wim复制到你能找到的位置,使用dism++挂傤wim文件,将便携版nvda放到挂傤文件夹的Program Files目录,然后编辑里面的petools.ini(如果没有,可以编辑windows\system32\pecmd.ini),然后在文件尾粘贴一下行或者放到相对应的配置文件段落位置。



//屏幕阅读器启动热键
HOTK Ctrl + Alt + N,%ProgramFiles%\NVDA\nvda.exe
//创建桌面快捷方式
LINK %Desktop%\NVDA,%ProgramFiles%\NVDA\nvda.exe
//创建开始菜单所有程序快捷方式
LINK %Programs%\辅助功能\NVDA,%ProgramFiles%\NVDA\nvda.exe

保存修改,保存并卸载镜像,使用软碟通替换掉原本文件并保存,如果写入U盘只需要进入U盘目录替换原本文件即可。

方法2:扩展插件

需要根据官方文档选择对应的制作流程,或从帖子中下载插件,制作或下载完成后用软碟通挂在iso放在对应目录或放在PE的U盘对应目录。

以下是PE对应的扩展存放位置。

edgeless

\edgeless\resource

Hikari PE

\EL_Modules

hotPE

\HotPEModule

如果对插件制作感兴趣或了解更多可以前往以下链接:hotPE模块开发文档

edgeless插件开发文档

]]>
8 https://bbs.viyf.org/?thread-index-fid-6-tid-154.htm https://bbs.viyf.org/?thread-index-fid-6-tid-154.htm
世界上依然活跃的电脑读屏(windows)大盘点,有你没用过的吗? https://bbs.viyf.org/?thread-index-fid-6-tid-150.htm https://bbs.viyf.org/?thread-index-fid-6-tid-150.htm Thu, 29 Sep 2022 06:18:48 +0800 小草莓 某同学说我很喜欢研究读屏,嗯嗯,确实,所以,今天来一发读屏大盘点,把我见过的读屏都抖出来,国内外的都有。如果大家看了之后感兴趣,我在发下一期,手机读屏或者已经不活跃的读屏。这些读屏软件在至少几年内还有过大更新,所以归为活跃开发,闲话少说,上干货。

先说国内,中国的。

 

阳光读屏,这是中国盲文出版社开发的读屏,为什么第一个说它,因为在我们上学的年代,学校都用它,但是版本参差不齐,4.5,5.0,6.0/6.5都有

官方网址,阳光读屏软件首页 (mwyg123.com)

最新版本是9.9,不过在网站上只有2019年夏天关于9.5的新闻,以后还有没有更新本人不知道。对于windows11支持也要看后续。

最初,阳光在我们眼里总是跟无能/不稳定挂钩,因此到了2013年,某些钟爱阳光的同学依然用着4.5的老版本,因为4.5虽然响应速度慢,但至少稳定一些,从5.0开始,虽然讯飞语音库的音质大大提升,但读屏自身却极不稳定,很容易崩溃,而且跟同时代的其他竞争对手相比,阅读能力也差很多。

移植到7.0/8.1时代,大概是六年前,阳光终于鲤鱼跃龙门,不管是响应速度还是语音库,甚至是阅读能力都有了大幅提升,据小道消息称是请了盲人圈子里的一位大神帮忙,具体我不知道。

可以说,在windows8/8.1时代,中国只有两个读屏最为活跃,而阳光就是其中之一。官方的宣传在当时也算是中规中矩,强大的浏览模式,确实如此。

我自己认为,阳光的最大特点就是一直伴随升级的讯飞语音库,从7.0版本开始,它的讯飞语音和我们手机上用的更为相似,不管是声音的自然程度还是速度都是讯飞语音中最优秀的,就算现在各大读屏都在继承讯飞语音,但还是和阳光的语音有不小的差距。

缺点当然也很明显,最近几年更新断断续续,开发者不能很好的接受反馈,以后的路又看不见了,对系统新特性的支持也没有说法。

读屏名言:4.5:输入法朗读器开始朗读,中文简体美式键盘,读屏启动,5.0/6.5:阳光启动,7.0以上:阳光读屏启动。

 

争渡读屏zdsr

这绝对是现在国内用户最多的读屏了,官方网址,争渡读屏 - 追求卓越,每天都有进步! (zdsr.com)

操作方法主要继承了中国读屏一贯的特征,例如小键盘4,6键循环浏览控件,加减号进行取词等。值得说的,是这是首先采用.net框架开发的读屏,从.net3.5一直到现在的4.8,特点是,开机第一次启动读屏会很慢,但不关机的情况下,退出在启动,速度飞快,同时读屏自身的响应速度没话说。

最近学习外国的一些读屏开始了网络授权模式,名叫青春版。

最近几个版本对新东西的支持也很及时,希望能继续更新,做的越来越好,最厉害的是,zdsr已经走出国门,受到外国很多用户的欢迎,在国外各大论坛和交流平台或多或少都有交流争渡读屏的,国外主要看重它的响应速度和屏幕导航功能。

至于缺点,现在,免费公益版和商业版的功能差距已经越来越明显,最新工艺版甚至去除了在网页上分类导航的能力。。另外,不得不说的是,读屏在几年前价格上涨了

读屏名言:争渡读屏2012工艺版,本软件完全免费,您无需向任何人支付任何费用,争渡读屏2022夏季版

开发者名言:争渡读屏,追求卓越

 

宝翼乐听,宝翼读屏

官方网址:北京保益互动 (bjbyhd.com)

这是北京宝翼互动开发的读屏,近几年才出现,延续了中国读屏的操作模式,这家公司在手机读屏方面的成就不用说,老用户都知道,一开始是诺基亚,中国就此一家,然后是安卓系统,至今都有大量用户,近几年开始开发电脑读屏,个人觉得亮点在office支持方面,不知道是否调用了无障碍接口,在处理文档的时候速度飞快,毫无卡顿,但其他的,只能说一般般,没什么问题,但不出彩。

读屏名言:宝翼乐听,爱帮忙。

 

点名读屏

官方网址:南京点明软件科技有限公司 (dmrjkj.com)

是上个月刚刚发布的读屏软件,依然必须重复的是,它延续了中国读屏的操作模式,控件导航,元素导航,加减号取词。

这个读屏大家都还在体验当中,自己宣传的亮点是对高版本adobe audition音乐制作软件的支持,百度网盘的支持,对于这些,现在的体验不错,但本人知道一点点技术细节,对以后的发展还要观望,它也采用了订阅授权,和争渡青春版类似,据说以后会退出加密狗版本。

缺点,取词有时候不完整,表现为用快捷键不能读取信息,

这个公司和上面说的宝翼类似,在手机读屏领域也是响当当的,今年才退出电脑读屏软件,至于稳定性或者以后的功能,要等几年之后才能知道了,其实,从基本操作模式来说,点明,宝翼,有点换汤不换药的感觉,当然采用的取词方法或者软件的内部结构可能不一样,但用户体验几乎完全继承了中国电脑读屏的风格。

读屏名言:点明读屏1.1.31

开发者名言:点明软件,点亮明天

国外的读屏

JAWS,全名job access with  speech

这绝对是世界上最有名的读屏了,它的名字有两个解释,第一当然是上面全名的缩写,而另外的解释,jaw是人的下吧,s是英语的复数标记,想象一下,一个人在快速说话的时候,你的下吧会一上一下的激烈运动,如果没注意的话,自己试一试。

官方网址:JAWS® – Freedom Scientific

这是美国一家名叫自由科学的公司开发的读屏,资历老的吓死人,可以追溯到ms.dos时代。近几年,这家公司与另一家卖注视器的公司合并,之后收购了大量卖无障碍产品或软件的公司,做了很多让全世界盲人都不舒服甚至怒火攻心的事情,但是由于合并的两家公司实在厉害,大家也没办法,如果各位朋友想要知道细节可以在楼下说。

这个软件的反应速度绝对厉害,当然体积也越来越大,国内以前有人做成了中文,甚至连输入法都可以支持,可惜最近的版本语言文件找不到了,国内唯一的讲座是版本11的,一般的更新频率也是一年一次大更新,版本18以后,同样采用了用发布的年份作为版本的模式。最值得说的是jaws的模拟鼠标和我们国内的都不一样,读取能力相当强,它把键盘焦点叫做pc光标,把鼠标叫做jaws光标,在模拟鼠标的时候更类似我们国内读鼠标的效果。。鼠标可以上下左右的移动。

缺点就多了,首先,价格非常可怕,1000美元,甚至专业版1200美元,并且,如果需要升级到下一年的大版本,还要收费,因此,在美国本地,推出了订阅年度授权,个人猜测争渡读屏,点明读屏的青春版,会员版就是受jaws年度版启发产生的。这个年度版本每年都要收费,但价格低得多,在授权期限内可以随便更新。但需要联网。对于我们,最要命的是不支持中文,这一点几乎让jaws在中国没有用户

读屏名言:jaws home used,jaws perfessional.

 

NVDA,无视觉桌面访问

这是两个澳大利亚人开发的读屏,一直从2006年到现在,它是唯一仍在活跃开发并且完全免费的读屏

官方网址:NV Access

亮点,免费是它最大的亮点,而且,开源,所以开发者很多,在中国甚至有中文网站。可贵的是虽然免费但对新系统的支持却越来越好。另一个亮点是有各种各样的插件,这些插件可以是一些软件的支持,新的语音库,或者一些新功能,插件是可以安装的,所以提供了很多的自定义空间,你想装什么就装什么,如果某插件你不喜欢或者暂时不需要就不装。

NVDA和国内读屏的操作模式不太一样,分为对象浏览和屏幕

浏览。

缺点,响应速度不好,由于上层都是python开发,而python的运行速度不好,所以速度很慢。一直没有解决的问题是,当前台程序出现未响应的情况时,读屏会直接卡住,有时候几分钟都没反应。

对于输入法的支持也不尽人意,几天前发布了中文输入法支持插件,终于解决了我这个nvda重度用户的燃眉之急。

另外,据很多人测试,NVDA屏幕浏览的取词能力很多情况下并不如国内读屏的屏幕导航或者加减号,有些软件出现国内读屏可以操作而NVDA毫无办法的窘境。

读屏名言:正在载入NVDA,请稍后。nvda菜单

 

super nova

官方网址:超新星|海豚电脑访问 (yourdolphin.com)

这是美国的另外一家读屏,在windows xp时代甚至可以跟知名的jaws杠一杠,可惜,随着新的系统出现新的要求,官方已经退而求其次,把windows电脑打造成为语音王电脑,老版本的阅读能力没话说,但从10年前开始,出现了盲人专用电子邮件,音乐播放器等产品,现在已经是全世界最有名的盲人定制电脑打造者,如果你想体验一下语音王电脑,可以尝试一下。

读屏名言:super nova screen reading and text reader.

 

pc talker

官方网址:屏幕阅读器 PC-Talker (aok-net.com)

这是日本的读屏,对新系统如windows11有不错的支持,几年前也有青春版了。由于我对日语一窍不通,只是听日本朋友用过。

读屏名言: pc talker neo plus net reader

如果有我不知道的读屏欢迎分享,慢吞吞的想了一下午才写完,有同学可能要问,为什么没有一些又名的读屏例如永德,因为虽然公司还在,但是读屏本身并不活跃,这是多数用户知道的事实。另外一些做的比super nova还差的自然没有拿出来说的必要了,呵呵。

 

]]>
某同学说我很喜欢研究读屏,嗯嗯,确实,所以,今天来一发读屏大盘点,把我见过的读屏都抖出来,国内外的都有。如果大家看了之后感兴趣,我在发下一期,手机读屏或者已经不活跃的读屏。这些读屏软件在至少几年内还有过大更新,所以归为活跃开发,闲话少说,上干货。

先说国内,中国的。

 

阳光读屏,这是中国盲文出版社开发的读屏,为什么第一个说它,因为在我们上学的年代,学校都用它,但是版本参差不齐,4.5,5.0,6.0/6.5都有

官方网址,阳光读屏软件首页 (mwyg123.com)

最新版本是9.9,不过在网站上只有2019年夏天关于9.5的新闻,以后还有没有更新本人不知道。对于windows11支持也要看后续。

最初,阳光在我们眼里总是跟无能/不稳定挂钩,因此到了2013年,某些钟爱阳光的同学依然用着4.5的老版本,因为4.5虽然响应速度慢,但至少稳定一些,从5.0开始,虽然讯飞语音库的音质大大提升,但读屏自身却极不稳定,很容易崩溃,而且跟同时代的其他竞争对手相比,阅读能力也差很多。

移植到7.0/8.1时代,大概是六年前,阳光终于鲤鱼跃龙门,不管是响应速度还是语音库,甚至是阅读能力都有了大幅提升,据小道消息称是请了盲人圈子里的一位大神帮忙,具体我不知道。

可以说,在windows8/8.1时代,中国只有两个读屏最为活跃,而阳光就是其中之一。官方的宣传在当时也算是中规中矩,强大的浏览模式,确实如此。

我自己认为,阳光的最大特点就是一直伴随升级的讯飞语音库,从7.0版本开始,它的讯飞语音和我们手机上用的更为相似,不管是声音的自然程度还是速度都是讯飞语音中最优秀的,就算现在各大读屏都在继承讯飞语音,但还是和阳光的语音有不小的差距。

缺点当然也很明显,最近几年更新断断续续,开发者不能很好的接受反馈,以后的路又看不见了,对系统新特性的支持也没有说法。

读屏名言:4.5:输入法朗读器开始朗读,中文简体美式键盘,读屏启动,5.0/6.5:阳光启动,7.0以上:阳光读屏启动。

 

争渡读屏zdsr

这绝对是现在国内用户最多的读屏了,官方网址,争渡读屏 - 追求卓越,每天都有进步! (zdsr.com)

操作方法主要继承了中国读屏一贯的特征,例如小键盘4,6键循环浏览控件,加减号进行取词等。值得说的,是这是首先采用.net框架开发的读屏,从.net3.5一直到现在的4.8,特点是,开机第一次启动读屏会很慢,但不关机的情况下,退出在启动,速度飞快,同时读屏自身的响应速度没话说。

最近学习外国的一些读屏开始了网络授权模式,名叫青春版。

最近几个版本对新东西的支持也很及时,希望能继续更新,做的越来越好,最厉害的是,zdsr已经走出国门,受到外国很多用户的欢迎,在国外各大论坛和交流平台或多或少都有交流争渡读屏的,国外主要看重它的响应速度和屏幕导航功能。

至于缺点,现在,免费公益版和商业版的功能差距已经越来越明显,最新工艺版甚至去除了在网页上分类导航的能力。。另外,不得不说的是,读屏在几年前价格上涨了

读屏名言:争渡读屏2012工艺版,本软件完全免费,您无需向任何人支付任何费用,争渡读屏2022夏季版

开发者名言:争渡读屏,追求卓越

 

宝翼乐听,宝翼读屏

官方网址:北京保益互动 (bjbyhd.com)

这是北京宝翼互动开发的读屏,近几年才出现,延续了中国读屏的操作模式,这家公司在手机读屏方面的成就不用说,老用户都知道,一开始是诺基亚,中国就此一家,然后是安卓系统,至今都有大量用户,近几年开始开发电脑读屏,个人觉得亮点在office支持方面,不知道是否调用了无障碍接口,在处理文档的时候速度飞快,毫无卡顿,但其他的,只能说一般般,没什么问题,但不出彩。

读屏名言:宝翼乐听,爱帮忙。

 

点名读屏

官方网址:南京点明软件科技有限公司 (dmrjkj.com)

是上个月刚刚发布的读屏软件,依然必须重复的是,它延续了中国读屏的操作模式,控件导航,元素导航,加减号取词。

这个读屏大家都还在体验当中,自己宣传的亮点是对高版本adobe audition音乐制作软件的支持,百度网盘的支持,对于这些,现在的体验不错,但本人知道一点点技术细节,对以后的发展还要观望,它也采用了订阅授权,和争渡青春版类似,据说以后会退出加密狗版本。

缺点,取词有时候不完整,表现为用快捷键不能读取信息,

这个公司和上面说的宝翼类似,在手机读屏领域也是响当当的,今年才退出电脑读屏软件,至于稳定性或者以后的功能,要等几年之后才能知道了,其实,从基本操作模式来说,点明,宝翼,有点换汤不换药的感觉,当然采用的取词方法或者软件的内部结构可能不一样,但用户体验几乎完全继承了中国电脑读屏的风格。

读屏名言:点明读屏1.1.31

开发者名言:点明软件,点亮明天

国外的读屏

JAWS,全名job access with  speech

这绝对是世界上最有名的读屏了,它的名字有两个解释,第一当然是上面全名的缩写,而另外的解释,jaw是人的下吧,s是英语的复数标记,想象一下,一个人在快速说话的时候,你的下吧会一上一下的激烈运动,如果没注意的话,自己试一试。

官方网址:JAWS® – Freedom Scientific

这是美国一家名叫自由科学的公司开发的读屏,资历老的吓死人,可以追溯到ms.dos时代。近几年,这家公司与另一家卖注视器的公司合并,之后收购了大量卖无障碍产品或软件的公司,做了很多让全世界盲人都不舒服甚至怒火攻心的事情,但是由于合并的两家公司实在厉害,大家也没办法,如果各位朋友想要知道细节可以在楼下说。

这个软件的反应速度绝对厉害,当然体积也越来越大,国内以前有人做成了中文,甚至连输入法都可以支持,可惜最近的版本语言文件找不到了,国内唯一的讲座是版本11的,一般的更新频率也是一年一次大更新,版本18以后,同样采用了用发布的年份作为版本的模式。最值得说的是jaws的模拟鼠标和我们国内的都不一样,读取能力相当强,它把键盘焦点叫做pc光标,把鼠标叫做jaws光标,在模拟鼠标的时候更类似我们国内读鼠标的效果。。鼠标可以上下左右的移动。

缺点就多了,首先,价格非常可怕,1000美元,甚至专业版1200美元,并且,如果需要升级到下一年的大版本,还要收费,因此,在美国本地,推出了订阅年度授权,个人猜测争渡读屏,点明读屏的青春版,会员版就是受jaws年度版启发产生的。这个年度版本每年都要收费,但价格低得多,在授权期限内可以随便更新。但需要联网。对于我们,最要命的是不支持中文,这一点几乎让jaws在中国没有用户

读屏名言:jaws home used,jaws perfessional.

 

NVDA,无视觉桌面访问

这是两个澳大利亚人开发的读屏,一直从2006年到现在,它是唯一仍在活跃开发并且完全免费的读屏

官方网址:NV Access

亮点,免费是它最大的亮点,而且,开源,所以开发者很多,在中国甚至有中文网站。可贵的是虽然免费但对新系统的支持却越来越好。另一个亮点是有各种各样的插件,这些插件可以是一些软件的支持,新的语音库,或者一些新功能,插件是可以安装的,所以提供了很多的自定义空间,你想装什么就装什么,如果某插件你不喜欢或者暂时不需要就不装。

NVDA和国内读屏的操作模式不太一样,分为对象浏览和屏幕

浏览。

缺点,响应速度不好,由于上层都是python开发,而python的运行速度不好,所以速度很慢。一直没有解决的问题是,当前台程序出现未响应的情况时,读屏会直接卡住,有时候几分钟都没反应。

对于输入法的支持也不尽人意,几天前发布了中文输入法支持插件,终于解决了我这个nvda重度用户的燃眉之急。

另外,据很多人测试,NVDA屏幕浏览的取词能力很多情况下并不如国内读屏的屏幕导航或者加减号,有些软件出现国内读屏可以操作而NVDA毫无办法的窘境。

读屏名言:正在载入NVDA,请稍后。nvda菜单

 

super nova

官方网址:超新星|海豚电脑访问 (yourdolphin.com)

这是美国的另外一家读屏,在windows xp时代甚至可以跟知名的jaws杠一杠,可惜,随着新的系统出现新的要求,官方已经退而求其次,把windows电脑打造成为语音王电脑,老版本的阅读能力没话说,但从10年前开始,出现了盲人专用电子邮件,音乐播放器等产品,现在已经是全世界最有名的盲人定制电脑打造者,如果你想体验一下语音王电脑,可以尝试一下。

读屏名言:super nova screen reading and text reader.

 

pc talker

官方网址:屏幕阅读器 PC-Talker (aok-net.com)

这是日本的读屏,对新系统如windows11有不错的支持,几年前也有青春版了。由于我对日语一窍不通,只是听日本朋友用过。

读屏名言: pc talker neo plus net reader

如果有我不知道的读屏欢迎分享,慢吞吞的想了一下午才写完,有同学可能要问,为什么没有一些又名的读屏例如永德,因为虽然公司还在,但是读屏本身并不活跃,这是多数用户知道的事实。另外一些做的比super nova还差的自然没有拿出来说的必要了,呵呵。

 

]]>
8 https://bbs.viyf.org/?thread-index-fid-6-tid-150.htm https://bbs.viyf.org/?thread-index-fid-6-tid-150.htm
请问下联想英特尔处理器装系统的问题 https://bbs.viyf.org/?thread-index-fid-6-tid-147.htm https://bbs.viyf.org/?thread-index-fid-6-tid-147.htm Tue, 27 Sep 2022 01:19:08 +0800 请问下我这有个联想英特尔处理器,用小康PE无法检测到声卡和硬盘,声卡用的midi plus解决,但硬盘驱动怎么办?我尝试的拿驱动安装包安装,提示无法安装,缺少dll,把dll放在所说的路径也不行。电脑是Lenovo V15-ITL

]]>
请问下我这有个联想英特尔处理器,用小康PE无法检测到声卡和硬盘,声卡用的midi plus解决,但硬盘驱动怎么办?我尝试的拿驱动安装包安装,提示无法安装,缺少dll,把dll放在所说的路径也不行。电脑是Lenovo V15-ITL

]]>
6 https://bbs.viyf.org/?thread-index-fid-6-tid-147.htm https://bbs.viyf.org/?thread-index-fid-6-tid-147.htm
推荐声卡 https://bbs.viyf.org/?thread-index-fid-6-tid-146.htm https://bbs.viyf.org/?thread-index-fid-6-tid-146.htm Mon, 26 Sep 2022 10:36:12 +0800 九幽小怪 大家好,最近好多朋友在玩声卡,而且声卡现在是层出不穷,种类繁多,

每个人对声卡的需求也不同,有的喜欢用手机的,有的喜欢用电脑的,还有的人喜欢电脑手机通用的,价格也是从几百到上千上万的不等,

可是,向我们视障人群玩声卡,排除了那些高手,普通人玩也就是千八百的也就差不多了,

太贵的又舍不得,太便宜的声音质量又很差,但是我个人觉得,太便宜的的确不行,本来我们视障人群就是靠声音的,对声音的要求要比明眼人高,

如果以后有这方面比较精通的朋友,到时候可以在这里和大家分享一下自己对声卡话筒的一些见解,

不要让太多的朋友走歪路,希望这个帖子以后能程维大家有帮助的地方,如果有人咨询我,只要我知道的,也会和大家一起讨论的。

]]>
大家好,最近好多朋友在玩声卡,而且声卡现在是层出不穷,种类繁多,

每个人对声卡的需求也不同,有的喜欢用手机的,有的喜欢用电脑的,还有的人喜欢电脑手机通用的,价格也是从几百到上千上万的不等,

可是,向我们视障人群玩声卡,排除了那些高手,普通人玩也就是千八百的也就差不多了,

太贵的又舍不得,太便宜的声音质量又很差,但是我个人觉得,太便宜的的确不行,本来我们视障人群就是靠声音的,对声音的要求要比明眼人高,

如果以后有这方面比较精通的朋友,到时候可以在这里和大家分享一下自己对声卡话筒的一些见解,

不要让太多的朋友走歪路,希望这个帖子以后能程维大家有帮助的地方,如果有人咨询我,只要我知道的,也会和大家一起讨论的。

]]>
2 https://bbs.viyf.org/?thread-index-fid-6-tid-146.htm https://bbs.viyf.org/?thread-index-fid-6-tid-146.htm
防止 VMware 虚拟机无意义耗损硬盘 https://bbs.viyf.org/?thread-index-fid-6-tid-133.htm https://bbs.viyf.org/?thread-index-fid-6-tid-133.htm Thu, 03 Nov 2022 15:10:39 +0800 armstrong 默认安装的 VMware Workstation 会将内存的内容镜像到硬盘上,会缩短 SSD 的使用寿命。可以打开 %ProgramData%\VMware\VMware Workstation 文件夹,然后打开 config.ini,将如下内容粘贴到文本后面(注意检查重复):

[hide]

prefvmx.minVmMemPct = "100"
MemTrimRate = "0"
mainMem.useNamedFile = "FALSE"
sched.mem.pshare.enable = "FALSE"
prefvmx.useRecommendedLockedMemSize = "TRUE"
[/hide]

]]>
默认安装的 VMware Workstation 会将内存的内容镜像到硬盘上,会缩短 SSD 的使用寿命。可以打开 %ProgramData%\VMware\VMware Workstation 文件夹,然后打开 config.ini,将如下内容粘贴到文本后面(注意检查重复):

[hide]

prefvmx.minVmMemPct = "100"
MemTrimRate = "0"
mainMem.useNamedFile = "FALSE"
sched.mem.pshare.enable = "FALSE"
prefvmx.useRecommendedLockedMemSize = "TRUE"
[/hide]

]]>
7 https://bbs.viyf.org/?thread-index-fid-6-tid-133.htm https://bbs.viyf.org/?thread-index-fid-6-tid-133.htm
Linux 常用命令 https://bbs.viyf.org/?thread-index-fid-6-tid-131.htm https://bbs.viyf.org/?thread-index-fid-6-tid-131.htm Sun, 25 Sep 2022 12:16:44 +0800 armstrong 1、ls命令

就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。

常用参数搭配:

ls -a 列出目录所有文件,包含以.开始的隐藏文件
ls -A 列出除.及..的其它文件
ls -r 反序排列
ls -t 以文件修改时间排序
ls -S 以文件大小排序
ls -h 以易读大小显示
ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来

实例:

(1) 按易读方式按时间反序排序,并显示文件详细信息

ls -lhrt

(2) 按大小反序显示文件详细信息

ls -lrS

(3)列出当前目录中所有以"t"开头的目录的详细内容

ls -l t*

(4) 列出文件绝对路径(不包含隐藏文件)

ls | sed "s:^:`pwd`/:"

(5) 列出文件绝对路径(包含隐藏文件)

find $pwd -maxdepth 1 | xargs ls -ld

2、cd 命令

cd(changeDirectory) 命令语法:

cd [目录名]

说明:切换当前目录至 dirName。

实例:

(1)进入要目录

cd /

(2)进入 "home" 目录

cd ~

(3)进入上一次工作路径

cd -

(4)把上个命令的参数作为cd参数使用。

cd !$

3、pwd 命令

pwd 命令用于查看当前工作目录路径。

实例:

(1)查看当前路径

pwd

(2)查看软链接的实际路径

pwd -P

4、mkdir 命令

mkdir 命令用于创建文件夹。

可用选项:

  • -m: 对新建目录设置存取权限,也可以用 chmod 命令设置;
  • -p: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不在的目录,即一次可以建立多个目录。

实例:

(1)当前工作目录下创建名为 t的文件夹

mkdir t

(2)在 tmp 目录下创建路径为 test/t1/t 的目录,若不存在,则创建:

mkdir -p /tmp/test/t1/t

5、rm 命令

删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。

rm [选项] 文件…

实例:

(1)删除任何 .log 文件,删除前逐一询问确认:

rm -i *.log

(2)删除 test 子目录及子目录中所有档案删除,并且不用一一确认:

rm -rf test

(3)删除以 -f 开头的文件

rm -- -f*

6、rmdir 命令

从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。

注意:不能删除非空目录

实例:

(1)当 parent 子目录被删除后使它也成为空目录的话,则顺便一并删除:

rmdir -p parent/child/child11

7、mv 命令

移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。

当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。

实例:

(1)将文件 test.log 重命名为 test1.txt

mv test.log test1.txt

(2)将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中

mv llog1.txt log2.txt log3.txt /test3

(3)将文件 file1 改名为 file2,如果 file2 已经存在,则询问是否覆盖

mv -i log1.txt log2.txt

(4)移动当前文件夹下的所有文件到上一级目录

mv * ../

8、cp 命令

将源文件复制至目标文件,或将多个源文件复制至目标目录。

注意:命令行复制,如果目标文件已经存在会提示是否覆盖,而在 shell 脚本中,如果不加 -i 参数,则不会提示,而是直接覆盖!

-i 提示
-r 复制目录及目录内所有项目
-a 复制的文件与原文件时间一样

实例:

(1)复制 a.txt 到 test 目录下,保持原文件时间,如果原文件存在提示是否覆盖。

cp -ai a.txt test

(2)为 a.txt 建立一个链接(快捷方式)

cp -s a.txt link_a.txt

9、cat 命令

cat 主要有三大功能:

1.一次显示整个文件:

cat filename

2.从键盘创建一个文件:

cat > filename

只能创建新文件,不能编辑已有文件。

3.将几个文件合并为一个文件:

cat file1 file2 > file
  • -b 对非空输出行号
  • -n 输出所有行号

实例:

(1)把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里

cat -n log2012.log log2013.log

(2)把 log2012.log 和 log2013.log 的文件内容加上行号(空白行不加)之后将内容附加到 log.log 里

cat -b log2012.log log2013.log log.log

(3)使用 here doc 生成新文件

cat >log.txt <<EOF
>Hello
>World
>PWD=$(pwd)
>EOF
ls -l log.txt
cat log.txt
Hello
World
PWD=/opt/soft/test

(4)反向列示

tac log.txt
PWD=/opt/soft/test
World
Hello

10、more 命令

功能类似于 cat, more 会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。

命令参数:

+n      从笫 n 行开始显示
-n       定义屏幕大小为n行
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示 
-c       从顶部清屏,然后显示
-d       提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l        忽略Ctrl+l(换页)字符
-p       通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
-s       把连续的多个空行显示为一行
-u       把文件内容中的下画线去掉

常用操作命令:

Enter    向下 n 行,需要定义。默认为 1 行
Ctrl+F   向下滚动一屏
空格键  向下滚动一屏
Ctrl+B  返回上一屏
=       输出当前行的行号
:f     输出文件名和当前行的行号
V      调用vi编辑器
!命令   调用Shell,并执行命令
q       退出more

实例:

(1)显示文件中从第3行起的内容

more +3 text.txt

(2)在所列出文件目录详细信息,借助管道使每次显示 5 行

ls -l | more -5

按空格显示下 5 行。

11、less 命令

less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

常用命令参数:

-i  忽略搜索时的大小写
-N  显示每行的行号
-o  <文件名> 将less 输出的内容在指定文件中保存起来
-s  显示连续空行为一行
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
-x <数字> 将“tab”键显示为规定的数字空格
b  向后翻一页
d  向后翻半页
h  显示帮助界面
Q  退出less 命令
u  向前滚动半页
y  向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]:   向上翻动一页

实例:

(1)ps 查看进程信息并通过 less 分页显示

ps -aux | less -N

(2)查看多个文件

less 1.log 2.log

可以使用 n 查看下一个,使用 p 查看前一个。

12、head 命令

head 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。

常用参数:

-n<行数> 显示的行数(行数为复数表示从最后向前数)

实例:

(1)显示 1.log 文件中前 20 行

head 1.log -n 20

(2)显示 1.log 文件前 20 字节

head -c 20 log2014.log

(3)显示 t.log最后 10 行

head -n -10 t.log

13、tail 命令

用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。

常用参数:

-f 循环读取(常用于查看递增的日志文件)
-n<行数> 显示行数(从后向前)

(1)循环读取逐渐增加的文件内容

ping 127.0.0.1 > ping.log &

后台运行:可使用 jobs -l 查看,也可使用 fg 将其移到前台运行。

tail -f ping.log

(查看日志)

14、which 命令

在 linux 要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:

which     查看可执行文件的位置。
whereis 查看文件的位置。
locate  配合数据库查看文件位置。
find        实际搜寻硬盘查询文件名称。

which 是在 PATH 就是指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

常用参数:

-n  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。

实例:

(1)查看 ls 命令是否存在,执行哪个

which ls

(2)查看 which

which which

(3)查看 cd

which cd(显示不存在,因为 cd 是内建命令,而 which 查找显示是 PATH 中的命令)

查看当前 PATH 配置:

echo $PATH

或使用 env 查看所有环境变量及对应值

15、whereis 命令

whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。whereis 及 locate 都是基于系统内建的数据库进行搜索,因此效率很高,而find则是遍历硬盘查找文件。

常用参数:

-b   定位可执行文件。
-m   定位帮助文件。
-s   定位源代码文件。
-u   搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。

实例:

(1)查找 locate 程序相关文件

whereis locate

(2)查找 locate 的源码文件

whereis -s locate

(3)查找 lcoate 的帮助文件

whereis -m locate

16、locate 命令

locate 通过搜寻系统内建文档数据库达到快速找到档案,数据库由 updatedb 程序来更新,updatedb 是由 cron daemon 周期性调用的。默认情况下 locate 命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是 locate 所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb 每天会跑一次,可以由修改 crontab 来更新设定值 (etc/crontab)。

locate 与 find 命令相似,可以使用如 *、? 等进行正则匹配查找

常用参数:

-l num(要显示的行数)
-f   将特定的档案系统排除在外,如将proc排除在外
-r   使用正则运算式做为寻找条件

实例:

(1)查找和 pwd 相关的所有文件(文件名中包含 pwd)

locate pwd

(2)搜索 etc 目录下所有以 sh 开头的文件

locate /etc/sh

(3)查找 /var 目录下,以 reason 结尾的文件

locate -r '^/var.*reason$'(其中.表示一个字符,*表示任务多个;.*表示任意多个字符)

17、find 命令

用于在文件树中查找文件,并作出相应的处理。

命令格式:

find pathname -options [-print -exec -ok ...]

命令参数:

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;,注意{   }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

命令选项:

-name 按照文件名查找文件
-perm 按文件权限查找文件
-user 按文件属主查找文件
-group  按照文件所属的组来查找文件。
-type  查找某一类型的文件,诸如:
   b - 块设备文件
   d - 目录
   c - 字符设备文件
   l - 符号链接文件
   p - 管道文件
   f - 普通文件

-size n :[c] 查找文件长度为n块文件,带有c时表文件字节大小
-amin n   查找系统中最后N分钟访问的文件
-atime n  查找系统中最后n*24小时访问的文件
-cmin n   查找系统中最后N分钟被改变文件状态的文件
-ctime n  查找系统中最后n*24小时被改变文件状态的文件
-mmin n   查找系统中最后N分钟被改变文件数据的文件
-mtime n  查找系统中最后n*24小时被改变文件数据的文件
(用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。 )
-maxdepth n 最大查找目录深度
-prune 选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略
-newer 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项

实例:

(1)查找 48 小时内修改过的文件

find -atime -2

(2)在当前目录查找 以 .log 结尾的文件。 . 代表当前目录

find ./ -name '*.log'

(3)查找 /opt 目录下 权限为 777 的文件

find /opt -perm 777

(4)查找大于 1K 的文件

find -size +1000c

查找等于 1000 字符的文件

find -size 1000c 

-exec 参数后面跟的是 command 命令,它的终止是以 ; 为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{} 花括号代表前面find查找出来的文件名。

实例:

(5)在当前目录中查找更改时间在10日以前的文件并删除它们(无提醒)

find . -type f -mtime +10 -exec rm -f {} \;

(6)当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 按y键删除文件,按n键不删除

find . -name '*.log' mtime +5 -ok -exec rm {} \;

(7)当前目录下查找文件名以 passwd 开头,内容包含 "pkg" 字符的文件

find . -f -name 'passwd*' -exec grep "pkg" {} \;

(8)用 exec 选项执行 cp 命令

find . -name '*.log' -exec cp {} test3 \;

-xargs find 命令把匹配到的文件传递给 xargs 命令,而 xargs 命令每次只获取一部分文件而不是全部,不像 -exec 选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

实例:

(9)查找当前目录下每个普通文件,然后使用 xargs 来判断文件类型

find . -type f -print | xargs file

(10)查找当前目录下所有以 js 结尾的并且其中包含 'editor' 字符的普通文件

find . -type f -name "*.js" -exec grep -lF 'ueditor' {} \;
find -type f -name '*.js' | xargs grep -lF 'editor'

(11)利用 xargs 执行 mv 命令

find . -name "*.log" | xargs -i mv {} test4

(12)用 grep 命令在当前目录下的所有普通文件中搜索 hostnames 这个词,并标出所在行:

find . -name \*(转义) -type f -print | xargs grep -n 'hostnames'

(13)查找当前目录中以一个小写字母开头,最后是 4 到 9 加上 .log 结束的文件:

find . -name '[a-z]*[4-9].log' -print

(14)在 test 目录查找不在 test4 子目录查找

find test -path 'test/test4' -prune -o -print

(15)实例1:查找更改时间比文件 log2012.log新但比文件 log2017.log 旧的文件

find -newer log2012.log ! -newer log2017.log

使用 depth 选项:

depth 选项可以使 find 命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。

实例:find 命令从文件系统的根目录开始,查找一个名为 CON.FILE 的文件。 它将首先匹配所有的文件然后再进入子目录中查找

find / -name "CON.FILE" -depth -print

18、chmod 命令

用于改变 linux 系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。可使用 ls -l test.txt 查找。

以文件 log2012.log 为例:

-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log

第一列共有 10 个位置,第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是 d,表示是一个目录。从第二个字符开始到第十个 9 个字符,3 个字符一组,分别表示了 3 组用户对文件或者目录的权限。权限字符用横线代表空许可,r 代表只读,w 代表写,x 代表可执行。

常用参数:

-c 当发生改变时,报告处理信息
-R 处理指定目录以及其子目录下所有文件

权限范围:

u :目录或者文件的当前的用户
g :目录或者文件的当前的群组
o :除了目录或者文件的当前用户或群组之外的用户或者群组
a :所有的用户及群组

权限代号:

r :读权限,用数字4表示
w :写权限,用数字2表示
x :执行权限,用数字1表示
- :删除权限,用数字0表示
s :特殊权限

实例:

(1)增加文件 t.log 所有用户可执行权限

chmod a+x t.log

(2)撤销原来所有的权限,然后使拥有者具有可读权限,并输出处理信息

chmod u=r t.log -c

(3)给 file 的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限

chmod 751 t.log -c(或者:chmod u=rwx,g=rx,o=x t.log -c)

(4)将 test 目录及其子目录所有文件添加可读权限

chmod u+r,g+r,o+r -R text/ -c

19、tar 命令

用来压缩和解压文件。tar 本身不具有压缩功能,只具有打包功能,有关压缩及解压是调用其它的功能来完成。

弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件

常用参数:

-c 建立新的压缩文件
-f 指定压缩文件
-r 添加文件到已经压缩文件包中
-u 添加改了和现有的文件到压缩包中
-x 从压缩包中抽取文件
-t 显示压缩文件中的内容
-z 支持gzip压缩
-j 支持bzip2压缩
-Z 支持compress解压文件
-v 显示操作过程

有关 gzip 及 bzip2 压缩:

gzip 实例:压缩 gzip fileName .tar.gz 和.tgz  解压:gunzip filename.gz 或 gzip -d filename.gz
          对应:tar zcvf filename.tar.gz     tar zxvf filename.tar.gz

bz2实例:压缩 bzip2 -z filename .tar.bz2 解压:bunzip filename.bz2或bzip -d filename.bz2
       对应:tar jcvf filename.tar.gz         解压:tar jxvf filename.tar.bz2

实例:

(1)将文件全部打包成 tar 包

tar -cvf log.tar 1.log,2.log 或tar -cvf log.*

(2)将 /etc 下的所有文件及目录打包到指定目录,并使用 gz 压缩

tar -zcvf /tmp/etc.tar.gz /etc

(3)查看刚打包的文件内容(一定加z,因为是使用 gzip 压缩的)

tar -ztvf /tmp/etc.tar.gz

(4)要压缩打包 /home, /etc ,但不要 /home/dmtsai

tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

20、chown 命令

chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID;组可以是组名或者组 ID;文件是以空格分开的要改变权限的文件列表,支持通配符。

-c 显示更改的部分的信息
-R 处理指定目录及子目录

实例:

(1)改变拥有者和群组 并显示改变信息

chown -c mail:mail log2012.log

(2)改变文件群组

chown -c :mail t.log

(3)改变文件夹及子文件目录属主及属组为 mail

chown -cR mail: test/

21、df 命令

显示磁盘空间使用情况。获取硬盘被占用了多少空间,目前还剩下多少空间等信息,如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。默认情况下,磁盘空间将以 1KB 为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示:

-a 全部文件系统列表
-h 以方便阅读的方式显示信息
-i 显示inode信息
-k 区块为1024字节
-l 只显示本地磁盘
-T 列出文件系统类型

实例:

(1)显示磁盘使用情况

df -l

(2)以易读方式列出所有文件系统及其类型

df -haT

22、du 命令

du 命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看:

命令格式:

du [选项] [文件]

常用参数:

-a 显示目录中所有文件大小
-k 以KB为单位显示文件大小
-m 以MB为单位显示文件大小
-g 以GB为单位显示文件大小
-h 以易读方式显示文件大小
-s 仅显示总计
-c或--total  除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和

实例:

(1)以易读方式显示文件夹内及子文件夹大小

du -h scf/

(2)以易读方式显示文件夹内所有文件大小

du -ah scf/

(3)显示几个文件或目录各自占用磁盘空间的大小,还统计它们的总和

du -hc test/ scf/

(4)输出当前目录下各个子目录所使用的空间

du -hc --max-depth=1 scf/

23、ln 命令

功能是为文件在另外一个位置建立一个同步的链接,当在不同目录需要该问题时,就不需要为每一个目录创建同样的文件,通过 ln 创建的链接(link)减少磁盘占用量。

链接分类:软件链接及硬链接

软链接:

  • 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  • 2.软链接可以 跨文件系统 ,硬链接不可以
  • 3.软链接可以对一个不存在的文件名进行链接
  • 4.软链接可以对目录进行链接

硬链接:

  • 1.硬链接,以文件副本的形式存在。但不占用实际空间。
  • 2.不允许给目录创建硬链接
  • 3.硬链接只有在同一个文件系统中才能创建

需要注意:

  • 第一:ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
  • 第二:ln的链接又分软链接和硬链接两种,软链接就是ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接 ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
  • 第三:ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。

常用参数:

-b 删除,覆盖以前建立的链接
-s 软链接(符号链接)
-v 显示详细处理过程

实例:

(1)给文件创建软链接,并显示操作信息

ln -sv source.log link.log

(2)给文件创建硬链接,并显示操作信息

ln -v source.log link1.log

(3)给目录创建软链接

ln -sv /opt/soft/test/test3 /opt/soft/test/test5

24、date 命令

显示或设定系统的日期与时间。

命令参数:

-d<字符串>  显示字符串所指的日期与时间。字符串前后必须加上双引号。
-s<字符串>  根据字符串来设置日期与时间。字符串前后必须加上双引号。
-u  显示GMT。
%H 小时(00-23)
%I 小时(00-12)
%M 分钟(以00-59来表示)
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯用法来表示)
%a 星期的缩写。
%A 星期的完整名称。
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%m 月份(以01-12来表示)。
%y 年份(以00-99来表示)。
%Y 年份(以四位数来表示)。

实例:

(1)显示下一天

date +%Y%m%d --date="+1 day"  //显示下一天的日期

(2)-d参数使用

date -d "nov 22"  今年的 11 月 22 日是星期三
date -d '2 weeks' 2周后的日期
date -d 'next monday' (下周一的日期)
date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d
date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d
date -d last-month +%Y%m(上个月是几月)
date -d next-month +%Y%m(下个月是几月)

25、cal 命令

可以用户显示公历(阳历)日历如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份:

常用参数:

-3 显示前一月,当前月,后一月三个月的日历
-m 显示星期一为第一列
-j 显示在当前年第几天
-y [year]显示当前年[year]份的日历

实例:

(1)显示指定年月日期

cal 9 2012

(2)显示2013年每个月日历

cal -y 2013

(3)将星期一做为第一列,显示前中后三月

cal -3m

26、grep 命令

强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索。

grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

命令格式:

grep [option] pattern file|dir

常用参数:

-A n --after-context显示匹配字符后n行
-B n --before-context显示匹配字符前n行
-C n --context 显示匹配字符前后n行
-c --count 计算符合样式的列数
-i 忽略大小写
-l 只列出文件内容符合指定的样式的文件名称
-f 从文件中读取关键词
-n 显示匹配内容的所在文件中行数
-R 递归查找文件夹

grep 的规则表达式:

^  #锚定行的开始 如:'^grep'匹配所有以grep开头的行。 
$  #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。 
.  #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。  
*  #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.*   #一起用代表任意字符。  
[]   #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 
[^]  #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。  
\(..\)  #标记匹配字符,如'\(love\)',love被标记为1。   
\<      #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\>      #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\}  #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 
x\{m,\}  #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。  
x\{m,n\}  #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。  
\w    #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。  
\W    #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。  
\b    #单词锁定符,如: '\bgrep\b'只匹配grep。

实例:

(1)查找指定进程

ps -ef | grep svn

(2)查找指定进程个数

ps -ef | grep svn -c

(3)从文件中读取关键词

cat test1.txt | grep -f key.log

(4)从文件夹中递归查找以grep开头的行,并只列出文件

grep -lR '^grep' /tmp

(5)查找非x开关的行内容

grep '^[^x]' test.txt

(6)显示包含 ed 或者 at 字符的内容行

grep -E 'ed|at' test.txt

27、wc 命令

wc(word count)功能为统计指定的文件中字节数、字数、行数,并将统计结果输出

命令格式:

wc [option] file..

命令参数:

-c 统计字节数
-l 统计行数
-m 统计字符数
-w 统计词数,一个字被定义为由空白、跳格或换行字符分隔的字符串

实例:

(1)查找文件的 行数 单词数 字节数 文件名

wc text.txt

结果:

7     8     70     test.txt

(2)统计输出结果的行数

cat test.txt | wc -l

28、ps 命令

ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top

linux上进程有5种状态:

  • 1. 运行(正在运行或在运行队列中等待)
  • 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  • 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  • 4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  • 5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps 工具标识进程的5种状态码:

D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process

命令参数:

-A 显示所有进程
a 显示所有进程
-a 显示同一终端下所有进程
c 显示进程真实名称
e 显示环境变量
f 显示进程间的关系
r 显示当前终端运行的进程
-aux 显示所有包含其它使用的进程

实例:

(1)显示当前所有进程环境变量及进程间关系

ps -ef

(2)显示当前所有进程

ps -A

(3)与grep联用查找某进程

ps -aux | grep apache

(4)找出与 cron 与 syslog 这两个服务有关的 PID 号码

ps aux | grep '(cron|syslog)'

29、top 命令

显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等

常用参数:

-c 显示完整的进程命令
-s 保密模式
-p <进程号> 指定进程显示
-n <次数>循环显示次数

实例:

(1)

top - 14:06:23 up 70 days, 16:44,  2 users,  load average: 1.25, 1.32, 1.35
Tasks: 206 total,   1 running, 205 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.9%us,  3.4%sy,  0.0%ni, 90.4%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:  32949016k total, 14411180k used, 18537836k free,   169884k buffers
Swap: 32764556k total,        0k used, 32764556k free,  3612636k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
28894 root      22   0 1501m 405m  10m S 52.2  1.3   2534:16 java  

前五行是当前系统情况整体的统计信息区。

第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:

14:06:23 — 当前系统时间

up 70 days, 16:44 — 系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!)

2 users — 当前有2个用户登录系统

load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行,Tasks — 任务(进程),具体信息说明如下:

系统现在共有206个进程,其中处于运行中的有1个,205个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

第三行,cpu状态信息,具体属性说明如下:

5.9%us — 用户空间占用CPU的百分比。
3.4% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
90.4% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.2% si — 软中断(Software Interrupts)占用CPU的百分比

备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!

第四行,内存状态,具体信息如下:

32949016k total — 物理内存总量(32GB)
14411180k used — 使用中的内存总量(14GB)
18537836k free — 空闲内存总量(18GB)
169884k buffers — 缓存的内存量 (169M)

第五行,swap交换分区信息,具体信息说明如下:

32764556k total — 交换区总量(32GB)
0k used — 使用的交换区总量(0K)
32764556k free — 空闲交换区总量(32GB)
3612636k cached — 缓冲的交换区总量(3.6GB)

第六行,空行。

第七行以下:各进程(任务)的状态监控,项目列信息说明如下:

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

top 交互命令

h 显示top交互命令帮助信息
c 切换显示命令名称和完整命令行
m 以内存使用率排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中
o或者O 改变显示项目的顺序

30、kill 命令

发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用"-KILL" 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。

常用参数:

-l  信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a  当处理当前进程时,不限制命令名和进程号的对应关系
-p  指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s  指定发送信号
-u  指定用户

实例:

(1)先使用ps查找进程pro1,然后用kill杀掉

kill -9 $(ps -ef | grep pro1)

31、free 命令

显示系统内存使用情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。

命令参数:

-b 以Byte显示内存使用情况
-k 以kb为单位显示内存使用情况
-m 以mb为单位显示内存使用情况
-g 以gb为单位显示内存使用情况
-s<间隔秒数> 持续显示内存
-t 显示内存使用总合

实例:

(1)显示内存使用情况

free
free -k
free -m

(2)以总和的形式显示内存的使用信息

free -t

(3)周期性查询内存使用情况

free -s 10
]]>
1、ls命令

就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。

常用参数搭配:

ls -a 列出目录所有文件,包含以.开始的隐藏文件
ls -A 列出除.及..的其它文件
ls -r 反序排列
ls -t 以文件修改时间排序
ls -S 以文件大小排序
ls -h 以易读大小显示
ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来

实例:

(1) 按易读方式按时间反序排序,并显示文件详细信息

ls -lhrt

(2) 按大小反序显示文件详细信息

ls -lrS

(3)列出当前目录中所有以"t"开头的目录的详细内容

ls -l t*

(4) 列出文件绝对路径(不包含隐藏文件)

ls | sed "s:^:`pwd`/:"

(5) 列出文件绝对路径(包含隐藏文件)

find $pwd -maxdepth 1 | xargs ls -ld

2、cd 命令

cd(changeDirectory) 命令语法:

cd [目录名]

说明:切换当前目录至 dirName。

实例:

(1)进入要目录

cd /

(2)进入 "home" 目录

cd ~

(3)进入上一次工作路径

cd -

(4)把上个命令的参数作为cd参数使用。

cd !$

3、pwd 命令

pwd 命令用于查看当前工作目录路径。

实例:

(1)查看当前路径

pwd

(2)查看软链接的实际路径

pwd -P

4、mkdir 命令

mkdir 命令用于创建文件夹。

可用选项:

  • -m: 对新建目录设置存取权限,也可以用 chmod 命令设置;
  • -p: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不在的目录,即一次可以建立多个目录。

实例:

(1)当前工作目录下创建名为 t的文件夹

mkdir t

(2)在 tmp 目录下创建路径为 test/t1/t 的目录,若不存在,则创建:

mkdir -p /tmp/test/t1/t

5、rm 命令

删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。

rm [选项] 文件…

实例:

(1)删除任何 .log 文件,删除前逐一询问确认:

rm -i *.log

(2)删除 test 子目录及子目录中所有档案删除,并且不用一一确认:

rm -rf test

(3)删除以 -f 开头的文件

rm -- -f*

6、rmdir 命令

从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。

注意:不能删除非空目录

实例:

(1)当 parent 子目录被删除后使它也成为空目录的话,则顺便一并删除:

rmdir -p parent/child/child11

7、mv 命令

移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。

当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。

实例:

(1)将文件 test.log 重命名为 test1.txt

mv test.log test1.txt

(2)将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中

mv llog1.txt log2.txt log3.txt /test3

(3)将文件 file1 改名为 file2,如果 file2 已经存在,则询问是否覆盖

mv -i log1.txt log2.txt

(4)移动当前文件夹下的所有文件到上一级目录

mv * ../

8、cp 命令

将源文件复制至目标文件,或将多个源文件复制至目标目录。

注意:命令行复制,如果目标文件已经存在会提示是否覆盖,而在 shell 脚本中,如果不加 -i 参数,则不会提示,而是直接覆盖!

-i 提示
-r 复制目录及目录内所有项目
-a 复制的文件与原文件时间一样

实例:

(1)复制 a.txt 到 test 目录下,保持原文件时间,如果原文件存在提示是否覆盖。

cp -ai a.txt test

(2)为 a.txt 建立一个链接(快捷方式)

cp -s a.txt link_a.txt

9、cat 命令

cat 主要有三大功能:

1.一次显示整个文件:

cat filename

2.从键盘创建一个文件:

cat > filename

只能创建新文件,不能编辑已有文件。

3.将几个文件合并为一个文件:

cat file1 file2 > file
  • -b 对非空输出行号
  • -n 输出所有行号

实例:

(1)把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里

cat -n log2012.log log2013.log

(2)把 log2012.log 和 log2013.log 的文件内容加上行号(空白行不加)之后将内容附加到 log.log 里

cat -b log2012.log log2013.log log.log

(3)使用 here doc 生成新文件

cat >log.txt <<EOF
>Hello
>World
>PWD=$(pwd)
>EOF
ls -l log.txt
cat log.txt
Hello
World
PWD=/opt/soft/test

(4)反向列示

tac log.txt
PWD=/opt/soft/test
World
Hello

10、more 命令

功能类似于 cat, more 会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。

命令参数:

+n      从笫 n 行开始显示
-n       定义屏幕大小为n行
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示 
-c       从顶部清屏,然后显示
-d       提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l        忽略Ctrl+l(换页)字符
-p       通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
-s       把连续的多个空行显示为一行
-u       把文件内容中的下画线去掉

常用操作命令:

Enter    向下 n 行,需要定义。默认为 1 行
Ctrl+F   向下滚动一屏
空格键  向下滚动一屏
Ctrl+B  返回上一屏
=       输出当前行的行号
:f     输出文件名和当前行的行号
V      调用vi编辑器
!命令   调用Shell,并执行命令
q       退出more

实例:

(1)显示文件中从第3行起的内容

more +3 text.txt

(2)在所列出文件目录详细信息,借助管道使每次显示 5 行

ls -l | more -5

按空格显示下 5 行。

11、less 命令

less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

常用命令参数:

-i  忽略搜索时的大小写
-N  显示每行的行号
-o  <文件名> 将less 输出的内容在指定文件中保存起来
-s  显示连续空行为一行
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
-x <数字> 将“tab”键显示为规定的数字空格
b  向后翻一页
d  向后翻半页
h  显示帮助界面
Q  退出less 命令
u  向前滚动半页
y  向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]:   向上翻动一页

实例:

(1)ps 查看进程信息并通过 less 分页显示

ps -aux | less -N

(2)查看多个文件

less 1.log 2.log

可以使用 n 查看下一个,使用 p 查看前一个。

12、head 命令

head 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。

常用参数:

-n<行数> 显示的行数(行数为复数表示从最后向前数)

实例:

(1)显示 1.log 文件中前 20 行

head 1.log -n 20

(2)显示 1.log 文件前 20 字节

head -c 20 log2014.log

(3)显示 t.log最后 10 行

head -n -10 t.log

13、tail 命令

用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。

常用参数:

-f 循环读取(常用于查看递增的日志文件)
-n<行数> 显示行数(从后向前)

(1)循环读取逐渐增加的文件内容

ping 127.0.0.1 > ping.log &

后台运行:可使用 jobs -l 查看,也可使用 fg 将其移到前台运行。

tail -f ping.log

(查看日志)

14、which 命令

在 linux 要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:

which     查看可执行文件的位置。
whereis 查看文件的位置。
locate  配合数据库查看文件位置。
find        实际搜寻硬盘查询文件名称。

which 是在 PATH 就是指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

常用参数:

-n  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。

实例:

(1)查看 ls 命令是否存在,执行哪个

which ls

(2)查看 which

which which

(3)查看 cd

which cd(显示不存在,因为 cd 是内建命令,而 which 查找显示是 PATH 中的命令)

查看当前 PATH 配置:

echo $PATH

或使用 env 查看所有环境变量及对应值

15、whereis 命令

whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。whereis 及 locate 都是基于系统内建的数据库进行搜索,因此效率很高,而find则是遍历硬盘查找文件。

常用参数:

-b   定位可执行文件。
-m   定位帮助文件。
-s   定位源代码文件。
-u   搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。

实例:

(1)查找 locate 程序相关文件

whereis locate

(2)查找 locate 的源码文件

whereis -s locate

(3)查找 lcoate 的帮助文件

whereis -m locate

16、locate 命令

locate 通过搜寻系统内建文档数据库达到快速找到档案,数据库由 updatedb 程序来更新,updatedb 是由 cron daemon 周期性调用的。默认情况下 locate 命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是 locate 所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb 每天会跑一次,可以由修改 crontab 来更新设定值 (etc/crontab)。

locate 与 find 命令相似,可以使用如 *、? 等进行正则匹配查找

常用参数:

-l num(要显示的行数)
-f   将特定的档案系统排除在外,如将proc排除在外
-r   使用正则运算式做为寻找条件

实例:

(1)查找和 pwd 相关的所有文件(文件名中包含 pwd)

locate pwd

(2)搜索 etc 目录下所有以 sh 开头的文件

locate /etc/sh

(3)查找 /var 目录下,以 reason 结尾的文件

locate -r '^/var.*reason$'(其中.表示一个字符,*表示任务多个;.*表示任意多个字符)

17、find 命令

用于在文件树中查找文件,并作出相应的处理。

命令格式:

find pathname -options [-print -exec -ok ...]

命令参数:

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;,注意{   }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

命令选项:

-name 按照文件名查找文件
-perm 按文件权限查找文件
-user 按文件属主查找文件
-group  按照文件所属的组来查找文件。
-type  查找某一类型的文件,诸如:
   b - 块设备文件
   d - 目录
   c - 字符设备文件
   l - 符号链接文件
   p - 管道文件
   f - 普通文件

-size n :[c] 查找文件长度为n块文件,带有c时表文件字节大小
-amin n   查找系统中最后N分钟访问的文件
-atime n  查找系统中最后n*24小时访问的文件
-cmin n   查找系统中最后N分钟被改变文件状态的文件
-ctime n  查找系统中最后n*24小时被改变文件状态的文件
-mmin n   查找系统中最后N分钟被改变文件数据的文件
-mtime n  查找系统中最后n*24小时被改变文件数据的文件
(用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。 )
-maxdepth n 最大查找目录深度
-prune 选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略
-newer 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项

实例:

(1)查找 48 小时内修改过的文件

find -atime -2

(2)在当前目录查找 以 .log 结尾的文件。 . 代表当前目录

find ./ -name '*.log'

(3)查找 /opt 目录下 权限为 777 的文件

find /opt -perm 777

(4)查找大于 1K 的文件

find -size +1000c

查找等于 1000 字符的文件

find -size 1000c 

-exec 参数后面跟的是 command 命令,它的终止是以 ; 为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{} 花括号代表前面find查找出来的文件名。

实例:

(5)在当前目录中查找更改时间在10日以前的文件并删除它们(无提醒)

find . -type f -mtime +10 -exec rm -f {} \;

(6)当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 按y键删除文件,按n键不删除

find . -name '*.log' mtime +5 -ok -exec rm {} \;

(7)当前目录下查找文件名以 passwd 开头,内容包含 "pkg" 字符的文件

find . -f -name 'passwd*' -exec grep "pkg" {} \;

(8)用 exec 选项执行 cp 命令

find . -name '*.log' -exec cp {} test3 \;

-xargs find 命令把匹配到的文件传递给 xargs 命令,而 xargs 命令每次只获取一部分文件而不是全部,不像 -exec 选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

实例:

(9)查找当前目录下每个普通文件,然后使用 xargs 来判断文件类型

find . -type f -print | xargs file

(10)查找当前目录下所有以 js 结尾的并且其中包含 'editor' 字符的普通文件

find . -type f -name "*.js" -exec grep -lF 'ueditor' {} \;
find -type f -name '*.js' | xargs grep -lF 'editor'

(11)利用 xargs 执行 mv 命令

find . -name "*.log" | xargs -i mv {} test4

(12)用 grep 命令在当前目录下的所有普通文件中搜索 hostnames 这个词,并标出所在行:

find . -name \*(转义) -type f -print | xargs grep -n 'hostnames'

(13)查找当前目录中以一个小写字母开头,最后是 4 到 9 加上 .log 结束的文件:

find . -name '[a-z]*[4-9].log' -print

(14)在 test 目录查找不在 test4 子目录查找

find test -path 'test/test4' -prune -o -print

(15)实例1:查找更改时间比文件 log2012.log新但比文件 log2017.log 旧的文件

find -newer log2012.log ! -newer log2017.log

使用 depth 选项:

depth 选项可以使 find 命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。

实例:find 命令从文件系统的根目录开始,查找一个名为 CON.FILE 的文件。 它将首先匹配所有的文件然后再进入子目录中查找

find / -name "CON.FILE" -depth -print

18、chmod 命令

用于改变 linux 系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。可使用 ls -l test.txt 查找。

以文件 log2012.log 为例:

-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log

第一列共有 10 个位置,第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是 d,表示是一个目录。从第二个字符开始到第十个 9 个字符,3 个字符一组,分别表示了 3 组用户对文件或者目录的权限。权限字符用横线代表空许可,r 代表只读,w 代表写,x 代表可执行。

常用参数:

-c 当发生改变时,报告处理信息
-R 处理指定目录以及其子目录下所有文件

权限范围:

u :目录或者文件的当前的用户
g :目录或者文件的当前的群组
o :除了目录或者文件的当前用户或群组之外的用户或者群组
a :所有的用户及群组

权限代号:

r :读权限,用数字4表示
w :写权限,用数字2表示
x :执行权限,用数字1表示
- :删除权限,用数字0表示
s :特殊权限

实例:

(1)增加文件 t.log 所有用户可执行权限

chmod a+x t.log

(2)撤销原来所有的权限,然后使拥有者具有可读权限,并输出处理信息

chmod u=r t.log -c

(3)给 file 的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限

chmod 751 t.log -c(或者:chmod u=rwx,g=rx,o=x t.log -c)

(4)将 test 目录及其子目录所有文件添加可读权限

chmod u+r,g+r,o+r -R text/ -c

19、tar 命令

用来压缩和解压文件。tar 本身不具有压缩功能,只具有打包功能,有关压缩及解压是调用其它的功能来完成。

弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件

常用参数:

-c 建立新的压缩文件
-f 指定压缩文件
-r 添加文件到已经压缩文件包中
-u 添加改了和现有的文件到压缩包中
-x 从压缩包中抽取文件
-t 显示压缩文件中的内容
-z 支持gzip压缩
-j 支持bzip2压缩
-Z 支持compress解压文件
-v 显示操作过程

有关 gzip 及 bzip2 压缩:

gzip 实例:压缩 gzip fileName .tar.gz 和.tgz  解压:gunzip filename.gz 或 gzip -d filename.gz
          对应:tar zcvf filename.tar.gz     tar zxvf filename.tar.gz

bz2实例:压缩 bzip2 -z filename .tar.bz2 解压:bunzip filename.bz2或bzip -d filename.bz2
       对应:tar jcvf filename.tar.gz         解压:tar jxvf filename.tar.bz2

实例:

(1)将文件全部打包成 tar 包

tar -cvf log.tar 1.log,2.log 或tar -cvf log.*

(2)将 /etc 下的所有文件及目录打包到指定目录,并使用 gz 压缩

tar -zcvf /tmp/etc.tar.gz /etc

(3)查看刚打包的文件内容(一定加z,因为是使用 gzip 压缩的)

tar -ztvf /tmp/etc.tar.gz

(4)要压缩打包 /home, /etc ,但不要 /home/dmtsai

tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

20、chown 命令

chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID;组可以是组名或者组 ID;文件是以空格分开的要改变权限的文件列表,支持通配符。

-c 显示更改的部分的信息
-R 处理指定目录及子目录

实例:

(1)改变拥有者和群组 并显示改变信息

chown -c mail:mail log2012.log

(2)改变文件群组

chown -c :mail t.log

(3)改变文件夹及子文件目录属主及属组为 mail

chown -cR mail: test/

21、df 命令

显示磁盘空间使用情况。获取硬盘被占用了多少空间,目前还剩下多少空间等信息,如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。默认情况下,磁盘空间将以 1KB 为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示:

-a 全部文件系统列表
-h 以方便阅读的方式显示信息
-i 显示inode信息
-k 区块为1024字节
-l 只显示本地磁盘
-T 列出文件系统类型

实例:

(1)显示磁盘使用情况

df -l

(2)以易读方式列出所有文件系统及其类型

df -haT

22、du 命令

du 命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看:

命令格式:

du [选项] [文件]

常用参数:

-a 显示目录中所有文件大小
-k 以KB为单位显示文件大小
-m 以MB为单位显示文件大小
-g 以GB为单位显示文件大小
-h 以易读方式显示文件大小
-s 仅显示总计
-c或--total  除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和

实例:

(1)以易读方式显示文件夹内及子文件夹大小

du -h scf/

(2)以易读方式显示文件夹内所有文件大小

du -ah scf/

(3)显示几个文件或目录各自占用磁盘空间的大小,还统计它们的总和

du -hc test/ scf/

(4)输出当前目录下各个子目录所使用的空间

du -hc --max-depth=1 scf/

23、ln 命令

功能是为文件在另外一个位置建立一个同步的链接,当在不同目录需要该问题时,就不需要为每一个目录创建同样的文件,通过 ln 创建的链接(link)减少磁盘占用量。

链接分类:软件链接及硬链接

软链接:

  • 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  • 2.软链接可以 跨文件系统 ,硬链接不可以
  • 3.软链接可以对一个不存在的文件名进行链接
  • 4.软链接可以对目录进行链接

硬链接:

  • 1.硬链接,以文件副本的形式存在。但不占用实际空间。
  • 2.不允许给目录创建硬链接
  • 3.硬链接只有在同一个文件系统中才能创建

需要注意:

  • 第一:ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
  • 第二:ln的链接又分软链接和硬链接两种,软链接就是ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接 ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
  • 第三:ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。

常用参数:

-b 删除,覆盖以前建立的链接
-s 软链接(符号链接)
-v 显示详细处理过程

实例:

(1)给文件创建软链接,并显示操作信息

ln -sv source.log link.log

(2)给文件创建硬链接,并显示操作信息

ln -v source.log link1.log

(3)给目录创建软链接

ln -sv /opt/soft/test/test3 /opt/soft/test/test5

24、date 命令

显示或设定系统的日期与时间。

命令参数:

-d<字符串>  显示字符串所指的日期与时间。字符串前后必须加上双引号。
-s<字符串>  根据字符串来设置日期与时间。字符串前后必须加上双引号。
-u  显示GMT。
%H 小时(00-23)
%I 小时(00-12)
%M 分钟(以00-59来表示)
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯用法来表示)
%a 星期的缩写。
%A 星期的完整名称。
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%m 月份(以01-12来表示)。
%y 年份(以00-99来表示)。
%Y 年份(以四位数来表示)。

实例:

(1)显示下一天

date +%Y%m%d --date="+1 day"  //显示下一天的日期

(2)-d参数使用

date -d "nov 22"  今年的 11 月 22 日是星期三
date -d '2 weeks' 2周后的日期
date -d 'next monday' (下周一的日期)
date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d
date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d
date -d last-month +%Y%m(上个月是几月)
date -d next-month +%Y%m(下个月是几月)

25、cal 命令

可以用户显示公历(阳历)日历如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份:

常用参数:

-3 显示前一月,当前月,后一月三个月的日历
-m 显示星期一为第一列
-j 显示在当前年第几天
-y [year]显示当前年[year]份的日历

实例:

(1)显示指定年月日期

cal 9 2012

(2)显示2013年每个月日历

cal -y 2013

(3)将星期一做为第一列,显示前中后三月

cal -3m

26、grep 命令

强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索。

grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

命令格式:

grep [option] pattern file|dir

常用参数:

-A n --after-context显示匹配字符后n行
-B n --before-context显示匹配字符前n行
-C n --context 显示匹配字符前后n行
-c --count 计算符合样式的列数
-i 忽略大小写
-l 只列出文件内容符合指定的样式的文件名称
-f 从文件中读取关键词
-n 显示匹配内容的所在文件中行数
-R 递归查找文件夹

grep 的规则表达式:

^  #锚定行的开始 如:'^grep'匹配所有以grep开头的行。 
$  #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。 
.  #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。  
*  #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.*   #一起用代表任意字符。  
[]   #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 
[^]  #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。  
\(..\)  #标记匹配字符,如'\(love\)',love被标记为1。   
\<      #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\>      #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\}  #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 
x\{m,\}  #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。  
x\{m,n\}  #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。  
\w    #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。  
\W    #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。  
\b    #单词锁定符,如: '\bgrep\b'只匹配grep。

实例:

(1)查找指定进程

ps -ef | grep svn

(2)查找指定进程个数

ps -ef | grep svn -c

(3)从文件中读取关键词

cat test1.txt | grep -f key.log

(4)从文件夹中递归查找以grep开头的行,并只列出文件

grep -lR '^grep' /tmp

(5)查找非x开关的行内容

grep '^[^x]' test.txt

(6)显示包含 ed 或者 at 字符的内容行

grep -E 'ed|at' test.txt

27、wc 命令

wc(word count)功能为统计指定的文件中字节数、字数、行数,并将统计结果输出

命令格式:

wc [option] file..

命令参数:

-c 统计字节数
-l 统计行数
-m 统计字符数
-w 统计词数,一个字被定义为由空白、跳格或换行字符分隔的字符串

实例:

(1)查找文件的 行数 单词数 字节数 文件名

wc text.txt

结果:

7     8     70     test.txt

(2)统计输出结果的行数

cat test.txt | wc -l

28、ps 命令

ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top

linux上进程有5种状态:

  • 1. 运行(正在运行或在运行队列中等待)
  • 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  • 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  • 4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  • 5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps 工具标识进程的5种状态码:

D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process

命令参数:

-A 显示所有进程
a 显示所有进程
-a 显示同一终端下所有进程
c 显示进程真实名称
e 显示环境变量
f 显示进程间的关系
r 显示当前终端运行的进程
-aux 显示所有包含其它使用的进程

实例:

(1)显示当前所有进程环境变量及进程间关系

ps -ef

(2)显示当前所有进程

ps -A

(3)与grep联用查找某进程

ps -aux | grep apache

(4)找出与 cron 与 syslog 这两个服务有关的 PID 号码

ps aux | grep '(cron|syslog)'

29、top 命令

显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等

常用参数:

-c 显示完整的进程命令
-s 保密模式
-p <进程号> 指定进程显示
-n <次数>循环显示次数

实例:

(1)

top - 14:06:23 up 70 days, 16:44,  2 users,  load average: 1.25, 1.32, 1.35
Tasks: 206 total,   1 running, 205 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.9%us,  3.4%sy,  0.0%ni, 90.4%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:  32949016k total, 14411180k used, 18537836k free,   169884k buffers
Swap: 32764556k total,        0k used, 32764556k free,  3612636k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
28894 root      22   0 1501m 405m  10m S 52.2  1.3   2534:16 java  

前五行是当前系统情况整体的统计信息区。

第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:

14:06:23 — 当前系统时间

up 70 days, 16:44 — 系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!)

2 users — 当前有2个用户登录系统

load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行,Tasks — 任务(进程),具体信息说明如下:

系统现在共有206个进程,其中处于运行中的有1个,205个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

第三行,cpu状态信息,具体属性说明如下:

5.9%us — 用户空间占用CPU的百分比。
3.4% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
90.4% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.2% si — 软中断(Software Interrupts)占用CPU的百分比

备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!

第四行,内存状态,具体信息如下:

32949016k total — 物理内存总量(32GB)
14411180k used — 使用中的内存总量(14GB)
18537836k free — 空闲内存总量(18GB)
169884k buffers — 缓存的内存量 (169M)

第五行,swap交换分区信息,具体信息说明如下:

32764556k total — 交换区总量(32GB)
0k used — 使用的交换区总量(0K)
32764556k free — 空闲交换区总量(32GB)
3612636k cached — 缓冲的交换区总量(3.6GB)

第六行,空行。

第七行以下:各进程(任务)的状态监控,项目列信息说明如下:

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

top 交互命令

h 显示top交互命令帮助信息
c 切换显示命令名称和完整命令行
m 以内存使用率排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中
o或者O 改变显示项目的顺序

30、kill 命令

发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用"-KILL" 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。

常用参数:

-l  信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a  当处理当前进程时,不限制命令名和进程号的对应关系
-p  指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s  指定发送信号
-u  指定用户

实例:

(1)先使用ps查找进程pro1,然后用kill杀掉

kill -9 $(ps -ef | grep pro1)

31、free 命令

显示系统内存使用情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。

命令参数:

-b 以Byte显示内存使用情况
-k 以kb为单位显示内存使用情况
-m 以mb为单位显示内存使用情况
-g 以gb为单位显示内存使用情况
-s<间隔秒数> 持续显示内存
-t 显示内存使用总合

实例:

(1)显示内存使用情况

free
free -k
free -m

(2)以总和的形式显示内存的使用信息

free -t

(3)周期性查询内存使用情况

free -s 10
]]>
1 https://bbs.viyf.org/?thread-index-fid-6-tid-131.htm https://bbs.viyf.org/?thread-index-fid-6-tid-131.htm
提问的智慧(长文杀猫) https://bbs.viyf.org/?thread-index-fid-6-tid-129.htm https://bbs.viyf.org/?thread-index-fid-6-tid-129.htm Sat, 24 Sep 2022 18:27:37 +0800 kyoto 提问的智慧

PRs Welcome

How To Ask Questions The Smart Way

Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moen

本指南英文版版权为 Eric S. Raymond, Rick Moen 所有。

原文网址:http://www.catb.org/~esr/faqs/smart-questions.html

Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu

本中文指南是基于原文 3.10 版以及 2010 年由 Gasolin 所翻译版本的最新翻译;

协助指出翻译问题,发 issue,或直接发 pull request 给我。

目录

声明

许多项目在他们的使用协助/说明网页中链接了本指南,这么做很好,我们也鼓励大家都这么做。但如果你是负责管理这个项目网页的人,请在超链接附近的显著位置上注明:

本指南不提供此项目的实际支持服务!

我们已经深刻领教到少了上述声明所带来的痛苦。因为少了这点声明,我们不停地被一些白痴纠缠。这些白痴认为既然我们发布了这本指南,那么我们就有责任解决世上所有的技术问题。

如果你因寻求某些帮助而阅读本指南,并在离开时还觉得可以从本文作者这里得到直接帮助,那你就是我们之前说的那些白痴之一。别问我们问题,我们只会忽略你。我们在这本指南中想教你如何从那些真正懂得你所遇到的软件或硬件问题的人处取得协助,而 99% 的情况下那不会是我们。除非你确定本指南的作者之一刚好是你所遇到的问题领域的专家,否则请不要打扰我们,这样大家都会开心一点。

简介

黑客的世界里,当你拋出一个技术问题时,最终是否能得到有用的回答,往往取决于你所提问和追问的方式。本指南将教你如何正确的提问以获得你满意的答案。

现在开源(Open Source)软件已经相当盛行,您通常可以从其他更有经验的用户那里获得与黑客一样好的答案,这是件好事;和黑客相比,用户们往往对那些新手常遇到的问题更宽容一些。尽管如此,以我们在此推荐的方式对待这些有经验的用户通常也是从他们那里获得有用答案的最有效方式。

首先你应该明白,黑客们喜爱有挑战性的问题,或者能激发他们思维的好问题。如果我们并非如此,那我们也不会成为你想询问的对象。如果你给了我们一个值得反复咀嚼玩味的好问题,我们自会对你感激不尽。好问题是激励,是厚礼。好问题可以提高我们的理解力,而且通常会暴露我们以前从没意识到或者思考过的问题。对黑客而言,“好问题!”是诚挚的大力称赞。

尽管如此,黑客们有着蔑视或傲慢面对简单问题的坏名声,这有时让我们看起来对新手、无知者似乎较有敌意,但其实不是那样的。

我们不讳言我们对那些不愿思考、或者在发问前不做他们该做的事的人的蔑视。那些人是时间杀手 —— 他们只想索取,从不付出,消耗我们可用在更有趣的问题或更值得回答的人身上的时间。我们称这样的人为 失败者(撸瑟) (由于历史原因,我们有时把它拼作 lusers)。

我们意识到许多人只是想使用我们写的软件,他们对学习技术细节没有兴趣。对大多数人而言,电脑只是种工具,是种达到目的的手段而已。他们有自己的生活并且有更要紧的事要做。我们了解这点,也从不指望每个人都对这些让我们着迷的技术问题感兴趣。尽管如此,我们回答问题的风格是指向那些真正对此有兴趣并愿意主动参与解决问题的人,这一点不会变,也不该变。如果连这都变了,我们就是在降低做自己最擅长的事情上的效率。

我们(在很大程度上)是自愿的,从繁忙的生活中抽出时间来解答疑惑,而且时常被提问淹没。所以我们无情地滤掉一些话题,特别是拋弃那些看起来像失败者的家伙,以便更高效地利用时间来回答赢家(winner)的问题。

如果你厌恶我们的态度,高高在上,或过于傲慢,不妨也设身处地想想。我们并没有要求你向我们屈服 —— 事实上,我们大多数人非常乐意与你平等地交流,只要你付出小小努力来满足基本要求,我们就会欢迎你加入我们的文化。但让我们帮助那些不愿意帮助自己的人是没有效率的。无知没有关系,但装白痴就是不行。

所以,你不必在技术上很在行才能吸引我们的注意,但你必须表现出能引导你变得在行的特质 —— 机敏、有想法、善于观察、乐于主动参与解决问题。如果你做不到这些使你与众不同的事情,我们建议你花点钱找家商业公司签个技术支持服务合同,而不是要求黑客个人无偿地帮助你。

如果你决定向我们求助,当然你也不希望被视为失败者,更不愿成为失败者中的一员。能立刻得到快速并有效答案的最好方法,就是像赢家那样提问 —— 聪明、自信、有解决问题的思路,只是偶尔在特定的问题上需要获得一点帮助。

在提问之前

在你准备要通过电子邮件、新闻群组或者聊天室提出技术问题前,请先做到以下事情:

  1. 尝试在你准备提问的论坛的旧文章中搜索答案。
  2. 尝试上网搜索以找到答案。
  3. 尝试阅读手册以找到答案。
  4. 尝试阅读常见问题文件(FAQ)以找到答案。
  5. 尝试自己检查或试验以找到答案。
  6. 向你身边的强者朋友打听以找到答案。
  7. 如果你是程序开发者,请尝试阅读源代码以找到答案。

当你提出问题的时候,请先表明你已经做了上述的努力;这将有助于树立你并不是一个不劳而获且浪费别人的时间的提问者。如果你能一并表达在做了上述努力的过程中所学到的东西会更好,因为我们更乐于回答那些表现出能从答案中学习的人的问题。

运用某些策略,比如先用 Google 搜索你所遇到的各种错误信息(搜索 Google 论坛和网页),这样很可能直接就找到了能解决问题的文件或邮件列表线索。即使没有结果,在邮件列表或新闻组寻求帮助时加上一句 我在 Google 中搜过下列句子但没有找到什么有用的东西 也是件好事,即使它只是表明了搜索引擎不能提供哪些帮助。这么做(加上搜索过的字串)也让遇到相似问题的其他人能被搜索引擎引导到你的提问来。

别着急,不要指望几秒钟的 Google 搜索就能解决一个复杂的问题。在向专家求助之前,再阅读一下常见问题文件(FAQ)、放轻松、坐得舒服一些,再花点时间思考一下这个问题。相信我们,他们能从你的提问看出你做了多少阅读与思考,如果你是有备而来,将更有可能得到解答。不要将所有问题一股脑拋出,只因你的第一次搜索没有找到答案(或者找到太多答案)。

准备好你的问题,再将问题仔细的思考过一遍,因为草率的发问只能得到草率的回答,或者根本得不到任何答案。越是能表现出在寻求帮助前你为解决问题所付出的努力,你越有可能得到实质性的帮助。

小心别问错了问题。如果你的问题基于错误的假设,某个普通黑客(J. Random Hacker)多半会一边在心里想着蠢问题…,一边用无意义的字面解释来答复你,希望着你会从问题的回答(而非你想得到的答案)中汲取教训。

绝不要自以为够格得到答案,你没有;你并没有。毕竟你没有为这种服务支付任何报酬。你将会是自己去挣到一个答案,靠提出有内涵的、有趣的、有思维激励作用的问题 —— 一个有潜力能贡献社区经验的问题,而不仅仅是被动的从他人处索取知识。

另一方面,表明你愿意在找答案的过程中做点什么是一个非常好的开端。谁能给点提示?我的这个例子里缺了什么?以及我应该检查什么地方请把我需要的确切的过程贴出来更容易得到答复。因为你表现出只要有人能指个正确方向,你就有完成它的能力和决心。

当你提问时

慎选提问的论坛

小心选择你要提问的场合。如果你做了下述的事情,你很可能被忽略掉或者被看作失败者:

  • 在与主题不合的论坛上贴出你的问题。
  • 在探讨进阶技术问题的论坛张贴非常初级的问题;反之亦然。
  • 在太多的不同新闻群组上重复转贴同样的问题(cross-post)。
  • 向既非熟人也没有义务解决你问题的人发送私人电邮。

黑客会剔除掉那些搞错场合的问题,以保护他们沟通的渠道不被无关的东西淹没。你不会想让这种事发生在自己身上的。

因此,第一步是找到对的论坛。再说一次,Google 和其它搜索引擎还是你的朋友,用它们来找到与你遭遇到困难的软硬件问题最相关的网站。通常那儿都有常见问题(FAQ)、邮件列表及相关说明文件的链接。如果你的努力(包括阅读 FAQ)都没有结果,网站上也许还有报告 Bug(Bug-reporting)的流程或链接,如果是这样,链过去看看。

向陌生的人或论坛发送邮件最可能是风险最大的事情。举例来说,别假设一个提供丰富内容的网页的作者会想充当你的免费顾问。不要对你的问题是否会受到欢迎做太乐观的估计 —— 如果你不确定,那就向别处发送,或者压根别发。

在选择论坛、新闻群组或邮件列表时,别太相信它的名字,先看看 FAQ 或者许可书以弄清楚你的问题是否切题。发文前先翻翻已有的话题,这样可以让你感受一下那里的文化。事实上,事先在新闻组或邮件列表的历史记录中搜索与你问题相关的关键词是个极好的主意,也许这样就找到答案了。即使没有,也能帮助你归纳出更好的问题。

别像机关枪似的一次“扫射”所有的帮助渠道,这就像大喊大叫一样会使人不快。要一个一个地来。

搞清楚你的主题!最典型的错误之一是在某种致力于跨平台可移植的语言、套件或工具的论坛中提关于 Unix 或 Windows 操作系统程序界面的问题。如果你不明白为什么这是大错,最好在搞清楚这之间差异之前什么也别问。

一般来说,在仔细挑选的公共论坛中提问,会比在私有论坛中提同样的问题更容易得到有用的回答。有几个理由可以支持这点,一是看潜在的回复者有多少,二是看观众有多少。黑客较愿意回答那些能帮助到许多人的问题。

可以理解的是,老练的黑客和一些热门软件的作者正在接受过多的错发信息。就像那根最后压垮骆驼背的稻草一样,你的加入也有可能使情况走向极端 —— 已经好几次了,一些热门软件的作者由于涌入其私人邮箱的大量不堪忍受的无用邮件而不再提供支持。

Stack Overflow

搜索,然后在 Stack Exchange 问。

近年来,Stack Exchange 社区已经成为回答技术及其他问题的主要渠道,尤其是那些开放源码的项目。

因为 Google 索引是即时的,在看 Stack Exchange 之前先在 Google 搜索。有很高的几率某人已经问了一个类似的问题,而且 Stack Exchange 网站们往往会是搜索结果中最前面几个。如果你在 Google 上没有找到任何答案,你再到特定相关主题的网站去找。用标签(Tag)搜索能让你更缩小你的搜索结果。

如果你还是找不到任何对你的问题有用的内容,请把你的问题发在与它最相关的网站上。提问的时候请善用格式化工具,尤其注意为代码添加格式,并且添加相关的标签(特别是编程语言、操作系统或库/包的名称)。当有人要求你提供更多相关信息时,请编辑你的贴子来补充它们[译注:而不是发一个回帖或回答!]。如果你觉得一个答案对你有帮助,点击向上的箭头来为它投票;如果一个答案提供了问题的正确解决方案,点击投票按钮下方的对勾来将它标记为正解。

Stack Exchange 已经成长到超过一百个网站,以下是最常用的几个站:

  • Super User 是问一些通用的电脑问题,如果你的问题跟代码或是写程序无关,只是一些网络连线之类的,请到这里。
  • Stack Overflow 是问写程序有关的问题。
  • Server Fault 是问服务器和网管相关的问题。

网站和 IRC 论坛

本地的用户群组(user group),或者你所用的 Linux 发行版本也许正在宣传他们的网页论坛或 IRC 频道,并提供新手帮助(在一些非英语国家,新手论坛很可能还是邮件列表),这些都是开始提问的好地方,特别是当你觉得遇到的也许只是相对简单或者很普通的问题时。有广告赞助的 IRC 频道是公开欢迎提问的地方,通常可以即时得到回应。

事实上,如果程序出的问题只发生在特定 Linux 发行版提供的版本(这很常见),最好先去该发行版的论坛或邮件列表中提问,再到程序本身的论坛或邮件列表提问。(否则)该项目的黑客可能仅仅回复“使用我们的版本”。

在任何论坛发文以前,先确认一下有没有搜索功能。如果有,就试着搜索一下问题的几个关键词,也许这会有帮助。如果在此之前你已做过通用的网页搜索(你也该这样做),还是再搜索一下论坛,搜索引擎有可能没来得及索引此论坛的全部内容。

通过论坛或 IRC 频道来提供用户支持服务有增长的趋势,电子邮件则大多为项目开发者间的交流而保留。所以最好先在论坛或 IRC 中寻求与该项目相关的协助。

在使用 IRC 的时候,首先最好不要发布很长的问题描述,有些人称之为频道洪水。最好通过一句话的问题描述来开始聊天。

第二步,使用项目邮件列表

当某个项目提供开发者邮件列表时,要向列表而不是其中的个别成员提问,即使你确信他能最好地回答你的问题。查一查项目的文件和首页,找到项目的邮件列表并使用它。有几个很好的理由支持我们采用这种办法:

  • 任何好到需要向个别开发者提出的问题,也将对整个项目群组有益。反之,如果你认为自己的问题对整个项目群组来说太愚蠢,那这也不能成为骚扰个别开发者的理由。
  • 向列表提问可以分散开发者的负担,个别开发者(尤其是项目领导人)也许太忙以至于没法回答你的问题。
  • 大多数邮件列表都会被存档,那些被存档的内容将被搜索引擎索引。如果你向列表提问并得到解答,将来其他人可以通过网页搜索找到你的问题和答案,也就不用再次发问了。
  • 如果某些问题经常被问到,开发者可以利用此信息来改进说明文件或软件本身,以使其更清楚。如果只是私下提问,就没有人能看到最常见问题的完整场景。

如果一个项目既有“用户”也有“开发者”(或“黑客”)邮件列表或论坛,而你又不会动到那些源代码,那么就向“用户”列表或论坛提问。不要假设自己会在开发者列表中受到欢迎,那些人多半会将你的提问视为干扰他们开发的噪音。

然而,如果你确信你的问题很特别,而且在“用户”列表或论坛中几天都没有回复,可以试试前往“开发者”列表或论坛发问。建议你在张贴前最好先暗地里观察几天以了解那里的行事方式(事实上这是参与任何私有或半私有列表的好主意)

如果你找不到一个项目的邮件列表,而只能查到项目维护者的电子邮件地址,尽管向他发信。即使是在这种情况下,也别假设(项目)邮件列表不存在。在你的电子邮件中,请陈述你已经试过但没有找到合适的邮件列表,也提及你不反对将自己的邮件转发给他人(许多人认为,即使没什么秘密,私人电子邮件也不应该被公开。通过允许将你的电子邮件转发他人,你给了相应人员处置你邮件的选择)。

使用有意义且描述明确的标题

在邮件列表、新闻群组或论坛中,大约 50 字以内的标题是抓住资深专家注意力的好机会。别用喋喋不休的帮帮忙跪求(更别说救命啊!!!!这样让人反感的话,用这种标题会被条件反射式地忽略)来浪费这个机会。不要妄想用你的痛苦程度来打动我们,而应该是在这点空间中使用极简单扼要的描述方式来提出问题。

一个好标题范例是目标 —— 差异式的描述,许多技术支持组织就是这样做的。在目标部分指出是哪一个或哪一组东西有问题,在差异部分则描述与期望的行为不一致的地方。

蠢问题:救命啊!我的笔记本电脑不能正常显示了!

聪明问题:X.org 6.8.1 的鼠标指针会变形,某牌显卡 MV1005 芯片组。

更聪明问题:X.org 6.8.1 的鼠标指针,在某牌显卡 MV1005 芯片组环境下 - 会变形。

编写目标 —— 差异 式描述的过程有助于你组织对问题的细致思考。是什么被影响了? 仅仅是鼠标指针或者还有其它图形?只在 X.org 的 X 版中出现?或只是出现在 6.8.1 版中? 是针对某牌显卡芯片组?或者只是其中的 MV1005 型号? 一个黑客只需瞄一眼就能够立即明白你的环境你遇到的问题。

总而言之,请想像一下你正在一个只显示标题的存档讨论串(Thread)索引中查寻。让你的标题更好地反映问题,可使下一个搜索类似问题的人能够关注这个讨论串,而不用再次提问相同的问题。

如果你想在回复中提出问题,记得要修改内容标题,以表明你是在问一个问题, 一个看起来像 Re: 测试 或者 Re: 新 bug 的标题很难引起足够重视。另外,在不影响连贯性之下,适当引用并删减前文的内容,能给新来的读者留下线索。

对于讨论串,不要直接点击回复来开始一个全新的讨论串,这将限制你的观众。因为有些邮件阅读程序,比如 mutt ,允许用户按讨论串排序并通过折叠讨论串来隐藏消息,这样做的人永远看不到你发的消息。

仅仅改变标题还不够。mutt 和其它一些邮件阅读程序还会检查邮件标题以外的其它信息,以便为其指定讨论串。所以宁可发一个全新的邮件。

在网页论坛上,好的提问方式稍有不同,因为讨论串与特定的信息紧密结合,并且通常在讨论串外就看不到里面的内容,故通过回复提问,而非改变标题是可接受的。不是所有论坛都允许在回复中出现分离的标题,而且这样做了基本上没有人会去看。不过,通过回复提问,这本身就是暧昧的做法,因为它们只会被正在查看该标题的人读到。所以,除非你只想在该讨论串当前活跃的人群中提问,不然还是另起炉灶比较好。

使问题容易回复

请将你的回复发送到……来结束你的问题多半会使你得不到回答。如果你觉得花几秒钟在邮件客户端设置一下回复地址都麻烦,我们也觉得花几秒钟思考你的问题更麻烦。如果你的邮件程序不支持这样做,换个好点的;如果是操作系统不支持这种邮件程序,也换个好点的。

在论坛,要求通过电子邮件回复是非常无礼的,除非你认为回复的信息可能比较敏感(有人会为了某些未知的原因,只让你而不是整个论坛知道答案)。如果你只是想在有人回复讨论串时得到电子邮件提醒,可以要求网页论坛发送给你。几乎所有论坛都支持诸如追踪此讨论串有回复时发送邮件提醒等功能。

使用清晰、正确、精准且合乎语法的语句

我们从经验中发现,粗心的提问者通常也会粗心地写程序与思考(我敢打包票)。回答粗心大意者的问题很不值得,我们宁愿把时间耗在别处。

正确的拼写、标点符号和大小写是很重要的。一般来说,如果你觉得这样做很麻烦,不想在乎这些,那我们也觉得麻烦,不想在乎你的提问。花点额外的精力斟酌一下字句,用不着太僵硬与正式 —— 事实上,黑客文化很看重能准确地使用非正式、俚语和幽默的语句。但它必须很准确,而且有迹象表明你是在思考和关注问题。

正确地拼写、使用标点和大小写,不要将its混淆为it'sloose搞成lose或者将discrete弄成discreet。不要全部用大写,这会被视为无礼的大声嚷嚷(全部小写也好不到哪去,因为不易阅读。Alan Cox 也许可以这样做,但你不行)。

更白话的说,如果你写得像是个半文盲[译注:小白],那多半得不到理睬。也不要使用即时通信中的简写或火星文,如将简化为d会使你看起来像一个为了少打几个键而省字的小白。更糟的是,如果像个小孩似地鬼画符那绝对是在找死,可以肯定没人会理你(或者最多是给你一大堆指责与挖苦)。

如果在使用非母语的论坛提问,你可以犯点拼写和语法上的小错,但决不能在思考上马虎(没错,我们通常能弄清两者的分别)。同时,除非你知道回复者使用的语言,否则请使用英语书写。繁忙的黑客一般会直接删除用他们看不懂的语言写的消息。在网络上英语是通用语言,用英语书写可以将你的问题在尚未被阅读就被直接删除的可能性降到最低。

如果英文是你的外语(Second language),提示潜在回复者你有潜在的语言困难是很好的: [译注:以下附上原文以供使用]

English is not my native language; please excuse typing errors.

  • 英文不是我的母语,请原谅我的错字或语法。

If you speak $LANGUAGE, please email/PM me; I may need assistance translating my question.

  • 如果你说某语言,请向我发电邮/私信;
  • 我需要有人协助我翻译我的问题。

I am familiar with the technical terms, but some slang expressions and idioms are difficult for me.

  • 我对技术名词很熟悉,但对于俗语或是特别用法不甚了解。

I've posted my question in $LANGUAGE and English. I'll be glad to translate responses, if you only use one or the other.

  • 我把我的问题用某语言和英文写出来。
  • 如果你只用其中的一种语言回答,我会乐意将回复翻译成为你使用的语言。

使用易于读取且标准的文件格式发送问题

如果你人为地将问题搞得难以阅读,它多半会被忽略,人们更愿读易懂的问题,所以:

  • 使用纯文字而不是 HTML (关闭 HTML 并不难)。
  • 使用 MIME 附件通常是可以的,前提是真正有内容(譬如附带的源代码或 patch),而不仅仅是邮件程序生成的模板(譬如只是信件内容的拷贝)。
  • 不要发送一段文字只是一行句子但自动换行后会变成多行的邮件(这使得回复部分内容非常困难)。设想你的读者是在 80 个字符宽的终端机上阅读邮件,最好设置你的换行分割点小于 80 字。
  • 但是,对一些特殊的文件不要设置固定宽度(譬如日志文件拷贝或会话记录)。数据应该原样包含,让回复者有信心他们看到的是和你看到的一样的东西。
  • 在英语论坛中,不要使用Quoted-Printable MIME 编码发送消息。这种编码对于张贴非 ASCII 语言可能是必须的,但很多邮件程序并不支持这种编码。当它们处理换行时,那些文本中四处散布的=20符号既难看也分散注意力,甚至有可能破坏内容的语意。
  • 绝对,永远不要指望黑客们阅读使用封闭格式编写的文档,像微软公司的 Word 或 Excel 文件等。大多数黑客对此的反应就像有人将还在冒热气的猪粪倒在你家门口时你的反应一样。即便他们能够处理,他们也很厌恶这么做。
  • 如果你从使用 Windows 的电脑发送电子邮件,关闭微软愚蠢的智能引号功能 (从[选项] > [校订] > [自动校正选项],勾选掉智能引号单选框),以免在你的邮件中到处散布垃圾字符。
  • 在论坛,勿滥用表情符号HTML功能(当它们提供时)。一两个表情符号通常没有问题,但花哨的彩色文本倾向于使人认为你是个无能之辈。过滥地使用表情符号、色彩和字体会使你看来像个傻笑的小姑娘。这通常不是个好主意,除非你只是对性而不是对答案感兴趣。

如果你使用图形用户界面的邮件程序(如微软公司的 Outlook 或者其它类似的),注意它们的默认设置不一定满足这些要求。大多数这类程序有基于选单的查看源代码命令,用它来检查发送文件夹中的邮件,以确保发送的是纯文本文件同时没有一些奇怪的字符。

精确地描述问题并言之有物

  • 仔细、清楚地描述你的问题或 Bug 的症状。
  • 描述问题发生的环境(机器配置、操作系统、应用程序、以及相关的信息),提供经销商的发行版和版本号(如:Fedora Core 4Slackware 9.1等)。
  • 描述在提问前你是怎样去研究和理解这个问题的。
  • 描述在提问前为确定问题而采取的诊断步骤。
  • 描述最近做过什么可能相关的硬件或软件变更。
  • 尽可能地提供一个可以重现这个问题的可控环境的方法。

尽量去揣测一个黑客会怎样反问你,在你提问之前预先将黑客们可能提出的问题回答一遍。

以上几点中,当你报告的是你认为可能在代码中的问题时,给黑客一个可以重现你的问题的环境尤其重要。当你这么做时,你得到有效的回答的机会和速度都会大大的提升。

Simon Tatham 写过一篇名为《如何有效的报告 Bug》的出色文章。强力推荐你也读一读。

话不在多而在精

你需要提供精确有内容的信息。这并不是要求你简单的把成堆的出错代码或者资料完全转录到你的提问中。如果你有庞大而复杂的测试样例能重现程序挂掉的情境,尽量将它剪裁得越小越好。

这样做的用处至少有三点。 第一,表现出你为简化问题付出了努力,这可以使你得到回答的机会增加; 第二,简化问题使你更有可能得到有用的答案; 第三,在精炼你的 bug 报告的过程中,你很可能就自己找到了解决方法或权宜之计。

别动辄声称找到 Bug

当你在使用软件中遇到问题,除非你非常、非常的有根据,不要动辄声称找到了 Bug。提示:除非你能提供解决问题的源代码补丁,或者提供回归测试来表明前一版本中行为不正确,否则你都多半不够完全确信。这同样适用在网页和文件,如果你(声称)发现了文件的Bug,你应该能提供相应位置的修正或替代文件。

请记得,还有其他许多用户没遇到你发现的问题,否则你在阅读文件或搜索网页时就应该发现了(你在抱怨前已经做了这些,是吧?)。这也意味着很有可能是你弄错了而不是软件本身有问题。

编写软件的人总是非常辛苦地使它尽可能完美。如果你声称找到了 Bug,也就是在质疑他们的能力,即使你是对的,也有可能会冒犯到其中某部分人。当你在标题中嚷嚷着有Bug时,这尤其严重。

提问时,即使你私下非常确信已经发现一个真正的 Bug,最好写得像是做错了什么。如果真的有 Bug,你会在回复中看到这点。这样做的话,如果真有 Bug,维护者就会向你道歉,这总比你惹恼别人然后欠别人一个道歉要好一点。

低声下气不能代替你的功课

有些人明白他们不该粗鲁或傲慢的提问并要求得到答复,但他们选择另一个极端 —— 低声下气:我知道我只是个可悲的新手,一个撸瑟,但...。这既使人困扰,也没有用,尤其是伴随着与实际问题含糊不清的描述时更令人反感。

别用原始灵长类动物的把戏来浪费你我的时间。取而代之的是,尽可能清楚地描述背景条件和你的问题情况。这比低声下气更好地定位了你的位置。

有时网页论坛会设有专为新手提问的版面,如果你真的认为遇到了初学者的问题,到那去就是了,但一样别那么低声下气。

描述问题症状而非你的猜测

告诉黑客们你认为问题是怎样造成的并没什么帮助。(如果你的推断如此有效,还用向别人求助吗?),因此要确信你原原本本告诉了他们问题的症状,而不是你的解释和理论;让黑客们来推测和诊断。如果你认为陈述自己的猜测很重要,清楚地说明这只是你的猜测,并描述为什么它们不起作用。

蠢问题

我在编译内核时接连遇到 SIG11 错误, 我怀疑某条飞线搭在主板的走线上了,这种情况应该怎样检查最好?

聪明问题

我的组装电脑是 FIC-PA2007 主机板搭载 AMD K6/233 CPU(威盛 Apollo VP2 芯片组), 256MB Corsair PC133 SDRAM 内存,在编译内核时,从开机 20 分钟以后就频频产生 SIG11 错误, 但是在头 20 分钟内从没发生过相同的问题。重新启动也没有用,但是关机一晚上就又能工作 20 分钟。 所有内存都换过了,没有效果。相关部分的标准编译记录如下…

由于以上这点似乎让许多人觉得难以配合,这里有句话可以提醒你:所有的诊断专家都来自密苏里州。 美国国务院的官方座右铭则是:让我看看(出自国会议员 Willard D. Vandiver 在 1899 年时的讲话:我来自一个出产玉米,棉花,牛蒡和民主党人的国家,滔滔雄辩既不能说服我,也不会让我满意。我来自密苏里州,你必须让我看看。) 针对诊断者而言,这并不是一种怀疑,而只是一种真实而有用的需求,以便让他们看到的是与你看到的原始证据尽可能一致的东西,而不是你的猜测与归纳的结论。所以,大方的展示给我们看吧!

按发生时间先后列出问题症状

问题发生前的一系列操作,往往就是对找出问题最有帮助的线索。因此,你的说明里应该包含你的操作步骤,以及机器和软件的反应,直到问题发生。在命令行处理的情况下,提供一段操作记录(例如运行脚本工具所生成的),并引用相关的若干行(如 20 行)记录会非常有帮助。

如果挂掉的程序有诊断选项(如 -v 的详述开关),试着选择这些能在记录中增加调试信息的选项。记住,不等于。试着选取适当的调试级别以便提供有用的信息而不是让读者淹没在垃圾中。

如果你的说明很长(如超过四个段落),在开头简述问题,接下来再按时间顺序详述会有所帮助。这样黑客们在读你的记录时就知道该注意哪些内容了。

描述目标而不是过程

如果你想弄清楚如何做某事(而不是报告一个 Bug),在开头就描述你的目标,然后才陈述重现你所卡住的特定步骤。

经常寻求技术帮助的人在心中有个更高层次的目标,而他们在自以为能达到目标的特定道路上被卡住了,然后跑来问该怎么走,但没有意识到这条路本身就有问题。结果要费很大的劲才能搞定。

蠢问题

我怎样才能从某绘图程序的颜色选择器中取得十六进制的 RGB 值?

聪明问题

我正试着用替换一幅图片的色码(color table)成自己选定的色码,我现在知道的唯一方法是编辑每个色码区块(table slot), 但却无法从某绘图程序的颜色选择器取得十六进制的 RGB 值。

第二种提问法比较聪明,你可能得到像是建议采用另一个更合适的工具的回复。

别要求使用私人电邮回复

黑客们认为问题的解决过程应该公开、透明,此过程中如果更有经验的人注意到不完整或者不当之处,最初的回复才能够、也应该被纠正。同时,作为提供帮助者可以得到一些奖励,奖励就是他的能力和学识被其他同行看到。

当你要求私下回复时,这个过程和奖励都被中止。别这样做,让回复者来决定是否私下回答 —— 如果他真这么做了,通常是因为他认为问题编写太差或者太肤浅,以至于不可能使其他人产生兴趣。

这条规则存在一条有限的例外,如果你确信提问可能会引来大量雷同的回复时,那么这个神奇的提问句会是向我发电邮,我将为论坛归纳这些回复。试着将邮件列表或新闻群组从洪水般的雷同回复中解救出来是非常有礼貌的 —— 但你必须信守诺言。

清楚明确的表达你的问题以及需求

漫无边际的提问是近乎无休无止的时间黑洞。最有可能给你有用答案的人通常也正是最忙的人(他们忙是因为要亲自完成大部分工作)。这样的人对无节制的时间黑洞相当厌恶,所以他们也倾向于厌恶那些漫无边际的提问。

如果你明确表述需要回答者做什么(如提供指点、发送一段代码、检查你的补丁、或是其他等等),就最有可能得到有用的答案。因为这会定出一个时间和精力的上限,便于回答者能集中精力来帮你。这么做很棒。

要理解专家们所处的世界,请把专业技能想像为充裕的资源,而回复的时间则是稀缺的资源。你要求他们奉献的时间越少,你越有可能从真正专业而且很忙的专家那里得到解答。

所以,界定一下你的问题,使专家花在辨识你的问题和回答所需要付出的时间减到最少,这技巧对你有用答案相当有帮助 —— 但这技巧通常和简化问题有所区别。因此,问我想更好地理解 X,可否指点一下哪有好一点说明?通常比问你能解释一下 X 吗?更好。如果你的代码不能运作,通常请别人看看哪里有问题,比要求别人替你改正要明智得多。

询问有关代码的问题时

别要求他人帮你调试有问题的代码,不提示一下应该从何入手。张贴几百行的代码,然后说一声:它不能工作会让你完全被忽略。只贴几十行代码,然后说一句:在第七行以后,我期待它显示 <x>,但实际出现的是 <y>比较有可能让你得到回应。

最有效描述程序问题的方法是提供最精简的 Bug 展示测试用例(bug-demonstrating test case)。什么是最精简的测试用例?那是问题的缩影;一小个程序片段能刚好展示出程序的异常行为,而不包含其他令人分散注意力的内容。怎么制作最精简的测试用例?如果你知道哪一行或哪一段代码会造成异常的行为,复制下来并加入足够重现这个状况的代码(例如,足以让这段代码能被编译/直译/被应用程序处理)。如果你无法将问题缩减到一个特定区块,就复制一份代码并移除不影响产生问题行为的部分。总之,测试用例越小越好(查看话不在多而在精一节)。

一般而言,要得到一段相当精简的测试用例并不太容易,但永远先尝试这样做的是种好习惯。这种方式可以帮助你了解如何自行解决这个问题 —— 而且即使你的尝试不成功,黑客们也会看到你在尝试取得答案的过程中付出了努力,这可以让他们更愿意与你合作。

如果你只是想让别人帮忙审查(Review)一下代码,在信的开头就要说出来,并且一定要提到你认为哪一部分特别需要关注以及为什么。

别把自己家庭作业的问题贴上来

黑客们很擅长分辨哪些问题是家庭作业式的问题;因为我们中的大多数都曾自己解决这类问题。同样,这些问题得由来搞定,你会从中学到东西。你可以要求给点提示,但别要求得到完整的解决方案。

如果你怀疑自己碰到了一个家庭作业式的问题,但仍然无法解决,试试在用户群组,论坛或(最后一招)在项目的用户邮件列表或论坛中提问。尽管黑客们看出来,但一些有经验的用户也许仍会给你一些提示。

去掉无意义的提问句

避免用无意义的话结束提问,例如有人能帮我吗?或者这有答案吗?

首先:如果你对问题的描述不是很好,这样问更是画蛇添足。

其次:由于这样问是画蛇添足,黑客们会很厌烦你 —— 而且通常会用逻辑上正确,但毫无意义的回答来表示他们的蔑视, 例如:没错,有人能帮你或者不,没答案

一般来说,避免用 是或否对或错有或没有类型的问句,除非你想得到是或否类型的回答

即使你很急也不要在标题写紧急

这是你的问题,不是我们的。宣称紧急极有可能事与愿违:大多数黑客会直接删除无礼和自私地企图即时引起关注的问题。更严重的是,紧急这个字(或是其他企图引起关注的标题)通常会被垃圾信过滤器过滤掉 —— 你希望能看到你问题的人可能永远也看不到。

有半个例外的情况是,如果你是在一些很高调,会使黑客们兴奋的地方,也许值得这样去做。在这种情况下,如果你有时间压力,也很有礼貌地提到这点,人们也许会有兴趣回答快一点。

当然,这风险很大,因为黑客们兴奋的点多半与你的不同。譬如从 NASA 国际空间站(International Space Station)发这样的标题没有问题,但用自我感觉良好的慈善行为或政治原因发肯定不行。事实上,张贴诸如紧急:帮我救救这个毛茸茸的小海豹!肯定让你被黑客忽略或惹恼他们,即使他们认为毛茸茸的小海豹很重要。

如果你觉得这点很不可思议,最好再把这份指南剩下的内容多读几遍,直到你弄懂了再发文。

礼多人不怪,而且有时还很有帮助

彬彬有礼,多用谢谢您的关注,或谢谢你的关照。让大家都知道你对他们花时间免费提供帮助心存感激。

坦白说,这一点并没有比使用清晰、正确、精准且合乎语法和避免使用专用格式重要(也不能取而代之)。黑客们一般宁可读有点唐突但技术上鲜明的 Bug 报告,而不是那种有礼但含糊的报告。(如果这点让你不解,记住我们是按问题能教给我们什么来评价问题的价值的)

然而,如果你有一串的问题待解决,客气一点肯定会增加你得到有用回应的机会。

(我们注意到,自从本指南发布后,从资深黑客那里得到的唯一严重缺陷反馈,就是对预先道谢这一条。一些黑客觉得先谢了意味着事后就不用再感谢任何人的暗示。我们的建议是要么先说先谢了然后事后再对回复者表示感谢,或者换种方式表达感激,譬如用谢谢你的关注谢谢你的关照。)

问题解决后,加个简短的补充说明

问题解决后,向所有帮助过你的人发个说明,让他们知道问题是怎样解决的,并再一次向他们表示感谢。如果问题在新闻组或者邮件列表中引起了广泛关注,应该在那里贴一个说明比较恰当。

最理想的方式是向最初提问的话题回复此消息,并在标题中包含已修正已解决或其它同等含义的明显标记。在人来人往的邮件列表里,一个看见讨论串问题 X问题 X - 已解决的潜在回复者就明白不用再浪费时间了(除非他个人觉得问题 X的有趣),因此可以利用此时间去解决其它问题。

补充说明不必很长或是很深入;简单的一句你好,原来是网线出了问题!谢谢大家 – Bill比什么也不说要来的好。事实上,除非结论真的很有技术含量,否则简短可爱的小结比长篇大论更好。说明问题是怎样解决的,但大可不必将解决问题的过程复述一遍。

对于有深度的问题,张贴调试记录的摘要是有帮助的。描述问题的最终状态,说明是什么解决了问题,在此之后才指明可以避免的盲点。避免盲点的部分应放在正确的解决方案和其它总结材料之后,而不要将此信息搞成侦探推理小说。列出那些帮助过你的名字,会让你交到更多朋友。

除了有礼貌和有内涵以外,这种类型的补充也有助于他人在邮件列表/新闻群组/论坛中搜索到真正解决你问题的方案,让他们也从中受益。

至少,这种补充有助于让每位参与协助的人因问题的解决而从中得到满足感。如果你自己不是技术专家或者黑客,那就相信我们,这种感觉对于那些你向他们求助的大师或者专家而言,是非常重要的。问题悬而未决会让人灰心;黑客们渴望看到问题被解决。好人有好报,满足他们的渴望,你会在下次提问时尝到甜头。

思考一下怎样才能避免他人将来也遇到类似的问题,自问写一份文件或加个常见问题(FAQ)会不会有帮助。如果是的话就将它们发给维护者。

在黑客中,这种良好的后继行动实际上比传统的礼节更为重要,也是你如何透过善待他人而赢得声誉的方式,这是非常有价值的资产。

如何解读答案

 

RTFM 和 STFW:如何知道你已完全搞砸了

有一个古老而神圣的传统:如果你收到RTFM(Read The Fucking Manual)的回应,回答者认为你应该去读他妈的手册。当然,基本上他是对的,你应该去读一读。

RTFM 有一个年轻的亲戚。如果你收到STFW(Search The Fucking Web)的回应,回答者认为你应该到他妈的网上搜索。那人多半也是对的,去搜索一下吧。(更温和一点的说法是 Google 是你的朋友!)

在论坛,你也可能被要求去爬爬论坛的旧文。事实上,有人甚至可能热心地为你提供以前解决此问题的讨论串。但不要依赖这种关照,提问前应该先搜索一下旧文。

通常,用这两句之一回答你的人会给你一份包含你需要内容的手册或者一个网址,而且他们打这些字的时候也正在读着。这些答复意味着回答者认为

  • 你需要的信息非常容易获得
  • 你自己去搜索这些信息比灌给你,能让你学到更多

你不应该因此不爽;依照黑客的标准,他已经表示了对你一定程度的关注,而没有对你的要求视而不见。你应该对他祖母般的慈祥表示感谢。

如果还是搞不懂

如果你看不懂回应,别立刻要求对方解释。像你以前试着自己解决问题时那样(利用手册,FAQ,网络,身边的高手),先试着去搞懂他的回应。如果你真的需要对方解释,记得表现出你已经从中学到了点什么。

比方说,如果我回答你:看来似乎是 zentry 卡住了;你应该先清除它。,然后,这是一个很糟的后续问题回应:zentry 是什么? 的问法应该是这样:哦~~~我看过说明了但是只有 -z 和 -p 两个参数中提到了 zentries,而且还都没有清楚的解释如何清除它。你是指这两个中的哪一个吗?还是我看漏了什么?

处理无礼的回应

很多黑客圈子中看似无礼的行为并不是存心冒犯。相反,它是直截了当,一针见血式的交流风格,这种风格更注重解决问题,而不是使人感觉舒服而却模模糊糊。

如果你觉得被冒犯了,试着平静地反应。如果有人真的做了出格的事,邮件列表、新闻群组或论坛中的前辈多半会招呼他。如果这没有发生而你却发火了,那么你发火对象的言语可能在黑客社区中看起来是正常的,而将被视为有错的一方,这将伤害到你获取信息或帮助的机会。

另一方面,你偶尔真的会碰到无礼和无聊的言行。与上述相反,对真正的冒犯者狠狠地打击,用犀利的语言将其驳得体无完肤都是可以接受的。然而,在行事之前一定要非常非常的有根据。纠正无礼的言论与开始一场毫无意义的口水战仅一线之隔,黑客们自己莽撞地越线的情况并不鲜见。如果你是新手或外人,避开这种莽撞的机会并不高。如果你想得到的是信息而不是消磨时光,这时最好不要把手放在键盘上以免冒险。

(有些人断言很多黑客都有轻度的自闭症或亚斯伯格综合症,缺少用于润滑人类社会正常交往所需的神经。这既可能是真也可能是假的。如果你自己不是黑客,兴许你认为我们脑袋有问题还能帮助你应付我们的古怪行为。只管这么干好了,我们不在乎。我们喜欢我们现在这个样子,并且通常对病患标记都有站得住脚的怀疑。)

Jeff Bigler 的观察总结和这个相关也值得一读 (tact filters)。

在下一节,我们会谈到另一个问题,当行为不当时所会受到的冒犯

如何避免扮演失败者

在黑客社区的论坛中,你以本指南所描述的或类似的方式,可能会有那么几次搞砸了。而你会在公开场合中被告知你是如何搞砸的,也许攻击的言语中还会带点夹七夹八的颜色。

这种事发生以后,你能做的最糟糕的事莫过于哀嚎你的遭遇、宣称被言语攻击、要求道歉、高声尖叫、憋闷气、威胁诉诸法律、向其雇主报怨、不去关马桶盖等等。相反地,你该这么做:

熬过去,这很正常。事实上,它是有益健康且合理的。

社区的标准不会自行维持,它们是通过参与者积极而公开地执行来维持的。不要哭嚎所有的批评都应该通过私下的邮件传送,它不是这样运作的。当有人评论你的一个说法有误或者提出不同看法时,坚持声称受到个人攻击也毫无益处,这些都是失败者的态度。

也有其它的黑客论坛,受过高礼节要求的误导,禁止参与者张贴任何对别人帖子挑毛病的消息,并声称如果你不想帮助用户就闭嘴。 结果造成有想法的参与者纷纷离开,这么做只会使它们沦为毫无意义的唠叨与无用的技术论坛。

夸张的讲法是:你要的是“友善”(以上述方式)还是有用?两个里面挑一个。

记着:当黑客说你搞砸了,并且(无论多么刺耳)告诉你别再这样做时,他正在为关心他的社区而行动。对他而言,不理你并将你从他的生活中滤掉更简单。如果你无法做到感谢,至少要表现得有点尊严,别大声哀嚎,也别因为自己是个有戏剧性超级敏感的灵魂和自以为有资格的新来者,就指望别人像对待脆弱的洋娃娃那样对你。

有时候,即使你没有搞砸(或者只是在他的想像中你搞砸了),有些人也会无缘无故地攻击你本人。在这种情况下,抱怨倒是真的会把问题搞砸。

这些来找麻烦的人要么是毫无办法但自以为是专家的不中用家伙,要么就是测试你是否真会搞砸的心理专家。其它读者要么不理睬,要么用自己的方式对付他们。这些来找麻烦的人在给他们自己找麻烦,这点你不用操心。

也别让自己卷入口水战,最好不要理睬大多数的口水战 —— 当然,这是在你检验它们只是口水战,并且未指出你有搞砸的地方,同时也没有巧妙地将问题真正的答案藏于其后(这也是有可能的)。

不该问的问题

以下是几个经典蠢问题,以及黑客没回答时心中所想的:

问题:我能在哪找到 X 程序或 X 资源?

问题:我怎样用 X 做 Y?

问题:如何设定我的 shell 提示?

问题:我可以用 Bass-o-matic 文件转换工具将 AcmeCorp 文件转换为 TeX 格式吗?

问题:我的程序/设定/SQL 语句没有用

问题:我的 Windows 电脑有问题,你能帮我吗?

问题:我的程序不会动了,我认为系统工具 X 有问题

问题:我在安装 Linux(或者 X )时有问题,你能帮我吗?

问题:我怎么才能破解 root 帐号/窃取 OP 特权/读别人的邮件呢?


 

问题:我能在哪找到 X 程序或 X 资源?

回答:就在我找到它的地方啊,白痴 —— 搜索引擎的那一头。天哪!难道还有人不会用 Google 吗?

 

问题:我怎样用 X 做 Y?

回答:如果你想解决的是 Y ,提问时别给出可能并不恰当的方法。这种问题说明提问者不但对 X 完全无知,也对 Y 要解决的问题糊涂,还被特定形势禁锢了思维。最好忽略这种人,等他们把问题搞清楚了再说。

 

问题:如何设定我的 shell 提示??

回答:如果你有足够的智慧提这个问题,你也该有足够的智慧去 RTFM,然后自己去找出来。

 

问题:我可以用 Bass-o-matic 文件转换工具将 AcmeCorp 文件转换为 TeX 格式吗?

回答:试试看就知道了。如果你试过,你就知道了答案,就不用浪费我的时间了。

 

问题:我的{程序/设定/SQL 语句}没有用

回答:这不算是问题吧,我对要我问你二十个问题才找得出你真正问题的问题没兴趣 —— 我有更有意思的事要做呢。在看到这类问题的时候,我的反应通常不外如下三种

  • 你还有什么要补充的吗?
  • 真糟糕,希望你能搞定。
  • 这关我屁事?

 

问题:我的 Windows 电脑有问题,你能帮我吗?

回答:能啊,扔掉微软的垃圾,换个像 Linux 或 BSD 的开源操作系统吧。

注意:如果程序有官方版 Windows 或者与 Windows 有互动(如 Samba),你可以问与 Windows 相关的问题,只是别对问题是由 Windows 操作系统而不是程序本身造成的回复感到惊讶, 因为 Windows 一般来说实在太烂,这种说法通常都是对的。

 

问题:我的程序不会动了,我认为系统工具 X 有问题

回答:你完全有可能是第一个注意到被成千上万用户反复使用的系统调用与函数库文件有明显缺陷的人,更有可能的是你完全没有根据。不同凡响的说法需要不同凡响的证据,当你这样声称时,你必须有清楚而详尽的缺陷说明文件作后盾。

 

问题:我在安装 Linux(或者 X )时有问题,你能帮我吗?

回答:不能,我只有亲自在你的电脑上动手才能找到毛病。还是去找你当地的 Linux 使用群组者寻求实际的指导吧(你能在这儿找到用户群组的清单)。

注意:如果安装问题与某 Linux 的发行版有关,在它的邮件列表、论坛或本地用户群组中提问也许是恰当的。此时,应描述问题的准确细节。在此之前,先用 Linux 和所有被怀疑的硬件作关键词仔细搜索。

 

问题:我怎么才能破解 root 帐号/窃取 OP 特权/读别人的邮件呢?

回答:想要这样做,说明了你是个卑鄙小人;想找个黑客帮你,说明你是个白痴!

好问题与蠢问题

最后,我将透过举一些例子,来说明怎样聪明的提问;同一个问题的两种问法被放在一起,一种是愚蠢的,另一种才是明智的。

蠢问题

我可以在哪儿找到关于 Foonly Flurbamatic 的资料?

这种问法无非想得到 STFW 这样的回答。

聪明问题

我用 Google 搜索过 "Foonly Flurbamatic 2600",但是没找到有用的结果。谁知道上哪儿去找对这种设备编程的资料?

这个问题已经 STFW 过了,看起来他真的遇到了麻烦。

蠢问题

我从 foo 项目找来的源码没法编译。它怎么这么烂?

他觉得都是别人的错,这个傲慢自大的提问者。

聪明问题

foo 项目代码在 Nulix 6.2 版下无法编译通过。我读过了 FAQ,但里面没有提到跟 Nulix 有关的问题。这是我编译过程的记录,我有什么做的不对的地方吗?

提问者已经指明了环境,也读过了 FAQ,还列出了错误,并且他没有把问题的责任推到别人头上,他的问题值得被关注。

蠢问题

我的主机板有问题了,谁来帮我?

某黑客对这类问题的回答通常是:好的,还要帮你拍拍背和换尿布吗?,然后按下删除键。

聪明问题

我在 S2464 主机板上试过了 X 、 Y 和 Z ,但没什么作用,我又试了 A 、 B 和 C 。请注意当我尝试 C 时的奇怪现象。显然 florbish 正在 grommicking,但结果出人意料。通常在 Athlon MP 主机板上引起 grommicking 的原因是什么?有谁知道接下来我该做些什么测试才能找出问题?

这个家伙,从另一个角度来看,值得去回答他。他表现出了解决问题的能力,而不是坐等天上掉答案。

在最后一个问题中,注意告诉我答案给我启示,指出我还应该做什么诊断工作之间微妙而又重要的区别。

事实上,后一个问题源自于 2001 年 8 月在 Linux 内核邮件列表(lkml)上的一个真实的提问。我(Eric)就是那个提出问题的人。我在 Tyan S2464 主板上观察到了这种无法解释的锁定现象,列表成员们提供了解决这一问题的重要信息。

通过我的提问方法,我给了别人可以咀嚼玩味的东西;我设法让人们很容易参与并且被吸引进来。我显示了自己具备和他们同等的能力,并邀请他们与我共同探讨。通过告诉他们我所走过的弯路,以避免他们再浪费时间,我也表明了对他们宝贵时间的尊重。

事后,当我向每个人表示感谢,并且赞赏这次良好的讨论经历的时候,一个 Linux 内核邮件列表的成员表示,他觉得我的问题得到解决并非由于我是这个列表中的人,而是因为我用了正确的方式来提问。

黑客从某种角度来说是拥有丰富知识但缺乏人情味的家伙;我相信他是对的,如果我个乞讨者那样提问,不论我是谁,一定会惹恼某些人或者被他们忽视。他建议我记下这件事,这直接导致了本指南的出现。

如果得不到回答

如果仍得不到回答,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。没有回应不代表你被忽视,虽然不可否认这种差别很难区分。

总的来说,简单的重复张贴问题是个很糟的点子。这将被视为无意义的喧闹。有点耐心,知道你问题答案的人可能生活在不同的时区,可能正在睡觉,也有可能你的问题一开始就没有组织好。

你可以通过其他渠道获得帮助,这些渠道通常更适合初学者的需要。

有许多网上的以及本地的用户群组,由热情的软件爱好者(即使他们可能从没亲自写过任何软件)组成。通常人们组建这样的团体来互相帮助并帮助新手。

另外,你可以向很多商业公司寻求帮助,不论公司大还是小。别为要付费才能获得帮助而感到沮丧!毕竟,假使你的汽车发动机汽缸密封圈爆掉了 —— 完全可能如此 —— 你还得把它送到修车铺,并且为维修付费。就算软件没花费你一分钱,你也不能强求技术支持总是免费的。

对像是 Linux 这种大众化的软件,每个开发者至少会对应到上万名用户。根本不可能由一个人来处理来自上万名用户的求助电话。要知道,即使你要为这些协助付费,和你所购买的同类软件相比,你所付出的也是微不足道的(通常封闭源代码软件的技术支持费用比开源软件的要高得多,且内容也没那么丰富)。

如何更好地回答问题

态度和善一点。 问题带来的压力常使人显得无礼或愚蠢,其实并不是这样。

对初犯者私下回复。 对那些坦诚犯错之人没有必要当众羞辱,一个真正的新手也许连怎么搜索或在哪找常见问题都不知道。

如果你不确定,一定要说出来! 一个听起来权威的错误回复比没有还要糟,别因为听起来像个专家很好玩,就给别人乱指路。要谦虚和诚实,给提问者与同行都树个好榜样。

如果帮不了忙,也别妨碍他。 不要在实际步骤上开玩笑,那样也许会毁了提问者的设置 —— 有些可怜的呆瓜会把它当成真的指令。

试探性的反问以引出更多的细节。 如果你做得好,提问者可以学到点东西 —— 你也可以。试试将蠢问题转变成好问题,别忘了我们都曾是新手。

尽管对那些懒虫抱怨一声 RTFM 是正当的,但能给出文档的链接(即使只是建议个 Google 搜索关键词)会更好。

如果你决定回答,就请给出好的答案。 当别人正在用错误的工具或方法时别建议笨拙的权宜之计(workaround),应推荐更好的工具,重新界定问题。

正面地回答问题! 如果这个提问者已经很深入的研究而且也表明已经试过 X 、 Y 、 Z 、 A 、 B 、 C 但没得到结果,回答 试试看 A 或是 B 或者 试试 X 、 Y 、 Z 、 A 、 B 、 C 并附上一个链接一点用都没有。

帮助你的社区从问题中学习。 当回复一个好问题时,问问自己如何修改相关文件或常见问题文件以免再次解答同样的问题?,接着再向文件维护者发一份补丁。

如果你在研究一番后才作出了回答,展现你的技巧而不是直接端出结果。毕竟授人以鱼不如授人以渔

相关资源

如果你需要个人电脑、Unix 系统和网络如何运作的基础知识,参阅 Unix 系统和网络基本原理

当你发布软件或补丁时,试着按软件发布实践操作。

鸣谢

Evelyn Mitchel 贡献了一些愚蠢问题例子并启发了编写如何更好地回答问题这一节, Mikhail Ramendik 贡献了一些特别有价值的建议和改进。

]]>
提问的智慧

PRs Welcome

How To Ask Questions The Smart Way

Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moen

本指南英文版版权为 Eric S. Raymond, Rick Moen 所有。

原文网址:http://www.catb.org/~esr/faqs/smart-questions.html

Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu

本中文指南是基于原文 3.10 版以及 2010 年由 Gasolin 所翻译版本的最新翻译;

协助指出翻译问题,发 issue,或直接发 pull request 给我。

目录

声明

许多项目在他们的使用协助/说明网页中链接了本指南,这么做很好,我们也鼓励大家都这么做。但如果你是负责管理这个项目网页的人,请在超链接附近的显著位置上注明:

本指南不提供此项目的实际支持服务!

我们已经深刻领教到少了上述声明所带来的痛苦。因为少了这点声明,我们不停地被一些白痴纠缠。这些白痴认为既然我们发布了这本指南,那么我们就有责任解决世上所有的技术问题。

如果你因寻求某些帮助而阅读本指南,并在离开时还觉得可以从本文作者这里得到直接帮助,那你就是我们之前说的那些白痴之一。别问我们问题,我们只会忽略你。我们在这本指南中想教你如何从那些真正懂得你所遇到的软件或硬件问题的人处取得协助,而 99% 的情况下那不会是我们。除非你确定本指南的作者之一刚好是你所遇到的问题领域的专家,否则请不要打扰我们,这样大家都会开心一点。

简介

黑客的世界里,当你拋出一个技术问题时,最终是否能得到有用的回答,往往取决于你所提问和追问的方式。本指南将教你如何正确的提问以获得你满意的答案。

现在开源(Open Source)软件已经相当盛行,您通常可以从其他更有经验的用户那里获得与黑客一样好的答案,这是件好事;和黑客相比,用户们往往对那些新手常遇到的问题更宽容一些。尽管如此,以我们在此推荐的方式对待这些有经验的用户通常也是从他们那里获得有用答案的最有效方式。

首先你应该明白,黑客们喜爱有挑战性的问题,或者能激发他们思维的好问题。如果我们并非如此,那我们也不会成为你想询问的对象。如果你给了我们一个值得反复咀嚼玩味的好问题,我们自会对你感激不尽。好问题是激励,是厚礼。好问题可以提高我们的理解力,而且通常会暴露我们以前从没意识到或者思考过的问题。对黑客而言,“好问题!”是诚挚的大力称赞。

尽管如此,黑客们有着蔑视或傲慢面对简单问题的坏名声,这有时让我们看起来对新手、无知者似乎较有敌意,但其实不是那样的。

我们不讳言我们对那些不愿思考、或者在发问前不做他们该做的事的人的蔑视。那些人是时间杀手 —— 他们只想索取,从不付出,消耗我们可用在更有趣的问题或更值得回答的人身上的时间。我们称这样的人为 失败者(撸瑟) (由于历史原因,我们有时把它拼作 lusers)。

我们意识到许多人只是想使用我们写的软件,他们对学习技术细节没有兴趣。对大多数人而言,电脑只是种工具,是种达到目的的手段而已。他们有自己的生活并且有更要紧的事要做。我们了解这点,也从不指望每个人都对这些让我们着迷的技术问题感兴趣。尽管如此,我们回答问题的风格是指向那些真正对此有兴趣并愿意主动参与解决问题的人,这一点不会变,也不该变。如果连这都变了,我们就是在降低做自己最擅长的事情上的效率。

我们(在很大程度上)是自愿的,从繁忙的生活中抽出时间来解答疑惑,而且时常被提问淹没。所以我们无情地滤掉一些话题,特别是拋弃那些看起来像失败者的家伙,以便更高效地利用时间来回答赢家(winner)的问题。

如果你厌恶我们的态度,高高在上,或过于傲慢,不妨也设身处地想想。我们并没有要求你向我们屈服 —— 事实上,我们大多数人非常乐意与你平等地交流,只要你付出小小努力来满足基本要求,我们就会欢迎你加入我们的文化。但让我们帮助那些不愿意帮助自己的人是没有效率的。无知没有关系,但装白痴就是不行。

所以,你不必在技术上很在行才能吸引我们的注意,但你必须表现出能引导你变得在行的特质 —— 机敏、有想法、善于观察、乐于主动参与解决问题。如果你做不到这些使你与众不同的事情,我们建议你花点钱找家商业公司签个技术支持服务合同,而不是要求黑客个人无偿地帮助你。

如果你决定向我们求助,当然你也不希望被视为失败者,更不愿成为失败者中的一员。能立刻得到快速并有效答案的最好方法,就是像赢家那样提问 —— 聪明、自信、有解决问题的思路,只是偶尔在特定的问题上需要获得一点帮助。

在提问之前

在你准备要通过电子邮件、新闻群组或者聊天室提出技术问题前,请先做到以下事情:

  1. 尝试在你准备提问的论坛的旧文章中搜索答案。
  2. 尝试上网搜索以找到答案。
  3. 尝试阅读手册以找到答案。
  4. 尝试阅读常见问题文件(FAQ)以找到答案。
  5. 尝试自己检查或试验以找到答案。
  6. 向你身边的强者朋友打听以找到答案。
  7. 如果你是程序开发者,请尝试阅读源代码以找到答案。

当你提出问题的时候,请先表明你已经做了上述的努力;这将有助于树立你并不是一个不劳而获且浪费别人的时间的提问者。如果你能一并表达在做了上述努力的过程中所学到的东西会更好,因为我们更乐于回答那些表现出能从答案中学习的人的问题。

运用某些策略,比如先用 Google 搜索你所遇到的各种错误信息(搜索 Google 论坛和网页),这样很可能直接就找到了能解决问题的文件或邮件列表线索。即使没有结果,在邮件列表或新闻组寻求帮助时加上一句 我在 Google 中搜过下列句子但没有找到什么有用的东西 也是件好事,即使它只是表明了搜索引擎不能提供哪些帮助。这么做(加上搜索过的字串)也让遇到相似问题的其他人能被搜索引擎引导到你的提问来。

别着急,不要指望几秒钟的 Google 搜索就能解决一个复杂的问题。在向专家求助之前,再阅读一下常见问题文件(FAQ)、放轻松、坐得舒服一些,再花点时间思考一下这个问题。相信我们,他们能从你的提问看出你做了多少阅读与思考,如果你是有备而来,将更有可能得到解答。不要将所有问题一股脑拋出,只因你的第一次搜索没有找到答案(或者找到太多答案)。

准备好你的问题,再将问题仔细的思考过一遍,因为草率的发问只能得到草率的回答,或者根本得不到任何答案。越是能表现出在寻求帮助前你为解决问题所付出的努力,你越有可能得到实质性的帮助。

小心别问错了问题。如果你的问题基于错误的假设,某个普通黑客(J. Random Hacker)多半会一边在心里想着蠢问题…,一边用无意义的字面解释来答复你,希望着你会从问题的回答(而非你想得到的答案)中汲取教训。

绝不要自以为够格得到答案,你没有;你并没有。毕竟你没有为这种服务支付任何报酬。你将会是自己去挣到一个答案,靠提出有内涵的、有趣的、有思维激励作用的问题 —— 一个有潜力能贡献社区经验的问题,而不仅仅是被动的从他人处索取知识。

另一方面,表明你愿意在找答案的过程中做点什么是一个非常好的开端。谁能给点提示?我的这个例子里缺了什么?以及我应该检查什么地方请把我需要的确切的过程贴出来更容易得到答复。因为你表现出只要有人能指个正确方向,你就有完成它的能力和决心。

当你提问时

慎选提问的论坛

小心选择你要提问的场合。如果你做了下述的事情,你很可能被忽略掉或者被看作失败者:

  • 在与主题不合的论坛上贴出你的问题。
  • 在探讨进阶技术问题的论坛张贴非常初级的问题;反之亦然。
  • 在太多的不同新闻群组上重复转贴同样的问题(cross-post)。
  • 向既非熟人也没有义务解决你问题的人发送私人电邮。

黑客会剔除掉那些搞错场合的问题,以保护他们沟通的渠道不被无关的东西淹没。你不会想让这种事发生在自己身上的。

因此,第一步是找到对的论坛。再说一次,Google 和其它搜索引擎还是你的朋友,用它们来找到与你遭遇到困难的软硬件问题最相关的网站。通常那儿都有常见问题(FAQ)、邮件列表及相关说明文件的链接。如果你的努力(包括阅读 FAQ)都没有结果,网站上也许还有报告 Bug(Bug-reporting)的流程或链接,如果是这样,链过去看看。

向陌生的人或论坛发送邮件最可能是风险最大的事情。举例来说,别假设一个提供丰富内容的网页的作者会想充当你的免费顾问。不要对你的问题是否会受到欢迎做太乐观的估计 —— 如果你不确定,那就向别处发送,或者压根别发。

在选择论坛、新闻群组或邮件列表时,别太相信它的名字,先看看 FAQ 或者许可书以弄清楚你的问题是否切题。发文前先翻翻已有的话题,这样可以让你感受一下那里的文化。事实上,事先在新闻组或邮件列表的历史记录中搜索与你问题相关的关键词是个极好的主意,也许这样就找到答案了。即使没有,也能帮助你归纳出更好的问题。

别像机关枪似的一次“扫射”所有的帮助渠道,这就像大喊大叫一样会使人不快。要一个一个地来。

搞清楚你的主题!最典型的错误之一是在某种致力于跨平台可移植的语言、套件或工具的论坛中提关于 Unix 或 Windows 操作系统程序界面的问题。如果你不明白为什么这是大错,最好在搞清楚这之间差异之前什么也别问。

一般来说,在仔细挑选的公共论坛中提问,会比在私有论坛中提同样的问题更容易得到有用的回答。有几个理由可以支持这点,一是看潜在的回复者有多少,二是看观众有多少。黑客较愿意回答那些能帮助到许多人的问题。

可以理解的是,老练的黑客和一些热门软件的作者正在接受过多的错发信息。就像那根最后压垮骆驼背的稻草一样,你的加入也有可能使情况走向极端 —— 已经好几次了,一些热门软件的作者由于涌入其私人邮箱的大量不堪忍受的无用邮件而不再提供支持。

Stack Overflow

搜索,然后在 Stack Exchange 问。

近年来,Stack Exchange 社区已经成为回答技术及其他问题的主要渠道,尤其是那些开放源码的项目。

因为 Google 索引是即时的,在看 Stack Exchange 之前先在 Google 搜索。有很高的几率某人已经问了一个类似的问题,而且 Stack Exchange 网站们往往会是搜索结果中最前面几个。如果你在 Google 上没有找到任何答案,你再到特定相关主题的网站去找。用标签(Tag)搜索能让你更缩小你的搜索结果。

如果你还是找不到任何对你的问题有用的内容,请把你的问题发在与它最相关的网站上。提问的时候请善用格式化工具,尤其注意为代码添加格式,并且添加相关的标签(特别是编程语言、操作系统或库/包的名称)。当有人要求你提供更多相关信息时,请编辑你的贴子来补充它们[译注:而不是发一个回帖或回答!]。如果你觉得一个答案对你有帮助,点击向上的箭头来为它投票;如果一个答案提供了问题的正确解决方案,点击投票按钮下方的对勾来将它标记为正解。

Stack Exchange 已经成长到超过一百个网站,以下是最常用的几个站:

  • Super User 是问一些通用的电脑问题,如果你的问题跟代码或是写程序无关,只是一些网络连线之类的,请到这里。
  • Stack Overflow 是问写程序有关的问题。
  • Server Fault 是问服务器和网管相关的问题。

网站和 IRC 论坛

本地的用户群组(user group),或者你所用的 Linux 发行版本也许正在宣传他们的网页论坛或 IRC 频道,并提供新手帮助(在一些非英语国家,新手论坛很可能还是邮件列表),这些都是开始提问的好地方,特别是当你觉得遇到的也许只是相对简单或者很普通的问题时。有广告赞助的 IRC 频道是公开欢迎提问的地方,通常可以即时得到回应。

事实上,如果程序出的问题只发生在特定 Linux 发行版提供的版本(这很常见),最好先去该发行版的论坛或邮件列表中提问,再到程序本身的论坛或邮件列表提问。(否则)该项目的黑客可能仅仅回复“使用我们的版本”。

在任何论坛发文以前,先确认一下有没有搜索功能。如果有,就试着搜索一下问题的几个关键词,也许这会有帮助。如果在此之前你已做过通用的网页搜索(你也该这样做),还是再搜索一下论坛,搜索引擎有可能没来得及索引此论坛的全部内容。

通过论坛或 IRC 频道来提供用户支持服务有增长的趋势,电子邮件则大多为项目开发者间的交流而保留。所以最好先在论坛或 IRC 中寻求与该项目相关的协助。

在使用 IRC 的时候,首先最好不要发布很长的问题描述,有些人称之为频道洪水。最好通过一句话的问题描述来开始聊天。

第二步,使用项目邮件列表

当某个项目提供开发者邮件列表时,要向列表而不是其中的个别成员提问,即使你确信他能最好地回答你的问题。查一查项目的文件和首页,找到项目的邮件列表并使用它。有几个很好的理由支持我们采用这种办法:

  • 任何好到需要向个别开发者提出的问题,也将对整个项目群组有益。反之,如果你认为自己的问题对整个项目群组来说太愚蠢,那这也不能成为骚扰个别开发者的理由。
  • 向列表提问可以分散开发者的负担,个别开发者(尤其是项目领导人)也许太忙以至于没法回答你的问题。
  • 大多数邮件列表都会被存档,那些被存档的内容将被搜索引擎索引。如果你向列表提问并得到解答,将来其他人可以通过网页搜索找到你的问题和答案,也就不用再次发问了。
  • 如果某些问题经常被问到,开发者可以利用此信息来改进说明文件或软件本身,以使其更清楚。如果只是私下提问,就没有人能看到最常见问题的完整场景。

如果一个项目既有“用户”也有“开发者”(或“黑客”)邮件列表或论坛,而你又不会动到那些源代码,那么就向“用户”列表或论坛提问。不要假设自己会在开发者列表中受到欢迎,那些人多半会将你的提问视为干扰他们开发的噪音。

然而,如果你确信你的问题很特别,而且在“用户”列表或论坛中几天都没有回复,可以试试前往“开发者”列表或论坛发问。建议你在张贴前最好先暗地里观察几天以了解那里的行事方式(事实上这是参与任何私有或半私有列表的好主意)

如果你找不到一个项目的邮件列表,而只能查到项目维护者的电子邮件地址,尽管向他发信。即使是在这种情况下,也别假设(项目)邮件列表不存在。在你的电子邮件中,请陈述你已经试过但没有找到合适的邮件列表,也提及你不反对将自己的邮件转发给他人(许多人认为,即使没什么秘密,私人电子邮件也不应该被公开。通过允许将你的电子邮件转发他人,你给了相应人员处置你邮件的选择)。

使用有意义且描述明确的标题

在邮件列表、新闻群组或论坛中,大约 50 字以内的标题是抓住资深专家注意力的好机会。别用喋喋不休的帮帮忙跪求(更别说救命啊!!!!这样让人反感的话,用这种标题会被条件反射式地忽略)来浪费这个机会。不要妄想用你的痛苦程度来打动我们,而应该是在这点空间中使用极简单扼要的描述方式来提出问题。

一个好标题范例是目标 —— 差异式的描述,许多技术支持组织就是这样做的。在目标部分指出是哪一个或哪一组东西有问题,在差异部分则描述与期望的行为不一致的地方。

蠢问题:救命啊!我的笔记本电脑不能正常显示了!

聪明问题:X.org 6.8.1 的鼠标指针会变形,某牌显卡 MV1005 芯片组。

更聪明问题:X.org 6.8.1 的鼠标指针,在某牌显卡 MV1005 芯片组环境下 - 会变形。

编写目标 —— 差异 式描述的过程有助于你组织对问题的细致思考。是什么被影响了? 仅仅是鼠标指针或者还有其它图形?只在 X.org 的 X 版中出现?或只是出现在 6.8.1 版中? 是针对某牌显卡芯片组?或者只是其中的 MV1005 型号? 一个黑客只需瞄一眼就能够立即明白你的环境你遇到的问题。

总而言之,请想像一下你正在一个只显示标题的存档讨论串(Thread)索引中查寻。让你的标题更好地反映问题,可使下一个搜索类似问题的人能够关注这个讨论串,而不用再次提问相同的问题。

如果你想在回复中提出问题,记得要修改内容标题,以表明你是在问一个问题, 一个看起来像 Re: 测试 或者 Re: 新 bug 的标题很难引起足够重视。另外,在不影响连贯性之下,适当引用并删减前文的内容,能给新来的读者留下线索。

对于讨论串,不要直接点击回复来开始一个全新的讨论串,这将限制你的观众。因为有些邮件阅读程序,比如 mutt ,允许用户按讨论串排序并通过折叠讨论串来隐藏消息,这样做的人永远看不到你发的消息。

仅仅改变标题还不够。mutt 和其它一些邮件阅读程序还会检查邮件标题以外的其它信息,以便为其指定讨论串。所以宁可发一个全新的邮件。

在网页论坛上,好的提问方式稍有不同,因为讨论串与特定的信息紧密结合,并且通常在讨论串外就看不到里面的内容,故通过回复提问,而非改变标题是可接受的。不是所有论坛都允许在回复中出现分离的标题,而且这样做了基本上没有人会去看。不过,通过回复提问,这本身就是暧昧的做法,因为它们只会被正在查看该标题的人读到。所以,除非你只想在该讨论串当前活跃的人群中提问,不然还是另起炉灶比较好。

使问题容易回复

请将你的回复发送到……来结束你的问题多半会使你得不到回答。如果你觉得花几秒钟在邮件客户端设置一下回复地址都麻烦,我们也觉得花几秒钟思考你的问题更麻烦。如果你的邮件程序不支持这样做,换个好点的;如果是操作系统不支持这种邮件程序,也换个好点的。

在论坛,要求通过电子邮件回复是非常无礼的,除非你认为回复的信息可能比较敏感(有人会为了某些未知的原因,只让你而不是整个论坛知道答案)。如果你只是想在有人回复讨论串时得到电子邮件提醒,可以要求网页论坛发送给你。几乎所有论坛都支持诸如追踪此讨论串有回复时发送邮件提醒等功能。

使用清晰、正确、精准且合乎语法的语句

我们从经验中发现,粗心的提问者通常也会粗心地写程序与思考(我敢打包票)。回答粗心大意者的问题很不值得,我们宁愿把时间耗在别处。

正确的拼写、标点符号和大小写是很重要的。一般来说,如果你觉得这样做很麻烦,不想在乎这些,那我们也觉得麻烦,不想在乎你的提问。花点额外的精力斟酌一下字句,用不着太僵硬与正式 —— 事实上,黑客文化很看重能准确地使用非正式、俚语和幽默的语句。但它必须很准确,而且有迹象表明你是在思考和关注问题。

正确地拼写、使用标点和大小写,不要将its混淆为it'sloose搞成lose或者将discrete弄成discreet。不要全部用大写,这会被视为无礼的大声嚷嚷(全部小写也好不到哪去,因为不易阅读。Alan Cox 也许可以这样做,但你不行)。

更白话的说,如果你写得像是个半文盲[译注:小白],那多半得不到理睬。也不要使用即时通信中的简写或火星文,如将简化为d会使你看起来像一个为了少打几个键而省字的小白。更糟的是,如果像个小孩似地鬼画符那绝对是在找死,可以肯定没人会理你(或者最多是给你一大堆指责与挖苦)。

如果在使用非母语的论坛提问,你可以犯点拼写和语法上的小错,但决不能在思考上马虎(没错,我们通常能弄清两者的分别)。同时,除非你知道回复者使用的语言,否则请使用英语书写。繁忙的黑客一般会直接删除用他们看不懂的语言写的消息。在网络上英语是通用语言,用英语书写可以将你的问题在尚未被阅读就被直接删除的可能性降到最低。

如果英文是你的外语(Second language),提示潜在回复者你有潜在的语言困难是很好的: [译注:以下附上原文以供使用]

English is not my native language; please excuse typing errors.

  • 英文不是我的母语,请原谅我的错字或语法。

If you speak $LANGUAGE, please email/PM me; I may need assistance translating my question.

  • 如果你说某语言,请向我发电邮/私信;
  • 我需要有人协助我翻译我的问题。

I am familiar with the technical terms, but some slang expressions and idioms are difficult for me.

  • 我对技术名词很熟悉,但对于俗语或是特别用法不甚了解。

I've posted my question in $LANGUAGE and English. I'll be glad to translate responses, if you only use one or the other.

  • 我把我的问题用某语言和英文写出来。
  • 如果你只用其中的一种语言回答,我会乐意将回复翻译成为你使用的语言。

使用易于读取且标准的文件格式发送问题

如果你人为地将问题搞得难以阅读,它多半会被忽略,人们更愿读易懂的问题,所以:

  • 使用纯文字而不是 HTML (关闭 HTML 并不难)。
  • 使用 MIME 附件通常是可以的,前提是真正有内容(譬如附带的源代码或 patch),而不仅仅是邮件程序生成的模板(譬如只是信件内容的拷贝)。
  • 不要发送一段文字只是一行句子但自动换行后会变成多行的邮件(这使得回复部分内容非常困难)。设想你的读者是在 80 个字符宽的终端机上阅读邮件,最好设置你的换行分割点小于 80 字。
  • 但是,对一些特殊的文件不要设置固定宽度(譬如日志文件拷贝或会话记录)。数据应该原样包含,让回复者有信心他们看到的是和你看到的一样的东西。
  • 在英语论坛中,不要使用Quoted-Printable MIME 编码发送消息。这种编码对于张贴非 ASCII 语言可能是必须的,但很多邮件程序并不支持这种编码。当它们处理换行时,那些文本中四处散布的=20符号既难看也分散注意力,甚至有可能破坏内容的语意。
  • 绝对,永远不要指望黑客们阅读使用封闭格式编写的文档,像微软公司的 Word 或 Excel 文件等。大多数黑客对此的反应就像有人将还在冒热气的猪粪倒在你家门口时你的反应一样。即便他们能够处理,他们也很厌恶这么做。
  • 如果你从使用 Windows 的电脑发送电子邮件,关闭微软愚蠢的智能引号功能 (从[选项] > [校订] > [自动校正选项],勾选掉智能引号单选框),以免在你的邮件中到处散布垃圾字符。
  • 在论坛,勿滥用表情符号HTML功能(当它们提供时)。一两个表情符号通常没有问题,但花哨的彩色文本倾向于使人认为你是个无能之辈。过滥地使用表情符号、色彩和字体会使你看来像个傻笑的小姑娘。这通常不是个好主意,除非你只是对性而不是对答案感兴趣。

如果你使用图形用户界面的邮件程序(如微软公司的 Outlook 或者其它类似的),注意它们的默认设置不一定满足这些要求。大多数这类程序有基于选单的查看源代码命令,用它来检查发送文件夹中的邮件,以确保发送的是纯文本文件同时没有一些奇怪的字符。

精确地描述问题并言之有物

  • 仔细、清楚地描述你的问题或 Bug 的症状。
  • 描述问题发生的环境(机器配置、操作系统、应用程序、以及相关的信息),提供经销商的发行版和版本号(如:Fedora Core 4Slackware 9.1等)。
  • 描述在提问前你是怎样去研究和理解这个问题的。
  • 描述在提问前为确定问题而采取的诊断步骤。
  • 描述最近做过什么可能相关的硬件或软件变更。
  • 尽可能地提供一个可以重现这个问题的可控环境的方法。

尽量去揣测一个黑客会怎样反问你,在你提问之前预先将黑客们可能提出的问题回答一遍。

以上几点中,当你报告的是你认为可能在代码中的问题时,给黑客一个可以重现你的问题的环境尤其重要。当你这么做时,你得到有效的回答的机会和速度都会大大的提升。

Simon Tatham 写过一篇名为《如何有效的报告 Bug》的出色文章。强力推荐你也读一读。

话不在多而在精

你需要提供精确有内容的信息。这并不是要求你简单的把成堆的出错代码或者资料完全转录到你的提问中。如果你有庞大而复杂的测试样例能重现程序挂掉的情境,尽量将它剪裁得越小越好。

这样做的用处至少有三点。 第一,表现出你为简化问题付出了努力,这可以使你得到回答的机会增加; 第二,简化问题使你更有可能得到有用的答案; 第三,在精炼你的 bug 报告的过程中,你很可能就自己找到了解决方法或权宜之计。

别动辄声称找到 Bug

当你在使用软件中遇到问题,除非你非常、非常的有根据,不要动辄声称找到了 Bug。提示:除非你能提供解决问题的源代码补丁,或者提供回归测试来表明前一版本中行为不正确,否则你都多半不够完全确信。这同样适用在网页和文件,如果你(声称)发现了文件的Bug,你应该能提供相应位置的修正或替代文件。

请记得,还有其他许多用户没遇到你发现的问题,否则你在阅读文件或搜索网页时就应该发现了(你在抱怨前已经做了这些,是吧?)。这也意味着很有可能是你弄错了而不是软件本身有问题。

编写软件的人总是非常辛苦地使它尽可能完美。如果你声称找到了 Bug,也就是在质疑他们的能力,即使你是对的,也有可能会冒犯到其中某部分人。当你在标题中嚷嚷着有Bug时,这尤其严重。

提问时,即使你私下非常确信已经发现一个真正的 Bug,最好写得像是做错了什么。如果真的有 Bug,你会在回复中看到这点。这样做的话,如果真有 Bug,维护者就会向你道歉,这总比你惹恼别人然后欠别人一个道歉要好一点。

低声下气不能代替你的功课

有些人明白他们不该粗鲁或傲慢的提问并要求得到答复,但他们选择另一个极端 —— 低声下气:我知道我只是个可悲的新手,一个撸瑟,但...。这既使人困扰,也没有用,尤其是伴随着与实际问题含糊不清的描述时更令人反感。

别用原始灵长类动物的把戏来浪费你我的时间。取而代之的是,尽可能清楚地描述背景条件和你的问题情况。这比低声下气更好地定位了你的位置。

有时网页论坛会设有专为新手提问的版面,如果你真的认为遇到了初学者的问题,到那去就是了,但一样别那么低声下气。

描述问题症状而非你的猜测

告诉黑客们你认为问题是怎样造成的并没什么帮助。(如果你的推断如此有效,还用向别人求助吗?),因此要确信你原原本本告诉了他们问题的症状,而不是你的解释和理论;让黑客们来推测和诊断。如果你认为陈述自己的猜测很重要,清楚地说明这只是你的猜测,并描述为什么它们不起作用。

蠢问题

我在编译内核时接连遇到 SIG11 错误, 我怀疑某条飞线搭在主板的走线上了,这种情况应该怎样检查最好?

聪明问题

我的组装电脑是 FIC-PA2007 主机板搭载 AMD K6/233 CPU(威盛 Apollo VP2 芯片组), 256MB Corsair PC133 SDRAM 内存,在编译内核时,从开机 20 分钟以后就频频产生 SIG11 错误, 但是在头 20 分钟内从没发生过相同的问题。重新启动也没有用,但是关机一晚上就又能工作 20 分钟。 所有内存都换过了,没有效果。相关部分的标准编译记录如下…

由于以上这点似乎让许多人觉得难以配合,这里有句话可以提醒你:所有的诊断专家都来自密苏里州。 美国国务院的官方座右铭则是:让我看看(出自国会议员 Willard D. Vandiver 在 1899 年时的讲话:我来自一个出产玉米,棉花,牛蒡和民主党人的国家,滔滔雄辩既不能说服我,也不会让我满意。我来自密苏里州,你必须让我看看。) 针对诊断者而言,这并不是一种怀疑,而只是一种真实而有用的需求,以便让他们看到的是与你看到的原始证据尽可能一致的东西,而不是你的猜测与归纳的结论。所以,大方的展示给我们看吧!

按发生时间先后列出问题症状

问题发生前的一系列操作,往往就是对找出问题最有帮助的线索。因此,你的说明里应该包含你的操作步骤,以及机器和软件的反应,直到问题发生。在命令行处理的情况下,提供一段操作记录(例如运行脚本工具所生成的),并引用相关的若干行(如 20 行)记录会非常有帮助。

如果挂掉的程序有诊断选项(如 -v 的详述开关),试着选择这些能在记录中增加调试信息的选项。记住,不等于。试着选取适当的调试级别以便提供有用的信息而不是让读者淹没在垃圾中。

如果你的说明很长(如超过四个段落),在开头简述问题,接下来再按时间顺序详述会有所帮助。这样黑客们在读你的记录时就知道该注意哪些内容了。

描述目标而不是过程

如果你想弄清楚如何做某事(而不是报告一个 Bug),在开头就描述你的目标,然后才陈述重现你所卡住的特定步骤。

经常寻求技术帮助的人在心中有个更高层次的目标,而他们在自以为能达到目标的特定道路上被卡住了,然后跑来问该怎么走,但没有意识到这条路本身就有问题。结果要费很大的劲才能搞定。

蠢问题

我怎样才能从某绘图程序的颜色选择器中取得十六进制的 RGB 值?

聪明问题

我正试着用替换一幅图片的色码(color table)成自己选定的色码,我现在知道的唯一方法是编辑每个色码区块(table slot), 但却无法从某绘图程序的颜色选择器取得十六进制的 RGB 值。

第二种提问法比较聪明,你可能得到像是建议采用另一个更合适的工具的回复。

别要求使用私人电邮回复

黑客们认为问题的解决过程应该公开、透明,此过程中如果更有经验的人注意到不完整或者不当之处,最初的回复才能够、也应该被纠正。同时,作为提供帮助者可以得到一些奖励,奖励就是他的能力和学识被其他同行看到。

当你要求私下回复时,这个过程和奖励都被中止。别这样做,让回复者来决定是否私下回答 —— 如果他真这么做了,通常是因为他认为问题编写太差或者太肤浅,以至于不可能使其他人产生兴趣。

这条规则存在一条有限的例外,如果你确信提问可能会引来大量雷同的回复时,那么这个神奇的提问句会是向我发电邮,我将为论坛归纳这些回复。试着将邮件列表或新闻群组从洪水般的雷同回复中解救出来是非常有礼貌的 —— 但你必须信守诺言。

清楚明确的表达你的问题以及需求

漫无边际的提问是近乎无休无止的时间黑洞。最有可能给你有用答案的人通常也正是最忙的人(他们忙是因为要亲自完成大部分工作)。这样的人对无节制的时间黑洞相当厌恶,所以他们也倾向于厌恶那些漫无边际的提问。

如果你明确表述需要回答者做什么(如提供指点、发送一段代码、检查你的补丁、或是其他等等),就最有可能得到有用的答案。因为这会定出一个时间和精力的上限,便于回答者能集中精力来帮你。这么做很棒。

要理解专家们所处的世界,请把专业技能想像为充裕的资源,而回复的时间则是稀缺的资源。你要求他们奉献的时间越少,你越有可能从真正专业而且很忙的专家那里得到解答。

所以,界定一下你的问题,使专家花在辨识你的问题和回答所需要付出的时间减到最少,这技巧对你有用答案相当有帮助 —— 但这技巧通常和简化问题有所区别。因此,问我想更好地理解 X,可否指点一下哪有好一点说明?通常比问你能解释一下 X 吗?更好。如果你的代码不能运作,通常请别人看看哪里有问题,比要求别人替你改正要明智得多。

询问有关代码的问题时

别要求他人帮你调试有问题的代码,不提示一下应该从何入手。张贴几百行的代码,然后说一声:它不能工作会让你完全被忽略。只贴几十行代码,然后说一句:在第七行以后,我期待它显示 <x>,但实际出现的是 <y>比较有可能让你得到回应。

最有效描述程序问题的方法是提供最精简的 Bug 展示测试用例(bug-demonstrating test case)。什么是最精简的测试用例?那是问题的缩影;一小个程序片段能刚好展示出程序的异常行为,而不包含其他令人分散注意力的内容。怎么制作最精简的测试用例?如果你知道哪一行或哪一段代码会造成异常的行为,复制下来并加入足够重现这个状况的代码(例如,足以让这段代码能被编译/直译/被应用程序处理)。如果你无法将问题缩减到一个特定区块,就复制一份代码并移除不影响产生问题行为的部分。总之,测试用例越小越好(查看话不在多而在精一节)。

一般而言,要得到一段相当精简的测试用例并不太容易,但永远先尝试这样做的是种好习惯。这种方式可以帮助你了解如何自行解决这个问题 —— 而且即使你的尝试不成功,黑客们也会看到你在尝试取得答案的过程中付出了努力,这可以让他们更愿意与你合作。

如果你只是想让别人帮忙审查(Review)一下代码,在信的开头就要说出来,并且一定要提到你认为哪一部分特别需要关注以及为什么。

别把自己家庭作业的问题贴上来

黑客们很擅长分辨哪些问题是家庭作业式的问题;因为我们中的大多数都曾自己解决这类问题。同样,这些问题得由来搞定,你会从中学到东西。你可以要求给点提示,但别要求得到完整的解决方案。

如果你怀疑自己碰到了一个家庭作业式的问题,但仍然无法解决,试试在用户群组,论坛或(最后一招)在项目的用户邮件列表或论坛中提问。尽管黑客们看出来,但一些有经验的用户也许仍会给你一些提示。

去掉无意义的提问句

避免用无意义的话结束提问,例如有人能帮我吗?或者这有答案吗?

首先:如果你对问题的描述不是很好,这样问更是画蛇添足。

其次:由于这样问是画蛇添足,黑客们会很厌烦你 —— 而且通常会用逻辑上正确,但毫无意义的回答来表示他们的蔑视, 例如:没错,有人能帮你或者不,没答案

一般来说,避免用 是或否对或错有或没有类型的问句,除非你想得到是或否类型的回答

即使你很急也不要在标题写紧急

这是你的问题,不是我们的。宣称紧急极有可能事与愿违:大多数黑客会直接删除无礼和自私地企图即时引起关注的问题。更严重的是,紧急这个字(或是其他企图引起关注的标题)通常会被垃圾信过滤器过滤掉 —— 你希望能看到你问题的人可能永远也看不到。

有半个例外的情况是,如果你是在一些很高调,会使黑客们兴奋的地方,也许值得这样去做。在这种情况下,如果你有时间压力,也很有礼貌地提到这点,人们也许会有兴趣回答快一点。

当然,这风险很大,因为黑客们兴奋的点多半与你的不同。譬如从 NASA 国际空间站(International Space Station)发这样的标题没有问题,但用自我感觉良好的慈善行为或政治原因发肯定不行。事实上,张贴诸如紧急:帮我救救这个毛茸茸的小海豹!肯定让你被黑客忽略或惹恼他们,即使他们认为毛茸茸的小海豹很重要。

如果你觉得这点很不可思议,最好再把这份指南剩下的内容多读几遍,直到你弄懂了再发文。

礼多人不怪,而且有时还很有帮助

彬彬有礼,多用谢谢您的关注,或谢谢你的关照。让大家都知道你对他们花时间免费提供帮助心存感激。

坦白说,这一点并没有比使用清晰、正确、精准且合乎语法和避免使用专用格式重要(也不能取而代之)。黑客们一般宁可读有点唐突但技术上鲜明的 Bug 报告,而不是那种有礼但含糊的报告。(如果这点让你不解,记住我们是按问题能教给我们什么来评价问题的价值的)

然而,如果你有一串的问题待解决,客气一点肯定会增加你得到有用回应的机会。

(我们注意到,自从本指南发布后,从资深黑客那里得到的唯一严重缺陷反馈,就是对预先道谢这一条。一些黑客觉得先谢了意味着事后就不用再感谢任何人的暗示。我们的建议是要么先说先谢了然后事后再对回复者表示感谢,或者换种方式表达感激,譬如用谢谢你的关注谢谢你的关照。)

问题解决后,加个简短的补充说明

问题解决后,向所有帮助过你的人发个说明,让他们知道问题是怎样解决的,并再一次向他们表示感谢。如果问题在新闻组或者邮件列表中引起了广泛关注,应该在那里贴一个说明比较恰当。

最理想的方式是向最初提问的话题回复此消息,并在标题中包含已修正已解决或其它同等含义的明显标记。在人来人往的邮件列表里,一个看见讨论串问题 X问题 X - 已解决的潜在回复者就明白不用再浪费时间了(除非他个人觉得问题 X的有趣),因此可以利用此时间去解决其它问题。

补充说明不必很长或是很深入;简单的一句你好,原来是网线出了问题!谢谢大家 – Bill比什么也不说要来的好。事实上,除非结论真的很有技术含量,否则简短可爱的小结比长篇大论更好。说明问题是怎样解决的,但大可不必将解决问题的过程复述一遍。

对于有深度的问题,张贴调试记录的摘要是有帮助的。描述问题的最终状态,说明是什么解决了问题,在此之后才指明可以避免的盲点。避免盲点的部分应放在正确的解决方案和其它总结材料之后,而不要将此信息搞成侦探推理小说。列出那些帮助过你的名字,会让你交到更多朋友。

除了有礼貌和有内涵以外,这种类型的补充也有助于他人在邮件列表/新闻群组/论坛中搜索到真正解决你问题的方案,让他们也从中受益。

至少,这种补充有助于让每位参与协助的人因问题的解决而从中得到满足感。如果你自己不是技术专家或者黑客,那就相信我们,这种感觉对于那些你向他们求助的大师或者专家而言,是非常重要的。问题悬而未决会让人灰心;黑客们渴望看到问题被解决。好人有好报,满足他们的渴望,你会在下次提问时尝到甜头。

思考一下怎样才能避免他人将来也遇到类似的问题,自问写一份文件或加个常见问题(FAQ)会不会有帮助。如果是的话就将它们发给维护者。

在黑客中,这种良好的后继行动实际上比传统的礼节更为重要,也是你如何透过善待他人而赢得声誉的方式,这是非常有价值的资产。

如何解读答案

 

RTFM 和 STFW:如何知道你已完全搞砸了

有一个古老而神圣的传统:如果你收到RTFM(Read The Fucking Manual)的回应,回答者认为你应该去读他妈的手册。当然,基本上他是对的,你应该去读一读。

RTFM 有一个年轻的亲戚。如果你收到STFW(Search The Fucking Web)的回应,回答者认为你应该到他妈的网上搜索。那人多半也是对的,去搜索一下吧。(更温和一点的说法是 Google 是你的朋友!)

在论坛,你也可能被要求去爬爬论坛的旧文。事实上,有人甚至可能热心地为你提供以前解决此问题的讨论串。但不要依赖这种关照,提问前应该先搜索一下旧文。

通常,用这两句之一回答你的人会给你一份包含你需要内容的手册或者一个网址,而且他们打这些字的时候也正在读着。这些答复意味着回答者认为

  • 你需要的信息非常容易获得
  • 你自己去搜索这些信息比灌给你,能让你学到更多

你不应该因此不爽;依照黑客的标准,他已经表示了对你一定程度的关注,而没有对你的要求视而不见。你应该对他祖母般的慈祥表示感谢。

如果还是搞不懂

如果你看不懂回应,别立刻要求对方解释。像你以前试着自己解决问题时那样(利用手册,FAQ,网络,身边的高手),先试着去搞懂他的回应。如果你真的需要对方解释,记得表现出你已经从中学到了点什么。

比方说,如果我回答你:看来似乎是 zentry 卡住了;你应该先清除它。,然后,这是一个很糟的后续问题回应:zentry 是什么? 的问法应该是这样:哦~~~我看过说明了但是只有 -z 和 -p 两个参数中提到了 zentries,而且还都没有清楚的解释如何清除它。你是指这两个中的哪一个吗?还是我看漏了什么?

处理无礼的回应

很多黑客圈子中看似无礼的行为并不是存心冒犯。相反,它是直截了当,一针见血式的交流风格,这种风格更注重解决问题,而不是使人感觉舒服而却模模糊糊。

如果你觉得被冒犯了,试着平静地反应。如果有人真的做了出格的事,邮件列表、新闻群组或论坛中的前辈多半会招呼他。如果这没有发生而你却发火了,那么你发火对象的言语可能在黑客社区中看起来是正常的,而将被视为有错的一方,这将伤害到你获取信息或帮助的机会。

另一方面,你偶尔真的会碰到无礼和无聊的言行。与上述相反,对真正的冒犯者狠狠地打击,用犀利的语言将其驳得体无完肤都是可以接受的。然而,在行事之前一定要非常非常的有根据。纠正无礼的言论与开始一场毫无意义的口水战仅一线之隔,黑客们自己莽撞地越线的情况并不鲜见。如果你是新手或外人,避开这种莽撞的机会并不高。如果你想得到的是信息而不是消磨时光,这时最好不要把手放在键盘上以免冒险。

(有些人断言很多黑客都有轻度的自闭症或亚斯伯格综合症,缺少用于润滑人类社会正常交往所需的神经。这既可能是真也可能是假的。如果你自己不是黑客,兴许你认为我们脑袋有问题还能帮助你应付我们的古怪行为。只管这么干好了,我们不在乎。我们喜欢我们现在这个样子,并且通常对病患标记都有站得住脚的怀疑。)

Jeff Bigler 的观察总结和这个相关也值得一读 (tact filters)。

在下一节,我们会谈到另一个问题,当行为不当时所会受到的冒犯

如何避免扮演失败者

在黑客社区的论坛中,你以本指南所描述的或类似的方式,可能会有那么几次搞砸了。而你会在公开场合中被告知你是如何搞砸的,也许攻击的言语中还会带点夹七夹八的颜色。

这种事发生以后,你能做的最糟糕的事莫过于哀嚎你的遭遇、宣称被言语攻击、要求道歉、高声尖叫、憋闷气、威胁诉诸法律、向其雇主报怨、不去关马桶盖等等。相反地,你该这么做:

熬过去,这很正常。事实上,它是有益健康且合理的。

社区的标准不会自行维持,它们是通过参与者积极而公开地执行来维持的。不要哭嚎所有的批评都应该通过私下的邮件传送,它不是这样运作的。当有人评论你的一个说法有误或者提出不同看法时,坚持声称受到个人攻击也毫无益处,这些都是失败者的态度。

也有其它的黑客论坛,受过高礼节要求的误导,禁止参与者张贴任何对别人帖子挑毛病的消息,并声称如果你不想帮助用户就闭嘴。 结果造成有想法的参与者纷纷离开,这么做只会使它们沦为毫无意义的唠叨与无用的技术论坛。

夸张的讲法是:你要的是“友善”(以上述方式)还是有用?两个里面挑一个。

记着:当黑客说你搞砸了,并且(无论多么刺耳)告诉你别再这样做时,他正在为关心他的社区而行动。对他而言,不理你并将你从他的生活中滤掉更简单。如果你无法做到感谢,至少要表现得有点尊严,别大声哀嚎,也别因为自己是个有戏剧性超级敏感的灵魂和自以为有资格的新来者,就指望别人像对待脆弱的洋娃娃那样对你。

有时候,即使你没有搞砸(或者只是在他的想像中你搞砸了),有些人也会无缘无故地攻击你本人。在这种情况下,抱怨倒是真的会把问题搞砸。

这些来找麻烦的人要么是毫无办法但自以为是专家的不中用家伙,要么就是测试你是否真会搞砸的心理专家。其它读者要么不理睬,要么用自己的方式对付他们。这些来找麻烦的人在给他们自己找麻烦,这点你不用操心。

也别让自己卷入口水战,最好不要理睬大多数的口水战 —— 当然,这是在你检验它们只是口水战,并且未指出你有搞砸的地方,同时也没有巧妙地将问题真正的答案藏于其后(这也是有可能的)。

不该问的问题

以下是几个经典蠢问题,以及黑客没回答时心中所想的:

问题:我能在哪找到 X 程序或 X 资源?

问题:我怎样用 X 做 Y?

问题:如何设定我的 shell 提示?

问题:我可以用 Bass-o-matic 文件转换工具将 AcmeCorp 文件转换为 TeX 格式吗?

问题:我的程序/设定/SQL 语句没有用

问题:我的 Windows 电脑有问题,你能帮我吗?

问题:我的程序不会动了,我认为系统工具 X 有问题

问题:我在安装 Linux(或者 X )时有问题,你能帮我吗?

问题:我怎么才能破解 root 帐号/窃取 OP 特权/读别人的邮件呢?


 

问题:我能在哪找到 X 程序或 X 资源?

回答:就在我找到它的地方啊,白痴 —— 搜索引擎的那一头。天哪!难道还有人不会用 Google 吗?

 

问题:我怎样用 X 做 Y?

回答:如果你想解决的是 Y ,提问时别给出可能并不恰当的方法。这种问题说明提问者不但对 X 完全无知,也对 Y 要解决的问题糊涂,还被特定形势禁锢了思维。最好忽略这种人,等他们把问题搞清楚了再说。

 

问题:如何设定我的 shell 提示??

回答:如果你有足够的智慧提这个问题,你也该有足够的智慧去 RTFM,然后自己去找出来。

 

问题:我可以用 Bass-o-matic 文件转换工具将 AcmeCorp 文件转换为 TeX 格式吗?

回答:试试看就知道了。如果你试过,你就知道了答案,就不用浪费我的时间了。

 

问题:我的{程序/设定/SQL 语句}没有用

回答:这不算是问题吧,我对要我问你二十个问题才找得出你真正问题的问题没兴趣 —— 我有更有意思的事要做呢。在看到这类问题的时候,我的反应通常不外如下三种

  • 你还有什么要补充的吗?
  • 真糟糕,希望你能搞定。
  • 这关我屁事?

 

问题:我的 Windows 电脑有问题,你能帮我吗?

回答:能啊,扔掉微软的垃圾,换个像 Linux 或 BSD 的开源操作系统吧。

注意:如果程序有官方版 Windows 或者与 Windows 有互动(如 Samba),你可以问与 Windows 相关的问题,只是别对问题是由 Windows 操作系统而不是程序本身造成的回复感到惊讶, 因为 Windows 一般来说实在太烂,这种说法通常都是对的。

 

问题:我的程序不会动了,我认为系统工具 X 有问题

回答:你完全有可能是第一个注意到被成千上万用户反复使用的系统调用与函数库文件有明显缺陷的人,更有可能的是你完全没有根据。不同凡响的说法需要不同凡响的证据,当你这样声称时,你必须有清楚而详尽的缺陷说明文件作后盾。

 

问题:我在安装 Linux(或者 X )时有问题,你能帮我吗?

回答:不能,我只有亲自在你的电脑上动手才能找到毛病。还是去找你当地的 Linux 使用群组者寻求实际的指导吧(你能在这儿找到用户群组的清单)。

注意:如果安装问题与某 Linux 的发行版有关,在它的邮件列表、论坛或本地用户群组中提问也许是恰当的。此时,应描述问题的准确细节。在此之前,先用 Linux 和所有被怀疑的硬件作关键词仔细搜索。

 

问题:我怎么才能破解 root 帐号/窃取 OP 特权/读别人的邮件呢?

回答:想要这样做,说明了你是个卑鄙小人;想找个黑客帮你,说明你是个白痴!

好问题与蠢问题

最后,我将透过举一些例子,来说明怎样聪明的提问;同一个问题的两种问法被放在一起,一种是愚蠢的,另一种才是明智的。

蠢问题

我可以在哪儿找到关于 Foonly Flurbamatic 的资料?

这种问法无非想得到 STFW 这样的回答。

聪明问题

我用 Google 搜索过 "Foonly Flurbamatic 2600",但是没找到有用的结果。谁知道上哪儿去找对这种设备编程的资料?

这个问题已经 STFW 过了,看起来他真的遇到了麻烦。

蠢问题

我从 foo 项目找来的源码没法编译。它怎么这么烂?

他觉得都是别人的错,这个傲慢自大的提问者。

聪明问题

foo 项目代码在 Nulix 6.2 版下无法编译通过。我读过了 FAQ,但里面没有提到跟 Nulix 有关的问题。这是我编译过程的记录,我有什么做的不对的地方吗?

提问者已经指明了环境,也读过了 FAQ,还列出了错误,并且他没有把问题的责任推到别人头上,他的问题值得被关注。

蠢问题

我的主机板有问题了,谁来帮我?

某黑客对这类问题的回答通常是:好的,还要帮你拍拍背和换尿布吗?,然后按下删除键。

聪明问题

我在 S2464 主机板上试过了 X 、 Y 和 Z ,但没什么作用,我又试了 A 、 B 和 C 。请注意当我尝试 C 时的奇怪现象。显然 florbish 正在 grommicking,但结果出人意料。通常在 Athlon MP 主机板上引起 grommicking 的原因是什么?有谁知道接下来我该做些什么测试才能找出问题?

这个家伙,从另一个角度来看,值得去回答他。他表现出了解决问题的能力,而不是坐等天上掉答案。

在最后一个问题中,注意告诉我答案给我启示,指出我还应该做什么诊断工作之间微妙而又重要的区别。

事实上,后一个问题源自于 2001 年 8 月在 Linux 内核邮件列表(lkml)上的一个真实的提问。我(Eric)就是那个提出问题的人。我在 Tyan S2464 主板上观察到了这种无法解释的锁定现象,列表成员们提供了解决这一问题的重要信息。

通过我的提问方法,我给了别人可以咀嚼玩味的东西;我设法让人们很容易参与并且被吸引进来。我显示了自己具备和他们同等的能力,并邀请他们与我共同探讨。通过告诉他们我所走过的弯路,以避免他们再浪费时间,我也表明了对他们宝贵时间的尊重。

事后,当我向每个人表示感谢,并且赞赏这次良好的讨论经历的时候,一个 Linux 内核邮件列表的成员表示,他觉得我的问题得到解决并非由于我是这个列表中的人,而是因为我用了正确的方式来提问。

黑客从某种角度来说是拥有丰富知识但缺乏人情味的家伙;我相信他是对的,如果我个乞讨者那样提问,不论我是谁,一定会惹恼某些人或者被他们忽视。他建议我记下这件事,这直接导致了本指南的出现。

如果得不到回答

如果仍得不到回答,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。没有回应不代表你被忽视,虽然不可否认这种差别很难区分。

总的来说,简单的重复张贴问题是个很糟的点子。这将被视为无意义的喧闹。有点耐心,知道你问题答案的人可能生活在不同的时区,可能正在睡觉,也有可能你的问题一开始就没有组织好。

你可以通过其他渠道获得帮助,这些渠道通常更适合初学者的需要。

有许多网上的以及本地的用户群组,由热情的软件爱好者(即使他们可能从没亲自写过任何软件)组成。通常人们组建这样的团体来互相帮助并帮助新手。

另外,你可以向很多商业公司寻求帮助,不论公司大还是小。别为要付费才能获得帮助而感到沮丧!毕竟,假使你的汽车发动机汽缸密封圈爆掉了 —— 完全可能如此 —— 你还得把它送到修车铺,并且为维修付费。就算软件没花费你一分钱,你也不能强求技术支持总是免费的。

对像是 Linux 这种大众化的软件,每个开发者至少会对应到上万名用户。根本不可能由一个人来处理来自上万名用户的求助电话。要知道,即使你要为这些协助付费,和你所购买的同类软件相比,你所付出的也是微不足道的(通常封闭源代码软件的技术支持费用比开源软件的要高得多,且内容也没那么丰富)。

如何更好地回答问题

态度和善一点。 问题带来的压力常使人显得无礼或愚蠢,其实并不是这样。

对初犯者私下回复。 对那些坦诚犯错之人没有必要当众羞辱,一个真正的新手也许连怎么搜索或在哪找常见问题都不知道。

如果你不确定,一定要说出来! 一个听起来权威的错误回复比没有还要糟,别因为听起来像个专家很好玩,就给别人乱指路。要谦虚和诚实,给提问者与同行都树个好榜样。

如果帮不了忙,也别妨碍他。 不要在实际步骤上开玩笑,那样也许会毁了提问者的设置 —— 有些可怜的呆瓜会把它当成真的指令。

试探性的反问以引出更多的细节。 如果你做得好,提问者可以学到点东西 —— 你也可以。试试将蠢问题转变成好问题,别忘了我们都曾是新手。

尽管对那些懒虫抱怨一声 RTFM 是正当的,但能给出文档的链接(即使只是建议个 Google 搜索关键词)会更好。

如果你决定回答,就请给出好的答案。 当别人正在用错误的工具或方法时别建议笨拙的权宜之计(workaround),应推荐更好的工具,重新界定问题。

正面地回答问题! 如果这个提问者已经很深入的研究而且也表明已经试过 X 、 Y 、 Z 、 A 、 B 、 C 但没得到结果,回答 试试看 A 或是 B 或者 试试 X 、 Y 、 Z 、 A 、 B 、 C 并附上一个链接一点用都没有。

帮助你的社区从问题中学习。 当回复一个好问题时,问问自己如何修改相关文件或常见问题文件以免再次解答同样的问题?,接着再向文件维护者发一份补丁。

如果你在研究一番后才作出了回答,展现你的技巧而不是直接端出结果。毕竟授人以鱼不如授人以渔

相关资源

如果你需要个人电脑、Unix 系统和网络如何运作的基础知识,参阅 Unix 系统和网络基本原理

当你发布软件或补丁时,试着按软件发布实践操作。

鸣谢

Evelyn Mitchel 贡献了一些愚蠢问题例子并启发了编写如何更好地回答问题这一节, Mikhail Ramendik 贡献了一些特别有价值的建议和改进。

]]>
0 https://bbs.viyf.org/?thread-index-fid-6-tid-129.htm https://bbs.viyf.org/?thread-index-fid-6-tid-129.htm
转载一篇二十年前的文章——拒绝浮躁 学习Linux需要掌握十一条戒律 https://bbs.viyf.org/?thread-index-fid-6-tid-128.htm https://bbs.viyf.org/?thread-index-fid-6-tid-128.htm Mon, 26 Sep 2022 02:11:15 +0800 kyoto   首先,我想引用一下别人说过的一句话:除非在过去的十年你一直生活在山洞里,否则你一定听说过linux。 

  是的,现在听说过linux,会一点linux基本操作的人多如牛毛,然而真正能用linux做一点事情的确少之又少,这就造成了现在的状况:各大 linux论坛十分热闹,但我国linux人材却还十分紧缺。到底是什么原因造成了这样的状况? 纠其原因,只有两个字:浮躁! 

  如果在论坛里来一次调查投票,看一下在论坛里的人到底有多少人手头有一本以上的正规linux教材。我想这个数字不会超过30%。 如果再问一下,有多少人完整的读过各发行版自带的入门文档,系统定制文档,系统管理 文档和系统安全 文档,恐怕这个数字不到10%。 如果进一步再调查一下究竟有多少人静下心来学习过操作系统和计算机网络 等和linux学习十分密切的专业课程,那么恐怕只有3%的数字都不到了。 

  这让我想到了98年前后IT泡沫时代的中关村。在中关村的大街小巷,到处是一个个意气分发牛哄哄的IT精英。他们戴着默镜,剔着小平头,张口闭口都是网 络,安全,信息,黑客,代码,产业。T恤背后写着三个字:别惹我! 然而最后IT泡沫一过,只有那些真正肯安安心心静心学习的人在IT界存活了下来。 

  现在国人学习linux的状况也是这样,学linux的人个个都意气分发,以为学习linux会用linux是多么了不起。学了一点皮毛就认为很牛了。但是那些企业用人单位却很难找到真正适合的linux人材。因此,我想就目前的状况发表一下我的看法。 

  首先,这篇文章是写给那些想成为linux高手,并真正想用linux做些事情的人。如果你只想做一个菜鸟,没事的时候在你双系统启动的电脑上偶尔选一次 linux,然后没事进去偷着乐,那就请你自便。另外,我想说明,和真正的牛人比起来,我自己还处于一个比较低的水平。我没有读过内核源代码,不知道 linux工作原理等等,但是通过摸索,至少我已经找到了通往高手的道路的方向。因此还是想说两句。 

  1,linux不是玩具 

  如果你想系统的学习linux,你必需清楚的认识到这一点。现在有很多人,号称是linux爱好者,但是他们大部分的事情还是用windows 做,而linux只是作为一个随便玩玩的系统。他们懂得一些linux的基本操作,知道有linux这个玩艺,也因为经常听人家说linux好就咬定了 linux就是好。只要有人说linux比windows差,那么他们就奋起反驳,他们也看不起用windows的人,认为用windows的人水平低。 但是自己用电脑的大部分时间还是用windows并且把重要的文件都放在了windows分区,因为他们骨子里只把linux当做玩具,没有真正领悟 linux的精髓所在。如果你真正想系统的学习linux,想用linux有所作为,那么请忘记windows的思维方式,慢慢感受和习惯linux的操 作方式,总有一天你会真正体验到他的奥妙所在,从而从自己内心深处喜欢他,使用他,而不是为了赶时髦或向人炫耀而使用他。 

  2,手头有一本好的入门教材吗 

  “如果你还没有好好的读完过一本linux安装及入门教材就不要到初学者论坛来问题!因为你连问问题的资格都没有! ” 这是我的一个比较偏激的观点。 

  如果你现在开始下决心学习linux了,那么第一件你要做的事情是到书店去挑一本好书。而不是到论坛社区去问该用什么版本,该如何学习 linux。一本好的入门教材可以让你快速领悟linux的操作方式,系统的基本使用等等。而且都是前人总结经验写出来的,他可以帮你搭起一个学习 linux的框架,对linux有一个总体的认识。就好比建一撞大楼前先打好地基,搭好混凝土框架。以后就可以慢慢往这个框架里添砖加瓦,最后建起大楼。 而那些想急于学习的,不想看书,只想靠混论坛来学习linux知识的人,就好比建一撞大楼,今天建好第一层,然后第一层就要全部粉刷好,装修好,家具买好 住进去,然后第二天再开始建第二层。这样没有整体规划的学习是学不好linux的,最后的结果是浪费自己的时间,也浪费别人的时间。 如果你不信,可以让实事去告诉你,以一年为限,你和你的一个朋友同时从0开始学linux,计算机基础差不多。你去买几本好书自己慢慢看边看边做实验,让 你的朋友整天到各大论坛瞎混零散的学些linux知识。也许一开始,你的朋友会比你懂得多,但是一年以后你的水平肯定在你的朋友之上。 在初学阶段,不要随便在论坛上发问,多看书是根本,即使真的非问不可的问题,也要先自己动手察资料 解决。实在不行再来问,高手不会鄙视菜鸟,因为每一个高手都是从菜鸟过来的,他们都知道菜鸟的苦衷。但是高手会看不起那些自己不愿动手动脑不会学习解决问题而只想得到现成答案的人。那样的人会被高手在心里暗骂成不配用linux的蠢货。 

  你需要以下几种书:一本好入门教材->一本linux指令参考手册->linux系统管理手册->讲解linux系统原理的书。 

  一开始,你只需要入门教材就可以了。并且严格安教材的讲解去学习,不要一天到晚想着去装显卡驱动啦,装游戏啦,装软件啦,这些都没有必要。你就当你自己的 电脑不能上网,只能通过 看书学习。慢慢看书,稳抓稳打。慢慢地就融会贯通了。这时候你再到linux初学者论坛去看看,你在那里早已经是高手了。 

  另外,一开始你要选定一本入门教材,但是不能只看一本,因为有些书上讲的,可能是另外的书上没有的。因此,重点选一本教材看完。然后再看两三本入门教材浏 览一下。作为对第一本书的知识的扩充和巩固。 在看书过程中,如果你有什么不懂的,不要急于上论坛问,自己认真看几次,实在不懂没有关系,把问题放在那里。不要钻牛角尖不懂不肯放手,这种精神是好的, 但是方法是错误的。你尽管学下去,也许你看完书本以后的内容,就对前面不懂的内容豁然开朗了。这是在学习linux中常有的情况。 

  另外,现在很多入门书籍是针对非技术型用户的。(我把那些对linux本身不感兴趣,只想用他来上网,听音乐和打字的人称为非技术型用户,而把对linux本身感兴趣的人称为技术用户) 

  这些针对非技术型用户的入门书籍几乎通篇都是插图,讲解的内容都是如何在图形界面下操作。这些书籍并不能帮你成为一个高手。反而会让你养成倚赖鼠标和图形 界面操作的习惯以后很难改掉。因此不能看这些书,一定要买那些一开始就从系统基本机构基本命令开始讲解的书籍。我看过的第一本linux入门书籍共有十多 章,但是他从第十一章开始才大致的讲解了一下图形界面的知识。我很感谢这本书,让我一开始就脱离了windows的思维方式,给我以后的进一步学习带来了 很大帮助。 

  完成以上的内容,你就完成了建大楼打地基建混凝土框架的过程了。可以接下来进一步学习了。

   3,你看完系统自带的文档了吗? 

  当你完成入门的过程后,就可以开始读其他的文档,然后到论坛的精华区看看,向你建起来的大楼框架中添砖头了。当然 ,首先要读的,还是系统自带的文档。 

  绝大多数linux发行版都自带非常详细的文档。比如我一直在用的redhat,他有从系统安装到系统安全,针对不同层次的人的详尽文档。静下心来,把这 些文档读完,比看任何论坛的精华区都有用。书籍和文档就好比是你每天都离不开的一日三餐,论坛区的精华文档就好比是点心和水果。你可以不吃点心和水果,但 是决不能不吃正餐。 

  当然,不能为看文档而看文档,你一定要边看边安文档中说的做试验验证。这样才印象深刻,否则看过就忘记了等于没有看。另外,如果真心想学习linux就不 要吝啬,也不要害怕丢失数据而不敢做实验。我建议你去买一个小的二手硬盘,然后放开手干。不要怕丢失数据而不敢做,如果你没有学会技能,将来做了 linux系统管理员或者网络管理员到那时因为不会而丢了数据就是大事情了。 

  4,学习linux不是逛自由市场。 

  经常看到有人问用什么版本的linux好,其实只要你认真学习无论什么版本都挺好的。要知道,开发linux发行版的人都是通读过linux内核代码,对 linux原理极其精通的人,而且每一个开发团队都对他的发行版做过测试后放出的。那些国际知名的大品牌更是如此。 因此,讨论什么版本好并无意义,关键是你是不是真心想学。不过,为了避免曲高和寡,最好选用的人多的版本,比如redhat manrake suse 等等。 国内有一两个linux版本做的也不错,但是国内的linux都是面向非技术型用户开发的,因此,如果你想成为高手,建议不要用国内的版本。 

  学习linux不是逛自由市场,选定版本就要静下心来学习。不要今天换版本明天要升级。这样对你没有好处。我见过一些人号称用过十几种甚至几十种 linux,向人谈论起来头头是到,好像懂的很多,但是如果你让他去用linux搭建一个web服务器,做一个linux网关,他就什么都不会了。他们把 时间都浪费在了版本的转换上了。 

  5,你能看懂英文文档吗? 

  谈论这个问题,我有点低气不足,因为我自己的英语很差。但是,至少我可以无障碍的读完一般的计算机文档。计算机英语很简单,只要熟悉了计算机专业英语,高 中毕业的水平就可以轻松的阅读计算机文档了。如果你的英语实在太差了,连最简单的计算机英语文档都看不懂,那么在学习linux的同时,请赶紧学习英语。 也许你说,你可以看翻译的文档,当我还是一个菜菜鸟的时候,也是这样认为的。但是,后来才发现,如果你想深入学习linux,看不懂因为文档实在是太难 了。写的最好的,最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。即便是非英语国家的人发布技术文档,也都首先翻译成英语在国际学术杂志 和网络上发表。你去看看各大软硬件生产商的官方网站,有哪一个不是用英语作为其主站的? 长期用windows的人会很不习惯这一点,装个软件还要看半天文档,应为windows用起来实在太简单了。但是如果你想学习linux就必需学会看各 种文档,而大部分的文档都是用英语写的。我发现很多人甚至连man文档都不会看,有什么命令不会用了就跑到论坛上来问,还装出一副可怜相,乞讨一个命令的 用法。有这些时间还不如自己看看man文档,即使你一个一个单词的翻译成中文再自己看都比问别人强,因为别人的回答再怎么详尽都比不上man文档详尽。安 装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。否则,说明文档都不看,结果出了问题再 来找答案反而浪费时间! 古人说欲速则不达就是这个道理! 

  6,忘记windows的思维方式 

  思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。现在很多人用linux。但是,他们用linux的方式完全是 windows的那一套方式。骨子里都是windows的思想。这样是不能领悟linux的精髓体验不到他的优越性的。我前几天看到一个朋友要把刚装了不 到2天的mandrake 10 删除掉,我问他为什么,他说太慢了,受不了,还是用windows快。然后我留意了一下他用linux的方式,他的所有操作都带着windows的影子。 他连最基本的删除,移动文件这样的操作都要用鼠标,这样当然慢了!最后我只好说,你删除吧,你不适合用linux,linux不是这样用的。各位可以去看 看那些linux高级用户,他们是怎样操作的。通常他们都是在X上开一个xterm或者rxvt终端,80%以上的操作都在这个终端下用命令完成,因为 linux的命令行十分强大,速度也十分快,简单的几个命令的组合就能完成非常复杂的操作。举一个例子:linux的常用命令find,去看看man文 档,初学者一定会觉得太复杂而不原意用,但是你一旦学会了就对他爱不释手。他的功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和 grep命令,那么他能完成非常复杂的操作,如果同样的操作你用图形界面的工具来完成,恐怕要多花十几陪的时间。因此linux高手经常会说:如果没有 find和grep我们还怎么活。但是现在大部分的linux初级用户受到windows影响都喜欢用图形界面的工具来完成一些基本的操作,我并不是说图 形界面不好。只是由于linux和windows设计思想的不同他们的操作方式也有很大不同。在windows下用图形界面操作会比敲命令快,但是 linux是一个命令行组成的操作系统,他的精髓在命令行! 无论图形界面发展到什么水平这个原理是不会变的!

   7,入门以后多学命令 

  当你看完了一两本入门书籍后就应该扩充自己的知识,多学习linux命令,但是不要在初学阶段就系统的学习linux命令,初学阶段只要学会书上提到过的 命令就可以了。单靠学习各种命令而成为高手是不可能的,但不会命令而成为高手也是不可能的。这就好比学英语,什么语法都不懂,只捧着单词手册背单词是学不 会英语的,但是没有单词词汇量英语水平也提不高的。 

  在linux中学习命令的最好办法是学习bash脚本编程。bash脚本比起其他语言来学习简单,但是功能却十分强大。通过学习bash编程,能让你掌握 大量的linux命令。另外,买一本命令参考手册是必要的,遇到不知道怎么用的命令可以随时查询,这要比察man文档快。特别适合英语不好,看不懂man 文档的人。 

  在linux中,命令可分为系统基本命令和应用程序命令。系统基本命令是所有的unix类系统都支持的命令,走到哪都不变,只要是unix类系统上就肯定 有。比如ls,rm,rmdir,cp,cd,mv,cat等等。这样的基本命令大约有200个,这些命令是一定要掌握的,我买了一本< redhat 7 指令参考手册>这本书非常好,他根据命令的常用指数分类,标明3颗星的为最常用命令,一定要掌握,两颗星的其次,1颗星的只要知道一下就可以了虽然 现在都已经FC3了,但是经典的UNIX基本命令几十年来都没有变过!另外有些命令是linux特有的或者是某一个应用程序的可执行文件比如xmms播放 器。这些只要知道就可以了,不知道也无所谓。有些命令比较少用,因此通常都记不住他的用法,对于这些命令至少要知道有这个命令,脑子里有印象,需要用的时 候察一下手册就可以了,但是决不能不知道这个命令的存在! 

  8,学会管理系统 

  等到有了基本知识,也掌握了一定量的命令用法后,就可以进一步学习管理系统。这些内容入门书上会有,但是不会很深入。要深入的学习系统管理,就要去买一本 类似之类的书。认真的看书并做实验,可以让你很快的进步。学习配置各种网络服务器,用linux搭建网络,这些都 是学习linux系统管理和网络管理的好方法。 到了这个阶段就可以经常上网察察资料,看发布软件的官方网站文档和FAQ,看看论坛精华区文章。但是不能本末倒置,多看书还是根本。书籍和官方文档可以让 你系统的学习,但是论坛可以让你学到一些小知识,小技巧。我本人也经常到论坛上来看看,因为即便是一个新手,也可能会发现一些你所不知道的小技巧,看论坛 可以学到这些小技巧。但是我看文档和看论坛的时间比不会小于4:1 。 可以把平时积累的问题一次在论坛上发问。 但是初学的时候不要频繁上论坛,因为你要问的问题都在书上写着,耐心一点,你很快就能看到了。 

  9,了解系统结构 

  等你有了一定的系统管理知识,知道了/etc下那些配置文件有什么用,知道了一般的网络服务器如何配置后,就可以去了解系统结构了。 了解系统结构不是要你去看什么文件夹放什么内容,而是要学习一些原理性的东西。比如系统是如何引导的,引导后启动了那些东西。系统中哪些是最基本的库文 件,有什么用等等。学习系统结构的最好方法是自己做一个linux系统,再也没有什么能比自己做一个linux系统更能学习系统结构的了。LFS (linux from strach)可以教你从源代码自己编译一个系统。通过自己编译一个系统,你就可以了结linux系统结构,知道哪些文件是干什么用的,以及他们如何协调 工作。当然,在你达到LFS水平之前还有很多事情要做,比如学会如何编译安装源代码发布的软件和编译新的内核等等。到了LFS水平,那么在大多数 linux论坛上你就可以被人称作”高手”了!到了这个地步,就相当于一撞大楼已经基本建好,但是还需要粉刷和装修,真正的细活还在后面! 

  永远记住天外有天,人外有人的道理。即便有了LFS水平,在那些搞linux系统开发,通读过linux内核代码的人看来你还是一个菜鸟。因此, 请时刻保持虚心的态度。即便是在 论坛上只有一颗星级别的人,也有可能是一个潜在的,真正的高手! 大多数真正的高手平时都在搞研发工作,哪里有时间上论坛啊! 倒是有很多大学还没毕业的学生,整天混在论坛上。 

  10,学习专业课程 

  如果你不是计算机专业的,而想把linux学好,就一定要学习专业课程。学习微机原理,操作系统,计算机网络等等专业课程是必需的。为什么同时开始学习 linux,有些人学的非常快,不到半年就成了高手,有些人玩来玩去还玩不出名堂,玩了一两年还是菜鸟? 因为那些学得快的人有基础,他们都学过专业课程。同样一篇文档,没有基础的人可能看了三遍还不明白,基础扎实的眼睛扫两下就懂了! 这就是专业和非专业的差别! 因此,要想达到更高的境界就一定要学习基础的专业课程。 

  11,保持虚心学习的态度 

  我想再重复一遍天外有天,人外有人的道理!保持虚心的学习态度不仅能让你学到更多知识,而且会让你受人尊重。 

  在linux的世界里,如果你想靠混论坛,发水贴,换几颗星星增加一下级别,然后再面对菜鸟说几句牛哄哄的话来赢得别人的尊重是不可能的。即便是一个刚入 门的菜鸟,也能分辨你回答问题的质量,从而知道你到底有多少水平。 另外,当你成了”高手”的时候,你也能从”菜鸟”那里学到很多知识。因为有很多问题是你从来没有想过的,认为自己肯定会的,但是实际遇到的时候会有困难。 而”菜鸟”们往往更善于发现这类问题。这就是中国人常说的”教学相长”! 

  在linux的世界里,越是水平高的人越谦虚,因为他们知道自己还有很多不知道的,而那些半瓶水就想晃荡的人反而自以为是,因为他们还不知道自己还有很多不知道的! 去看看,www。linuxforum。net 嵌入式开发和UNIX版块的牛人,他们很多都是有过好几年linux方面的工作经验,精通linux和unix的好手,但是每个人都保持着非常谦逊的态度,这些人是值得尊敬的。
 

]]>
  首先,我想引用一下别人说过的一句话:除非在过去的十年你一直生活在山洞里,否则你一定听说过linux。 

  是的,现在听说过linux,会一点linux基本操作的人多如牛毛,然而真正能用linux做一点事情的确少之又少,这就造成了现在的状况:各大 linux论坛十分热闹,但我国linux人材却还十分紧缺。到底是什么原因造成了这样的状况? 纠其原因,只有两个字:浮躁! 

  如果在论坛里来一次调查投票,看一下在论坛里的人到底有多少人手头有一本以上的正规linux教材。我想这个数字不会超过30%。 如果再问一下,有多少人完整的读过各发行版自带的入门文档,系统定制文档,系统管理 文档和系统安全 文档,恐怕这个数字不到10%。 如果进一步再调查一下究竟有多少人静下心来学习过操作系统和计算机网络 等和linux学习十分密切的专业课程,那么恐怕只有3%的数字都不到了。 

  这让我想到了98年前后IT泡沫时代的中关村。在中关村的大街小巷,到处是一个个意气分发牛哄哄的IT精英。他们戴着默镜,剔着小平头,张口闭口都是网 络,安全,信息,黑客,代码,产业。T恤背后写着三个字:别惹我! 然而最后IT泡沫一过,只有那些真正肯安安心心静心学习的人在IT界存活了下来。 

  现在国人学习linux的状况也是这样,学linux的人个个都意气分发,以为学习linux会用linux是多么了不起。学了一点皮毛就认为很牛了。但是那些企业用人单位却很难找到真正适合的linux人材。因此,我想就目前的状况发表一下我的看法。 

  首先,这篇文章是写给那些想成为linux高手,并真正想用linux做些事情的人。如果你只想做一个菜鸟,没事的时候在你双系统启动的电脑上偶尔选一次 linux,然后没事进去偷着乐,那就请你自便。另外,我想说明,和真正的牛人比起来,我自己还处于一个比较低的水平。我没有读过内核源代码,不知道 linux工作原理等等,但是通过摸索,至少我已经找到了通往高手的道路的方向。因此还是想说两句。 

  1,linux不是玩具 

  如果你想系统的学习linux,你必需清楚的认识到这一点。现在有很多人,号称是linux爱好者,但是他们大部分的事情还是用windows 做,而linux只是作为一个随便玩玩的系统。他们懂得一些linux的基本操作,知道有linux这个玩艺,也因为经常听人家说linux好就咬定了 linux就是好。只要有人说linux比windows差,那么他们就奋起反驳,他们也看不起用windows的人,认为用windows的人水平低。 但是自己用电脑的大部分时间还是用windows并且把重要的文件都放在了windows分区,因为他们骨子里只把linux当做玩具,没有真正领悟 linux的精髓所在。如果你真正想系统的学习linux,想用linux有所作为,那么请忘记windows的思维方式,慢慢感受和习惯linux的操 作方式,总有一天你会真正体验到他的奥妙所在,从而从自己内心深处喜欢他,使用他,而不是为了赶时髦或向人炫耀而使用他。 

  2,手头有一本好的入门教材吗 

  “如果你还没有好好的读完过一本linux安装及入门教材就不要到初学者论坛来问题!因为你连问问题的资格都没有! ” 这是我的一个比较偏激的观点。 

  如果你现在开始下决心学习linux了,那么第一件你要做的事情是到书店去挑一本好书。而不是到论坛社区去问该用什么版本,该如何学习 linux。一本好的入门教材可以让你快速领悟linux的操作方式,系统的基本使用等等。而且都是前人总结经验写出来的,他可以帮你搭起一个学习 linux的框架,对linux有一个总体的认识。就好比建一撞大楼前先打好地基,搭好混凝土框架。以后就可以慢慢往这个框架里添砖加瓦,最后建起大楼。 而那些想急于学习的,不想看书,只想靠混论坛来学习linux知识的人,就好比建一撞大楼,今天建好第一层,然后第一层就要全部粉刷好,装修好,家具买好 住进去,然后第二天再开始建第二层。这样没有整体规划的学习是学不好linux的,最后的结果是浪费自己的时间,也浪费别人的时间。 如果你不信,可以让实事去告诉你,以一年为限,你和你的一个朋友同时从0开始学linux,计算机基础差不多。你去买几本好书自己慢慢看边看边做实验,让 你的朋友整天到各大论坛瞎混零散的学些linux知识。也许一开始,你的朋友会比你懂得多,但是一年以后你的水平肯定在你的朋友之上。 在初学阶段,不要随便在论坛上发问,多看书是根本,即使真的非问不可的问题,也要先自己动手察资料 解决。实在不行再来问,高手不会鄙视菜鸟,因为每一个高手都是从菜鸟过来的,他们都知道菜鸟的苦衷。但是高手会看不起那些自己不愿动手动脑不会学习解决问题而只想得到现成答案的人。那样的人会被高手在心里暗骂成不配用linux的蠢货。 

  你需要以下几种书:一本好入门教材->一本linux指令参考手册->linux系统管理手册->讲解linux系统原理的书。 

  一开始,你只需要入门教材就可以了。并且严格安教材的讲解去学习,不要一天到晚想着去装显卡驱动啦,装游戏啦,装软件啦,这些都没有必要。你就当你自己的 电脑不能上网,只能通过 看书学习。慢慢看书,稳抓稳打。慢慢地就融会贯通了。这时候你再到linux初学者论坛去看看,你在那里早已经是高手了。 

  另外,一开始你要选定一本入门教材,但是不能只看一本,因为有些书上讲的,可能是另外的书上没有的。因此,重点选一本教材看完。然后再看两三本入门教材浏 览一下。作为对第一本书的知识的扩充和巩固。 在看书过程中,如果你有什么不懂的,不要急于上论坛问,自己认真看几次,实在不懂没有关系,把问题放在那里。不要钻牛角尖不懂不肯放手,这种精神是好的, 但是方法是错误的。你尽管学下去,也许你看完书本以后的内容,就对前面不懂的内容豁然开朗了。这是在学习linux中常有的情况。 

  另外,现在很多入门书籍是针对非技术型用户的。(我把那些对linux本身不感兴趣,只想用他来上网,听音乐和打字的人称为非技术型用户,而把对linux本身感兴趣的人称为技术用户) 

  这些针对非技术型用户的入门书籍几乎通篇都是插图,讲解的内容都是如何在图形界面下操作。这些书籍并不能帮你成为一个高手。反而会让你养成倚赖鼠标和图形 界面操作的习惯以后很难改掉。因此不能看这些书,一定要买那些一开始就从系统基本机构基本命令开始讲解的书籍。我看过的第一本linux入门书籍共有十多 章,但是他从第十一章开始才大致的讲解了一下图形界面的知识。我很感谢这本书,让我一开始就脱离了windows的思维方式,给我以后的进一步学习带来了 很大帮助。 

  完成以上的内容,你就完成了建大楼打地基建混凝土框架的过程了。可以接下来进一步学习了。

   3,你看完系统自带的文档了吗? 

  当你完成入门的过程后,就可以开始读其他的文档,然后到论坛的精华区看看,向你建起来的大楼框架中添砖头了。当然 ,首先要读的,还是系统自带的文档。 

  绝大多数linux发行版都自带非常详细的文档。比如我一直在用的redhat,他有从系统安装到系统安全,针对不同层次的人的详尽文档。静下心来,把这 些文档读完,比看任何论坛的精华区都有用。书籍和文档就好比是你每天都离不开的一日三餐,论坛区的精华文档就好比是点心和水果。你可以不吃点心和水果,但 是决不能不吃正餐。 

  当然,不能为看文档而看文档,你一定要边看边安文档中说的做试验验证。这样才印象深刻,否则看过就忘记了等于没有看。另外,如果真心想学习linux就不 要吝啬,也不要害怕丢失数据而不敢做实验。我建议你去买一个小的二手硬盘,然后放开手干。不要怕丢失数据而不敢做,如果你没有学会技能,将来做了 linux系统管理员或者网络管理员到那时因为不会而丢了数据就是大事情了。 

  4,学习linux不是逛自由市场。 

  经常看到有人问用什么版本的linux好,其实只要你认真学习无论什么版本都挺好的。要知道,开发linux发行版的人都是通读过linux内核代码,对 linux原理极其精通的人,而且每一个开发团队都对他的发行版做过测试后放出的。那些国际知名的大品牌更是如此。 因此,讨论什么版本好并无意义,关键是你是不是真心想学。不过,为了避免曲高和寡,最好选用的人多的版本,比如redhat manrake suse 等等。 国内有一两个linux版本做的也不错,但是国内的linux都是面向非技术型用户开发的,因此,如果你想成为高手,建议不要用国内的版本。 

  学习linux不是逛自由市场,选定版本就要静下心来学习。不要今天换版本明天要升级。这样对你没有好处。我见过一些人号称用过十几种甚至几十种 linux,向人谈论起来头头是到,好像懂的很多,但是如果你让他去用linux搭建一个web服务器,做一个linux网关,他就什么都不会了。他们把 时间都浪费在了版本的转换上了。 

  5,你能看懂英文文档吗? 

  谈论这个问题,我有点低气不足,因为我自己的英语很差。但是,至少我可以无障碍的读完一般的计算机文档。计算机英语很简单,只要熟悉了计算机专业英语,高 中毕业的水平就可以轻松的阅读计算机文档了。如果你的英语实在太差了,连最简单的计算机英语文档都看不懂,那么在学习linux的同时,请赶紧学习英语。 也许你说,你可以看翻译的文档,当我还是一个菜菜鸟的时候,也是这样认为的。但是,后来才发现,如果你想深入学习linux,看不懂因为文档实在是太难 了。写的最好的,最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。即便是非英语国家的人发布技术文档,也都首先翻译成英语在国际学术杂志 和网络上发表。你去看看各大软硬件生产商的官方网站,有哪一个不是用英语作为其主站的? 长期用windows的人会很不习惯这一点,装个软件还要看半天文档,应为windows用起来实在太简单了。但是如果你想学习linux就必需学会看各 种文档,而大部分的文档都是用英语写的。我发现很多人甚至连man文档都不会看,有什么命令不会用了就跑到论坛上来问,还装出一副可怜相,乞讨一个命令的 用法。有这些时间还不如自己看看man文档,即使你一个一个单词的翻译成中文再自己看都比问别人强,因为别人的回答再怎么详尽都比不上man文档详尽。安 装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。否则,说明文档都不看,结果出了问题再 来找答案反而浪费时间! 古人说欲速则不达就是这个道理! 

  6,忘记windows的思维方式 

  思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。现在很多人用linux。但是,他们用linux的方式完全是 windows的那一套方式。骨子里都是windows的思想。这样是不能领悟linux的精髓体验不到他的优越性的。我前几天看到一个朋友要把刚装了不 到2天的mandrake 10 删除掉,我问他为什么,他说太慢了,受不了,还是用windows快。然后我留意了一下他用linux的方式,他的所有操作都带着windows的影子。 他连最基本的删除,移动文件这样的操作都要用鼠标,这样当然慢了!最后我只好说,你删除吧,你不适合用linux,linux不是这样用的。各位可以去看 看那些linux高级用户,他们是怎样操作的。通常他们都是在X上开一个xterm或者rxvt终端,80%以上的操作都在这个终端下用命令完成,因为 linux的命令行十分强大,速度也十分快,简单的几个命令的组合就能完成非常复杂的操作。举一个例子:linux的常用命令find,去看看man文 档,初学者一定会觉得太复杂而不原意用,但是你一旦学会了就对他爱不释手。他的功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和 grep命令,那么他能完成非常复杂的操作,如果同样的操作你用图形界面的工具来完成,恐怕要多花十几陪的时间。因此linux高手经常会说:如果没有 find和grep我们还怎么活。但是现在大部分的linux初级用户受到windows影响都喜欢用图形界面的工具来完成一些基本的操作,我并不是说图 形界面不好。只是由于linux和windows设计思想的不同他们的操作方式也有很大不同。在windows下用图形界面操作会比敲命令快,但是 linux是一个命令行组成的操作系统,他的精髓在命令行! 无论图形界面发展到什么水平这个原理是不会变的!

   7,入门以后多学命令 

  当你看完了一两本入门书籍后就应该扩充自己的知识,多学习linux命令,但是不要在初学阶段就系统的学习linux命令,初学阶段只要学会书上提到过的 命令就可以了。单靠学习各种命令而成为高手是不可能的,但不会命令而成为高手也是不可能的。这就好比学英语,什么语法都不懂,只捧着单词手册背单词是学不 会英语的,但是没有单词词汇量英语水平也提不高的。 

  在linux中学习命令的最好办法是学习bash脚本编程。bash脚本比起其他语言来学习简单,但是功能却十分强大。通过学习bash编程,能让你掌握 大量的linux命令。另外,买一本命令参考手册是必要的,遇到不知道怎么用的命令可以随时查询,这要比察man文档快。特别适合英语不好,看不懂man 文档的人。 

  在linux中,命令可分为系统基本命令和应用程序命令。系统基本命令是所有的unix类系统都支持的命令,走到哪都不变,只要是unix类系统上就肯定 有。比如ls,rm,rmdir,cp,cd,mv,cat等等。这样的基本命令大约有200个,这些命令是一定要掌握的,我买了一本< redhat 7 指令参考手册>这本书非常好,他根据命令的常用指数分类,标明3颗星的为最常用命令,一定要掌握,两颗星的其次,1颗星的只要知道一下就可以了虽然 现在都已经FC3了,但是经典的UNIX基本命令几十年来都没有变过!另外有些命令是linux特有的或者是某一个应用程序的可执行文件比如xmms播放 器。这些只要知道就可以了,不知道也无所谓。有些命令比较少用,因此通常都记不住他的用法,对于这些命令至少要知道有这个命令,脑子里有印象,需要用的时 候察一下手册就可以了,但是决不能不知道这个命令的存在! 

  8,学会管理系统 

  等到有了基本知识,也掌握了一定量的命令用法后,就可以进一步学习管理系统。这些内容入门书上会有,但是不会很深入。要深入的学习系统管理,就要去买一本 类似之类的书。认真的看书并做实验,可以让你很快的进步。学习配置各种网络服务器,用linux搭建网络,这些都 是学习linux系统管理和网络管理的好方法。 到了这个阶段就可以经常上网察察资料,看发布软件的官方网站文档和FAQ,看看论坛精华区文章。但是不能本末倒置,多看书还是根本。书籍和官方文档可以让 你系统的学习,但是论坛可以让你学到一些小知识,小技巧。我本人也经常到论坛上来看看,因为即便是一个新手,也可能会发现一些你所不知道的小技巧,看论坛 可以学到这些小技巧。但是我看文档和看论坛的时间比不会小于4:1 。 可以把平时积累的问题一次在论坛上发问。 但是初学的时候不要频繁上论坛,因为你要问的问题都在书上写着,耐心一点,你很快就能看到了。 

  9,了解系统结构 

  等你有了一定的系统管理知识,知道了/etc下那些配置文件有什么用,知道了一般的网络服务器如何配置后,就可以去了解系统结构了。 了解系统结构不是要你去看什么文件夹放什么内容,而是要学习一些原理性的东西。比如系统是如何引导的,引导后启动了那些东西。系统中哪些是最基本的库文 件,有什么用等等。学习系统结构的最好方法是自己做一个linux系统,再也没有什么能比自己做一个linux系统更能学习系统结构的了。LFS (linux from strach)可以教你从源代码自己编译一个系统。通过自己编译一个系统,你就可以了结linux系统结构,知道哪些文件是干什么用的,以及他们如何协调 工作。当然,在你达到LFS水平之前还有很多事情要做,比如学会如何编译安装源代码发布的软件和编译新的内核等等。到了LFS水平,那么在大多数 linux论坛上你就可以被人称作”高手”了!到了这个地步,就相当于一撞大楼已经基本建好,但是还需要粉刷和装修,真正的细活还在后面! 

  永远记住天外有天,人外有人的道理。即便有了LFS水平,在那些搞linux系统开发,通读过linux内核代码的人看来你还是一个菜鸟。因此, 请时刻保持虚心的态度。即便是在 论坛上只有一颗星级别的人,也有可能是一个潜在的,真正的高手! 大多数真正的高手平时都在搞研发工作,哪里有时间上论坛啊! 倒是有很多大学还没毕业的学生,整天混在论坛上。 

  10,学习专业课程 

  如果你不是计算机专业的,而想把linux学好,就一定要学习专业课程。学习微机原理,操作系统,计算机网络等等专业课程是必需的。为什么同时开始学习 linux,有些人学的非常快,不到半年就成了高手,有些人玩来玩去还玩不出名堂,玩了一两年还是菜鸟? 因为那些学得快的人有基础,他们都学过专业课程。同样一篇文档,没有基础的人可能看了三遍还不明白,基础扎实的眼睛扫两下就懂了! 这就是专业和非专业的差别! 因此,要想达到更高的境界就一定要学习基础的专业课程。 

  11,保持虚心学习的态度 

  我想再重复一遍天外有天,人外有人的道理!保持虚心的学习态度不仅能让你学到更多知识,而且会让你受人尊重。 

  在linux的世界里,如果你想靠混论坛,发水贴,换几颗星星增加一下级别,然后再面对菜鸟说几句牛哄哄的话来赢得别人的尊重是不可能的。即便是一个刚入 门的菜鸟,也能分辨你回答问题的质量,从而知道你到底有多少水平。 另外,当你成了”高手”的时候,你也能从”菜鸟”那里学到很多知识。因为有很多问题是你从来没有想过的,认为自己肯定会的,但是实际遇到的时候会有困难。 而”菜鸟”们往往更善于发现这类问题。这就是中国人常说的”教学相长”! 

  在linux的世界里,越是水平高的人越谦虚,因为他们知道自己还有很多不知道的,而那些半瓶水就想晃荡的人反而自以为是,因为他们还不知道自己还有很多不知道的! 去看看,www。linuxforum。net 嵌入式开发和UNIX版块的牛人,他们很多都是有过好几年linux方面的工作经验,精通linux和unix的好手,但是每个人都保持着非常谦逊的态度,这些人是值得尊敬的。
 

]]>
2 https://bbs.viyf.org/?thread-index-fid-6-tid-128.htm https://bbs.viyf.org/?thread-index-fid-6-tid-128.htm
LINUX下查看程序进程对应端口方法 https://bbs.viyf.org/?thread-index-fid-6-tid-127.htm https://bbs.viyf.org/?thread-index-fid-6-tid-127.htm Sun, 05 Feb 2023 11:02:30 +0800 armstrong 用[hide]netstat -anp[/hide]命令,会输出类似下面的行:

Active UNIX domain sockets (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:523                 0.0.0.0:*                   LISTEN      4275/db2dasrrm      
tcp        0      0 0.0.0.0:812                 0.0.0.0:*                   LISTEN      2750/rpc.statd      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      2730/portmap        
tcp        0      0 0.0.0.0:50000               0.0.0.0:*                   LISTEN      3091/db2tcpcm 0     
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2884/cupsd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      3103/sendmail: acce 
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      3814/1              
tcp        0      0 192.168.1.161:50000         192.168.1.161:34663         ESTABLISHED 9757/db2agent (JKGL 
tcp        0      0 192.168.1.161:50000         192.168.1.161:36871         ESTABLISHED 4457/db2agent (JKGL 
tcp        0      0 :::9444                     :::*                        LISTEN      5140/java  

其中上面红色的为进程号,由进程号可推知是程序在使用的端口,如果想知道是什么程序,可使用下命令:

ps -ef|grep PID
 

]]>
用[hide]netstat -anp[/hide]命令,会输出类似下面的行:

Active UNIX domain sockets (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:523                 0.0.0.0:*                   LISTEN      4275/db2dasrrm      
tcp        0      0 0.0.0.0:812                 0.0.0.0:*                   LISTEN      2750/rpc.statd      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      2730/portmap        
tcp        0      0 0.0.0.0:50000               0.0.0.0:*                   LISTEN      3091/db2tcpcm 0     
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2884/cupsd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      3103/sendmail: acce 
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      3814/1              
tcp        0      0 192.168.1.161:50000         192.168.1.161:34663         ESTABLISHED 9757/db2agent (JKGL 
tcp        0      0 192.168.1.161:50000         192.168.1.161:36871         ESTABLISHED 4457/db2agent (JKGL 
tcp        0      0 :::9444                     :::*                        LISTEN      5140/java  

其中上面红色的为进程号,由进程号可推知是程序在使用的端口,如果想知道是什么程序,可使用下命令:

ps -ef|grep PID
 

]]>
2 https://bbs.viyf.org/?thread-index-fid-6-tid-127.htm https://bbs.viyf.org/?thread-index-fid-6-tid-127.htm
搬瓦工快照提取文件 https://bbs.viyf.org/?thread-index-fid-6-tid-126.htm https://bbs.viyf.org/?thread-index-fid-6-tid-126.htm Sun, 16 Oct 2022 07:41:35 +0800 armstrong 搬瓦工VPS后台有提供自动镜像备份数据功能,下载下来的备份文件打开是个.disk后缀的raw格式镜像。我们可以使用kpartx方式挂载,然后读取提取想要的数据。
建议准备一台新VPS,重装系统后,进行以下操作:
使用wget 下载搬瓦工的快照文件,并解压
wget http://*****/snapshot-123456-******.tar.gz
tar -zxvf snapshot-123456-******.tar.gz
 
[hide]
1、losetup -f   #查看哪个loop设备是空闲的
/dev/loop0      #loop0这个设备是空闲的
 
losetup /dev/loop0 vm-1308724.disk
kpartx -av /dev/loop0
 
如果没有kpartx命令可以先安装
安装 kpartx
apt install kpartx
在次执行
kpartx -av /dev/loop0
#输出结果如下
add map loop0p1 *****
add map loop0p2 *****
add map loop0p5 **********
 
然后查看你想要的在哪个分区
比如我的数据在loop0p2
[/hide]
 
#把loop0p2 挂载到 /mnt
mount /dev/mapper/loop0p2 /mnt
 
就可在/mnt里找到相关数据了
 
数据复制完成后记得卸载镜像
2、卸载镜像
umount /mnt
kpartx -dv /dev/loop0
losetup -d /dev/loop0
 
以上操作在 Debian 8 x86_64   其它linux系统基本上使用方法一致
另外还有个DD恢复数据到另外一台VPS,然后再进行提取操作的方法
进入救援模式,然后
完整命令
wget -qO- http://xxxxx/xxx.tar.gz  | tar -xzO | dd of=/dev/sda
重启机器,这台机器里面的文件,就跟搬瓦工一致了
 

]]>
搬瓦工VPS后台有提供自动镜像备份数据功能,下载下来的备份文件打开是个.disk后缀的raw格式镜像。我们可以使用kpartx方式挂载,然后读取提取想要的数据。
建议准备一台新VPS,重装系统后,进行以下操作:
使用wget 下载搬瓦工的快照文件,并解压
wget http://*****/snapshot-123456-******.tar.gz
tar -zxvf snapshot-123456-******.tar.gz
 
[hide]
1、losetup -f   #查看哪个loop设备是空闲的
/dev/loop0      #loop0这个设备是空闲的
 
losetup /dev/loop0 vm-1308724.disk
kpartx -av /dev/loop0
 
如果没有kpartx命令可以先安装
安装 kpartx
apt install kpartx
在次执行
kpartx -av /dev/loop0
#输出结果如下
add map loop0p1 *****
add map loop0p2 *****
add map loop0p5 **********
 
然后查看你想要的在哪个分区
比如我的数据在loop0p2
[/hide]
 
#把loop0p2 挂载到 /mnt
mount /dev/mapper/loop0p2 /mnt
 
就可在/mnt里找到相关数据了
 
数据复制完成后记得卸载镜像
2、卸载镜像
umount /mnt
kpartx -dv /dev/loop0
losetup -d /dev/loop0
 
以上操作在 Debian 8 x86_64   其它linux系统基本上使用方法一致
另外还有个DD恢复数据到另外一台VPS,然后再进行提取操作的方法
进入救援模式,然后
完整命令
wget -qO- http://xxxxx/xxx.tar.gz  | tar -xzO | dd of=/dev/sda
重启机器,这台机器里面的文件,就跟搬瓦工一致了
 

]]>
1 https://bbs.viyf.org/?thread-index-fid-6-tid-126.htm https://bbs.viyf.org/?thread-index-fid-6-tid-126.htm