项目标题与描述
Awesome Linux Software 是一个社区驱动的开源项目,致力于收集和整理所有优秀、实用的 Linux 应用程序与命令行工具。该仓库为任何 Linux 用户和开发者提供了一个结构清晰、分类明确的软件资源库,帮助大家快速发现和获取高质量软件,从而提升工作和娱乐效率。
项目状态活跃,拥有包括英文、中文、西班牙文、葡萄牙文、阿拉伯文、法文和泰文在内的多语言版本,展现了其国际化的社区支持。
功能特性
-
全面分类:软件按功能被细致地划分为数十个类别,如音频、聊天客户端、开发工具、桌面环境、游戏、安全等,便于用户查找。
-
内容规范:每个收录的应用条目都要求包含名称、主页链接、简短描述和图标,并按照字母顺序排列,确保列表的整洁与一致性。
-
自动化维护:项目包含一个用 Python 编写的自动化脚本 (
asort.py),能自动将指定章节(如“Applications”至“Setup”之间)的列表项按字母顺序排序,极大简化了维护工作。 -
开源精神:明确区分开源软件和闭源/付费软件,尊重不同软件许可模式,并为用户提供选择参考。
安装指南
Awesome Linux Software 本身不是一个需要安装的应用程序,而是一个资源清单。你可以通过以下几种方式使用它:
-
在线浏览:
- 访问已发布的 Web App 版本以获得更好的浏览体验: luong-komorebi.github.io/Awesome-Lin…
-
本地使用:
- 克隆整个仓库到本地以便离线查阅或参与贡献。
git clone https://github.com/luong-komorebi/Awesome-Linux-Software.git cd Awesome-Linux-Software -
运行排序脚本(针对贡献者): 如果你要贡献内容并希望自动排序列表,需要使用 Python 3 环境。
# 进入仓库的 `tools` 目录 cd Awesome-Linux-Software/tools # 运行对应语言版本的排序脚本- 系统要求:仅需安装 Python 3。
- 注意事项:脚本默认处理“Applications”(或对应语言的“应用”章节)到“Setup”(“设置”)章节之间的列表项。
使用说明
基础使用
典型使用场景
- 新系统配置:在新安装的 Linux 系统上,可以按图索骥,快速安装必备的办公、开发、多媒体软件。
- 探索新工具:当你想在某个特定领域(如 3D 建模、视频剪辑)寻找 Linux 下的替代方案时,可查阅对应分类。
- 贡献与分享:当你发现一个优秀的 Linux 软件未被收录时,可以按照项目贡献指南提交 Pull Request。
贡献指南(简化版)
项目欢迎任何人贡献。基本流程如下:
- Fork 本仓库。
- 在合适的类别下,按格式
- [软件名](链接) - 描述。添加新条目。 - 确保条目放在正确的分类中,并按字母顺序排列(可使用提供的
asort.py脚本自动化完成)。 - 提交 Pull Request。
核心代码
项目包含一组用于自动化维护列表排序的 Python 脚本,是项目高效运作的关键。以下展示其核心逻辑。
代码文件:tools/asort.py (英文版排序脚本)
#!/usr/bin/env python3
# -*-coding: utf-8-*-
# Author : Christopher L
# Blog : http://blog.chriscabin.com
# GitHub : https://www.github.com/chrisleegit
# File : asort.py
# Date : 2016/08/22 11:12
# Version: 0.1
# Description: A very simple python script that can sort items alphabetically.
from __future__ import print_function
import os
import shutil
import re
TEMP_FILE = 'temp.md' # 临时文件
# 只处理在 BEGIN 和 END 标记之间的内容
BEGIN = '## Applications'
END = '## Setup'
# 用于从Markdown链接中提取软件名(方括号内的文本)的正则表达式
regex = re.compile(r"[^[]*\[([^]]*)\]")
def main():
exit(1)
sort_enable = False # 排序开关
items = [] # 存储待排序的列表项
# 读取原文件,并写入临时文件
for line in infile:
# 1. 遇到 BEGIN 标记,开启排序模式
if not sort_enable and BEGIN in line:
sort_enable = True
# 2. 如果处于排序模式且当前行是列表项(以‘-’开头),将其加入待排序列表
if sort_enable and line.startswith(('-')):
line = line.strip()
items.append(line)
# 3. 如果处于排序模式,遇到空行(且items非空),说明一个列表块结束,进行排序输出
elif sort_enable and not line.startswith(('-')) and line == '\n':
# 按提取出的软件名(大写)进行排序
for item in sorted(items, key=lambda x: regex.findall(x.upper())[len(regex.findall(x.upper()))-1]):
print(item, file=outfile) # 将排序后的项写入临时文件
items.clear() # 清空当前列表项
print(line, end='', file=outfile) # 写入空行
# 4. 如果处于排序模式,遇到新的标题行(以‘#’开头),判断是否到达END标记
elif (
sort_enable
and not line.startswith(('-'))
and line != '\n'
and line.startswith('#')
):
sort_enable = END not in line # 如果遇到END,关闭排序模式
print(line, end='', file=outfile)
# 5. 其他情况(非排序模式或非列表项行),直接写入
else:
print(line, end='', file=outfile)
# 6. 用排序后的临时文件替换原文件
if __name__ == '__main__':
main()
代码文件:tools/asort_zh.py (中文版排序脚本)
#!/usr/bin/env python3
# -*-coding: utf-8-*-
# ... 作者及描述信息 ...
import os
import shutil
import re
TEMP_FILE = 'temp_zh.md'
# 对应中文版的章节标记
BEGIN = '## 应用'
END = '## 设置'
regex = re.compile(r"[^[]*\[([^]]*)\]")
def main():
# ... 错误检查、核心排序逻辑与 asort.py 完全相同 ...
# 最终替换文件为目标中文文件
if __name__ == '__main__':
main()
这些脚本通过精准定位文档结构、提取关键文本并排序,实现了对庞大列表的自动化、无差错维护,是项目保持高质量和可维护性的基石。 uAAZE/y9wTXpLISWy1DiEqD49gaP4401UCTzVL3txKjPbM/1iS1sg6r1iclVWjvj