Normal view
前 Android 团队再度聚首,计划开发 AI 时代的「操作系统」
人工智能助理,或者「AI 代理」无疑是近期 AI 领域的热词之一,许多科技公司都已经在这条赛道上押宝。
以移动端为例,苹果为了使其智能助理「Siri」更加聪明,为其接入了大语言模型 ChatGPT,并计划使其拥有感知和理解屏幕内容的能力。
荣耀在不久之前发布的 Magic 9.0 系统则标志着手机正式进入「自动驾驶」时代,其内置的「YOYO 智能体」得益于 AI 内核的加持,还能实现「一句话操控手机」。
▲图源:TechRadar
而在 AI 技术同样深度介入的 PC 端,人工智能助理的能力也不容忽视:Anthropic 在上个月发布的最新 Claude 模型中同步推出了「computer use」功能,旨在代替用户直接与计算机进行交互。
据悉,OpenAI 也有计划入局该领域,将于明年 1 月推出一款名为「Operator」的 AI 代理。OpenAI 首席产品官凯文·韦尔(Kevin Weil)表示让 ChatGPT 具备自主执行任务的能力将是明年 OpenAI 的一大重点。
▲图源:TNCR
在 Android 操作系统出现之前,即使移动平台的前景相当广阔,但作为开发者来讲,在移动设备上构建任何东西都很困难。
对此,前 Google 高管大卫·辛格尔顿(David Singleton)认为在人工智能时代,同样的情况正在上演。他指出「我们可以看到 AI 的前景,但作为开发人员,构建任何好的东西真的很难」。
基于以上理念和考虑,辛格尔顿同前 Google 副总裁雨果·巴拉(Hugo Barra)等人联合创办了 AI Agent 操作系统创企「/dev/agents」。后者于 26 日在 X 上公开宣布了这一消息。
▲图源 :X
/dev/agents 在今年 10 月成立,总部位于美国旧金山,目前已经不再处于隐身状态。正如巴拉在推文中所说,新公司将「回到我们的 Android 根源,为人们和 AI 代理构建一个新的操作系统」。
换句话说,目前开发者缺乏构建 AI 代理的标准工具和系统,而 /dev/agents 计划构建一个统一的、基于云的跨平台操作系统,进而充分实发挥 AI 代理的潜力。公司预计将在明年初到中旬推出其产品的第一个版本。
这相当于一个「通用技术框架」,类似于 iOS 或者 Android 操作系统。此外,该公司还计划使用生成式 AI 提供个性化的用户界面,让人们能够更自然地与硬件设备上的代理进行交互。
▲图源:MakeUseOf
值得一提的是,/dev/agents 的联合创始人们个个来头不小。公司的 CEO 辛格尔顿在谷歌期间领导了安卓核心应用的开发和 Google Store 团队,末期则主要负责可穿戴设备安卓系统。后来离开谷歌,加入了金融科技企业 Stripe。
/dev/agents 的 CPO 巴拉此前在谷歌担任移动业务产品经理,负责移动与安卓业务,后来加入 Android 团队,负责整个安卓生态系统的软硬件业务,一路升至谷歌副总裁的职位。2013 年,巴拉加入小米集团,全权负责其海外业务。
公司的 CTO 和设计负责人分别由费卡斯·柯克帕特里克(Ficus Kirkpatrick)和尼古拉斯·吉特科夫(Nicholas Jitkoff)担任,前者负责安卓 1.0 版本从内核到应用程序所有层级的软件堆栈,后者则是初代安卓语音搜索和操作的负责人。
除了四位联合创始人以外,/dev/agents 还有另外两名员工。巴拉表示「这是一个构建了过去三代操作系统(安卓系统、可穿戴设备和 AR/VR)的团队」。
▲David Singleton(图源:CNBC)
也正是因为如此「豪华」的初创阵容,使得 /dev/agents 已经筹集到了 5600 万美元的种子轮融资,与此同时本轮融资对公司的估值达到 5 亿美元。
领投的风险投资公司「Index Ventures」的合伙人尼娜·阿查吉安(Nina Achadjian)认为创始人的背景是决定投资的核心,并且表示她抓住了支持该公司的机会:
这是一个非常困难的技术问题,也是一个非常大的想法。如果有一个团队来做这件事的话,从头开始构建 Android 和 Stripe 的团队,应该成为这个团队。
联合领投的 Alphabet 的独立成长基金 CapitalG 更是毫不吝啬对四位联合创始人的赞美,称他们是「本世纪每一次重大计算平台转变的先驱」,并且作为投资者,「遇到像这样出色的创始团队确实很少见」。
▲图源:CaptialG
许多投资者相信 AI 代理的功能将会越来越齐全,但同时他们也承认目前仍然没有通用的 AI 基础设施。尽管不少公司正在开发 AI 代理框架的不同部分,但 /dev/agents 的支持者认为,新的第三方操作系统将会成为释放潜力的关键。
另外,辛格尔顿表示 /dev/agents 的商业模式与 Android 的获利方式大致相同,可能会从销售额中分成,或向用户收取订阅费用。他还表示公司计划保持相对灵活的运营模式,类似于 Android 早期。
辛格尔顿在接受彭博社采访时说「我们需要一个类似 Android 的 AI 时刻」,这也是他对 /dev/agents 和人工智能代理的未来愿景。
#欢迎关注爱范儿官方微信公众号:爱范儿(微信号:ifanr),更多精彩内容第一时间为您奉上。
AI 生态浪潮下,TWS 耳机应有怎样的自我修养?
不知道你有没有发现,AI 大模型正在潜移默化地影响着我们在数字生活里的许多行为习惯。
从拍照识图到 AI 对象消除,从多轮对话到近乎真人的 AI 情感陪伴,AI 大语言模型等技术不仅拓宽了手机等终端设备的功能边界,也进一步加强了我们对它的依赖。
虽然在现有的市场格局下,那些所谓的 AI OS 尚未产生重大影响,但大模型的潜力不可忽视,未来的智能手机、AI 耳机、智能手表未必一定是今天的样子。
所以业内现在已经存在着一个共识:AI 并非万能,但没有 AI 却是万万不能。
在今年 6 月的 HDC2024 上,鸿蒙操作系统迎来了自诞生以来最大的一次更新,正式发布了 HarmonyOS NEXT 系统,也就是剥离安卓源代码的「纯血鸿蒙」,并且带来了系统级 AI 能力。
「鸿蒙原生智能」把分散在大模型和应用里的 AI 能力,聚合成为适用于每个普通用户的日常体验,从底层架构开始追逐全场景智能的高效协同体验。
11 月 26 日,随着华为Mate 70 系列的发布,我们也迎来了第一款搭载 HarmonyOS NEXT 系统的旗舰 TWS 耳机——华为FreeBuds Pro 4。
鸿蒙 NEXT 的 AI 能力,也开始从手机延伸到原生鸿蒙的 TWS 耳机之中。
生态之中,耳机与手机唇齿相依
近十年间,消失于智能手机之上的 3.5mm 耳机孔,催生了 TWS 耳机的繁荣业态。换句话说,几乎每人一部智能手机的同时,也意味着几乎每人都会拥有一副 TWS 耳机。
在 IDC 最新的《全球可穿戴设备追踪报告》中可以看到,耳穿戴设备预计在 2024 年依然保持着稳健增长。
保持增长的原因是新兴市场的进一步普及和成熟市场的更新周期的开始,尤其是成熟市场的消费者在期望更换新一代的耳穿戴设备产品(耳机)来满足日常更多不同场景下的细分需求,甚至在考虑为多个不同的场景而配备多副耳机。
换句话说,消费者对新时代耳机日益增长的功能需求,正促使厂商进行新一轮的技术革新和产品迭代。而在 AI 大模型赋能系统交互的浪潮下,TWS 耳机与手机之间的关系正变得前所未有的紧密。
皆因手机和耳机之间,逐渐形成了「主机与终端」的关系联结——手机作为核心计算和连接枢纽,为 TWS 耳机提供了不可或缺的算力和网络连接能力;同时耳机也延伸并增强了手机的 AI 交互体验,在用户的耳边提供了智能语音助手的自然入口,并在多场景之中将手机的 AI 能力延伸到更加便捷和多元的使用场景。
正如刚刚发布的华为FreeBuds Pro 4,只要你将耳机佩戴在耳边并与手机保持连接,随时随地都能够轻声说出「小艺小艺」这句话来唤醒手机内的「小艺智能体」并来到你的耳边,聆听你的指令。
▲ 通过华为FreeBuds Pro 4 来直接调用手机上的小艺智能体
其中当属「随时随地」的体验最为难能可贵,这意味着你可以在手机息屏,或者是在湿手/烹饪/绘画等不想要直接操作手机的场景下,直接用耳机就能唤醒小艺来执行相应的语音指令,包括但不限于接打电话、音乐播放、耳机降噪、控制智能家居、设定闹钟或定时器、记录备忘录等等功能。
甚至是在你有差旅计划的时候,也可以通过耳机下达语音指令让小艺推荐出行计划、搜索导航路线、查看机票等等,而来到耳边的小艺也不负众望,跳过了一系列繁琐的聚合搜索操作,直接将结果呈现于屏幕之上,并在你的耳边一一述说。
尤其是需要轻声细语且不便掏出手机的场景,你也可以通过触碰耳机上的触控按钮来唤醒小艺,让华为FreeBuds Pro 4 耳机腔体上的三麦克风来精准地拾录你的语音指令,再将结果传递到你的耳边。
▲ 「小艺翻译」内搭载的「面对面翻译」功能,可以调用FreeBuds Pro 4 来聆听对话并进行翻译语音反馈
首发的「小艺翻译」功能更是支持「面对面翻译」和「同声传译」功能——只需要佩戴着华为FreeBuds Pro 4,耳机就能够收录对方的声音,并实时将翻译结果传达到你的耳边,传译所需的时延极低,戴着耳机就像是身边带着一个专业的翻译助理。
显然,基于大语言模型升级之后的小艺智能体,已经成为一个称职的私人生活管家、办公助手、娱乐助理。从这个角度来看,为了打造一种「用过就离不开」的 AI 交互体验,华为FreeBuds Pro 4 应该就是搭载原生鸿蒙系统的华为手机们,最亲密的智慧伴侣。
从弱连接到强连接,耳机与手机从未如此紧密
在 AI 时代,TWS 耳机和智能手机的「连接」,不仅是对基础听音功能的实现,更是成为对 AI 智慧能力尽情发挥的关键环节。尤其是 AI 驱动的功能,例如智慧问答、智慧翻译等功能,都是需要耳机和手机之间进行高频且大量的数据交换,这也就意味着手机和耳机之间,需要具备超低延迟且高带宽的传输能力。
与此同时,耳机和手机的连接需要在各种复杂的环境中保持稳定,尤其是在人群密集区域或信号干扰的场景下,耳机和手机之间的连接,也需要具备更优的抗干扰能力和可靠持续的连接稳定性。
不难看出,要满足手机和耳机 1+1>2 的 AI 智慧交互体验,对 TWS 耳机与手机之间传输的低延时、稳定性和速度,又提出了新的要求。
为了获得「无线胜有线」的连接能力,华为在 TWS 耳机上引入了星闪连接核心技术——暨 Polar 码技术。
得益于麒麟 A2 芯片和星闪连接技术,华为FreeBuds Pro 4 的传输速率有了 53% 的提升——除了可以基于 L2HC 4.0 编解码技术提供 2.3Mbps 无损音质传输以外,还大幅提升了无线抗干扰能力,在更远的距离上依然能够与鸿蒙原生手机保持稳定的连接,同时也保持着更低的时延和更高的响应效率。
就目前的能力体现而言,在短距离无线通信领域上,如果说蓝牙是「弱连接」,那么星闪(NearLink)就是「强连接」。有了「星闪」,华为耳机与华为手机的关系从未如此紧密可靠。
当然,对于 TWS 耳机而言,有了紧密的无线连接也还是需要直面「随手丢」的遗落痛点,在社交媒体上我们经常可以看到有用户在抱怨 TWS 耳机不小心弄丢了的情况,甚至因为 TWS 耳机太多人遗失了单边耳机或者耳机盒,社媒上还催生了「无线耳机相亲角」的相关话题。
为此,华为FreeBuds Pro 4 支持「离线查找」功能,启用「查找」之后,即便耳机或充电盒不在身边,也能通过远距离地图定位具体的位置,并且支持智能遗落提醒和耳机上线通知功能。同时有赖于「强连接」的星闪功能,华为FreeBuds Pro 4 的耳机盒支持「星闪查找」功能,用户可以在清晰的方位指引下,快速定位耳机盒的位置,而且耳机盒还可以响铃提升,帮助用户快速寻回。
华为表示,FreeBuds Pro 4 还支持「楼层定位」功能,可以通过华为查找网络查看丢失耳机的具体楼层位置。预计到 2024 年底,楼层定位能力将覆盖全国超过 300 个省市地区的 8000 多个大型商场、机场、高铁站等公共场所。
AI 生态中,TWS 耳机应有怎样自我修养?
不难发现,现有的 TWS 耳机使用痛点,无论是音质、稳定性、抗干扰等等,本质上都是「连接」的问题。
显然,擅长于「连接好一切」的华为,早已明晰了提升 TWS 耳机连接能力的重要性,并持续通过技术创新来解决一切与「连接」相关的难题。
纵观华为公司的发展历程,你会发现华为的确很执着、也很擅长于做好「连接」这件事情。
作为全球领先的通信设备供应商,华为在移动通信领域拥有丰富的经验和技术储备。从 2G 到 5G,华为始终处于行业前沿,提供高质量的网络设备和解决方案,确保全球数十亿用户的稳定连接。
值得一提的是,星闪技术起源于华为的超级蓝牙(绿牙)技术,绿牙不但能够涵盖传统蓝牙的功能,而且实测下来的稳定性和极限距离都远超当时的传统蓝牙技术。为了加快我国科技自立自强的步伐,华为继续投入研发这个新一代无线短距通信技术,并作为主要的技术贡献方,在 2020 年牵头成立了负责制定和规范星闪技术的「星闪联盟」。
作为中国自主原生的新一代无线短距通信技术,星闪在低时延、多链接、局域无线长距离高速要求等场景下均有显著优势。在 HDC2023 上,华为终端正式宣布,将星闪技术纳入到鸿蒙生态当中,让星闪为鸿蒙生态的万物互联提供一个坚实可靠的连接技术底座。
于是在 AI 浪潮迅速席卷全球消费电子领域的当下,我们在搭载原生鸿蒙系统的华为FreeBuds Pro 4 身上,确实是可以窥见智慧耳机必备的一些「自我修养」。
核心,是智慧耳机必须要与手机长期保持「强连接」,用更加粗壮的无形耳机线来拓宽 TWS 耳机音质和降噪的上限,让耳机的「基本功」表现得更加扎实。
其次,作为手机 AI 能力的延伸,TWS 耳机不再是单一的音频设备,而是化身成为 AI 生态里深度整合的交互终端,以「强连接」来实现对精准语音的识别并带来几乎无延迟的反馈,让小艺智能体可以像《钢铁侠》里的贾维斯一样,做到如影随形,瞬时响应并且越用越懂你。
可能随着未来技术的进一步发展,AI 耳机内在的算力会进一步暴涨,有望真的可以在端侧加载一个像「贾维斯」那样复杂的拟人化 AI 助手,可以完成更多的事情。我们也在华为的专利库当中,看到了 TWS 耳机有望增加一个低功耗的摄像头来智能识别周遭环境路况,从而提升佩戴者的出行安全。
但就目前而言,唯有让手机与耳机之间实现高效协作,依托于手机的算力和耳机的交互特性,才能让 AI 能力真正能够融入用户的日常生活,带来更优的体验。
如你所见,在以华为手机为核心的原生鸿蒙系统的生态之中,华为耳机与华为手机不再是单一的独立设备,而是共同组成了一个浑然一体的超级终端,共同构建出完整的鸿蒙生态系统体验。
说到这里,大家应该就可以理解,为什么能够说华为FreeBuds Pro 4 作为首款搭载 HarmonyOS NEXT 的智慧耳机,与首款出厂就预装 HarmonyOS NEXT 的华为 Mate 70 系列手机,天生便是一体。
#欢迎关注爱范儿官方微信公众号:爱范儿(微信号:ifanr),更多精彩内容第一时间为您奉上。
AI 会促使设计师成为更完整的人
最近关于 AIGC 的关注度太高了,自己也时不时会抽空去了解一些情况,或者尝试去用一些工具。很多关于 AI 要替代人的观点大行其道,也一直有不少 AI 要让设计师失业的看法在坊间流传。但我自己的感受和看法是:
在 Midjourney、Stable Diffusion、ChatGPT 这些 AI 工具出现后,「手头功夫」并没有因此丧失意义,它们只是不再具备作为门槛的价值,但依旧是重要的前提。因为「手头功夫」是培养我们发掘问题、判断优劣和快速取舍的重要训练,缺少这部分锻炼,会让人在这一系列 AI 工具面前感到无力。准确地识别问题并提出诉求,这是未来教育的重中之重,也会反过来强调人的价值。
正好,前段时间后浪送了我一本书,是前微软包容性设计的首席总监 Kat Holmes 写的《误配》。一边看这本书,我就一边在结合自己的工作和最近关于 AIGC 的思考,我觉得这本书里提倡的理念,正好回应了当下的舆论思潮。
大部分谈论设计的书,都在试图通过图形和案例来构建一类理论和范式。但在这个 AIGC 日进八万步的新时代里,设计师要以什么身份来参与?我认为所有的既定范式,都会在三到五年之内被全部击碎。串联、融汇、杂交才是新世界的主流,创作者的身份将愈加模糊,甲乙方的界限也会逐渐消失或扭转。怎么回应这样的快速变化?我觉得《误配》这本首版于五年前的「旧书」,提出了很适合当下思考的母题:
设计行为、设计师、设计对象以及新技术之间,如何在智能化浪潮里,互相包容和一起进化?
这本书没有给出直接的答案,但对于有三年以上工作经验的设计师而言,带着经验、问题和困难去阅读,会有启发和收获。「物」的旧体系正在溃散,「系统」和「生态」将是历史的新主角。旧时代的残党,可以下船了。
昨天在各个社交媒体上发了一下自己的读书感受,因为被后浪的微博官号转发了,于是被这本书的译者何盈女士注意到。正巧我的朋友宋喆在刷朋友圈时看到她的这条寻人启事,就这么阴差阳错地跟她直接联系上了。
这种「地球村」的感觉很妙!
这更坚定了我今年一定要 重新启动设计纪录片 的决心了!
为什么 Linux 和 macOS 不需要碎片整理
为什么早期的 Windows 需要整理碎片
Linux Command Line Reference for Common Operations (2)
with over 3.5 million hits in nearly 5 years. So I've decided to start compiling
another list of somewhat more involved/esoteric commands.
Examples marked with • are valid/safe to paste without modification into a terminal, so
you may want to keep a terminal window open while reading this so you can cut & paste.
Command | Description | |
• | grep . /proc/sys/net/ipv4/* | List the contents of flag files |
• | set | grep $USER | Search current environment |
• | tr '\0' '\n' < /proc/$$/environ | Display the startup environment for any process |
• | echo $PATH | tr : '\n' | Display the $PATH one per line |
• | kill -0 $$ && echo process exists and can accept signals | Check for the existence of a process (pid) |
• | find /etc -readable | xargs less -K -p'*ntp' -j $((${LINES:-25}/2)) | Search paths and data with full context. Use n to iterate |
Low impact admin | ||
# | apt-get install "package" -o Acquire::http::Dl-Limit=42 \ -o Acquire::Queue-mode=access | Rate limit apt-get to 42KB/s |
echo 'wget url' | at 01:00 | Download url at 1AM to current dir | |
# | apache2ctl configtest && apache2ctl graceful | Restart apache if config is OK |
• | nice openssl speed sha1 | Run a low priority command (openssl benchmark) |
• | chrt -i 0 openssl speed sha1 | Run a low priority command (more effective than nice) |
• | renice 19 -p $$; ionice -c3 -p $$ | Make shell (script) low priority. Use for non interactive tasks |
Interactive monitoring | ||
• | watch -t -n1 uptime | Clock with system load |
• | htop -d 5 | Better top (scrollable, tree view, lsof/strace integration, ...) |
• | iotop | What's doing I/O |
# | watch -d -n30 "nice ps_mem.py | tail -n $((${LINES:-12}-2))" | What's using RAM |
# | iftop | What's using the network. See also iptraf |
# | mtr www.pixelbeat.org | ping and traceroute combined |
Useful utilities | ||
• | pv < /dev/zero > /dev/null | Progress Viewer for data copying from files and pipes |
• | wkhtml2pdf http://.../linux_commands.html linux_commands.pdf | Make a pdf of a web page |
• | timeout 1 sleep 3 | run a command with bounded time. See also timeout |
Networking | ||
• | python -m SimpleHTTPServer | Serve current directory tree at http://$HOSTNAME:8000/ |
• | openssl s_client -connect www.google.com:443 </dev/null 2>&0 | openssl x509 -dates -noout | Display the date range for a site's certs |
• | curl -I www.pixelbeat.org | Display the server headers for a web site |
# | lsof -i tcp:80 | What's using port 80 |
# | httpd -S | Display a list of apache virtual hosts |
• | vim scp://user@remote//path/to/file | Edit remote file using local vim. Good for high latency links |
• | curl -s http://www.pixelbeat.org/pixelbeat.asc | gpg --import | Import a gpg key from the web |
• | tc qdisc add dev lo root handle 1:0 netem delay 20msec | Add 20ms latency to loopback device (for testing) |
• | tc qdisc del dev lo root | Remove latency added above |
Notification | ||
• | echo "DISPLAY=$DISPLAY xmessage cooker" | at "NOW +30min" | Popup reminder |
• | notify-send "subject" "message" | Display a gnome popup notification |
echo "mail -s 'go home' P@draigBrady.com < /dev/null" | at 17:30 | Email reminder | |
uuencode file name | mail -s subject P@draigBrady.com | Send a file via email | |
ansi2html.sh | mail -a "Content-Type: text/html" P@draigBrady.com | Send/Generate HTML email | |
Better default settings (useful in your .bashrc) | ||
# | tail -s.1 -f /var/log/messages | Display file additions more responsively |
• | seq 100 | tail -n $((${LINES:-12}-2)) | Display as many lines as possible without scrolling |
# | tcpdump -s0 | Capture full network packets |
Useful functions/aliases (useful in your .bashrc) | ||
• | md () { mkdir -p "$1" && cd "$1"; } | Change to a new directory |
• | strerror() { python -c "import os; print os.strerror($1)"; } | Display the meaning of an errno |
• | plot() { { echo 'plot "-"' "$@"; cat; } | gnuplot -persist; } | Plot stdin. (e.g: • seq 1000 | sed 's/.*/s(&)/' | bc -l | plot) |
• | hili() { e="$1"; shift; grep --col=always -Eih "$e|$" "$@"; } | highlight occurences of expr. (e.g: • env | hili $USER) |
• | alias hd='od -Ax -tx1z -v' | Hexdump. (usage e.g.: • hd /proc/self/cmdline | less) |
• | alias realpath='readlink -f' | Canonicalize path. (usage e.g.: • realpath ~/../$USER) |
• | ord() { printf "0x%x\n" "'$1"; } | shell version of the ord() function |
• | chr() { printf $(printf '\\%03o\\n' "$1"); } | shell version of the chr() function |
Multimedia | ||
• | DISPLAY=:0.0 import -window root orig.png | Take a (remote) screenshot |
• | convert -filter catrom -resize '600x>' orig.png 600px_wide.png | Shrink to width, computer gen images or screenshots |
mplayer -ao pcm -vo null -vc dummy /tmp/Flash* | Extract audio from flash video to audiodump.wav | |
ffmpeg -i filename.avi | Display info about multimedia file | |
• | ffmpeg -f x11grab -s xga -r 25 -i :0 -sameq demo.mpg | Capture video of an X display |
DVD | ||
for i in $(seq 9); do ffmpeg -i $i.avi -target pal-dvd $i.mpg; done | Convert video to the correct encoding and aspect for DVD | |
dvdauthor -odvd -t -v "pal,4:3,720xfull" *.mpg;dvdauthor -odvd -T | Build DVD file system. Use 16:9 for widescreen input | |
growisofs -dvd-compat -Z /dev/dvd -dvd-video dvd | Burn DVD file system to disc | |
Unicode | ||
• | python -c "import unicodedata as u; print u.name(unichr(0x2028))" | Lookup a unicode character |
• | uconv -f utf8 -t utf8 -x nfc | Normalize combining characters |
• | printf '\300\200' | iconv -futf8 -tutf8 >/dev/null | Validate UTF-8 |
• | printf 'ŨTF8\n' | LANG=C grep --color=always '[^ -~]\+' | Highlight non printable ASCII chars in UTF-8 |
• | fc-match -s "sans:lang=zh" | List font match order for language and style |
Development | ||
• | gcc -march=native -E -v -</dev/null 2>&1|sed -n 's/.*-mar/-mar/p' | Show autodetected gcc tuning params. See also gcccpuopt |
• | for i in $(seq 4); do { [ $i = 1 ] && wget http://url.ie/6lko -qO-|| ./a.out; } | tee /dev/tty | gcc -xc - 2>/dev/null; done | Compile and execute C code from stdin |
• | cpp -dM /dev/null | Show all predefined macros |
• | echo "#include <features.h>" | cpp -dN | grep "#define __USE_" | Show all glibc feature macros |
gdb -tui | Debug showing source code context in separate windows | |
udev | ||
• | udevadm info -a -p $(udevadm info -q path -n /dev/input/mouse0) | List udev attributes of a device, for matching rules etc. |
• | udevadm test /sys/class/input/mouse0 | See how udev rules are applied for a device |
# | udevadm control --reload-rules | Reload udev rules after modification |
Extended Attributes (Note you may need to (re)mount with "acl" or "user_xattr" options) | ||
• | getfacl . | Show ACLs for file |
• | setfacl -m u:nobody:r . | Allow a specific user to read file |
• | setfacl -x u:nobody . | Delete a specific user's rights to file |
setfacl --default -m group:users:rw- dir/ | Set umask for a for a specific dir | |
getcap file | Show capabilities for a program | |
setcap cap_net_raw+ep your_gtk_prog | Allow gtk program raw access to network | |
• | stat -c%C . | Show SELinux context for file |
chcon ... file | Set SELinux context for file (see also restorecon) | |
• | getfattr -m- -d . | Show all extended attributes (includes selinux,acls,...) |
• | setfattr -n "user.foo" -v "bar" . | Set arbitrary user attributes |
BASH specific | ||
• | echo 123 | tee >(tr 1 a) | tr 1 b | Split data to 2 commands (using process substitution) |
meld local_file <(ssh host cat remote_file) | Compare a local and remote file (using process substitution) | |
Multicore | ||
• | taskset -c 0 nproc | Restrict a command to certain processors |
• | find -type f -print0 | xargs -r0 -P$(nproc) -n10 md5sum | Process files in parallel over available processors |
sort -m <(sort data1) <(sort data2) >data.sorted | Sort separate data files over 2 processors |
Linux Command Line Reference for Common Operations
This is a linux command line reference for common operations. Examples marked with • are valid/safe to paste without modification into a terminal, so you may want to keep a terminal window open while reading this so you can cut & paste. All these commands have been tested both on Fedora and Ubuntu. See also more linux commands. |
Command | Description | |
• | apropos whatis | Show commands pertinent to string. See also threadsafe |
• | man -t ascii | ps2pdf - > ascii.pdf | make a pdf of a manual page |
which command | Show full path name of command | |
time command | See how long a command takes | |
• | time cat | Start stopwatch. Ctrl-d to stop. See also sw |
dir navigation | ||
• | cd - | Go to previous directory |
• | cd | Go to $HOME directory |
(cd dir && command) | Go to dir, execute command and return to current dir | |
• | pushd . | Put current dir on stack so you can popd back to it |
file searching | ||
• | alias l='ls -l --color=auto' | quick dir listing |
• | ls -lrt | List files by date. See also newest and find_mm_yyyy |
• | ls /usr/bin | pr -T9 -W$COLUMNS | Print in 9 columns to width of terminal |
find -name '*.[ch]' | xargs grep -E 'expr' | Search 'expr' in this dir and below. See also findrepo | |
find -type f -print0 | xargs -r0 grep -F 'example' | Search all regular files for 'example' in this dir and below | |
find -maxdepth 1 -type f | xargs grep -F 'example' | Search all regular files for 'example' in this dir | |
find -maxdepth 1 -type d | while read dir; do echo $dir; echo cmd2; done | Process each item with multiple commands (in while loop) | |
• | find -type f ! -perm -444 | Find files not readable by all (useful for web site) |
• | find -type d ! -perm -111 | Find dirs not accessible by all (useful for web site) |
• | locate -r 'file[^/]*\.txt' | Search cached index for names. This re is like glob *file*.txt |
• | look reference | Quickly search (sorted) dictionary for prefix |
• | grep --color reference /usr/share/dict/words | Highlight occurances of regular expression in dictionary |
archives and compression | ||
gpg -c file | Encrypt file | |
gpg file.gpg | Decrypt file | |
tar -c dir/ | bzip2 > dir.tar.bz2 | Make compressed archive of dir/ | |
bzip2 -dc dir.tar.bz2 | tar -x | Extract archive (use gzip instead of bzip2 for tar.gz files) | |
tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg' | Make encrypted archive of dir/ on remote machine | |
find dir/ -name '*.txt' | tar -c --files-from=- | bzip2 > dir_txt.tar.bz2 | Make archive of subset of dir/ and below | |
find dir/ -name '*.txt' | xargs cp -a --target-directory=dir_txt/ --parents | Make copy of subset of dir/ and below | |
(tar -c /dir/to/copy) | ( cd /where/to/ && tar -x -p ) | Copy (with permissions) copy/ dir to /where/to/ dir | |
(cd /dir/to/copy && tar -c .) | ( cd /where/to/ && tar -x -p ) | Copy (with permissions) contents of copy/ dir to /where/to/ | |
(tar -c /dir/to/copy ) | ssh -C user@remote 'cd /where/to/ && tar -x -p' | Copy (with permissions) copy/ dir to remote:/where/to/ dir | |
dd bs=1M if=/dev/sda | gzip | ssh user@remote 'dd of=sda.gz' | Backup harddisk to remote machine | |
rsync (Network efficient file copier: Use the --dry-run option for testing) | ||
rsync -P rsync://rsync.server.com/path/to/file file | Only get diffs. Do multiple times for troublesome downloads | |
rsync --bwlimit=1000 fromfile tofile | Locally copy with rate limit. It's like nice for I/O | |
rsync -az -e ssh --delete ~/public_html/ remote.com:'~/public_html' | Mirror web site (using compression and encryption) | |
rsync -auz -e ssh remote:/dir/ . && rsync -auz -e ssh . remote:/dir/ | Synchronize current directory with remote one | |
ssh (Secure SHell) | ||
ssh $USER@$HOST command | Run command on $HOST as $USER (default command=shell) | |
• | ssh -f -Y $USER@$HOSTNAME xeyes | Run GUI command on $HOSTNAME as $USER |
scp -p -r $USER@$HOST: file dir/ | Copy with permissions to $USER's home directory on $HOST | |
scp -c arcfour $USER@$LANHOST: bigfile | Use faster crypto for local LAN. This might saturate GigE | |
ssh -g -L 8080:localhost:80 root@$HOST | Forward connections to $HOSTNAME:8080 out to $HOST:80 | |
ssh -R 1434:imap:143 root@$HOST | Forward connections from $HOST:1434 in to imap:143 | |
ssh-copy-id $USER@$HOST | Install public key for $USER@$HOST for password-less log in | |
wget (multi purpose download tool) | ||
• | (cd dir/ && wget -nd -pHEKk http://www.pixelbeat.org/cmdline.html) | Store local browsable version of a page to the current dir |
wget -c http://www.example.com/large.file | Continue downloading a partially downloaded file | |
wget -r -nd -np -l1 -A '*.jpg' http://www.example.com/dir/ | Download a set of files to the current directory | |
wget ftp://remote/file[1-9].iso/ | FTP supports globbing directly | |
• | wget -q -O- http://www.pixelbeat.org/timeline.html | grep 'a href' | head | Process output directly |
echo 'wget url' | at 01:00 | Download url at 1AM to current dir | |
wget --limit-rate=20k url | Do a low priority download (limit to 20KB/s in this case) | |
wget -nv --spider --force-html -i bookmarks.html | Check links in a file | |
wget --mirror http://www.example.com/ | Efficiently update a local copy of a site (handy from cron) | |
networking (Note ifconfig, route, mii-tool, nslookup commands are obsolete) | ||
ethtool eth0 | Show status of ethernet interface eth0 | |
ethtool --change eth0 autoneg off speed 100 duplex full | Manually set ethernet interface speed | |
iwconfig eth1 | Show status of wireless interface eth1 | |
iwconfig eth1 rate 1Mb/s fixed | Manually set wireless interface speed | |
• | iwlist scan | List wireless networks in range |
• | ip link show | List network interfaces |
ip link set dev eth0 name wan | Rename interface eth0 to wan | |
ip link set dev eth0 up | Bring interface eth0 up (or down) | |
• | ip addr show | List addresses for interfaces |
ip addr add 1.2.3.4/24 brd + dev eth0 | Add (or del) ip and mask (255.255.255.0) | |
• | ip route show | List routing table |
ip route add default via 1.2.3.254 | Set default gateway to 1.2.3.254 | |
• | host pixelbeat.org | ookup DNS ip address for name or vice versaL |
• | hostname -i | Lookup local ip address (equivalent to host `hostname`) |
• | whois pixelbeat.org | Lookup whois info for hostname or ip address |
• | netstat -tupl | List internet services on a system |
• | netstat -tup | List active connections to/from system |
windows networking (Note samba is the package that provides all this windows specific networking support) | ||
• | smbtree | Find windows machines. See also findsmb |
nmblookup -A 1.2.3.4 | Find the windows (netbios) name associated with ip address | |
smbclient -L windows_box | List shares on windows machine or samba server | |
mount -t smbfs -o fmask=666,guest //windows_box/share /mnt/share | Mount a windows share | |
echo 'message' | smbclient -M windows_box | Send popup to windows machine (off by default in XP sp2) | |
text manipulation (Note sed uses stdin and stdout. Newer versions support inplace editing with the -i option) | ||
sed 's/string1/string2/g' | Replace string1 with string2 | |
sed 's/\(.*\)1/\12/g' | Modify anystring1 to anystring2 | |
sed '/ *#/d; /^ *$/d' | Remove comments and blank lines | |
sed ':a; /\\$/N; s/\\\n//; ta' | Concatenate lines with trailing \ | |
sed 's/[ \t]*$//' | Remove trailing spaces from lines | |
sed 's/\([`"$\]\)/\\\1/g' | Escape shell metacharacters active within double quotes | |
• | seq 10 | sed "s/^/ /; s/ *\(.\{7,\}\)/\1/" | Right align numbers |
sed -n '1000{p;q}' | Print 1000th line | |
sed -n '10,20p;20q' | Print lines 10 to 20 | |
sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q' | Extract title from HTML web page | |
sed -i 42d ~/.ssh/known_hosts | Delete a particular line | |
sort -t. -k1,1n -k2,2n -k3,3n -k4,4n | Sort IPV4 ip addresses | |
• | echo 'Test' | tr '[:lower:]' '[:upper:]' | Case conversion |
• | tr -dc '[:print:]' < /dev/urandom | Filter non printable characters |
• | tr -s '[:blank:]' '\t' </proc/diskstats | cut -f4 | cut fields separated by blanks |
• | history | wc -l | Count lines |
set operations (Note you can export LANG=C for speed. Also these assume no duplicate lines within a file) | ||
sort file1 file2 | uniq | Union of unsorted files | |
sort file1 file2 | uniq -d | Intersection of unsorted files | |
sort file1 file1 file2 | uniq -u | Difference of unsorted files | |
sort file1 file2 | uniq -u | Symmetric Difference of unsorted files | |
join -t'\0' -a1 -a2 file1 file2 | Union of sorted files | |
join -t'\0' file1 file2 | Intersection of sorted files | |
join -t'\0' -v2 file1 file2 | Difference of sorted files | |
join -t'\0' -v1 -v2 file1 file2 | Symmetric Difference of sorted files | |
math | ||
• | echo '(1 + sqrt(5))/2' | bc -l | Quick math (Calculate φ). See also bc |
• | seq -f '4/%g' 1 2 99999 | paste -sd-+ | bc -l | Calculate π the unix way |
• | echo 'pad=20; min=64; (100*10^6)/((pad+min)*8)' | bc | More complex (int) e.g. This shows max FastE packet rate |
• | echo 'pad=20; min=64; print (100E6)/((pad+min)*8)' | python | Python handles scientific notation |
• | echo 'pad=20; plot [64:1518] (100*10**6)/((pad+x)*8)' | gnuplot -persist | Plot FastE packet rate vs packet size |
• | echo 'obase=16; ibase=10; 64206' | bc | Base conversion (decimal to hexadecimal) |
• | echo $((0x2dec)) | Base conversion (hex to dec) ((shell arithmetic expansion)) |
• | units -t '100m/9.58s' 'miles/hour' | Unit conversion (metric to imperial) |
• | units -t '500GB' 'GiB' | Unit conversion (SI to IEC prefixes) |
• | units -t '1 googol' | Definition lookup |
• | seq 100 | (tr '\n' +; echo 0) | bc | Add a column of numbers. See also add and funcpy |
calendar | ||
• | cal -3 | Display a calendar |
• | cal 9 1752 | Display a calendar for a particular month year |
• | date -d fri | What date is it this friday. See also day |
• | [ $(date -d '12:00 +1 day' +%d) = '01' ] || exit | exit a script unless it's the last day of the month |
• | date --date='25 Dec' +%A | What day does xmas fall on, this year |
• | date --date='@2147483647' | Convert seconds since the epoch (1970-01-01 UTC) to date |
• | TZ='America/Los_Angeles' date | What time is it on west coast of US (use tzselect to find TZ) |
• | date --date='TZ="America/Los_Angeles" 09:00 next Fri' | What's the local time for 9AM next Friday on west coast US |
locales | ||
• | printf "%'d\n" 1234 | Print number with thousands grouping appropriate to locale |
• | BLOCK_SIZE=\'1 ls -l | Use locale thousands grouping in ls. See also l |
• | echo "I live in `locale territory`" | Extract info from locale database |
• | LANG=en_IE.utf8 locale int_prefix | Lookup locale info for specific country. See also ccodes |
• | locale -kc $(locale | sed -n 's/\(LC_.\{4,\}\)=.*/\1/p') | less | List fields available in locale database |
recode (Obsoletes iconv, dos2unix, unix2dos) | ||
• | recode -l | less | Show available conversions (aliases on each line) |
recode windows-1252.. file_to_change.txt | Windows "ansi" to local charset (auto does CRLF conversion) | |
recode utf-8/CRLF.. file_to_change.txt | Windows utf8 to local charset | |
recode iso-8859-15..utf8 file_to_change.txt | Latin9 (western europe) to utf8 | |
recode ../b64 < file.txt > file.b64 | Base64 encode | |
recode /qp.. < file.qp > file.txt | Quoted printable decode | |
recode ..HTML < file.txt > file.html | Text to HTML | |
• | recode -lf windows-1252 | grep euro | Lookup table of characters |
• | echo -n 0x80 | recode latin-9/x1..dump | Show what a code represents in latin-9 charmap |
• | echo -n 0x20AC | recode ucs-2/x2..latin-9/x | Show latin-9 encoding |
• | echo -n 0x20AC | recode ucs-2/x2..utf-8/x | Show utf-8 encoding |
CDs | ||
gzip < /dev/cdrom > cdrom.iso.gz | Save copy of data cdrom | |
mkisofs -V LABEL -r dir | gzip > cdrom.iso.gz | Create cdrom image from contents of dir | |
mount -o loop cdrom.iso /mnt/dir | Mount the cdrom image at /mnt/dir (read only) | |
cdrecord -v dev=/dev/cdrom blank=fast | Clear a CDRW | |
gzip -dc cdrom.iso.gz | cdrecord -v dev=/dev/cdrom - | Burn cdrom image (use dev=ATAPI -scanbus to confirm dev) | |
cdparanoia -B | Rip audio tracks from CD to wav files in current dir | |
cdrecord -v dev=/dev/cdrom -audio -pad *.wav | Make audio CD from all wavs in current dir (see also cdrdao) | |
oggenc --tracknum='track' track.cdda.wav -o 'track.ogg' | Make ogg file from wav file | |
disk space (See also FSlint) | ||
• | ls -lSr | Show files by size, biggest last |
• | du -s * | sort -k1,1rn | head | Show top disk users in current dir. See also dutop |
• | du -hs /home/* | sort -k1,1h | Sort paths by easy to interpret disk usage |
• | df -h | Show free space on mounted filesystems |
• | df -i | Show free inodes on mounted filesystems |
• | fdisk -l | Show disks partitions sizes and types (run as root) |
• | rpm -q -a --qf '%10{SIZE}\t%{NAME}\n' | sort -k1,1n | List all packages by installed size (Bytes) on rpm distros |
• | dpkg-query -W -f='${Installed-Size;10}\t${Package}\n' | sort -k1,1n | List all packages by installed size (KBytes) on deb distros |
• | dd bs=1 seek=2TB if=/dev/null of=ext3.test | Create a large test file (taking no space). See also truncate |
• | > file | truncate data of file or create an empty file |
monitoring/debugging | ||
• | tail -f /var/log/messages | Monitor messages in a log file |
• | strace -c ls >/dev/null | Summarise/profile system calls made by command |
• | strace -f -e open ls >/dev/null | List system calls made by command |
• | strace -f -e trace=write -e write=1,2 ls >/dev/null | Monitor what's written to stdout and stderr |
• | ltrace -f -e getenv ls >/dev/null | List library calls made by command |
• | lsof -p $$ | List paths that process id has open |
• | lsof ~ | List processes that have specified path open |
• | tcpdump not port 22 | Show network traffic except ssh. See also tcpdump_not_me |
• | ps -e -o pid,args --forest | List processes in a hierarchy |
• | ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d' | List processes by % cpu usage |
• | ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS | List processes by mem (KB) usage. See also ps_mem.py |
• | ps -C firefox-bin -L -o pid,tid,pcpu,state | List all threads for a particular process |
• | ps -p 1,$$ -o etime= | List elapsed wall time for particular process IDs |
• | last reboot | Show system reboot history |
• | free -m | Show amount of (remaining) RAM (-m displays in MB) |
• | watch -n.1 'cat /proc/interrupts' | Watch changeable data continuously |
• | udevadm monitor | Monitor udev events to help configure rules |
system information (see also sysinfo) ('#' means root access is required) | ||
• | uname -a | Show kernel version and system architecture |
• | head -n1 /etc/issue | Show name and version of distribution |
• | cat /proc/partitions | Show all partitions registered on the system |
• | grep MemTotal /proc/meminfo | Show RAM total seen by the system |
• | grep "model name" /proc/cpuinfo | Show CPU(s) info |
• | lspci -tv | Show PCI info |
• | lsusb -tv | Show USB info |
• | mount | column -t | List mounted filesystems on the system (and align output) |
• | grep -F capacity: /proc/acpi/battery/BAT0/info | Show state of cells in laptop battery |
# | dmidecode -q | less | Display SMBIOS/DMI information |
# | smartctl -A /dev/sda | grep Power_On_Hours | How long has this disk (system) been powered on in total |
# | hdparm -i /dev/sda | Show info about disk sda |
# | hdparm -tT /dev/sda | Do a read speed test on disk sda |
# | badblocks -s /dev/sda | Test for unreadable blocks on disk sda |
interactive (see also linux keyboard shortcuts) | ||
• | readline | Line editor used by bash, python, bc, gnuplot, ... |
• | screen | Virtual terminals with detach capability, ... |
• | mc | Powerful file manager that can browse rpm, tar, ftp, ssh, ... |
• | gnuplot | Interactive/scriptable graphing |
• | links | Web browser |
• | xdg-open . | open a file or url with the registered desktop application |
Linux系统信息查看命令大全
另外这里还有非常多的命令, 可以作为参考。
# uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所有USB设备 # lsmod # 列出加载的内核模块 # env # 查看环境变量
# free -m # 查看内存使用量和交换区使用量 # df -h # 查看各分区使用情况 # du -sh <目录名> # 查看指定目录的大小 # grep MemTotal /proc/meminfo # 查看内存总量 # grep MemFree /proc/meminfo # 查看空闲内存量 # uptime # 查看系统运行时间、用户数、负载 # cat /proc/loadavg # 查看系统负载
# mount | column -t # 查看挂接的分区状态 # fdisk -l # 查看所有分区 # swapon -s # 查看所有交换分区 # hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备) # dmesg | grep IDE # 查看启动时IDE设备检测状况
# ifconfig # 查看所有网络接口的属性 # iptables -L # 查看防火墙设置 # route -n # 查看路由表 # netstat -lntp # 查看所有监听端口 # netstat -antp # 查看所有已经建立的连接 # netstat -s # 查看网络统计信息
# ps -ef # 查看所有进程 # top # 实时显示进程状态
# w # 查看活动用户 # id <用户名> # 查看指定用户信息 # last # 查看用户登录日志 # cut -d: -f1 /etc/passwd # 查看系统所有用户 # cut -d: -f1 /etc/group # 查看系统所有组 # crontab -l # 查看当前用户的计划任务
# chkconfig --list # 列出所有系统服务 # chkconfig --list | grep on # 列出所有启动的系统服务
# rpm -qa # 查看所有安装的软件包
附加一张总结的很好Linux常用命定的图片:
Linux 文件结构大全 |