├── preface ├── Intended_Audience.md ├── README.md ├── Why_A_New_Slackware_Book.md ├── Acknowledgements.md └── Conventions_Used_in_this_Book.md ├── chapter_04 ├── Dealing_with_Files_and_Directories │ ├── README.md │ ├── Moving_Around_the_Filesystem.md │ ├── Listing_Files_and_Directory_Contents.md │ └── File_and_Directory_Creation_and_Deletion.md ├── Archive_and_Compression │ ├── README.md │ ├── bzip2.md │ ├── XZ_LZMA.md │ ├── zip_and_unzip.md │ ├── tar.md │ └── gzip.md ├── Reading_Documents │ ├── more.md │ ├── README.md │ └── less.md ├── README.md ├── Linking.md └── System_Documentation.md ├── img ├── links.png ├── lynx.png ├── cups-01.png ├── xwmconfig.png ├── emacs_startup.jpg ├── install_login.png ├── liloconfig01.png ├── install_keymap.png └── make-menuconfig-w.png ├── png ├── format.png ├── mutt.png ├── pine.png ├── pkgtool.png ├── setup-help.png ├── setup-lilo.png ├── setup-mouse.png ├── setup-swap.png ├── setup-install.png ├── setup-keymap.png ├── setup-program.png ├── setup-select.png ├── setup-source.png ├── setup-target.png ├── setup-timezone.png ├── setup-xwmconfig.png └── usb-boot-stick.png ├── COPYRIGHT ├── CHANGES.md ├── chapter_11 ├── Network_Filesystems │ ├── README.md │ ├── SMB.md │ └── NFS.md ├── Local_Filesystem_Types │ ├── JFS.md │ ├── README.md │ ├── ext2.md │ ├── iso9660.md │ ├── XFS.md │ ├── reiserfs.md │ ├── vfat.md │ ├── ext4.md │ ├── swap.md │ └── ext3.md ├── README.md ├── The_Filesystem_Hierarchy.md └── Using_mount.md ├── chapter_16 ├── Web_Browsers │ ├── README.md │ ├── links.md │ ├── lynx.md │ └── wget.md ├── FTP_Clients │ ├── README.md │ ├── lftp.md │ ├── ftp.md │ └── ncftp.md ├── Mail_Clients │ ├── README.md │ ├── pine.md │ ├── mutt.md │ └── mailx.md ├── Network_Diagnostic_Tools │ ├── README.md │ ├── host.md │ ├── ssh.md │ ├── finger.md │ ├── telnet.md │ ├── ping.md │ ├── nmap.md │ ├── tcpdump.md │ ├── dig.md │ └── traceroute.md ├── README.md └── rsync.md ├── book.json ├── chapter_02 ├── The_setup_Program │ ├── README.md │ ├── Help.md │ ├── Keymap.md │ ├── Select.md │ ├── Target.md │ ├── Addswap.md │ ├── Source.md │ ├── Install.md │ └── Configure.md ├── README.md ├── Booting_the_Installer.md └── Partitioning.md ├── chapter_14 ├── README.md ├── netconfig.md ├── Automatic_Configuration_with_rc.inet1.conf.md └── Manual_Configuration.md ├── chapter_18 ├── README.md ├── Security_Update_Mailing_List.md ├── Upgrading_Slackware_Versions.md └── The_stable_Branch.md ├── chapter_10 ├── README.md ├── Permissions_Overview.md ├── SUID_SGID_and_the_Sticky_Bit.md └── chmod_chown_and_chgrp.md ├── chapter_19 ├── README.md ├── What_Does_the_Kernel_Do.md ├── Working_with_Modules.md └── Compiling_A_Kernel_and_Why_to_do_So.md ├── chapter_12 ├── Editing_A_Document.md ├── README.md ├── The_Different_Modes_of_vi.md ├── Moving_Around.md ├── Opening_Saving_and_Quitting.md ├── What_is_vi.md └── vi_Cheat_Sheet.md ├── chapter_01 ├── README.md ├── Why_Use_Slackware.md ├── Differences_Compared_to_Other_Linux_Distributions.md └── Licensing.md ├── chapter_05 ├── Tab_Completion.md ├── What_Is_A_Shell.md ├── README.md ├── Task_Management.md ├── Terminals.md ├── Wildcards.md ├── Environment_Variables.md ├── Customization.md └── Input_and_Output_Redirection.md ├── chapter_07 ├── README.md ├── Choosing_a_Window_Manager.md ├── What_Is_And_Isnt_X.md ├── Setting_Up_A_Graphical_Login.md └── Configuring_the_X_Server.md ├── chapter_09 ├── README.md ├── What_Are_Users_and_Groups.md ├── Other_User_and_Group_Tools.md ├── Managing_Users_and_Groups_Manually.md └── Managing_Users_and_Groups.md ├── chapter_13 ├── Calling_Functions.md ├── README.md ├── Getting_Help.md ├── How_to_Move_Around.md ├── What_is_Emacs.md ├── Starting_Out.md └── Emacs_Cheat_Sheet.md ├── chapter_06 ├── README.md ├── cron.md ├── kill_and_killall.md ├── top.md └── ps.md ├── chapter_17 ├── pkgtool.md ├── README.md ├── Package_Compression_Formats │ ├── README.md │ ├── rpm2tgz.md │ └── slackpkg.md └── Installing_Removing_and_Upgrading_Packages.md ├── chapter_15 ├── README.md ├── Wired_Equivilant_Protection_or_Lack_Thereof.md ├── wicd.md ├── Wifi_Protected_Access │ ├── README.md │ └── rc.inet1.conf_revisited.md └── iwconfig.md ├── chapter_08 ├── README.md ├── Printing_from_the_Command_Line │ ├── Formatting_for_Print.md │ └── README.md ├── Getting_the_driver.md ├── Choosing_A_Printer.md └── Setting_Up_a_Printer_in_CUPS.md ├── chapter_03 ├── Dual_Booting │ ├── Dual_Booting_from_Hard_Drives.md │ ├── README.md │ └── Dual_Booting_with_Partitions.md ├── README.md ├── LILO.md └── mkinitrd.md ├── .gitignore ├── Makefile ├── README.md ├── CONTRIBUTING.md ├── SUMMARY.md └── LICENSE /preface/Intended_Audience.md: -------------------------------------------------------------------------------- 1 | ### 目标读者 2 | -------------------------------------------------------------------------------- /chapter_04/Dealing_with_Files_and_Directories/README.md: -------------------------------------------------------------------------------- 1 | ### 处理文件和目录 2 | -------------------------------------------------------------------------------- /img/links.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/img/links.png -------------------------------------------------------------------------------- /img/lynx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/img/lynx.png -------------------------------------------------------------------------------- /png/format.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/format.png -------------------------------------------------------------------------------- /png/mutt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/mutt.png -------------------------------------------------------------------------------- /png/pine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/pine.png -------------------------------------------------------------------------------- /img/cups-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/img/cups-01.png -------------------------------------------------------------------------------- /png/pkgtool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/pkgtool.png -------------------------------------------------------------------------------- /img/xwmconfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/img/xwmconfig.png -------------------------------------------------------------------------------- /png/setup-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-help.png -------------------------------------------------------------------------------- /png/setup-lilo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-lilo.png -------------------------------------------------------------------------------- /png/setup-mouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-mouse.png -------------------------------------------------------------------------------- /png/setup-swap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-swap.png -------------------------------------------------------------------------------- /img/emacs_startup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/img/emacs_startup.jpg -------------------------------------------------------------------------------- /img/install_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/img/install_login.png -------------------------------------------------------------------------------- /img/liloconfig01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/img/liloconfig01.png -------------------------------------------------------------------------------- /png/setup-install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-install.png -------------------------------------------------------------------------------- /png/setup-keymap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-keymap.png -------------------------------------------------------------------------------- /png/setup-program.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-program.png -------------------------------------------------------------------------------- /png/setup-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-select.png -------------------------------------------------------------------------------- /png/setup-source.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-source.png -------------------------------------------------------------------------------- /png/setup-target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-target.png -------------------------------------------------------------------------------- /COPYRIGHT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016-2023 The Slackware Linux CN Community (https://github.com/slackwarecn/) 2 | -------------------------------------------------------------------------------- /img/install_keymap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/img/install_keymap.png -------------------------------------------------------------------------------- /png/setup-timezone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-timezone.png -------------------------------------------------------------------------------- /png/setup-xwmconfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/setup-xwmconfig.png -------------------------------------------------------------------------------- /png/usb-boot-stick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/png/usb-boot-stick.png -------------------------------------------------------------------------------- /img/make-menuconfig-w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/slackwarecn/slackbook_cn/HEAD/img/make-menuconfig-w.png -------------------------------------------------------------------------------- /chapter_04/Archive_and_Compression/README.md: -------------------------------------------------------------------------------- 1 | ### 归档和压缩 2 | 3 | 每个人都会有把各种小文件打包以便存储,或压缩大文件的需要。也许你两个都需要?正好我们这里有能够达成目标的工具。 4 | -------------------------------------------------------------------------------- /CHANGES.md: -------------------------------------------------------------------------------- 1 | - 2023-05-28 2 | - 整体校对 3 | - 2023-05-24 4 | - 中英文混排优化 5 | - 2016-03-20 6 | - 所有章节翻译完成 7 | - 2016-03-03 8 | - 目录翻译和结构建立 9 | -------------------------------------------------------------------------------- /chapter_11/Network_Filesystems/README.md: -------------------------------------------------------------------------------- 1 | ### 网络文件系统 2 | 3 | 除了本地文件系统,Slackware 还支持多种网络文件系统包括服务器端和客户端。这使得你可以在多个计算机之间透明的共享数据。下面我们将讨论两个最常见的:NFS 和 SMB。 4 | -------------------------------------------------------------------------------- /chapter_16/Web_Browsers/README.md: -------------------------------------------------------------------------------- 1 | ### 网页浏览器 2 | 3 | Slackware 中有各种各样的网页浏览器。如果你在使用图形界面,你会找到 Firefox,Seamonkey 和其他一些你熟悉的网页浏览器。不过在命令行里怎么办呢?非常幸运,命令行里也有很多不错的网页浏览器。 4 | -------------------------------------------------------------------------------- /book.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Slackware 中文手册", 3 | "author": "The Slackware Linux CN Community", 4 | "description": "本书是 Slackbook 的中文版", 5 | "language": "zh-hans" 6 | } 7 | -------------------------------------------------------------------------------- /chapter_02/The_setup_Program/README.md: -------------------------------------------------------------------------------- 1 | ### 安装程序 2 | 3 | 创建分区之后现在是时候安装 Slackware 了。安装程序会处理格式化的分区、安装包,运行基本的配置脚本。输入 `setup` 并按回车键进入。 4 | 5 | ![](../../png/setup-program.png) 6 | -------------------------------------------------------------------------------- /chapter_11/Local_Filesystem_Types/JFS.md: -------------------------------------------------------------------------------- 1 | #### JFS 2 | 3 | JFS 由 IBM 贡献给 Linux 内核,它因响应快(甚至是在极端条件下)而为人所知。它特别适合与网络附加储存 (NAS) 设备。JFS 悠久的历史和长期的测试使得它成为 Linux 可用的最可靠的日志型文件系统之一。 4 | -------------------------------------------------------------------------------- /chapter_16/FTP_Clients/README.md: -------------------------------------------------------------------------------- 1 | ### FTP 客户端 2 | 3 | 在这个世界上,有大量的数据储存在 FTP 服务器上。事实上,Slackware 的首次发布就是在 FTP 上分发镜像。在今天,大多开源软件的源代码或二进制包可以在通过 FTP 获取。所以,了解如何使用 FTP 获取这些信息是一种实用的技巧。 4 | -------------------------------------------------------------------------------- /chapter_11/Local_Filesystem_Types/README.md: -------------------------------------------------------------------------------- 1 | ### 本地文件系统类型 2 | 3 | Linux 内核支持多种文件系统,它允许你在众多文件系统中挑选最适合你需求的。幸运的是,大部分默认的文件系统就足以满足你的需求。一些文件系统则倾向与特定的介质。例如,ISO9660 文件系统仅用于 CD 和 DVD 介质。 4 | -------------------------------------------------------------------------------- /chapter_04/Archive_and_Compression/bzip2.md: -------------------------------------------------------------------------------- 1 | #### bzip2 2 | 3 | 一个 `gzip` 的替代品就是 `bzip2(1)`,与 `gzip` 功能几乎相同。 `bzip2` 的优点就是号称能有更大压缩强度。不过,更大压缩强度意味着慢以及更多 CPU 占用,所以 `bzip2` 一般比其他压缩工具耗时更长。 4 | -------------------------------------------------------------------------------- /chapter_11/Local_Filesystem_Types/ext2.md: -------------------------------------------------------------------------------- 1 | #### ext2 2 | 3 | ext2 是 Slackware 所包含的最古老的一个文件系统,它用来在磁盘上存放数据。想对于其它文件系统,ext2 是很简单的。它在读写数据的速度上要比其他文件系统快些,但是它不包含日志功能。也就是说,如果出现故障,必须对文件系统进行全面的检查来发现和修复错误。 4 | -------------------------------------------------------------------------------- /chapter_16/Mail_Clients/README.md: -------------------------------------------------------------------------------- 1 | ### 邮件客户端 2 | 3 | Slackware 中还有各种各样的邮件客户端。如果你在使用图形桌面,你会找到 Thunderbird、Kmail、sylpheed 和其他一些邮件客户端。和网页浏览器一样,能在 shell 中使用的邮件客户端也是有的,而且命令行中的邮件客户端灵活可配置,一旦拥有,别无所求。 4 | -------------------------------------------------------------------------------- /chapter_14/README.md: -------------------------------------------------------------------------------- 1 | ## 网络 2 | 3 | ### 本章目录 4 | 5 | - [netconfig](netconfig.md) 6 | - [手动配置](Manual_Configuration.md) 7 | - [使用 rc.inet1.conf 自动配置网络](Automatic_Configuration_with_rc.inet1.conf.md) 8 | -------------------------------------------------------------------------------- /chapter_18/README.md: -------------------------------------------------------------------------------- 1 | ## 追踪系统更新 2 | 3 | ### 本章目录 4 | 5 | - [稳定分支](The_stable_Branch.md) 6 | - [订阅安全更新邮件列表](Security_Update_Mailing_List.md) 7 | - [升级 Slackware 版本](Upgrading_Slackware_Versions.md) 8 | -------------------------------------------------------------------------------- /chapter_10/README.md: -------------------------------------------------------------------------------- 1 | ## 文件系统权限 2 | 3 | ### 本章目录 4 | 5 | - [权限概述](Permissions_Overview.md) 6 | - [chmod、chown 和 chgrp](chmod_chown_and_chgrp.md) 7 | - [SUID、SGID 和粘滞位](SUID_SGID_and_the_Sticky_Bit.md) 8 | -------------------------------------------------------------------------------- /chapter_11/Local_Filesystem_Types/iso9660.md: -------------------------------------------------------------------------------- 1 | #### iso9660 2 | 3 | iso9660 是专门为光学介质比如 CD 和 DVD 设计的。由于光盘是只读介质,所以 Linux 内核并没有为这个文件系统提供写支持。如果要创建 iso9660 文件系统的话,你必须使用用户级的工具,比如 `mkisofs(8)` 或 `growisofs(8)` 。 4 | -------------------------------------------------------------------------------- /chapter_19/README.md: -------------------------------------------------------------------------------- 1 | ## Linux 内核 2 | 3 | ### 本章目录 4 | 5 | - [内核是做什么的?](What_Does_the_Kernel_Do.md) 6 | - [设置内核模块](Working_with_Modules.md) 7 | - [编译以及为什么要编译内核](Compiling_A_Kernel_and_Why_to_do_So.md) 8 | -------------------------------------------------------------------------------- /chapter_02/The_setup_Program/Help.md: -------------------------------------------------------------------------------- 1 | #### Help 2 | 3 | 如果你从来没有安装过 Slackware,你可以从 Help 菜单中了解到基本的 Slackware 安装大概。这里大部分的信息都是指导安装的,看上去很直观。如果你之前没有使用过基于 curses 的程序你会觉得很有帮助。 4 | 5 | ![](../../png/setup-help.png) 6 | -------------------------------------------------------------------------------- /chapter_02/The_setup_Program/Keymap.md: -------------------------------------------------------------------------------- 1 | #### Keymap 2 | 3 | 在我们更进一步之前,Slackware 给你选择键盘映射的机会。如果你使用的是标准的英式键盘,你可以跳过这一步,但是如果你使用其他的键盘你可以在这里选择正确的键盘映射。这可以确保你按下的键位是你所希望输入的键。 4 | 5 | ![](../../png/setup-keymap.png) 6 | -------------------------------------------------------------------------------- /chapter_12/Editing_A_Document.md: -------------------------------------------------------------------------------- 1 | ### 编辑文本 2 | 3 | 既然我们学会了打开、保存文件和如何移动光标,现在是时候学习如何编辑一个文件了。开始编辑工作的最主要方式实在命令模式下按 `i` 或者其他命令键。这样可以很方便的在当前位置或者当前位置之后插入文本。一旦进入了插入模式,你就可以正常的在文档中键入你想要的内容了。你可以按 `Esc` 键来返回命令模式保存你所做的修改。 4 | -------------------------------------------------------------------------------- /chapter_16/Network_Diagnostic_Tools/README.md: -------------------------------------------------------------------------------- 1 | ### 网络诊断工具 2 | 3 | Slackware Linux 包含了大量的网络工具,你可以用它们来监控网络,或者查找修复网络连接上的问题。由于这些网络工具大多都是命令行程序,所以在图形桌面环境下,你需要从虚拟终端或者命令行窗口里运行它们。尽管它们中有几个也附带了一个图形界面版本,但我们目前只讨论命令行版本。 4 | -------------------------------------------------------------------------------- /chapter_01/README.md: -------------------------------------------------------------------------------- 1 | ## 第一章、Slackware 介绍 2 | 3 | ### 本章目录 4 | 5 | - [为何使用 Slackware?](Why_Use_Slackware.md) 6 | - [与其他 Linux 发行版的差异](Differences_Compared_to_Other_Linux_Distributions.md) 7 | - [许可](Licensing.md) 8 | -------------------------------------------------------------------------------- /chapter_05/Tab_Completion.md: -------------------------------------------------------------------------------- 1 | ### TAB 键补全 2 | 3 | 即使用了通配符还是觉得有很多工作?没错。当你处理长文件名的时候有一个更加简单的方法:Tab 键补全。Tab 键补全允许你输入能够独特表示出这个文件的几个字符,然后按一下 Tab 键,bash 就会将剩下的补全。即使你没有输入能够足够独特表示出这个文件的字符,shell 也会补充尽可能多的字符。输入两次 Tab 键会显示一个匹配的列表。 4 | -------------------------------------------------------------------------------- /chapter_11/Local_Filesystem_Types/XFS.md: -------------------------------------------------------------------------------- 1 | #### XFS 2 | 3 | XFS 由 SGI 公司为 Linux 内核贡献,它是对大容量和大文件支持最好的文件系统之一。XFS 对内存的需求比其他文件系统要多些,但是如果你需要处理大文件的话,用多一点的内存换取更好的性能是值得的。XFS 并不是很适合桌面电脑,它的亮点是在服务器上处理大中型文件。和 ext3 一样,XFS 是完全的日志型文件系统。 4 | -------------------------------------------------------------------------------- /preface/README.md: -------------------------------------------------------------------------------- 1 | ## 前言 2 | 3 | ### 本章目录 4 | 5 | - [目标读者](Intended_Audience.md) 6 | - [为什么会有一版新的 Slackware 手册?](Why_A_New_Slackware_Book.md) 7 | - [本书中使用的约定](Conventions_Used_in_this_Book.md) 8 | - [致谢](Acknowledgements.md) 9 | -------------------------------------------------------------------------------- /chapter_07/README.md: -------------------------------------------------------------------------------- 1 | ## X 视窗系统 2 | 3 | ### 本章目录 4 | 5 | - [X 是什么?](What_Is_And_Isnt_X.md) 6 | - [配置 X 服务器](Configuring_the_X_Server.md) 7 | - [选择窗口管理器](Choosing_a_Window_Manager.md) 8 | - [设置图形界面登陆](Setting_Up_A_Graphical_Login.md) 9 | -------------------------------------------------------------------------------- /chapter_11/Local_Filesystem_Types/reiserfs.md: -------------------------------------------------------------------------------- 1 | #### reiserfs 2 | 3 | reiserfs 是另一个针对 Linux 内核的古老的日志型文件系统,并且 Slackware 对它的支持也有很多年了。它非常适合用来存放、读取和写入大量的小文件。可惜的是,当遭遇驱动器故障时没有多少工具可以用来恢复数据,而且它的故障率比 ext3 要高。 4 | 5 | > 译者注:reiserfs 已经停止开发。 6 | -------------------------------------------------------------------------------- /chapter_11/Local_Filesystem_Types/vfat.md: -------------------------------------------------------------------------------- 1 | #### vfat 2 | 3 | 有时你需要在 Linux 和 Windows 之间共享数据,但又不能通过网络传输。相反,你需要一个共享分区或 USB 驱动器。这时 VFAT 文件系统是最好的选择,因为大多数操作系统都支持它。但是,这个文件系统是由微软设计的,它和 Linux 上的文件系统不一样,它不会储存文件权限。这意味着,必须为多个用户能访问到这个文件系统上的数据而开启特殊的选项。 4 | -------------------------------------------------------------------------------- /chapter_16/Web_Browsers/links.md: -------------------------------------------------------------------------------- 1 | #### links 2 | 3 | 一个功能更多的 `lynx` 替代者是 `links(1)`,后者支持框架(frames)并能够显示更美观的表格。和它的前辈们一样,`links` 中浏览网页可以使用键盘方向键,也可以使用鼠标。和 `lynx` 不同的是,`links` 显示效果要好多了,而且它还有一个方便的菜单(用鼠标点击顶行来激活)。 4 | 5 | ![links](../../img/links.png) 6 | -------------------------------------------------------------------------------- /preface/Why_A_New_Slackware_Book.md: -------------------------------------------------------------------------------- 1 | ### 为什么会有一版新的 Slackware 手册? 2 | 3 | Slackware Linux 是现存最古老的 Linux 发行版之一,它至今仍在更新且包含了许多流行开源软件的最新版本。Slackware 在保持 UNIX 原汁原味的同时,也在不断进化着。子系统在改变,窗口管理器一个接一个的出现,新的操作系统管理方法被设计出来。虽然我们反对为了改变而改变,但随着事物的发展,文档会变得陈旧——手册也不例外。 4 | -------------------------------------------------------------------------------- /chapter_09/README.md: -------------------------------------------------------------------------------- 1 | ## 用户和组 2 | 3 | ### 本章目录 4 | 5 | - [用户和组是什么?](What_Are_Users_and_Groups.md) 6 | - [管理用户和组](Managing_Users_and_Groups.md) 7 | - [管理用户和组的其他工具](Other_User_and_Group_Tools.md) 8 | - [手动管理用户和组](Managing_Users_and_Groups_Manually.md) 9 | -------------------------------------------------------------------------------- /chapter_13/Calling_Functions.md: -------------------------------------------------------------------------------- 1 | ### 调用函数 2 | 3 | Emacs 提供了大量用于交互使用的函数,它们中有的一些能用快捷键调用,比如打开和保存文件,有的一些就不能(像移动光标到行首或行尾),要调用后者需要额外的步骤。比方说要调用函数 `end-of-line`,我们应该这么做: 4 | 5 | ``` 6 | M-x end-of-line 7 | ``` 8 | 9 | 像函数名字暗示的一样,光标移动到了行尾。 10 | -------------------------------------------------------------------------------- /chapter_06/README.md: -------------------------------------------------------------------------------- 1 | ## 进程控制 2 | 3 | ### 本章目录 4 | 5 | - [ps](ps.md) 6 | - [kill 和 killall](kill_and_killall.md) 7 | - [top](top.md) 8 | - [计划任务](cron.md) 9 | 10 | Slackware 系统经常会运行成百上千个程序,每个程序都被标识为一个“进程”。管理这些进程是系统管理中很重要的一部分。那么我们怎么精确的管理这些独立的进程呢? 11 | -------------------------------------------------------------------------------- /chapter_17/pkgtool.md: -------------------------------------------------------------------------------- 1 | ### pkgtool 2 | 3 | 最简单的软件包维护方法就是使用 `pkgtool(8)`,它为其他一些工具提供了一个菜单界面。 `pkgtool` 可以安装或移除软件包,查看软件包内容,列出当前已安装的软件包,这些操作都在一个对用户友好的 ncurses 界面中进行。 4 | 5 | ![pkgtool](../png/pkgtool.png) 6 | 7 | 基本的软件包维护工作都可以方便的用 `pkgtool` 完成,高级点的则需要用到更灵活的工具。 8 | -------------------------------------------------------------------------------- /chapter_13/README.md: -------------------------------------------------------------------------------- 1 | ## Emacs 2 | 3 | ### 本章目录 4 | 5 | - [Emacs 是什么?](What_is_Emacs.md) 6 | - [起步](Starting_Out.md) 7 | - [移动光标](How_to_Move_Around.md) 8 | - [获得帮助](Getting_Help.md) 9 | - [调用函数](Calling_Functions.md) 10 | - [Emacs 小纪](Emacs_Cheat_Sheet.md) 11 | -------------------------------------------------------------------------------- /chapter_09/What_Are_Users_and_Groups.md: -------------------------------------------------------------------------------- 1 | ### 用户和组是什么? 2 | 3 | Slackware Linux 从它的前辈那里继承了强大的多用户传统。这意味着同一时间可有多个人使用同一个系统,并拥有不同的权限。这使得禁止用户修改文件,或让管理员明确决定哪些用户能用或不能用系统成为可能。不过,一个用户并不一定要代表一个真实的人。实际上,Slackware 带有大量事先设置好的用户和组,但这些不是普通用户该使用的内容。这些用户和组能让管理员将系统分区,以提升安全性。接下来让我们看看如何实现这一点。 4 | -------------------------------------------------------------------------------- /chapter_05/What_Is_A_Shell.md: -------------------------------------------------------------------------------- 1 | ### 什么是 Shell? 2 | 3 | Shell 到底是什么呢?Shell 基本上是一个命令行的用户环境。本质上来说,它是当用户登录并且运行其他程序时就会运行的程序。从某种程度上说,它和图形化的用户接口很相似,因为它提供了一个执行命令和启动程序的框架。在 Slackware 中包含很多 Shell,但是在本书中我们只讨论 bash。高级用户可能会考虑使用更加有力的 zsh,而那些对老的 UNIX 系统的用户可能会使用 ksh。而最自虐的是使用 csh。对于新手来说使用 bash 比较好。 4 | -------------------------------------------------------------------------------- /chapter_12/README.md: -------------------------------------------------------------------------------- 1 | ## vi 2 | 3 | ### 本章目录 4 | 5 | - [vi 是什么?](What_is_vi.md) 6 | - [vi 的不同模式](The_Different_Modes_of_vi.md) 7 | - [打开、保存和退出](Opening_Saving_and_Quitting.md) 8 | - [移动光标](Moving_Around.md) 9 | - [编辑文本](Editing_A_Document.md) 10 | - [vi 小纪](vi_Cheat_Sheet.md) 11 | -------------------------------------------------------------------------------- /chapter_11/Local_Filesystem_Types/ext4.md: -------------------------------------------------------------------------------- 1 | #### ext4 2 | 3 | ext4 是 ext 系列文件系统中最新的。它被设计来在 ext3 的基础上使用新的想法。虽然 Slackware 支持 ext4,但是你应该记住这个文件系统还非常的新并且仍处于开发状态。如果你对稳定性的需求大于性能,你最好选一个其他文件系统,比如 ext3。也就是说,虽然 ext4 相对于 ext3 在性能方面有着巨大的提升,但是许多人并不认为它适合稳定的使用。 4 | 5 | > 译者注:现在的 ext4 文件系统已经十分稳定了,通常被认为是一个稳妥的选择。 6 | -------------------------------------------------------------------------------- /chapter_19/What_Does_the_Kernel_Do.md: -------------------------------------------------------------------------------- 1 | ### 内核是做什么的? 2 | 3 | 你可能听说过人们谈论编译内核或建立一个内核。但究竟什么是内核?它有什么作用? 4 | 5 | 内核是计算机操作系统的核心。它是整个操作系统的基础。内核充当硬件和应用程序之间的桥梁。这意味着内核(通常)是你计算机上唯一一个负责控制计算机硬件的软件。内核能指导你的硬盘驱动器在硬盘上搜索一个特定的数据流。内核也能指导你的网卡通过电压快速变化来传递数据。内核同时也监控你的硬件。当网卡检测到远程计算机发送的信息,其转发信息给内核。这使得内核成为你计算机上最重要也最复杂的一个软件。 6 | -------------------------------------------------------------------------------- /chapter_02/The_setup_Program/Select.md: -------------------------------------------------------------------------------- 1 | #### Select 2 | 3 | Slackware 一个独特的特点是将软件包进行了分类。在一开始的时候,FTP 网络最多只能以慢速 300 波特 modem 的方式接入,所以 Slackware 将软件包进行分类,这样就可以适用于软盘,用户也已下载并且安装它们感兴趣的软件包。如今这个方式被保留了下来并且安装器允许你选择要安装哪些集合。这允许你跳过一些不需要的软件包,像是服务器上就不需要“X”和“KDE”。注意“A”是必须要安装的核心软件包组。 4 | 5 | ![](../../png/setup-select.png) 6 | -------------------------------------------------------------------------------- /chapter_02/The_setup_Program/Target.md: -------------------------------------------------------------------------------- 1 | #### Target 2 | 3 | 我们的下一步是选择 root 分区以及其他我们需要 Slackware 使用的分区。在这期间,会有文件系统的选择并且是否用其来格式化分区的选择。如果你安装的是一个新的分区则必须格式化它。如果你以及有一个有数据的分区,并且你像保留数据,则不要格式化。例如大部分用户有一个分开的 `/home` 分区用来保存用户数据,那么就不要格式化这个分区。这使它们可以安装新的 Slackware 版本而无需备份和恢复这些用户数据。 4 | 5 | ![](../../png/setup-target.png) 6 | -------------------------------------------------------------------------------- /chapter_04/Archive_and_Compression/XZ_LZMA.md: -------------------------------------------------------------------------------- 1 | #### XZ、LZMA 2 | 3 | 最新加入 Slackware 的压缩工具就是 `xz`,它使用的是 LZMA 压缩算法。它比 `bzip2` 更快并且压缩效果更好。实际上,它因为在速度和压缩效果上出色的综合表现,已经成为 Slackware 的首选压缩方案了。不过,`xz` 在我们成书之时还没有手册页,所以要查看所有选项,使用 `--help` 参数。压缩使用 `-z`,解压使用 `-d`. 4 | 5 | ``` 6 | darkstar:~$ xz -z /tmp/large_file 7 | ``` 8 | -------------------------------------------------------------------------------- /chapter_15/README.md: -------------------------------------------------------------------------------- 1 | ## 无线网络 2 | 3 | ### 本章目录 4 | 5 | - [iwconfig](iwconfig.md) 6 | - [有线等(无)效保密](Wired_Equivilant_Protection_or_Lack_Thereof.md) 7 | - [Wifi 保护访问](Wifi_Protected_Access/README.md) 8 | - [再看 rc.inet1.conf](Wifi_Protected_Access/rc.inet1.conf_revisited.md) 9 | - [wicd](wicd.md) 10 | -------------------------------------------------------------------------------- /chapter_11/Local_Filesystem_Types/swap.md: -------------------------------------------------------------------------------- 1 | #### swap 2 | 3 | 和其它储存文件和目录的文件系统不一样,swap 分区是用来存放虚拟内存的。swap 是很有用的,因为它可以用来防止在内存耗尽时系统崩溃。当内存耗尽时内核将内存内容拷贝到 swap 然后释放内存来供其它程序使用。你可以把 swap 看作非常慢的内存。swap 是典型的故障保护设施,不应该连续的依赖于使用它。如果你发现 swap 用的有点多的话,你还是多安装些内存吧。 4 | 5 | > 译者注:swap 又被称为“交换空间”,具体的可分为 swap 分区和 swap 文件,这里的 swap 特指前者。 6 | -------------------------------------------------------------------------------- /chapter_02/The_setup_Program/Addswap.md: -------------------------------------------------------------------------------- 1 | #### Addswap 2 | 3 | 如果你创建了一个 swap 分区,这一步允许你在进行与内存有关的活动(比如说安装软件包)之前启用它。swap 空间是必要的虚拟内存。这是一个硬盘分区(或者一个文件,尽管 Slackware 安装器并不支持 swap 文件),当你的内存用尽时会移出一部分内容到这个分区中。这个交换分区允许你使用比你计算机实际有的物理内存更多的内存空间。这一步也会将 swap 分区添加到 `/etc/fstab` 中,这样在启动系统时就可以获得了。 4 | 5 | ![](../../png/setup-swap.png) 6 | -------------------------------------------------------------------------------- /chapter_08/README.md: -------------------------------------------------------------------------------- 1 | ## 打印 2 | 3 | ### 本章目录 4 | 5 | - [选择打印程序](Choosing_A_Printer.md) 6 | - [获取驱动](Getting_the_driver.md) 7 | - [在 CUPS 中设置打印机](Setting_Up_a_Printer_in_CUPS.md) 8 | - [从命令行打印](Printing_from_the_Command_Line/README.md) 9 | - [打印格式化数据](Printing_from_the_Command_Line/Formatting_for_Print.md) 10 | -------------------------------------------------------------------------------- /chapter_11/Local_Filesystem_Types/ext3.md: -------------------------------------------------------------------------------- 1 | #### ext3 2 | 3 | ext3 是 ext2 的升级版。它被设计来在大多数情况下替代 ext2,虽然与 ext2 共享着许多相同的代码,但不同的是 ext3 增加了日志功能。由于 ext3 和 ext2 非常相似,所以可以从一个转换到另一个而不丢失数据。在遭遇灾难性的硬件故障时,有很多工具可用来从这个文件系统中恢复数据。ext3 是一个很好的有着日志支持的通用文件系统,但是在特定情况下,它却没有其他日志型文件系统一样的表现。ext3 的一个缺陷是需要经常对文件系统进行彻底的检查。这通常是在计算机启动过程中,文件系统被挂载后完成,因此会造成烦人的延迟。 4 | -------------------------------------------------------------------------------- /chapter_16/Web_Browsers/lynx.md: -------------------------------------------------------------------------------- 1 | #### lynx 2 | 3 | Slackware 中最古老的命令行浏览器无疑是 `lynx(1)` 。严格来讲,`lynx` 是一个文本型的网页浏览器,因为它不支持框架(frames),Javascript 和图片,但即便有这些限制,我们也不能否认它的能力。在 `lynx` 中使用键盘方向键来浏览网页,鼠标则可用可不用。因为 `lynx` 缺少其他浏览器支持的许多特性,它将会成为你用过的获取信息速度最快的网页浏览器。举个例子,`-dump` 参数将格式化后的网页发送给命令行,然后命令行可以利用管道(pipe)再把网页发送给其他程序。 4 | 5 | ![lynx](../../img/lynx.png) 6 | -------------------------------------------------------------------------------- /chapter_05/README.md: -------------------------------------------------------------------------------- 1 | ## Bourne Again Shell 2 | 3 | ### 本章目录 4 | 5 | - [什么是 Shell?](What_Is_A_Shell.md) 6 | - [环境变量](Environment_Variables.md) 7 | - [通配符](Wildcards.md) 8 | - [TAB 键补全](Tab_Completion.md) 9 | - [输入、输出重定向](Input_and_Output_Redirection.md) 10 | - [任务管理](Task_Management.md) 11 | - [终端](Terminals.md) 12 | - [制定](Customization.md) 13 | -------------------------------------------------------------------------------- /chapter_02/The_setup_Program/Source.md: -------------------------------------------------------------------------------- 1 | #### Source 2 | 3 | 这里你可以告诉 Slackware 到哪里寻找 Slackware 的安装包。通常情况下选择从 Slackware 的 DVD 或者 CD 安装,但是也有其他选项。如果你的软件包安装在了一个分区上,你可以从那个分区或者一个预先挂载的目录上安装(你可能需要使用 `mount` 挂载那个分区,详情看 [第十一章](../../chapter_11/README.md))。除此以外,Slackware 也提供从网络安装,比如 NFS、HTTP、FTP、Samba。如果你选择从网络安装,Slackware 会先让你输入 TCP/IP 信息。我们这里讨论从 DVD 安装,其他方式相似。 4 | 5 | ![](../../png/setup-source.png) 6 | -------------------------------------------------------------------------------- /chapter_16/Network_Diagnostic_Tools/host.md: -------------------------------------------------------------------------------- 1 | #### host 2 | 3 | 网络问题常常由 DNS 错误导致。DNS 负责域名与 IP 地址之间的映射,可以用 `host(1)` 命令进行快速的 DNS 查找。在运行 `host` 时,你的计算机将执行少量的普通 DNS 查找并返回执行结果。 4 | 5 | ``` 6 | darkstar:~# host www.slackware.com 7 | www.slackware.com is an alias for slackware.com. 8 | slackware.com has address 64.57.102.34 9 | slackware.com mail is handled by 1 mail-mx.cwo.com. 10 | ``` 11 | -------------------------------------------------------------------------------- /preface/Acknowledgements.md: -------------------------------------------------------------------------------- 1 | ### 致谢 2 | 3 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. 4 | 5 | > 译者注:该部分原文如此。 6 | -------------------------------------------------------------------------------- /chapter_07/Choosing_a_Window_Manager.md: -------------------------------------------------------------------------------- 1 | ### 选择窗口管理器 2 | 3 | Slackware Linux 包含大量的窗口管理器和桌面环境。窗口管理器是负责绘制程序窗口,改变窗口大小,或类似事情的程序。桌面环境内含一个窗口管理器,同时还有任务栏,菜单,图标,等等。Slackware 带有 KDE 和 XFCE 两个桌面环境以及一些窗口管理器。你使用什么完全取决于你自己,不过一般说来窗口管理器比桌面环境速度更快,并且更适合内存小,处理器慢的老机器。桌面环境对适应 Microsoft Windows 的用户来说是个不错的选择。 4 | 5 | 选择窗口管理器的最简单方式就是 `xwmconfig(1)`(已包含在 Slackware 内)。该程序允许用户选择 `startx` 要运行的窗口管理器。 6 | 7 | ![ ](../img/xwmconfig.png) 8 | -------------------------------------------------------------------------------- /preface/Conventions_Used_in_this_Book.md: -------------------------------------------------------------------------------- 1 | ### 本书中使用的约定 2 | 3 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. 4 | 5 | > 译者注:该部分原文如此。 6 | -------------------------------------------------------------------------------- /chapter_12/The_Different_Modes_of_vi.md: -------------------------------------------------------------------------------- 1 | ### vi 的不同模式 2 | 3 | 一个常常让 vi 的新用户沮丧不已的事情是:如果不带任何参数运行 `vi`,屏幕上会出现这样的东西。 4 | 5 | ``` 6 | ~ 7 | ~ 8 | ~ 9 | ~ 10 | ~ 11 | ~ 12 | ~ 13 | ~ 14 | ~ 15 | ~ 16 | ~ 17 | Command 18 | ``` 19 | 20 | 这时用户敲击键盘并希望文档中可以回显他刚才的输入。然而发生的事情会让他感到莫名其妙。原因很简单,vi 有不同的操作“模式”(modes),例如命令模式(command mode)和插入模式(insert mode)。默认进入的是命令模式,在此模式下每次按键都会执行特定的动作,例如移动光标、删除或复制文本等等。 21 | -------------------------------------------------------------------------------- /chapter_01/Why_Use_Slackware.md: -------------------------------------------------------------------------------- 1 | ### 为何使用 Slackware? 2 | 3 | Slackware 历史悠久且优秀,它始于 1992 年,在 1993 年首次发布,是现存最古老的商业 Linux 发行版。Slackware 致力于成为一个简单整洁的 Linux 发行版并尽可能的向 UNIX 靠拢,这使它非常适合想学习 Linux 或其他类 UNIX 系统的人。在 2012 年的一次访问中,Slackware 创始人 Patrick Volkerding 这样说: 4 | 5 | > “为了使事情有所不同,我试着把它们分开。离开了一段时间又回到 Slackware 的人们会高兴的发现他们不需要重新学习做任何事。这一点吸引了很多忠实的追随者,我非常感激他们。” 6 | 7 | Slackware 的简单使它同样适合想要创造自己的操作系统的用户。当然,Slackware 本身就非常不错了,不管是作为桌面,工作站,还是服务器。 8 | -------------------------------------------------------------------------------- /chapter_18/Security_Update_Mailing_List.md: -------------------------------------------------------------------------------- 1 | ### 订阅安全更新邮件列表 2 | 3 | 尽管 Slackware 团队有时会发布用以修复漏洞的补丁包,然而其中你最为关心的可能是稳定分支的版本发布后,那些针对程序脆弱性而发布的安全更新。Slackware 项目维护着一个邮件列表,可以通知你何时有任何针对严重错误而发布的软件包。你可以给[majordomo@slackware.com](mailto:majordomo@slackware.com)发送一封正文为 `subscribe slackware-security` 的邮件以订阅该邮件列表。你的邮件地址会被加入到列表中,当有新的软件包发布时,你就可以收到邮件通知。 4 | 5 | > 译者注:你也可以在 [http://www.slackware.com/security/](http://www.slackware.com/security/) 查看所有关于安全更新的邮件通知。 6 | -------------------------------------------------------------------------------- /chapter_04/Reading_Documents/more.md: -------------------------------------------------------------------------------- 1 | #### more 2 | 3 | `more` 会从第一行开始读取直到填满屏幕,然后停止。看完当前内容后,可以按 `ENTER` 来接着读取下一行,或是按 `SPACE` 来另外一屏幕的内容,或是输入想要读取的行数再按 `SPACE` 。 `more` 也能在文件中搜索关键词,在 `more` 中打开文件后,输入 `/` 再输入关键词,再按下 `ENTER`,文件会滚到第一次发现关键词的地方。 4 | 5 | 这是对 `cat` 的一次重大改进,但依然有一些缺点:`more` 不能回滚,搜索功能不能高亮搜索到的关键词,不能横向滚动,等等。我们急需一个解决方案。 6 | 7 | > ##### 注意 8 | > 9 | > 实际上,现代版本的 `more`, 比如 Slackware 附带的,确实有一个“返回”功能(按下 `b` 键),但只支持 `more` 直接打开文件的方式,`more` 通过管道打开的文件是不支持的。 10 | -------------------------------------------------------------------------------- /chapter_12/Moving_Around.md: -------------------------------------------------------------------------------- 1 | ### 移动光标 2 | 3 | 对于一个 vi 的初学者而言,移动光标可能是最难学习的事情。vi 并不使用传统的方向键来控制光标——虽然在 Slackware 中方向键也是可选的。相反 vi 使用命令模式下的简单命令来控制光标的移动。原因很简单——vi 为了兼容早期没有方向键的键盘。这样一来,光标的移动必须使用几个可用的按键来完成。所以右手经常操作的 `h` 、 `j` 、 `k` 和 `l` 被选中了。在 vi 的命令模式下,这四个键会控制光标的移动。这里有一个能够帮你快速记忆 vi 光标控制的表格。 4 | 5 | | 指令 | 动作 | 6 | | ---- | ---------------- | 7 | | `h` | 光标左移一个字符 | 8 | | `j` | 光标下移一行 | 9 | | `k` | 光标上移一行 | 10 | | `l` | 光标右移一个字符 | 11 | 12 | > 表 12.1:vi 光标移动 13 | -------------------------------------------------------------------------------- /chapter_08/Printing_from_the_Command_Line/Formatting_for_Print.md: -------------------------------------------------------------------------------- 1 | #### 打印格式化数据 2 | 3 | `lpr` 就像大多 Unix 程序一样,只做一件事:发送文件到打印机。它并不在乎这个文件在页面上表现的好或不好。当打印未被格式化的大文本文件时,你可以使用 `pr(1)` 。 4 | 5 | `pr` 是一个简单的文本格式化程序,接受任何文本文档作为输入,确保该文本包含了换行和分页、一个可选的页眉和页脚、页码或更多东西。它有很多选项,但默认值通常已经足够棒。 `pr` 会把格式化后的结果输出到 `stdout`,这意味着它可以很轻易地将一个文本文档格式化并输出到终端上。当然,它可以使用管道重定向到 `pr`: 6 | 7 | ``` 8 | darkstar:~$ pr foo.txt | lpr 9 | ``` 10 | 11 | 这将会格式化 `foo.txt` 并把格式化后的文本发送到默认打印机。 12 | 13 | 就像其他命令一样,你可以通过 `man pr` 来获取自定义格式选项的列表。 14 | -------------------------------------------------------------------------------- /chapter_08/Printing_from_the_Command_Line/README.md: -------------------------------------------------------------------------------- 1 | ### 从命令行打印 2 | 3 | 现在,你已经成功地安装并配置你的打印机。你可以使用 `lpr` 来从命令行打印。 4 | 5 | `lpr` 发送文档到打印机以完成打印,不过在此之前,你也许想要先使用 root 运行 `lpadmin` 以定义一个默认打印机: 6 | 7 | ``` 8 | # lpadmin -d r1060 9 | ``` 10 | 11 | 在这个例子中,`r1060` 是配置在 `/etc/cups/printers.conf` 的名字或在 CUPS 的配置中的名字。 12 | 13 | **注意** 14 | 15 | 如果你没有 root 权限,你可以配置 PRINTER 环境变量: 16 | 17 | ``` 18 | $ PRINTER=r1060 19 | $ export PRINTER 20 | ``` 21 | 22 | 一旦打印机被设置完成,你就可以这样打印: 23 | 24 | ``` 25 | $ lpr foo.txt 26 | ``` 27 | -------------------------------------------------------------------------------- /chapter_17/README.md: -------------------------------------------------------------------------------- 1 | ## 包管理 2 | 3 | ### 本章目录 4 | 5 | - [pkgtool](pkgtool.md) 6 | - [软件包的安装、移除和升级](Installing_Removing_and_Upgrading_Packages.md) 7 | - [软件包的压缩格式](Package_Compression_Formats/README.md) 8 | - [slackpkg](Package_Compression_Formats/slackpkg.md) 9 | - [rpm2tgz](Package_Compression_Formats/rpm2tgz.md) 10 | 11 | 包管理是每个 Linux 发行版的主要组成部分。Slackware 中的所有软件和很多第三方工具都是以源代码形式发布的,但编译这数以千计的程序和厍既麻烦又耗时,所以很多人都喜欢安装已经编译好了的软件包。事实上,在你安装 Slackware 的时候,安装程序主要做的就是在一系列的软件包上执行包管理工具。这里我们将会看到用于处理 Slackware 软件包的各种工具。 12 | -------------------------------------------------------------------------------- /chapter_03/Dual_Booting/Dual_Booting_from_Hard_Drives.md: -------------------------------------------------------------------------------- 1 | #### 引导多个硬盘 2 | 3 | 不同的硬盘驱动器之间的多引导往往比多分区的引导简单,因为计算机的 BIOS 或 EFI 几乎无一例外地都有一个引导设备选择器,使您可以在 POST 后立即中断引导过程并选择优先引导的设备。 4 | 5 | 最大的困难是不同品牌的主板,进入启动选则器的方式不同。参考主板说明书或者机器启动画面来找出你的电脑需要的操作。典型的按键是 `F1` 、 `F12` 和 `DEL` 。对于苹果电脑,它始终是 `Option`(`Alt`)键。 6 | 7 | 如果您通过 BIOS 或 EFI 管理引导优先级,那么每个硬盘驱动器上的引导加载程序只会考虑自己所在设备而不考虑其他。这与引导装载程序的设计目的相反,但如果电脑上的闭源系统不顾用户喜好,坚持要成为唯一操作系统的话,这是个很有效的解决方案。 8 | 9 | 如果你没有很多硬盘设备并且又不喜欢折腾多分区的话,你也许会喜欢可启动的 USB 闪存盘,或是虚拟机。这两个方案已经超出了本书讨论范围(虽然是很常见的方案)。取决于你的需要,任君选择。 10 | -------------------------------------------------------------------------------- /chapter_03/Dual_Booting/README.md: -------------------------------------------------------------------------------- 1 | ### 多重引导 2 | 3 | 引导程序(比如 LILO)是一个非常灵活的东西,因为它的存在只是为了确定要启动分区中的哪一个硬盘,分区,甚至内核。我们很自然就能推出,安装了多系统的用户一定是一个 LILO 或 GRUB 用户。 4 | 5 | 出于各种原因,人们需要“多启动”:一些人希望在在某个分区或驱动器有一个稳定的 Slackware 系统,并在另一位置有个开发用沙盒,其他人可能想同时体验 Slackware 和其他 Linux 或 BSD 发行版,还有一些人一个分区装 Slackware,另一分区装闭源系统(为了工作或某些 Linux 没有的程序)。 6 | 7 | 多启动不应该掉以轻心,但它通常意味着你将有两个不同的试图管理引导程序的操作系统。如果你多启动,很可能一个操作系统会覆盖或更新引导程序条目。如果这种情况发生,你必须手动修改 GRUB 或 LILO 来引导这些操作系统。 8 | 9 | 有两种方法来双(多)启动:你可以把每个操作系统安装在不同的硬盘上(台式机常见,因为台式机有很多硬盘位)或安装在不同分区上(笔记本电脑常见,因为只有一个物理驱动器)。 10 | -------------------------------------------------------------------------------- /chapter_17/Package_Compression_Formats/README.md: -------------------------------------------------------------------------------- 1 | ### 软件包的压缩格式 2 | 3 | 过去,所有 Slackware 软件包都采用 `gzip(1)` 工具进行压缩,在压缩速度和压缩后的文件大小上,`gzip` 都表现的很好。最近又有了很多新的压缩方案,包管理工具为了支持这些压缩方案,也进行了相应的升级。现在,官方的 Slackware 软件包采用 `xz` 工具进行压缩,扩展名为 `.txz` 。老的软件包(还有许多第三方软件包)仍然使用 `.tgz` 扩展名。 4 | 5 | 有必要说明一下,`.tgz` 和 `.txz`(常统称为 `.t?x`)都是用来表示压缩过的 tar 文件的标准扩展名,它们不是专用的。这样做有很多好处:在几乎所有的 UNIX 系统中都可以很容易地构建这样的包(许多其他格式的包需要专用的工具链才能构建),而且拆包也非常简单。 6 | 7 | 注意并非所有的 `.t?z` 文件都是 Slackware 软件包,只不过 Slackware 软件包以 `.t?z` 文件的形式存在罢了。 `installpkg` 不会安装任何非 Slackware 软件包的 `.t?z` 文件。 8 | -------------------------------------------------------------------------------- /chapter_14/netconfig.md: -------------------------------------------------------------------------------- 1 | ### netconfig 网络配置 2 | 3 | 计算机如果不能联网就有些没意思了。当然,你也可以在计算机上装游戏,但那也只是好一点的游戏机。在当下的时代里,计算机需要能够彼此联系沟通,他们需要联网才行。无论你是要组建一个上千台计算机的企业网络,还是只想要一台电脑能联上互联网,Slackware 的配置都是非常方便而简单的。这一章会教你如何建立典型的有线网络。下一节再讨论无线网络的设置。不过你在这章里所学到的大部分内容在无线网络那里也适用。 4 | 5 | 我们有许多不同的方式来配置您的计算机连接到某个企业网络或互联网,他们基本上可以分为两大类:静态和动态。 静态地址是固定的,通常静态地址设置好后不太会变动,至少不会频繁变化。动态的地址是可以流通变动的,一般是设定一段时间后地址会改变。通常任何类型的网络服务器都会设定一个静态地址,这样其他的机器需要访问网络服务时就可以知道地址在哪里。动态地址通常用于工作站,网络终端和其他任何非必需设静态地址的设备。动态地址更灵活,但其本身实现是极其复杂的。 6 | 7 | 您可能会遇到很多种不同的网络协议,但大多数人都将只需要处理网际协议(IP)。因此,在本书中我们将专注于互联网协议(IP)。 8 | -------------------------------------------------------------------------------- /chapter_04/Reading_Documents/README.md: -------------------------------------------------------------------------------- 1 | ### 阅读文档 2 | 3 | 传统上,UNIX 和类 UNIX(UNIX-like)的操作系统会产生大量的文件,以供用户在某一时刻查阅。自然,会有很多读取文件的方法,我们在此展示几种最常见的。 4 | 5 | 早期,如果你想查看文件内容(任何文件,包括文本文件和二进制程序)你需要用到 `cat(1)` 。 `cat` 是个很简单的程序,能接受一个或多个文件,将其连接(连接,con**cat**enate, 因此得名)起来并输出到标准输出(一般是你的终端屏幕)。当文件不大不会刷屏时还好,但不适合阅览大型文件因为它没有内置的文件内跳转的功能,也不能逐段读取。今天,`cat` 依然被广泛使用,但主要用在脚本里来合成文件。 6 | 7 | ``` 8 | darkstar:~$ cat /etc/slackware-version 9 | Slackware 14.0 10 | ``` 11 | 12 | 看到 `cat` 的缺点,一些聪明人士坐下来开发一个能一次只读取一页的程序。这种程序被称为“pagers”. 最早的就是 `more(1)`, 因为你能随时看到更多(more)文件内容而得名。 13 | -------------------------------------------------------------------------------- /chapter_01/Differences_Compared_to_Other_Linux_Distributions.md: -------------------------------------------------------------------------------- 1 | ### 与其他 Linux 发行版的差异 2 | 3 | Slackware 和 Red Hat、Debian、Ubuntu 等等主流发行版有很多不同。也许最明显的就是这些主流发行版缺乏 Slackware 对系统管理员提供的“关照”。许多发行版都有自己用于配置各种服务的图形化工具。在很多情况下,这些工具是在系统中安装应用程序的首选方法,并且它们会覆盖任何你通过其他手段对配置文件所做的修改。这些工具使不熟悉系统的新手能够轻松地安装基本服务,另一方面也使其他平时不做的事情变得困难。相反,Slackware 则要求系统管理员独自处理这些任务。除了上游开发者在源码中提供的安装工具外,Slackware 不提供通用的安装工具。这意味着 Slackware 有一个陡峭的学习曲线,即便对那些熟悉其他 Linux 发行版的用户也是一样,不过这也让用户能够更容易地做他们想做的任何事情。 4 | 5 | Slackware 一直都有包管理系统([第十七章、包管理](../chapter_17/README.md)),只是 Slackware 包管理工具为了简单易用可靠而放弃了自动依赖解决功能。 6 | -------------------------------------------------------------------------------- /chapter_04/Archive_and_Compression/zip_and_unzip.md: -------------------------------------------------------------------------------- 1 | #### zip、unzip 2 | 3 | 你应该对 `.zip` 文件非常熟悉了。这是含有其他文件或目录的压缩文件。虽然在 Linux 世界中我们通常不使用 zip 文件,但它们在其他系统里广为使用,所有我们时不时会有处理它的需要。 4 | 5 | 要创建一个 zip 文件,你需要(废话)使用 `zip(1)` 命令。你能用 `zip` 压缩文件、目录、或文件和目录。你需要使用 `-r` 参数来递归处理目录。 6 | 7 | ``` 8 | darkstar:~$ zip -r /tmp/home.zip /home 9 | darkstar:~$ zip /tmp/large_file.zip /tmp/large_file 10 | ``` 11 | 12 | 参数的顺序非常重要。第一个文件名必须是要创建的 zip 文件(如果没有 `.zip` 扩展名,`zip` 会自动加上),另外的是待压缩的文件。 13 | 14 | 自然,`unzip(1)` 是解压 zip 文件的工具。 15 | 16 | ``` 17 | darkstar:~$ unzip /tmp/home.zip 18 | ``` 19 | -------------------------------------------------------------------------------- /chapter_02/The_setup_Program/Install.md: -------------------------------------------------------------------------------- 1 | #### Install 2 | 3 | 最后我们来到了最关键的一环。在这一步中,Slackware 会询问你要以哪种方式安装这些选择的软件包。如果这是你第一次安装,推荐选择“full”。 4 | 5 | “menu”和“expert”选项允许你选择软件包来安装,这用来给那些对系统熟悉的用户进行选择。这两个方法允许这样的用户快速地对之前选择的集合中的软件包进行删减来构建一个最小化安装的系统。如果你并不知道你在做什么(有时候甚至你知道)你可能会删除一些关键的软件包而导致系统崩溃。 6 | 7 | “newbie”对新手来说很有用,不过会花费很长时间。这个方法会显示你之前选择的集合中的所有软件包,并且一个个地询问你是否安装。这个方法的好处是可以暂停并且给你一个软件包的简介。对于新手来说,这个简介很有用,而对于大多数用户来说却很费时和乏味。 8 | 9 | “custom”和“tagpath”只用于那些对 Slackware 有技术和专门知识的人。这两个选项允许用于从自定义的 Tagfiles 中安装软件包。Tagfiles 很少被用到。我们在这本书中不会讨论。 10 | 11 | ![](../../png/setup-install.png) 12 | -------------------------------------------------------------------------------- /chapter_08/Getting_the_driver.md: -------------------------------------------------------------------------------- 1 | ### 获取驱动 2 | 3 | 这里有三种打印机驱动: 4 | 5 | 1. PostScript 打印机使用几乎通用的 PostScript 语言来与计算机交互。PostScript 打印机通常不需要再安装驱动,因为一个名为 GhostScript 的兼容 PostScript 语言的子系统通常已经被安装。 6 | 2. Gutenprint 项目由 GNU 开发者设计开发,现已支持约 700 余种打印机。 7 | 3. 制造商可能为他们的打印机提供了 Linux 驱动,你可以在制造商的支持页面查找是否有适合你的打印机的驱动程序。 8 | 9 | 在 gutenprint 被安装到 Slackware 后,对于这三种类型的打印机,我们有两种方法安装驱动。 10 | 11 | 1. 对于打印机制造商提供的驱动程序,安装方式通常和你系统上的其他软件一样,使用 `installpkg` 或 `rpm2tgz` 来安装驱动程序包。请务必先阅读驱动捆绑的文档。 12 | 2. 对于 PostScript 打印机,并没有通常意义上的“安装”。你只需要下在相应的 PPD 文件并放到你硬盘上的合理位置。 13 | 14 | 在下载安装好必要的组件后,你就完成了 CUPS 的运行准备了。 15 | -------------------------------------------------------------------------------- /chapter_03/README.md: -------------------------------------------------------------------------------- 1 | ## 第三章、引导 2 | 3 | ### 本章目录 4 | 5 | - [mkinitrd](mkinitrd.md) 6 | - [LILO](LILO.md) 7 | - [多重引导](Dual_Booting/README.md) 8 | - [引导多个分区](Dual_Booting/Dual_Booting_with_Partitions.md) 9 | - [引导多个硬盘](Dual_Booting/Dual_Booting_from_Hard_Drives.md) 10 | 11 | 既然你已经安装好了一个 Slackware 系统,你就应该学习些关于系统启动的知识,比如是什么控制着机器的启动顺序,当这一机制损坏的时候如何修复。如果你已使用 Linux 足够长的时间,你总有可能搞坏你的引导程序(bootloader)。 还好,修复它并不需要重装一次系统。Linux(更确切一点,Slackware)给予您启动过程的完全控制权,而不是像其他系统一样将底层工作原理隐藏起来。简单到只需修改几个配置文件并重新运行引导程序的安装程序,你就能又快又好地修改(或破坏)你的系统。Slackware 还让多系统启动更加简单,比如和其他 Linux 发行版或 Microsoft Windows 组成多系统。 12 | -------------------------------------------------------------------------------- /chapter_15/Wired_Equivilant_Protection_or_Lack_Thereof.md: -------------------------------------------------------------------------------- 1 | ### 有线等(无)效保密 2 | 3 | 无线网络就性质来说比有线网络更不安全。信息通过无线电波传播,使得它很容易被第三方截取。因此这些年来人们想出了很多种让无线网更安全的方法。我们第一个要介绍的就是有线等效保密(Wired Equivilant Protection,WEP。虽然名字里有“保密”但和它的名字相比相去甚远)。如果今天你还在用 WEP 的话,我强烈建议换用 WPA2 或其他更强的加密方式。破解 WEP 相当容易,而且只需要几分钟。然而直到今天还有无线接入点使用的是 WEP,并且你某一天就有可能要用这种连接。如果你有十六进制密钥的话,连接到 WEP 保护的接入点非常容易。使用 `iwconfig` 的话,我们需要用 `key` 参数,后面跟着十六进制或 ASCII 格式的密码。如果使用 ASCII 密码的话,在 `key` 后面需要加一个 `s` 。但一般说来,推荐使用十六进制格式。 4 | 5 | ``` 6 | darkstar:~# iwconfig wlan0 \ 7 | key cf80baf8bf01a160de540bfb1c 8 | darkstar:~# iwconfig wlan0 \ 9 | key s:thisisapassword 10 | ``` 11 | -------------------------------------------------------------------------------- /chapter_01/Licensing.md: -------------------------------------------------------------------------------- 1 | ### 许可 2 | 3 | Slackware 的每一部分都由不同的人或团队开发,因为开发者们对"自由"都有各自不同的看法,所以出现了很多协议,这些协议针对软件的使用或分发授予了用户不同的权限。好在处理这些协议并不困难。多数软件都釆用 GPL 或 BSD 协议,大部分其他协议与这两种协议都非常相似。 4 | 5 | 在自由软件社区用的最多的协议可能就是 GNU 通用公共许可证(GNU General Public License)了。GPL 由 [自由软件基金会][id_fsf](Free Software Foundation)设计,事实上,“自由软件”一词就是自由软件基金会创造的。GPL 对软件的使用没有做任何限制,如果只是使用 GPL 软件甚至可以不接受协议中的条款,但如果要分发或修改 GPL 软件,就必须遵守 GPL 协议。很多 Slackware 附带的软件,从 Linux 内核到 Samba,都在 GPL 协议下发布。 6 | 7 | 另一个常用的协议是 BSD 协议,BSD 协议可以说比 GPL 协议“更加自由”,因为它只要求保留版权声明和免责声明,对衍生作品几乎没有做任何限制。很多 Slackware 特有的小工具采用 BSD 协议,BSD 协议也是很多小型项目的首选协议。 8 | 9 | [id_fsf]: http://fsf.org/ "访问自由软件基金会" 10 | -------------------------------------------------------------------------------- /chapter_16/Mail_Clients/pine.md: -------------------------------------------------------------------------------- 1 | #### pine 2 | 3 | `pine` 是现存最古老的邮件客户端之一,很少有其他的邮件客户端能比 `pine` 更加友好。 `pine` 由华盛顿大学(University of Washington)开发并携带了难对付的商标和版权协议。还好早在 2005 年,这个大学认为有必要重写一个没有商标的,协议更开放的 `pine`,所以 `pine` 的克隆版本 `alpine(1)` 诞生了,Slackware 中包含的就是这个版本。 4 | 5 | 要使用 `alpine`,在命令行中输入 `pine` 即可。 `pine` 用法很简单,它有一个菜单系统,而且要用到的命令在屏幕下方都有说明,来看一下: 6 | 7 | ![pine](../../png/pine.png) 8 | 9 | 在配置任何邮件客户端之前,你都应该去仔细阅读你邮件服务器的文档,只有这样你才能知道邮件服务用了什么协议,采取了那些安全措施,这些信息有助于你正确地配置邮件客户端。默认状态下,`pine` 会在你计算机上运行的邮件服务中检查新邮件。除非你的计算机的确在运行这么一个邮件服务(很多人这么做),否则这恐怕不是你想要的。幸运的是配置 `pine` 非常容易,进入 [S]etup 菜单,选择 [C]onfig 选项,你就能看到一个能让你输入你名字、邮箱地址、和 SMTP 服务器的选项还有其他一些选项。 10 | -------------------------------------------------------------------------------- /chapter_07/What_Is_And_Isnt_X.md: -------------------------------------------------------------------------------- 1 | ### X 是什么? 2 | 3 | > 译者注:“X”更多地被称为“Xorg”。 4 | 5 | 远古时期,电脑附加设备只有屏幕和键盘,再没有别的了。在广泛运用鼠标之前,都得靠菜单来进行交互。之后诞生了图形界面(GUI),整个世界都为之一新。今天电脑使用者们可能习惯了移动鼠标来点击图标,在酷炫的图像和动画效果下完成某项任务。但 UNIX 诞生之时还没有 GUI, 后来才加上的。很多年来,Linux 和它的 UNIX 兄弟是在没有任何图形界面的情况下完成工作的。但现在用户们应该更喜欢他们的运行在 `X(7)` 上,有酷炫善良外形,能到处点的 GUI 的 Linux 系统。 6 | 7 | 那么,什么是“X”? 它是有图标的桌面?是菜单?窗口管理器?还是它标注着地点?都不是。GUI 分为许多部分,“X”是其中的基础。“X”能从鼠标,键盘和其他设备读取输入,还能控制显卡的工作。总之,“X”能与你的电脑硬件交互以完成图形工作,其他程序只是与“X”交互。 8 | 9 | > 译者注:“还是它标注着地点”源自说法“X marks the spot”。 10 | 11 | 在这里要提一提一系列名称,“X”只是你可能遇到的名称之一。它还叫“X11”、“Xorg”、“X Window System”、“X Window”、“X11R6”、“X Version 11”等等。不管名字是什么,你知道它们指的是“X”就行了。 12 | -------------------------------------------------------------------------------- /chapter_16/Network_Diagnostic_Tools/ssh.md: -------------------------------------------------------------------------------- 1 | #### ssh 2 | 3 | 刚刚说到 `telnet` 是一个有用的诊断工具,不过因为缺少加密功能,它并不适合访问 shell。谢天谢地,我们有了安全 shell 协议(secure shell protocol)。几乎每个 Linux,UNIX 和 BSD 发行版都使用了 OpenSSH,或者简写成 `ssh(1)` 。 `ssh` 是最常用的网络工具之一,它使用了最强的加密技术。 `ssh` 有许多特性,配置选项和使用技巧(neat hacks),这些内容够写本书了,所以这里我们只讨论基本使用方法。告诉 `ssh` 要连接的用户名和主机,它就会为你建立一个安全快速的连接。如果你是第一次连接到这台计算机,`ssh` 会要求你确认你的意图,然后在本地复制一份加密密钥(encryption key)以遍日后使用。一旦密钥变了,`ssh` 就会警告你并拒绝连接,因为这时可能有人想用中间人攻击(man-in-the-middle)手段劫持该连接。 4 | 5 | ``` 6 | darkstar:~# ssh alan@slackware.com 7 | alan@slackware.com`s password: secret 8 | alan@slackware.com:~$ 9 | ``` 10 | 11 | 用户名和主机的格式和 e-mail 地址一样,如果你留空用户名,`ssh` 会在建立连接时使用你当前的用户名。 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # backup files 2 | *~ 3 | *.swp 4 | 5 | # tags 6 | .tags* 7 | tags* 8 | 9 | # patch 10 | *.diff 11 | *.patch 12 | 13 | # Node rules: 14 | ## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 15 | .grunt 16 | 17 | ## Dependency directory 18 | ## Commenting this out is preferred by some people, see 19 | ## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git 20 | /node_modules/ 21 | 22 | # Book build output 23 | /_book/ 24 | /slackbook_cn/ 25 | /slackbook_cn_html/ 26 | 27 | # eBook build output 28 | *.epub 29 | *.mobi 30 | *.pdf 31 | *.tar 32 | *.tgz 33 | *.tar.gz 34 | *.zip 35 | *.rar 36 | 37 | -------------------------------------------------------------------------------- /chapter_16/FTP_Clients/lftp.md: -------------------------------------------------------------------------------- 1 | #### lftp 2 | 3 | 我们要看的最后一个 FTP 客户端是 `lftp` 。就像 `ncftp`,它支持 tab 补全和递归操作。但 `lftp` 代码有一个更友好的许可证。不同于 `ncftp` 的 `mget` 和 `mput`,`lftp` 的递归操作通过 `mirror` 命令处理。 `mirror` 有很多不同的可用选项,我们可以查看手册或使用 `help` 内建指令查看具体的参数细节。 4 | 5 | ``` 6 | darkstar:~# lftp ftp.osuosl.org 7 | lftp ftp.osuosl.org:~> cd /pub/slackware/slackware-current 8 | cd ok, cwd=/pub/slackware/slackware-current 9 | lftp ftp.osuosl.org:/pub/slackware/slackware-current> mirror isolinux 10 | Total: 2 directories, 16 files, 1 symlink 11 | New: 16 files, 1 symlink 12 | 14636789 bytes transferred in 20 seconds (703.7K/s) 13 | lftp ftp.osuosl.org:/pub/slackware/slackware-current> bye 14 | ``` 15 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # ============================================================================== 2 | # make 3 | # ============================================================================== 4 | TARGET = slackbook_cn 5 | FORMATS = pdf epub mobi 6 | 7 | .PHONY: all clean html format $(FORMATS) 8 | 9 | all: html $(FORMATS) 10 | 11 | html: 12 | gitbook build . $(TARGET)_html 13 | tar -zcf $(TARGET)_html.tar.gz ./$(TARGET)_html/ 14 | 15 | $(FORMATS): 16 | gitbook $@ . $(TARGET).$@ 17 | 18 | format: 19 | @prettier -wu $(shell find * -type f -name '*.md') 20 | 21 | clean: 22 | rm -rf $(TARGET)_html $(TARGET)_html.tar.gz $(addprefix $(TARGET)., $(FORMATS)) 23 | -------------------------------------------------------------------------------- /chapter_08/Choosing_A_Printer.md: -------------------------------------------------------------------------------- 1 | ### 选择打印程序 2 | 3 | Linux 历史上和打印机有一段“恩怨”。在很多年内,打印对很多 Linux 用户来说是一种“黑魔法”,很少有打印机能在 Linux 上可靠地运作。不过在现在,绝大多数打印机都能在 Linux 上运行得很好,但还是有部分不能在 Linux 下很好的运行。如果你准备购买打印机,要注意,很多廉价的喷墨打印机在 Linux 支持上不如更昂贵的激光打印机。如果你不确定一台打印机是否能被很好的支持,你可以在网络上看看该型号是否有人在 Linux 下成功使用过。 4 | 5 | 所有这些警告,也许有些矫枉过正,大多打印机只需要简短的设置就能在 Linux 上工作。在这个方向上的进步主要归功于通用 Unix 打印系统——CUPS(Common Unix Printing System)。CUPS 是被 Slackware 和其他大多数 Linux 发行版使用的打印系统。它主要是使用一个通过浏览器访问的图形界面设置程序来完成设置。为了使用 CUPS 设置一个打印机,你需要打开浏览器,如 Firefox 或 Konqueror,并访问 [http://localhost:631](htp://localhost:631) 。 6 | 7 | ![cups](../img/cups-01.png) 8 | 9 | 你也许会发现只需要一路下一步,CUPS 就会几乎自动配置完成你的打印机。或者,你可能会发现需要进一步配置。要了解打印如何工作或如何配置一个棘手的打印机,请继续阅读。 10 | -------------------------------------------------------------------------------- /chapter_13/Getting_Help.md: -------------------------------------------------------------------------------- 1 | ### 获得帮助 2 | 3 | Emacs 附带了大量的文档,它常被叫做“带说明书”的编辑器,这是因为 Emacs 可以在用户使用中给用户提供这些文档。这是一些绑定了用于查阅文档的函数的快捷键(它们都以 `C-h` 开始): 4 | 5 | | 命令 | 作用 | 6 | | --------------------------------- | ----------------------------------------- | 7 | | `C-h` `f` `FUNCTION-NAME` `Enter` | 查看函数 `FUNCTION-NAME` 的说明 | 8 | | `C-h` `k` `C-x` `C-c` | 查看对快捷键 `C-x` `C-c` 所绑定函数的说明 | 9 | | `C-h` `t` | 显示 Emacs 教程 | 10 | | `C-h` `?` | 显示所有有关帮助的函数 | 11 | 12 | > 表 13.2:访问 Emacs 文档 13 | 14 | 如果你需要练习一下 Emacs,`C-h t` 最适合你。 15 | -------------------------------------------------------------------------------- /chapter_05/Task_Management.md: -------------------------------------------------------------------------------- 1 | ### 任务管理 2 | 3 | bash 还有另一个特点,暂停和恢复任务的能力。这允许你暂时暂停一个正在运行的任务,执行另一些任务,然后重新恢复这一任务或者在后台运行。通过输入 `CTRL-Z`,bash 会暂停正在运行的任务。之后你可以恢复那个任务。你可以通过这个方法暂停多个任务。内建的 `job` 命令会显示一个被暂停的任务的列表。 4 | 5 | ``` 6 | darkstar:~$ jobs 7 | [1]- Stopped vi TODO 8 | [2]+ Stopped vi chapter_05.xml 9 | ``` 10 | 11 | 为了恢复被暂停的任务,运行 `fg` 来将最新暂停的任务恢复到前台运行。如果你有多个任务被暂停可以输入要恢复的任务的序号。 12 | 13 | ``` 14 | darkstar:~$ fg # "vi TODO" 15 | darkstar:~$ fg 1 # "vi chapter_05.xml" 16 | ``` 17 | 18 | 你也可以运行 `bg` 将任务放入后台运行。这可以让进程继续运行而不会占用 shell 的控制。要恢复到前台运行,使用 `fg` 。 19 | 20 | > 译者注:在 SSH 环境中,`bg` 放入后台的任务同样会随着 SSH 连接的断开而结束。如果你想在 SSH 断开后继续让程序在远端主机中运行,你需要使用 `nohup` 21 | > 或者 `screen`/`tmux` 这样的工具。 22 | -------------------------------------------------------------------------------- /chapter_13/How_to_Move_Around.md: -------------------------------------------------------------------------------- 1 | ### 移动光标 2 | 3 | 在 vi 中可以用方向键移动光标,在 Emacs 中也可以。然而像 vi 一样,在键盘上出现方向键之前,Emacs 就存在了,所以除了方向键,vi 和 Emacs 都有各自用于移动光标的快捷键,vi 的好按,Emacs 的好记,不过要想有效率的使用 Emacs 快捷键也是可以办到的。这是基本的 Emacs 光标移动快捷键: 4 | 5 | | 命令 | 作用 | 6 | | ----- | ------------------------------------------------- | 7 | | `C-f` | 将光标向右(向前,`f` 代表 forward)移动一个字符 | 8 | | `C-b` | 将光标向左(向后,`b` 代表 backward)移动一个字符 | 9 | | `C-n` | 将光标向下(`n` 代表 next)移动一行 | 10 | | `C-p` | 将光标向上(`p` 代表 previous)移动一行 | 11 | 12 | > 表 13.1:Emacs 光标移动 13 | 14 | 可以像 vi 一样指定重复执行命令的次数。如果你按下 `M-1` `M-0` `C-p` 或者 `C-u` `10` `C-p`,光标就会向上移动 10 行。如果你按了 `M-5` `C-f` 或者 `C-u` `5` `C-f` ,光标会向右移动 5 个字符。 15 | -------------------------------------------------------------------------------- /chapter_13/What_is_Emacs.md: -------------------------------------------------------------------------------- 1 | ### Emacs 是什么? 2 | 3 | 虽然 vi 和它的克隆版本都是功能强大的编辑器,但是它们并没有很好的可扩展性。不过 `vim` 倒是个例外,`vim` 由 vi 发展而来,兼具了可扩展性和 vi 的灵活轻盈。尽管有了 `vim`,可很多用户还是喜欢更“重量级”,可扩展性更强的编辑器,他们选择了 Emacs。 4 | 5 | Emacs 的可扩展性突破天际。除了最底层用 C 语言写成,Emacs 的其他部分都是用一种解释型的 Lisp 语言写的。这么做的结果就是 Emacs 的一切都可以由你来控制,你可以配置它,更可以随心所欲的扩展它(在网上能找到很多优秀的 Emacs 教程)。人们写了各种各样的用来扩展 Emacs 的 Emacs Lisp 程序,从某种稀奇古怪语言的语法高亮,到内建一个终端,应有尽有。你一定想不到,Emacs 里甚至有一个模拟 vi 的模式(叫做 viper),所以你可以在使用 vi 编辑模式的同时,获得 Emacs 的力量。 6 | 7 | 与 vi 相同的是,Emacs 也有很多版本(不妨叫它们“emacsen”),不过最常用的版本还是 GNU Emacs(Slackware 只包含了这一版)。当人们提到“Emacs”时,几乎总是在说 GNU Emacs。 8 | 9 | 与 vi 不同的是,Emacs 默认状态下更像一个传统的编辑器,也就是说不必为了使用快捷键而去一遍又一遍地切换模式。在 vi 中为了编辑文件,你必须学习每个模式都是干什么的,编辑时还要记住你当前处于什么模式,而在 Emacs 中,你要做的就是打开文件,开始编辑。 10 | -------------------------------------------------------------------------------- /chapter_09/Other_User_and_Group_Tools.md: -------------------------------------------------------------------------------- 1 | ### 其他管理用户和组的工具 2 | 3 | 还有一些其他管理用户和组的工具。也许最重要的就是 `passwd(1)`, 该命令能修改用户的密码。普通用户也许只需要关心各自的密码,但 `root` 能修改所有人的密码。此外,`root` 也能通过 `-l` 参数锁定一个用户。并不是真的冻结了用户,而是把这个用户的密码改成了无论如何也无法匹配的字符串。 4 | 5 | 最简单的修改用户信息的工具就是 `usermod(8)`, 无论是组从属关系还是家目录地址,它都能修改。在此不列出详细参数,请参见手册页。 `usermod` 也许是修改组成员的最佳工具,为此请使用 `-s` 和 `-G` 参数。 6 | 7 | ``` 8 | darkstar:~# usermod -a -G wheel alan 9 | darkstar:~# usermod -G wheel alan 10 | ``` 11 | 12 | 一定要注意上面两条命令的区别。第一条命令仅仅是把用户 `alan` 添加到 `wheel` 用户组。第二条命令使得用户 `alan` 仅仅从属于 `wheel` 组。请一定注意。 13 | 14 | 另一个很棒的工具就是 `chsh(1)`, 它能修改用户的默认 shell。普通用户只能修改自己的 shell, 不过 `root` 用户能够修改所有人的。 15 | 16 | 我们最后要讨论的工具就是 `chfn(1)` 。它用来输入用户的身份信息,比如电话号码、家庭住址、真实姓名。这些信息存放在 `passwd(5)` 文件里,用 `finger(1)` 来读取。 17 | -------------------------------------------------------------------------------- /chapter_11/README.md: -------------------------------------------------------------------------------- 1 | ## 使用文件系统 2 | 3 | ### 本章目录 4 | 5 | - [文件系统的层次](The_Filesystem_Hierarchy.md) 6 | - [本地文件系统类型](Local_Filesystem_Types/README.md) 7 | - [ext2](Local_Filesystem_Types/ext2.md) 8 | - [ext3](Local_Filesystem_Types/ext3.md) 9 | - [ext4](Local_Filesystem_Types/ext4.md) 10 | - [reiserfs](Local_Filesystem_Types/reiserfs.md) 11 | - [XFS](Local_Filesystem_Types/XFS.md) 12 | - [JFS](Local_Filesystem_Types/JFS.md) 13 | - [iso9660](Local_Filesystem_Types/iso9660.md) 14 | - [vfat](Local_Filesystem_Types/vfat.md) 15 | - [swap](Local_Filesystem_Types/swap.md) 16 | - [使用 mount 指令](Using_mount.md) 17 | - [网络文件系统](Network_Filesystems/README.md) 18 | - [NFS](Network_Filesystems/NFS.md) 19 | - [SMB](Network_Filesystems/SMB.md) 20 | -------------------------------------------------------------------------------- /chapter_05/Terminals.md: -------------------------------------------------------------------------------- 1 | ### 终端 2 | 3 | Slackware 和其他 Linux 发行版本允许用户以各种方式和系统交互,但是最常用的,也是最有用的就是通过终端。在以前,终端是通过串行连接接到主板或服务器上的键盘和显示器(有时是鼠标)。如今,大部分的终端都是虚拟的,那意味着它们只存在于软件中。虚拟终端允许用户无需使用高昂的和不兼容的硬件来连接到计算机上。通常,用户只需要运行软件,一个自定义的虚拟终端就会呈现在眼前。 4 | 5 | 最通用的虚拟终端(每一台 Slackware 电脑中都至少有一个)是 `gettys`。 `agetty` 默认在 Slackware 上运行 6 个终端实例,并允许用户(那些坐在电脑前并在键盘上输入的)登录和运行程序。每一个实例都可以在不同的 tty 设备上获取,通过按 `ALT` 键加 `F1` 至 `F6` 中的任一个键。使用这些实例允许你以不同的用户的身份登录,同时在那些用户的 shell 上运行程序。对于那些不安装桌面的服务器来说使用的很多,但是在其他机器上也可以用。 6 | 7 | 在台式机、笔记本和其他使用图形化接口的工作站上,大部分的终端是图形化的。Slackware 包括很多不同的图形化终端,最常用的是 KDE 的 `konsole` 和 XFCE 的 `xfce4-terminal` 或是老式的 `xterm` 。如果你使用图形化的终端,查看你的工具栏或者菜单。每一个桌面环境和窗口管理器都有虚拟终端(通常称它们终端模拟器),它们被不同地标记这。如果你使用桌面环境,通常你可以在**系统**菜单中找到它们。执行其中的任何一个,都会显示你一个图形化的终端并运行默认的 shell。 8 | 9 | > 译者注:通常图形化的终端被称为“虚拟终端”。 10 | -------------------------------------------------------------------------------- /chapter_11/Network_Filesystems/SMB.md: -------------------------------------------------------------------------------- 1 | #### SMB 2 | 3 | SMB 是 Windows 网络文件共享协议。连接到一个 SMB 共享(通常称为 samba 共享)是非常简单的。然而 SMB 不像 NFS 那样被很好的支持。但是,它在 Windows 计算机之间提供了更高的性能和可连接性。基于此,SMB 是部署在本地网络中最常用的网络文件共享协议。在 Slackware 中导出 SMB 共享是由 samba 守护进程和 `smb.conf` 完成的。然而,如何配置 samba 服务超出了本书的讨论范围。你可以在线查找额外的文档,也可以查看 `man` 手册来获取更多信息。 4 | 5 | 挂载 SMB 共享和挂载 NFS 一样简单。你只需要以挂载 NFS 那样的方式告诉 `mount` 服务器的位置以及你想访问的东西。此外,你还必须指定一个用户名和密码。 6 | 7 | ``` 8 | darkstar:~# mount -t cifs //darkstar/home /home -o username=alan,password=secret 9 | ``` 10 | 11 | 你可能会好奇为什么文件系统类型是 cifs 而不是 smbfs。在旧版的 Linux 内核中用的是 smbfs。然而它已被废弃,取而代之的是有着更好性能更安全的通用 cifs 驱动。 12 | 13 | 所有的 SMB 共享都需要用户名和密码参数。如果你把你的 samba 共享写在 `fstab` 的话,这可能产生一个安全问题。你可以使用 `credentials` 参数来避免这点。 `credentials` 指向一个包含用户名和密码的文件。只要这个文件的安全性有保障并且只有 root 可读,你身份凭证被损害的可能性就会降低。 14 | -------------------------------------------------------------------------------- /chapter_04/Dealing_with_Files_and_Directories/Moving_Around_the_Filesystem.md: -------------------------------------------------------------------------------- 1 | #### 在文件系统中移动 2 | 3 | `cd` 是用来改变当前目录的命令。不像其他命令那样,`cd` 实际上不是独立程序而是 shell 的内建命令(built-in)。基本上,那也就意味着 `cd` 没有自己的手册页。你得查看你 shell 的文档来查看 `cd` 的详细情况。大部分情况下,它们是一样的。 4 | 5 | > 译者注:但是你可以通过命令 `help cd` 来查看 `cd` 此类内建命令的手册。 6 | 7 | ``` 8 | darkstar:~$ cd / 9 | darkstar:/$ls 10 | bin/ dev/ home/ lost+found/ mnt/ proc/ sbin/ sys/ usr/ 11 | boot/ etc/ lib/ media/ opt/ root/ srv/ tmp/ var/ 12 | darkstar:/$cd /usr/local 13 | darkstar:/usr/local$ 14 | ``` 15 | 16 | 注意到改变目录时提示符的变化了吗?默认情况下 Slackware shell 将其用作一个查看当前目录的快速、简单的方式,但这实际上不是 `cd` 的功能。如果你的 shell 不像这样显示,你也能用 `pwd(1)` 轻易地获取你当前工作目录。(大多数 UNIX shell 能配置出这个显示目录的功能。实际上,这是另一个 Slackware 做出的小改进。) 17 | 18 | ``` 19 | darkstar:~$ pwd 20 | /usr/local 21 | ``` 22 | -------------------------------------------------------------------------------- /chapter_16/Mail_Clients/mutt.md: -------------------------------------------------------------------------------- 1 | #### mutt 2 | 3 | 有些人不喜欢 `pine` 。有些人想要更多控制权。有些人想要一个一切都可以配置并且支持插件的邮件客户端。这些人在用 `mutt(1)` 。 `mutt` 不像 `pine` 那么友好,但它的强大足以弥补这一点。在 `mutt` 里,你找不到屏幕底部友好的命令提示,因为它把屏幕的每一寸都用来处理邮件了。 `mutt` 支持广泛的特性——同时显示多封邮件(threaded displays)也没问题。你可以通过 `home` 目录的 `.muttrc` 来配置 `mutt`,man 手册中有一个专门针对 `mutt` 选项的说明 `muttrc(5)`,你可以去读一下。 4 | 5 | ![mutt](../../png/mutt.png) 6 | 7 | `mutt` 是独一无二的,因为它其实是一个邮件用户代理(Mail User Agent,MUA),这也意味着他真正的用途是浏览和整理邮件。一开始的确如此,但后来一些像通过 POP3 接收邮件甚至通过 SMTP 进行基本的消息传递这样的附加特性也被添加到了 `mutt` 中。 8 | 9 | 健壮的命令行程序常常有很多可配置的选项,`mutt` 也是如此,只要它能完成你想要的,就不必去管是用“对”了还是用“错”了。如果你想用 `mutt` 处理邮件,只需要记住一件事,那就是 `mutt` 的邮件收发能力极为有限。除了邮件用户代理的基本职责外,`mutt` 几乎只关注邮件的整理、浏览和撰写,这也就是所谓的 UNIX 哲学:程序应该只关注一个目标,并尽可能把它做好,让程序能够互相协同工作。因此,要接收邮件你至少要安装一个额外的程序。 10 | 11 | `mutt` 的浏览命令是高度可配置的,输入 `?` 可以列出默认的浏览命令。 12 | -------------------------------------------------------------------------------- /chapter_12/Opening_Saving_and_Quitting.md: -------------------------------------------------------------------------------- 1 | ### 打开、保存和退出 2 | 3 | 既然你要学习如何使用 vi,第一件需要掌握的事情就是如何打开和保存文件。打开文件实际上是很容易的,只需将文件路径作为 vi 的命令行参数,vi 就会快速载入文件并呈现给你。例如指令 `vi chapter_11.xml` 会打开文件 `chapter_11.xml` 并将其内容加载到屏幕上,够简单吧!但是当我们编辑完一个文档并希望保存它的时候又该怎么办?我们可以在命令模式下使用 `:w` 命令来完成任务。在命令模式下输入 `:` 会临时将光标移动到窗口最下方并允许你执行一些特殊命令。在术语上我们将这个模式称之为 ex 模式(ex-mode),但是原谅我不会在此提及令人肃然起敬的 `ex` 指令。保存当前工作的指令是 `:w`,一旦这个指令被执行,vi 会将你当前的修改从缓冲区写入到文件。如果你想打开其他文件,只需使用 `:e` 指令(后跟文件路径)就可以让 vi 为你愉快地加载它。但如果你在缓冲区中有未保存的修改,`:e` 指令会失败并在底部打印警告信息。你可以使用 `:e!` 指令强行执行这个动作。绝大多数 EX 模式下的指令支持在其后添加 `!` 字符作为强制执行的标记。 `:e` 告诉 vi,你想立刻打开另一个文件并舍弃缓冲区中未保存的修改。 4 | 5 | > 译者注:`ex` 是一个被绝大多数发行版默认安装的行编辑器,在 `ex` 里你所能见到的只有 vi 中的“命令模式”。 6 | 7 | 但是如果我想丢弃修改并重新开始编辑又该如何?其实这也很容易办到——不加任何参数执行 `:e!` 指令就会舍弃修改并重新载入当前文件。如果你的缓冲区中没有未保存的修改,简单地执行 `:q` 指令就可以退出 vi。当然如果你的缓冲区有为未保存的修改,执行 `:q!` 丢弃这些修改并强制退出 vi。 8 | -------------------------------------------------------------------------------- /chapter_16/Network_Diagnostic_Tools/finger.md: -------------------------------------------------------------------------------- 1 | #### finger 2 | 3 | 与其说 `finger(1)` 是诊断网络的工具,倒不如说它是诊断网络用户的工具。只要某个服务器在运行着 `fingerd(8)` 守护进程,你就可以用 `finger` 获取关于这个服务器上所有用户的有用信息。目前很少有服务器会提供 `fingerd`,但对那些提供了 `fingerd` 的服务器,`finger` 可以说是用来跟踪朋友和同事的好工具。 4 | 5 | ``` 6 | darkstar:~# finger alan@cardinal.lizella.net 7 | [cardinal.lizella.net] 8 | Login: alan Name: Alan Hicks 9 | Directory: /home/alan Shell: /bin/bash 10 | Office: 478 808 9919, 478 935 8133 11 | On since Wed Apr 13 17:43 (UTC) on pts/9 from 12 | 75-150-12-113-atlanta.hfc.comcastbusiness.net 13 | 32 minutes 24 seconds idle 14 | (messages off) 15 | On since Wed Apr 13 17:45 (UTC) on pts/10 from :pts/9:S.0 16 | 48 minutes 56 seconds idle 17 | Mail forwarded to alan@lizella.net 18 | No mail. 19 | No Plan. 20 | ``` 21 | -------------------------------------------------------------------------------- /chapter_04/Reading_Documents/less.md: -------------------------------------------------------------------------------- 1 | #### less 2 | 3 | 为了克服 `more` 的缺点,一个新的“pager”诞生了,针锋相对地起名为 `less(1)` 。 `less` 是一个非常强大的“pager”,除了支持 `more` 的所有功能以外还有一些其他特性。比如,`less` 允许使用方向键来控制。 4 | 5 | 因为它相当受欢迎,许多 Linux 发行版将 `more` 排除在外来支持 `less`. Slackware 两个都有。另外,Slackware 有一个 `less` 的预处理器 `lesspipe.sh` 。它能让用户在一些非文本文件上执行 `less` 。 `lesspipe.h` 在传入文件后会生成文本输出,并在 `less` 内显示。 6 | 7 | `less` 几乎有文本编辑器的所有功能,除了文本编辑以外。支持 vi 风格的逐行移动(使用 `j` 和 `k`),方向键移动,以及 `ENTER` 。如果文件一行太长屏幕装不下,还能横向滚动。 `g` 可回滚到文件开头,`G` 跳转到末尾。 8 | 9 | 搜索功能和 `more` 一样,按 `/` 完成,不过搜索结果会高亮显示。输入 `n` 会跳转到下一个匹配,`N` 到上一个。 10 | 11 | 与 `more` 一样,`less` 也能通过管道打开文件: 12 | 13 | ``` 14 | darkstar:~$ less 15 | /usr/doc/less-*/README 16 | darkstar:~$ cat 17 | /usr/doc/less*/README 18 | /usr/doc/util-linux*/README | less 19 | ``` 20 | 21 | > 译者注:原书如此。 22 | 23 | `less` 还有更多功能等待发现,只需输入 `h` 。 24 | -------------------------------------------------------------------------------- /chapter_17/Package_Compression_Formats/rpm2tgz.md: -------------------------------------------------------------------------------- 1 | #### rpm2tgz 2 | 3 | RPM 是最常见的 Linux 软件包格式之一,非常多的开发者只以源代码形式和 RPM 包形式提供他们的软件。在这种情况下,有三种选择: 4 | 5 | 1. 自行创建 Slackware 包。 6 | 2. 直接从源代码编译安装。 7 | 3. 转换 RPM 包并安装。 8 | 9 | 构建源代码或者创建 Slackware 包并不是想象中的那么复杂,但直接从源代码编译安装是不太好的,因为在执行 `make install` 之后,很难追踪哪些东西被安装在了系统中。如何自行创建 Slackware 包不在本章的讨论范围里。那么只好使用 `rpm2tgz` 了。 10 | 11 | `rpm2tgz` 把 RPM 包转换成可以被 `pkgtool` 或 `installpkg` 安装的 Slackware 包,这样一来,既避免了自行创建 Slackware 包,又实现了对软件包的追踪、移除和升级。 12 | 13 | > ##### 警告 14 | > 15 | > 一个 Slackware 包只是 shell 脚本加一些代码,相比之下,一个 RPM 包就像个充满了依赖列表和特殊指令的迷宫。因此, `rpm2tgz` 不是总能奏效,尤其对那些非常复杂的应用程序,而且它也不会像变魔术似的解决依赖关系。 16 | 17 | 要尝试 `rpm2tgz`,从可靠的网站上下载一个 RPM 文件并转换它: 18 | 19 | ``` 20 | rpm2tgz foo-x.x.xx.rpm 21 | ``` 22 | 23 | 这会产生一个 `.tgz` 文件,所以转换完毕后,原来的 RPM 文件完全可以删除。使用 `installpkg` 可以安装刚刚创建的 Slackware 包,不过要使安装的程序能够真正运行,还要保证所有它依赖的代码也被正确安装了。 24 | -------------------------------------------------------------------------------- /chapter_16/Network_Diagnostic_Tools/telnet.md: -------------------------------------------------------------------------------- 1 | #### telnet 2 | 3 | 很久很久以前,`telnet(1)` 是自切片面包以来最伟大的发明。简单的说,`telnet` 为两台计算机建立起一个不加密的连接,然后它把任务的控制权交给用户而不是交给另外一些程序。通过 `telnet` 你能连接到其他计算机上的 shell,被连接的计算机仿佛就摆在了你的面前,你可以在上面执行命令。由于 `telnet` 没有加密功能,所以现在已经**不推荐使用**它了,然而仍不少设备在用 `telnet` 做它最本分的工作。 4 | 现在,`telnet` 在诊断网络方面用的更多一些。因为它把任务控制权直接交给了用户,所以可以被用来做各种各样的测试。只要你知道要给接收计算机发送什么 ASCII 命令,你可以做任意数量的活动,比如读取网页或者检查邮件。告诉 `telnet` 要用的端口号,一切都会准备就绪。 5 | 6 | ``` 7 | darkstar:~$ telnet www.slackware.com 80 8 | Trying 64.57.102.34... 9 | Connected to www.slackware.com. 10 | Escape character is `^]`. 11 | HEAD / HTTP/1.1 12 | Host: www.slackware.com 13 | 14 | HTTP/1.1 200 OK 15 | Date: Thu, 04 Feb 2010 18:01:35 GMT 16 | Server: Apache/1.3.27 (Unix) PHP/4.3.1 17 | Last-Modified: Fri, 28 Aug 2009 01:30:27 GMT 18 | ETag: "61dc2-5374-4a973333" 19 | Accept-Ranges: bytes 20 | Content-Length: 21364 21 | Content-Type: text/html 22 | ``` 23 | -------------------------------------------------------------------------------- /chapter_16/Network_Diagnostic_Tools/ping.md: -------------------------------------------------------------------------------- 1 | #### ping 2 | 3 | `ping(8)` 是个方便的工具,你可以用它来判断一台计算机是在你的网络上乖乖待命呢,还是到因特网上逍遥法外去了。 `ping` 就像一个探测计算机的声纳,想象一下,使用它时它会发出一声“砰”的巨响,然后你就可以通过回音来判断是否其他计算机或网络设备“听”到了这声巨响。默认情况下,`ping` 每秒检查一次远程计算机,无休无止,但你可以轻松的改变每次检查的间隔时间和要检查的次数,具体怎么做请参考 man 手册。当然不管什么时候你都可以用 `CTRL-c` 来中止程序。当 `ping` 完成了它的所有工作时,它会显示一个对于这些工作的总结,这个总结中的信息非常有用。 `ping` 常常被用来判断你是否已经连接到了因特网或者一个计算机是否存在于你的网络中,但有些系统拒绝被 ping,所以有时会出现一个系统虽然其他功能正常,但就是不回应 ping 的情况。 4 | 5 | ``` 6 | darkstar:~# ping -c 3 www.slackware.com 7 | 64 bytes from slackware.com (64.57.102.34): icmp_seq=1 ttl=47 time=87.1 ms 8 | 64 bytes from slackware.com (64.57.102.34): icmp_seq=2 ttl=47 time=86.2 ms 9 | 64 bytes from slackware.com (64.57.102.34): icmp_seq=3 ttl=47 time=86.7 ms 10 | 11 | --- slackware.com ping statistics --- 12 | 3 packets transmitted, 3 received, 0% packet loss, time 2004ms 13 | rtt min/avg/max/mdev = 86.282/86.718/87.127/0.345 ms 14 | ``` 15 | -------------------------------------------------------------------------------- /chapter_05/Wildcards.md: -------------------------------------------------------------------------------- 1 | ### 通配符 2 | 3 | 通配符是特殊的字符,用来告诉 Shell 要匹配的规则。如果你有使用 DOS 的经验,你会认出 `*` 是用来匹配任何东西的通配符。bash 使用通配符来让你更容易地做你想做的事情。 4 | 5 | 第一个也是最常用的就是 `*` 。星号匹配任何字符和字符的组合,包括空。因此 `b*` 会匹配任何以 `b` 开头的文件,比如 `b`,`ba`,`babc` 等等。不怎么常用的是 `?` 。这个字符只匹配单个字符。所以 `b?` 会匹配 `ba`,`bb` 等,而不会匹配 `b`,`bab` 。 6 | 7 | ``` 8 | darkstar:~$ touch b ba bab 9 | darkstar:~$ ls * 10 | b ba bab 11 | darkstar:~$ ls b? 12 | ba 13 | ``` 14 | 15 | 不,有趣的地方还不至于此。除了这两个外,我们还有方括号 `[]` 。方括号允许我们匹配方括号中的字符。当 bash 看到方括号时,它会替换方括号中的内容。任何字符和数字的组合都可以被指定,用逗号分隔它们。同样的,字符和数字的范围也可以指定。下面举例。 16 | 17 | ``` 18 | darkstar:~$ ls a[1-4,9] 19 | a1 a2 a3 a4 a9 20 | ``` 21 | 22 | 因为 Linux 是区分大小写的,大写和小写的字母不同。在 ASCII 顺序中,大写字母都是位于小写字母之前的。因此当要表示包含大写字母和小写字母的范围时,请确保正确。 23 | 24 | ``` 25 | darkstar:~$ ls 1[W-b] 26 | 1W 1X 1Y 1Z 1a 1b 27 | darkstar:~$ ls 1[w-B] 28 | /bin/ls: cannot access 1[b-W]: No such file or directory 29 | ``` 30 | 31 | 在第二个案例中,`1[w-B]` 是错误的范围,所以 shell 将其认为是文件名,因为没有那个文件所以告诉你不存在。 32 | -------------------------------------------------------------------------------- /chapter_02/README.md: -------------------------------------------------------------------------------- 1 | ## 第二章、安装 2 | 3 | ### 本章目录 4 | 5 | - [从安装介质启动](Booting_the_Installer.md) 6 | - [分区](Partitioning.md) 7 | - [安装程序](The_setup_Program/README.md) 8 | - [Help](The_setup_Program/Help.md) 9 | - [Keymap](The_setup_Program/Keymap.md) 10 | - [Addswap](The_setup_Program/Addswap.md) 11 | - [Target](The_setup_Program/Target.md) 12 | - [Source](The_setup_Program/Source.md) 13 | - [Select](The_setup_Program/Select.md) 14 | - [Install](The_setup_Program/Install.md) 15 | - [Configure](The_setup_Program/Configure.md) 16 | 17 | Slackware 的安装比其他的 Linux 发行版本更加简洁一点而且和 BSD 操作系统的安装方式很像。如果你对这些很熟悉,会感觉安装很自在。但是如果你从没有安装过 Slackware 或者只进行过图形化的安装方式,那么会觉得有一点不堪重负。不必恐慌!一旦你理解了安装就会很容易,它可以工作在任何 x86 和 x86_64 平台上。 18 | 19 | 最新版本的 Slackware 通过 DVD 和 CD 媒介进行发布(可以理解为镜像文件),但是 Slackware 也可以通过其他方式进行安装。在本书中主要记住中普通的方式——即从 DVD 启动。如果你没有光驱,你可以在 Slackware 的镜像目录中的 `usb-and-pxe-installers` 目录中阅读 `README` 文件。这个目录包括必要的文件和从 USB 或是从支持 PXE 的网络中安装 Slackware 的介绍方法。 20 | -------------------------------------------------------------------------------- /chapter_12/What_is_vi.md: -------------------------------------------------------------------------------- 1 | ### vi 是什么? 2 | 3 | 在你的电脑里散落着成千上万的文件。对新用户而言这或许是无足轻重的,但是在 Slackware Linux 中几乎一些都需要用纯文本来配置。这使得用户可以快速、简单并且直观地改变系统。在第五章中我们看到了一些可以用于阅读这些文件的指令,例如 `cat` 和 `less`,但是如果我们想编辑他们,又应该怎么办?我们需要一个编辑器去完成这项工作,而 vi 正是为此而生。 4 | 5 | 总的来说,vi 世界上最古老、最强大的编辑器之一,并且在当今仍被广泛使用。它被世界各地的系统管理员、程序员和爱好者等人群所青睐。事实上本书几乎全部由 vi 写成,只有介绍 Emacs 的下一章是在 Emacs 中写的。 6 | 7 | 为了弄清楚现在所说的 vi 到底是什么,这里有必要解释一下。Slackware 严格来说并不提供 vi,相反,Slackware 提供了两个 vi 的“克隆品”——`evlis` 和 `vim` 。这两个 vi 的克隆在原基础上增加了许多特性,例如语法高亮、二进制编辑和网络支持。我们不会过多深入讨论这些细节。默认的,如果你在 Slackware 上运行 vi,你实际运行的是 `evlis`——本节所有的例子都假定你使用的是 `evlis` 。如果你之前使用了其他 Linux 发行版,你可能更加熟悉 `vim` 。如果是这样,你需要将 `/usr/bin/vim` 链接到 `/usr/bin/vi`,或者在你的 Shell 启动脚本里添加你的 alisa 语句。通常认为 `vim` 比 `evlis` 功能更加丰富多样,但是 `evlis` 要小的多,并且包含了大多数用户都会用到的功能。 8 | 9 | vi 非常强大,对新用户而言学习过程稍显繁琐和富有挑战。但是对于任何一个有自尊心的系统管理员来说,驾驭 vi 是一项至关重要的能力。几乎所有的 Linux 发行版、BSD 系统和 UNIX 系统都提供 vi,甚至你可以在 Mac OS X 上找到它。一旦你学会了 vi,你就不必为了在上述系统中工作而再学习另一种编辑器了。事实上,vi 已经被移植到了微软的 Windows 操作系统,在 Windows 中你可以照常使用。 10 | -------------------------------------------------------------------------------- /chapter_04/README.md: -------------------------------------------------------------------------------- 1 | ## 基本 Shell 命令 2 | 3 | ### 本章目录 4 | 5 | - [系统文档](System_Documentation.md) 6 | - [处理文件和目录](Dealing_with_Files_and_Directories/README.md) 7 | - [列出文件和目录内容](Dealing_with_Files_and_Directories/Listing_Files_and_Directory_Contents.md) 8 | - [在文件系统中移动](Dealing_with_Files_and_Directories/Moving_Around_the_Filesystem.md) 9 | - [文件和目录的创建与删除](Dealing_with_Files_and_Directories/File_and_Directory_Creation_and_Deletion.md) 10 | - [归档和压缩](Archive_and_Compression/README.md) 11 | - [zip、unzip](Archive_and_Compression/zip_and_unzip.md) 12 | - [gzip](Archive_and_Compression/gzip.md) 13 | - [bzip2](Archive_and_Compression/bzip2.md) 14 | - [XZ、LZMA](Archive_and_Compression/XZ_LZMA.md) 15 | - [tar](Archive_and_Compression/tar.md) 16 | - [阅读文档](Reading_Documents/README.md) 17 | - [more](Reading_Documents/more.md) 18 | - [less](Reading_Documents/less.md) 19 | - [链接](Linking.md) 20 | 21 | 既然你已经安装了 Slackware 并且打开了终端提示符,接下来呢?接下来是个学习基本命令行工具的好时机。既然你是个完全的新手,你也许需要一些帮助来适应。这就是本章的内容。 22 | -------------------------------------------------------------------------------- /chapter_18/Upgrading_Slackware_Versions.md: -------------------------------------------------------------------------------- 1 | ### 升级 Slackware 版本 2 | 3 | 现在你应该觉得自己有足够的能力来管理 Slackware 系统了。但是如果 Slackware 出了一个新的稳定版本我们又该如何呢?和简单地更新几个包相比,将 Slackware 从一个版本升级到另一个较新的版本更加复杂。每一个版本都包含着许许多多的改变,如果你没有为其中某些改变做好准备,或者没弄清楚哪儿变了以及为何要变,那么这些改变可能会彻底地破坏你的系统。虽然一些 Linux 发行版试图提供一系列高度自动化的工具来试图事无巨细地处理好每个细节。但是 Slackware 为升级提供了一个需要动手实践的方法。 4 | 5 | 在你试图升级系统之前需要做一件恰恰被很多人所忽视的事情:决定是否真的有必要去升级。如果旧版本的系统运行稳定而又能满足所有的需求,你可能不需要去升级系统。 6 | 7 | > 译者注:Slackware 版本的支持周期是很长的,在 2016 年春 Slackware 14.2 发布 beta2 版本的时候,2009 年发布的 Slackware 13.0 让然能收到所有的安全更新。如果旧系统工作良好,你并不需要为了安全问题而升级系统。 8 | 9 | 假如你决定升级系统,那么第二件需要做的事就是仔细阅读升级光盘或者镜像站中的 `CHANGES_AND_HINTS.TXT` 。这个文件在每次版本发布之前被更新,其中列举了很多实用性的提示和技巧以帮助你处理版本间的变更。 10 | 11 | 最后,在继续之前阅读 `UPGRADE.TXT` 。做完这一切之后,你需要拿捏一下,和可能会比较棘手的升级相比,备份你的配置文件和数据并执行一次新版本的全新安装是否会更省力和更能避免潜在的问题。如果你仍然想继续,备份好你的配置文件和数据。至少备份 `/etc` 和 `/home`,这是个好习惯。这样如果升级之后出现了问题,至少能够给你一个重装系统的机会。 12 | 13 | > 译者注:绝不可直接用备份的 `/etc` 覆盖新系统的 `/etc`,应该对于每一个需要还原的文件进行对比,并手动修改内容。 14 | 15 | 由于 Slackware 每个新版本所带来的改变都是不同的,所以给一个完整的说明不仅是徒劳的,还可能引起误解。你应该到你的升级光盘或者你喜欢的镜像站仔细查阅文档。 16 | -------------------------------------------------------------------------------- /chapter_16/README.md: -------------------------------------------------------------------------------- 1 | ## 基本网络工具 2 | 3 | ### 本章目录 4 | 5 | - [网络诊断工具](Network_Diagnostic_Tools/README.md) 6 | - [ping](Network_Diagnostic_Tools/ping.md) 7 | - [traceroute](Network_Diagnostic_Tools/traceroute.md) 8 | - [telnet](Network_Diagnostic_Tools/telnet.md) 9 | - [ssh](Network_Diagnostic_Tools/ssh.md) 10 | - [tcpdump](Network_Diagnostic_Tools/tcpdump.md) 11 | - [nmap](Network_Diagnostic_Tools/nmap.md) 12 | - [host](Network_Diagnostic_Tools/host.md) 13 | - [dig](Network_Diagnostic_Tools/dig.md) 14 | - [finger](Network_Diagnostic_Tools/finger.md) 15 | - [网页浏览器](Web_Browsers/README.md) 16 | - [lynx](Web_Browsers/lynx.md) 17 | - [links](Web_Browsers/links.md) 18 | - [wget](Web_Browsers/wget.md) 19 | - [邮件客户端](Mail_Clients/README.md) 20 | - [pine](Mail_Clients/pine.md) 21 | - [mutt](Mail_Clients/mutt.md) 22 | - [mailx](Mail_Clients/mailx.md) 23 | - [FTP 客户端](FTP_Clients/README.md) 24 | - [ftp](FTP_Clients/ftp.md) 25 | - [ncftp](FTP_Clients/ncftp.md) 26 | - [lftp](FTP_Clients/lftp.md) 27 | - [rsync](rsync.md) 28 | -------------------------------------------------------------------------------- /chapter_04/Linking.md: -------------------------------------------------------------------------------- 1 | ### 链接 2 | 3 | 链接是使用不同名字引用相同文件的方式。使用 `ln(1)` 程序,用户就能使用不同名字引用相同文件。这两个文件不是把一个复制了一遍,也不是完全相同的两个独立文件,仅仅是不同名字而已。(这就像 `rm` 或其他工具删除的原理一样,并非抹除了文件内容,只是解除了文件的引用并释放空间以供再次使用。 `ln` 与之相反,只是创建到文件的第二个引用)要想完整删除一个文件,所有的名字必须删除。 4 | 5 | > 译者注:这种链接通常被称为“硬链接”。 6 | 7 | ``` 8 | darkstar:~$ ln /etc/slackware-version foo 9 | darkstar:~$ cat foo 10 | Slackware 14.0 11 | darkstar:~$ ls -l /etc/slackware-version foo 12 | -rw-r--r-- 1 root root 17 2007-06-10 02:23 /etc/slackware-version 13 | -rw-r--r-- 1 root root 17 2007-06-10 02:23 foo 14 | ``` 15 | 16 | 还有另一种类型的链接:符号链接。符号链接不是到文件的引用,而是一种有自己独立权限的特殊文件。符号链接会指向另外的文件或目录。符号链接的优点就是能像文件一样引用目录,并且可跨文件系统。可用 `-s` 参数来创建符号链接。 17 | 18 | > 译者注:这种链接又被称为“软链接”。 19 | 20 | ``` 21 | darkstar:~$ ln -s /etc/slackware-version foo 22 | darkstar:~$ cat foo 23 | Slackware 140 24 | darkstar:~$ ls -l /etc/slackware-version foo 25 | -rw-r--r-- 1 root root 17 2007-06-10 02:23 /etc/slackware-version 26 | lrwxrwxrwx 1 root root 22 2008-01-25 04:16 foo -> /etc/slackware-version 27 | ``` 28 | 29 | 使用符号链接时,注意如果源文件被删掉了,符号链接就会失效:此时它指向一个不存在的文件。 30 | -------------------------------------------------------------------------------- /chapter_16/FTP_Clients/ftp.md: -------------------------------------------------------------------------------- 1 | #### ftp 2 | 3 | Slackware 包含的最简单的 FTP 客户端是 `ftp(1)`,能简单可靠地传输数据。 `ftp` 连接到 ftp 服务器时,会要求你输入用户名和密码,然后才允许你从 ftp 服务器获得数据。 `ftp` 由于缺乏特色,已经渐渐淡出人们的视线,但它仍然是一个有用的工具,很多文档中都可能会提到它。 4 | 5 | 一旦一个 FTP 会话被初始化后,你将会看到一个 shell 提示符,在这里,你可以像使用本地 shell 一样使用 `cd` 和 `ls` 命令。另外,你还可以使用 `put` 命令来把数据上传到服务器,或 `get` 命令来从服务器下载数据。如果你连接到一个公开的 FTP 服务器,你可能要使用"Anonymous"作为用户名,然后输入你的邮件地址(或者伪造一个)作为密码。 6 | 7 | ``` 8 | darkstar:~$ ftp ftp.osuosl.org 9 | Name (ftp.osuosl.org:alan): anonymous 10 | 331 Please specify the password. 11 | Password: secret 12 | 230 Login successful. 13 | Remote system type is UNIX. 14 | Using binary mode to transfer files. 15 | ftp> cd pub/slackware/slackware-current/ 16 | 250 Directory successfully changed. 17 | ftp> get ChangeLog.txt 18 | local: ChangeLog.txt remote: ChangeLog.txt 19 | 200 PORT command successful. Consider using PASV. 20 | 150 Opening BINARY mode data connection for ChangeLog.txt (33967 21 | bytes). 22 | 226 File send OK. 23 | 33967 bytes received in 0.351 secs (94 Kbytes/sec) 24 | ftp> bye 25 | 221 Goodbye. 26 | ``` 27 | -------------------------------------------------------------------------------- /chapter_16/Network_Diagnostic_Tools/nmap.md: -------------------------------------------------------------------------------- 1 | #### nmap 2 | 3 | 假如你想知道一个机器或多个机器上运行了哪些服务,或者想判断一些机器有没有反应(responsive)怎么办?一个一个的 `ping`,然后一个一个的用 `telnet` 连接感兴趣的端口,再一个一个的分析返回信息吗?恐怕有些不妥。最好的方法是使用端口扫描工具 `nmap(1)` 。用 `nmap` 可以扫描 TCP 和 UDP 端口,判断一个网络设备的操作系统,探测每个被定位的服务以便确定它们的具体类型等等等等。也许 `nmap` 最简单的使用方法就是一下子 `ping` 很多台机器。你可以用网络地址表示方法(CIDR)来指定某个范围的所有地址,`nmap` 会挨个扫描并在完成后把结果返回给你。如果你喜欢,也可以直接使用主机名。 4 | 5 | 为了“ping”主机,你必须使用 `-sP` 参数。下面的命令要求 `nmap` “ping” `www.slackware.com` 以及 16 个从 `72.168.24.0` 到 `72.168.24.15` 的 `IP` 地址。 6 | 7 | ``` 8 | darkstar:~# nmap -sP www.slackware.com 72.168.24.0/28 9 | ``` 10 | 11 | 你也许想扫描端口,`nmap` 为此操作单独提供了很多选项。不给 `nmap` 添加任何参数时,`nmap` 对指定的所有主机执行标准的 TCP 端口扫描。有些选项可以让 `nmap` 戾气大增,如果你想更快的取得结果或者想和对方的入侵检测服务过两招的话,可以开启这些选项。关于 `nmap` 的内容,man 手册中讨论的相当详细。下面 3 个命令分别执行普通的端口扫描,SYN 扫描和“圣诞树”扫描。 12 | 13 | ``` 14 | darkstar:~# nmap www.example.com 15 | darkstar:~# nmap -sS www.example.com 16 | darkstar:~# nmap -sX www.example.com 17 | ``` 18 | 19 | > ##### 警告 20 | > 21 | > 记住,有些因特网服务提供商很不喜欢有人扫描端口,它们可能会采取手段阻止你扫描端口。 不要把 `nmap` 这样的工具当作通用的因特网扫描器,最好把它们用在对自己系统的维护和安全管理工作上。 22 | -------------------------------------------------------------------------------- /chapter_16/Web_Browsers/wget.md: -------------------------------------------------------------------------------- 1 | #### wget 2 | 3 | 和我们见过的浏览器不同,`wget(1)` 是非交互式的(non-interactive)。对 HTTP 内容,`wget` 只下载不显示,这样一来离开网页浏览器我们也可以“浏览”网页了。不像其他浏览器的 dump 模式,`wget` 不对下载的网页进行格式化,它从服务器上原封不动的把带有标签(tags)和二进制数据(binary data)的网页内容复制下来。开启一些递归选项,你可以用 `wget` 复制整个网站到你的本地计算机中。除了 HTTP,`wget` 还支持 FTP 和其他一些协议。 4 | 5 | ``` 6 | darkstar:~# wget ftp://ftp.osuosl.org/pub/slackware/slackware-current/ChangeLog.txt 7 | --2010-05-01 13:51:19-- 8 | ftp://ftp.osuosl.org/pub/slackware/slackware-current/ChangeLog.txt 9 | => `ChangeLog.txt' 10 | Resolving ftp.osuosl.org... 64.50.236.52 11 | Connecting to ftp.osuosl.org|64.50.236.52|:21... connected. 12 | Logging in as anonymous ... Logged in! 13 | ==> SYST ... done. ==> PWD ... done. 14 | ==> TYPE I ... done. ==> CWD /pub/slackware/slackware-current ... done. 15 | ==> SIZE ChangeLog.txt ... 75306 16 | ==> PASV ... done. ==> RETR ChangeLog.txt ... done. 17 | Length: 75306 (74K) 18 | 19 | 100%[======================================>] 75,306 110K/s in 0.7s 20 | 21 | 2010-05-01 13:51:22 (110 KB/s) - `ChangeLog.txt' saved [75306] 22 | ``` 23 | -------------------------------------------------------------------------------- /chapter_13/Starting_Out.md: -------------------------------------------------------------------------------- 1 | ### 起步 2 | 3 | 打开终端,输入 `emacs`,Emacs 就打开了。在字符模式下启动不带参数的 `emacs` 时,你会看到像这样的东西: 4 | 5 | ![](../img/emacs_startup.jpg "emacs在终端里的启动界面") 6 | 7 | 而在 X 窗口模式下时,Emacs 可能会启动带图形界面的版本,如果不喜欢图形界面的版本,你可以在启动时加上 `-nw` 参数,让它运行在终端里,像这样: `emacs -nw` 。 8 | 9 | 启动完毕后,你可以用键盘上的方向键移动光标。看到带下划线的字符串了吗?那些都是链接,把光标移动到这些链接上,再敲一下回车就能激活它们。Emacs 附带的文档相当优秀,如果你遇到了问题,可以从中得到帮助。注意 Emacs 文档里描述快捷键的方法有些奇怪,比如 `C-h` 代表按住 `Ctrl` 键的同时按一下 `h` 键,相似的还有 `` M-` ``,就是按住 `Meta`(其实就是 `Alt`)键的同时按一下 `` ` `` 键。复杂一点的像 `C-xC-c` 就是按住 `Ctrl`,按一下 `x`,紧接着再按住 `Ctrl`,按一下 `c`,这个 `C-xC-c` 快捷键在 Emacs 中很重要,它的功能是关闭 Emacs。 10 | 11 | 如果你在启动 Emacs 的时候把一个文件名做为参数传给了它,它就会像 vi 一样打开这个文件,这时等 Emacs 把文件内容呈现出来,就可以开始编辑了。 12 | 13 | 比方说你启动了一个不带参数的 `emacs`,输入了一点东西,想保存一下,可以用快捷键 `C-xC-s` 。在保存文件时,迷你缓冲区(minibuffer)里会有相应的提示。迷你缓冲区就是在灰色状态行下面的那个空行。然后在迷你缓冲区中输入你想要保存的文件名,按下回车就可以了。如果在迷你缓冲区要求你输入文件名时,你突然不想保存了,这时可以按 `C-g` 来中止迷你缓存区的输入。 14 | 15 | 想打开另外一个文件,可又不想退出 Emacs,怎么办呢?用 `C-xC-f`,然后迷你缓冲区就会提示你输入一个文件名。Emacs 不会关心你要打开的文件是否存在,如果文件不存在,Emacs 会为它打开一个新缓冲区(buffer),然后等保存时再创建这个文件,如果文件存在则一切照常进行。然而,当你打开一个新文件时,所有已经打开的文件并不会关闭,你可以通过使用快捷键 `C-xC-b` 切换它们,在迷你缓存区里输入要切换的文件名(从技术上来讲,是缓冲区的名字),然后敲回车。 16 | -------------------------------------------------------------------------------- /chapter_09/Managing_Users_and_Groups_Manually.md: -------------------------------------------------------------------------------- 1 | ### 手动管理用户和组 2 | 3 | 如同 Slackware Linux 其他的东西一样,用户和组信息也是存储为纯文本。这意味着你只需要编辑文本文件,就能修改用户细节,创建用户,创建家目录等。当然,你观赏如何做到这一切之后你就会发现蕴含其中的简单的美感。 4 | 5 | 我们的第一站是 `/etc/passwd` 文件。除了密码(这一点略显奇特)以外,所有用户信息都存放在这里。原因十分简单,因为 `/etc/passwd` 必须要让系统里所有用户都有读权限,所以尽管密码是加密过的,也不能存放在这里。让我们来瞟一眼这个文件: 6 | 7 | ``` 8 | alan:x:1000:100:,,,:/home/alan:/bin/bash 9 | ``` 10 | 11 | 这个文件的每一行都包含一些由冒号区分开的区域。其含义分别为(从左到右):_用户名_、_密码_、_UID_、_GUID_、_注解栏_、*家目录*和*登陆 shell*。你会发现每行的密码密码区都是 `x`, 这是因为 Slackware 使用了影子口令,所以真实的加密过后的密码都存放在 `/etc/shadow` 。让我们看一眼: 12 | 13 | ``` 14 | alan:$1$HlR?M3fkL@oeJmsdLfhsLFM*4dflPh8:14197:0:99999:7::: 15 | ``` 16 | 17 | `shadow` 文件除了密码外还包含了一些其他内容。它们分别是(从左到右):_用户名_、_加密后的密码_、_上一次修改密码的时间_(单位:天数)、_下一次应该更新密码的时间间隔_(单位:天数)、_密码失效前的天数_、*用户由于密码失效被禁用的时间*和*保留域*。你会注意到这些“天数”们有一些是很大的数字,原因是 Slackware 从“Epoch”(即 1970 年 01 月 01 日)那一天开始计时。 18 | 19 | 要想新建一个用户,你需要使用 `vipw(8)` 来打开这些文件,它会使用你的 `VISUAL` 环境变量(如果没有定义 `VISUAL` 的话,会转而使用 `EDITOR` 。如果两个环境变量都不存在,就会使用 `vi`)指定的编辑器打开 `/etc/passwd` 。如果使用 `-s` 参数的话,它会打开 `/etc/shadow` 。请务必使用 `vipw` 而不是直接使用编辑器打开,因为它会从此刻起锁定文件禁止其他程序编辑。 20 | 21 | 这就是你所需的全部工具。你还要创建用户的家目录,并用 `passwd` 为它设置密码。 22 | -------------------------------------------------------------------------------- /chapter_16/Network_Diagnostic_Tools/tcpdump.md: -------------------------------------------------------------------------------- 1 | #### tcpdump 2 | 3 | 上面我们讨论的所有工具都只涉及对其他计算机的连接,现在我们来看看流量本身。 `tcpdump(1)`(只能用 root 权限运行)允许我们查看我们计算机上发生或接收到的所有网络流量。 `tcpdump` 以各种方式原封不动地显示数据包(raw data packets)和所有网络头(network headers)。即便你看不懂它的显示信息也无所谓,因为它本来就是给专业人员设计的。默认情况下,它探测自己找到的第一张网卡,如果网卡有多个接口,可以用 `-i` 参数来指定一个。你可以用数式(expressions)来限制要显示的数据或者改变显示数据的方法,这些内容在 man 手册或其他参考资料中都有解释。 4 | 5 | ``` 6 | darkstar:~# tcpdump -i wlan0 7 | tcpdump: verbose output suppressed, use -v or -vv for full protocol 8 | decode 9 | listening on wlan0, link-type EN10MB (Ethernet), capture size 96 bytes 10 | 13:22:28.221985 IP gw.ctsmacon.com.microsoft-ds > 192.168.1.198.59387: 11 | Flags [P.], ack 838190560, win 3079, options [nop,nop,TS val 1382697489 12 | ecr 339048583], length 164WARNING: Short packet. Try increasing the 13 | snap length by 140 14 | SMB PACKET: SMBtrans2 (REPLY) 15 | 16 | 13:22:28.222392 IP 192.168.1.198.59387 > gw.ctsmacon.com.microsoft-ds: 17 | Flags [P.], ack 164, win 775, options [nop,nop,TS val 339048667 ecr 18 | 1382697489], length 134WARNING: Short packet. Try increasing the snap 19 | length by 110 20 | SMB PACKET: SMBtrans2 (REQUEST) 21 | ``` 22 | -------------------------------------------------------------------------------- /chapter_15/wicd.md: -------------------------------------------------------------------------------- 1 | ### wicd 2 | 3 | 让我来介绍 `wicd(8)`,实际生活中笔记本用户的首要有线无线网络连接管理工具,其发音为"wicked"(`/'wɪkɪd/`)。 `wicd` 能存储任意数量的无线网络连接信息,连接时只需简单的命令或者是点几下鼠标。 `wicd` 目前不包含在默认 Slackware 安装内,因为它与配置网络适配器的传统方式格格不入。不过,你仍然能够在你的 Slackware 安装盘或者偏好 Slackware 源内的 `/extra` 目录找到它。 `wicd` 不仅是一个网络连接守护进程,还可以是一个配置网络的图形化程序。它的命令行版本也并未被人遗忘,因为 `wicd-curses(8)` 与它传统的图形化前端不相伯仲。要使用 `wicd` 的话,你首先要禁用 `rc.inet1.conf` 里配置的任何接口配置。 4 | 5 | > 译者注:Slackware 中同样提供 NetworkManager。 6 | 7 | ``` 8 | # rc.inet1.conf 9 | # ============= 10 | # Config information for eth0: 11 | IPADDR[0]="" 12 | NETMASK[0]="" 13 | USE_DHCP[0]="no" 14 | DHCP_HOSTNAME[0]="" 15 | # Default gateway IP address: 16 | GATEWAY="" 17 | ``` 18 | 19 | 现在可以安装 `wicd` 了,配置守护进程为开机启动,并从此使用一个更加用户友好的程序。 20 | 21 | ``` 22 | darkstar:~# installpkg /path/to/extra/wicd/wicd-1.6.2.1-1.txz 23 | darkstar:~# chmod +x /etc/rc.d/rc.wicd 24 | darkstar:~# /etc/rc.d/rc.wicd start 25 | ``` 26 | 27 | 如果你主要使用控制台的话,只需运行 `wicd-curses` 。此外,还可以使用由“X”提供的图形化桌面,你可以在那上面用 KDE 或 XFCE 菜单启动 `wicd` 图形化前端。 28 | 29 | 此外,你可以通过终端或运行对话框手动运行 `wicd-client(1)` 。 30 | 31 | 在图形化前端上,可通过在 ESSID 列表旁的 `Preference` 按钮来配置不同的网络。使用终端客户端的话,选中你想使用的 ESSID 并按下右方向键可有同样效果,都能打开对应网络的配置页面。 32 | -------------------------------------------------------------------------------- /chapter_04/System_Documentation.md: -------------------------------------------------------------------------------- 1 | ### 系统文档 2 | 3 | 你的 Slackware 系统几乎针对每个应用程序都附带了大量内置文档。最常见的阅读系统文档的方式是 `man(1)` 。调用 `man`(manual 的缩写)会输出所有现有的程序,系统调用,配置文件,以及库的手册页(man-page)。比如,`man man` 输出 `man` 自己的手册页。 4 | 5 | 不过,你不可能总是知道哪个任务该用什么程序来完成。还好,man 内置搜索功能。使用 `-k` 参数就能让 `man` 在所有手册页中搜索给定的关键词。 6 | 7 | 手册页根据内容的类型被分为几组(group)或部分(section)。比如,“section 1”是用户程序部分。 `man` 会按顺序搜索每个 section 并输出第一个匹配项。有时你会发现某个条目的手册页出现在不止一个 section 里。这时,你就要指定搜索的范围。本书中,所有的程序和部分内容会在它右边附带一个括起来的数字,这个数字就是你要给 `man` 指定的搜索范围。 8 | 9 | ``` 10 | darkstar:~$ man -k printf 11 | printf (1) - format and print data 12 | printf (3) - formatted output conversion 13 | darkstar:~$ man 3 printf 14 | ``` 15 | 16 | 手册页 section 列表 17 | 18 | | Section | 内容 | 19 | | ------- | ---------------------- | 20 | | `1` | 用户命令 | 21 | | `2` | 系统调用 | 22 | | `3` | C 语言库调用 | 23 | | `4` | 设备 | 24 | | `5` | 文件格式/协议 | 25 | | `6` | 游戏 | 26 | | `7` | 约定/宏包 | 27 | | `8` | 系统管理工具 | 28 | | `9` | 内核 API 描述 | 29 | | `n` | “New”——通常用于 Tcl/Tk | 30 | -------------------------------------------------------------------------------- /chapter_10/Permissions_Overview.md: -------------------------------------------------------------------------------- 1 | ### 权限概述 2 | 3 | 如前所述,Slackware Linux 是一个多用户系统,因此,文件系统也要适合多用户。这意味着所有的文件和目录都有一大堆权限设置来赐予不同用户不同的权限。每个文件有三种基本权限和三组权限设置。举个例子: 4 | 5 | ``` 6 | darkstar:~$ ls -l /bin/ls 7 | -rwxr-xr-x 1 root root 81820 2007-06-08 21:12 /bin/ls 8 | ``` 9 | 10 | 回忆一下,第四章 `ls` 的 `-l` 参数列出了文件和目录及其所有者。上面的例子中,权限是 `rwxr-xr-x`,用户是 `root` 用户组也是 `root` 。权限部分,尽管是紧密显示在一起,但实际上它们分为三组。前三个是文件所有者的权限,中间三个代表文件所属组的权限,最后三个代表所有人(对这个文件)的权限。 11 | 12 | | 权限对象 | 内容 | 含义 | 13 | | -------- | ----- | -------------------------------------- | 14 | | 所有者 | `rwx` | 其所有者 `root` 用有读,写,执行权限 | 15 | | 所属组 | `r-x` | 其所属组 `root` 中的成员有读,执行权限 | 16 | | 其他 | `r-x` | 其他人有读,执行权限 | 17 | 18 | > 表 10.1:`/bin/ls` 的权限设置 19 | 20 | 对文件来说,权限含义正如其名,读(**r**ead)权限、写(**w**rite)权限、执行(e**x**ecute)权限分别能让你读、写、执行文件。但对目录来说这些又是什么含义呢?简单来说,目录的读权限能让你获取目录内容(也就是用 `ls`),写权限让你能在目录下创建文件甚至删除整个目录(即使你没有删除目录内内容的权限也没关系),执行权限能让你进入目录(举个例子,也就是可以使用内置 `cd` 进入目录)。 21 | 22 | 拿这个目录的权限举例: 23 | 24 | ``` 25 | darkstar:~$ ls -ld /home/alan 26 | drwxr-x--- 60 alan users 3040 2008-06-06 17:14 /home/alan/ 27 | ``` 28 | 29 | 这是我的家目录和它的权限设置。该目录由用户 `alan` 所有,从属于组 `users` 。所有者拥有所有权限(`rwx`),所属组只有读和执行权限(`r-x`),其他人禁止对该目录进行操作。 30 | -------------------------------------------------------------------------------- /chapter_11/Network_Filesystems/NFS.md: -------------------------------------------------------------------------------- 1 | #### NFS 2 | 3 | NFS 是为 Linux 和其他操作系统提供的网络文件系统。它的性能一般,但是支持完整的权限。要将 NFS 作为客户端或者服务端,你必须运行远程过程调用守护程序。这可以简单的通过赋予 `/etc/rc.d/rc.rpc` 文件可执行权限然后运行它搞定。一旦它被设置为可执行,那么它将在你每次启动 Slackware 时自动运行。 4 | 5 | ``` 6 | darkstar:~# chmod +x /etc/rc.d/rc.rpc 7 | darkstar:~# /etc/rc.d/rc.rpc start 8 | ``` 9 | 10 | 挂载 NFS 共享和挂载本地文件系统有点不同。不是给 `mount` 一个本地设备,而是你必须告诉 `mount`NFS 服务器的域名或者 IP 以及要挂载的目录,这两者用冒号隔开。 11 | 12 | ``` 13 | darkstar:~# mount -t nfs darkstar.example.com:/home /home 14 | ``` 15 | 16 | 运行 NFS 服务端又有一点不同。首先,你需要在 `/etc/exports` 中配置每个要导出的目录。 `exports(5)` 包含了用来共享的目录的信息,以及和谁共享,共享的权限是怎样的。 17 | 18 | ``` 19 | # See exports(5) for a description. 20 | # This file contains a list of all directories exported to other computers. 21 | # It is used by rpc.nfsd and rpc.mountd. 22 | 23 | /home/backup 192.168.1.0/24(sync,rw,no_root_squash) 24 | ``` 25 | 26 | `exports` 中的第一列是要通过 NFS 导出的文件列表。第二列是可以访问导出文件的计算机及其所需的权限的列表。你可以使用域名、IP 或者网络块地址(本例)来指定主机。特殊的权限总是一个括号列表。你可以从 `man` 手册中获取它的完整列表。到目前为止,只有一个特殊选项 `no_root_squash` 需要注意。通常 NFS 客户端上的 root 用户对一个导出的共享既不能读也不能写。反而 root 用户被“压缩”了,并且被强制表现来 nobody 用户一样。而 `no_root_squash` 选项会防止这个现象。 27 | 28 | 同时你还需要运行 NFS 守护程序。启动和停止 NFS 服务可以通过 `/etc/rc.d/rc.ndfd` 这个脚本来完成。你也可以给这个脚本可执行权限使它向 `rc.rpc` 那样运行。 29 | -------------------------------------------------------------------------------- /chapter_04/Archive_and_Compression/tar.md: -------------------------------------------------------------------------------- 1 | #### tar 2 | 3 | 我们已经知道了如何压缩单个文件,但没有一个能像 `zip` 那样打包文件的。但这到此为止。Tape Archiver, 或 `tar(1)`, 就是 Slackware 最常用的打包工具。像其他打包工具那样,`tar` 生成一个包含其他文件和目录的文件。它默认不压缩生成的文件(该文件又叫“tarball”),不过 Slackware 所带的版本支持各种压缩方案,包括上面提到的那几种。 4 | 5 | 使用 `tar` 可以简单也可以复杂,随你喜好。一般,生成“tarball”要使用参数 `-cvzf` 。我们来深入地看看: 6 | 7 | | 参数 | 意义 | 8 | | ---- | ------------------- | 9 | | `c` | 创建“tarball” | 10 | | `x` | 解压“tarball” | 11 | | `t` | 显示“tarball”的内容 | 12 | | `v` | 输出更多信息 | 13 | | `z` | 使用 gzip 压缩方案 | 14 | | `j` | 使用 bzip2 压缩方案 | 15 | | `J` | 使用 LZMA 压缩方案 | 16 | | `p` | 保留权限信息 | 17 | 18 | `tar` 对于参数的顺序要求比别的程序更严格。 `-f` 参数当读或写入文件时必须出现,并且紧跟其后的必须是文件名。看看这个例子: 19 | 20 | ``` 21 | darkstar:~$ tar -xvzf /tmp/tarball.tar.gz 22 | darkstar:~$ tar -xvfz /tmp/tarball.tar.gz 23 | ``` 24 | 25 | 上面,第一个命令能够正常运行,第二个会失败因为 `tar` 会尝试打开文件 `z` 而不是 `/tmp/tarball.tar.gz`. 26 | 27 | > 译者注:因为 `-f` 参数要求一个文件名,因此在 `-f` 之后知道空白字符的字符串都会被当做一个文件路径使用。 28 | 29 | 既然我们已经充分了解了参数的意义,来让我们看看如何创建和解压“tarball”。前面已经说过,`-c` 参数用来创建而 `-x` 用来解压。如果想创建或解压一个压缩过的“tarball”, 我们需要指定合适的压缩方案。自然,如果不想压缩文件也可以不填。下面的这个命令使用 gzip 算法创建并压缩一个“tarball”。尽管没有严格要求,但还是加上 `.tar` 的扩展名以及所使用的压缩算法为最好。 30 | 31 | ``` 32 | darkstar:~$ tar -czf /tmp/tarball.tar.gz /tmp/tarball/ 33 | ``` 34 | -------------------------------------------------------------------------------- /chapter_15/Wifi_Protected_Access/README.md: -------------------------------------------------------------------------------- 1 | ### Wifi 保护访问 2 | 3 | Wifi 保护访问(Wifi Protected Access,WPA)是 WEP 的替代协议,它为修补 WEP 的几个无线加密的严重问题而生。可惜,WPA 仍有一些缺陷。其升级版 WPA2 能提供更强的保护。在现在,WPA2 几乎被所有的无线网卡和接入点支持,然而有一些老机器只支持 WEP。如果你需要保护你的无线网络通讯,其防护等级至少也是 WPA2 等级。不幸的是,`iwconfig` 无法独自配置 WPA2 加密。为此,我们需要一个协助用保护进程,`wpa_supplicant(8)` 。 4 | 5 | 然而,手动配置 WPA2 加密网络并不简单,首先需要用文本编辑器直接编辑 `/etc/wpa_supplicant.conf` 。在此我们要讨论以下 WPA2 保护的最简易形式——预共享密钥(Pre-Shared Key,PSK)。想要获知 WPA2 加密网络的更多细节以在 Slackware 上配置更加复杂的网络连接,参见 `wpa_supplicant.conf` 的手册页。 6 | 7 | ``` 8 | # /etc/wpa_supplicant.conf 9 | # ======================== 10 | # This line enables the use of wpa_cli which is used by rc.wireless 11 | # if possible (to check for successful association) 12 | ctrl_interface=/var/run/wpa_supplicant 13 | # By default, only root (group 0) may use wpa_cli 14 | ctrl_interface_group=0 15 | eapol_version=1 16 | ap_scan=1 17 | fast_reauth=1 18 | #country=US 19 | 20 | # WPA protected network, supply your own ESSID and WPAPSK here: 21 | network={ 22 | scan_ssid=1 23 | ssid="nest" 24 | key_mgmt=WPA-PSK 25 | psk="secret passphrase" 26 | } 27 | ``` 28 | 29 | 在这些文字中我们只需关心由花括号括起来的文字块。这里我们配置了网络的 SSID 为 `nest`,以及要使用的 PSK,`secret passphrase` 。这样,WPA2 就成功配置完毕了。你可以运行 `wpa_supplicant` 来通过 DHCP 获取 IP 地址或设置静态地址。当然,这些步骤很复杂,肯定有更简单的方式。 30 | -------------------------------------------------------------------------------- /chapter_16/FTP_Clients/ncftp.md: -------------------------------------------------------------------------------- 1 | #### ncftp 2 | 3 | `ncftp(1)`(读做 nick-f-t-p),是 `ftp` 的一个功能更丰富的继任者,它支持 tab 补全和递归下载。它会自动使用匿名用户连接 FTP 服务器,除非你在命令行参数中指定用户名。 `ncftp` 相对 `ftp` 的主要优点是可以通过 `mget` 和 `mput` 命令来一次发送或下载多个文件。如果你给它们传递了 `-R` 参数,那么它们会递归目录上传或下载数据。 4 | 5 | ``` 6 | darkstar:~# ncftp ftp.osuosl.org 7 | Logging in... 8 | Login successful. 9 | Logged in to ftp.osuosl.org. 10 | ncftp / > cd pub/slackware/slackware-current 11 | Directory successfully changed. 12 | ncftp ...ware/slackware-current > mget -R isolinux 13 | isolinux/README.TXT: 4.63 kB 16.77 kB/s 14 | isolinux/README_SPLIT.TXT: 788.00 B 5.43 kB/s 15 | isolinux/f2.txt: 793.00 B 5.68 kB/s 16 | isolinux/initrd.img: 13.75 MB 837.91 kB/s 17 | isolinux/iso.sort: 50.00 B 354.50 B/s 18 | isolinux/isolinux.bin: 14.00 kB 33.99 kB/s 19 | isolinux/isolinux.cfg: 487.00 B 3.30 kB/s 20 | isolinux/message.txt: 760.00 B 5.32 kB/s 21 | isolinux/setpkg: 2.76 kB 19.11 kB/s 22 | ncftp ...ware/slackware-current > bye 23 | ``` 24 | -------------------------------------------------------------------------------- /chapter_11/The_Filesystem_Hierarchy.md: -------------------------------------------------------------------------------- 1 | ### 文件系统的层次 2 | 3 | Slackware Linux 将所有的文件和目录都存放在单个 `/` 目录下,这个目录叫作“根”。这和微软的 Windows 不一样。不同的硬盘分区、CD-ROM、USE 驱动器甚至是软盘都可以挂在到 `/` 下,但是没有“驱动器号”一样的东西。这些设备的内容几乎随处可见,但是 Slackware 为你设置了一些理智的默认值。例如,CD-RW 驱动器通常放在 `/mnt/CD-RW` 。以下是 Slackware 中常见的目录。 4 | 5 | > 译者注:使用 `man 7 hier` 以查看你系统中的文件系统层次标准。 6 | 7 | | 路径 | 描述 | 8 | | -------- | ---------------------------------------- | 9 | | `/` | 根目录,容纳所有东西的地方 | 10 | | `/bin` | 为所有用户提供的二进制程序的集合 | 11 | | `/boot` | 内核、initrd 以及其他和启动相关的东西 | 12 | | `/etc` | 系统配置文件 | 13 | | `/dev` | 允许直接访问硬件的特殊文件集合 | 14 | | `/home` | 存放用户个人文件和设置的目录 | 15 | | `/media` | DBUS/HAL 自动挂载的目录 | 16 | | `/mnt` | 临时挂载可移动媒体的目录 | 17 | | `/opt` | 某些专用软件的安装目录 | 18 | | `/proc` | 存放进程信息的虚拟文件系统 | 19 | | `/root` | root 用户的家目录 | 20 | | `/sbin` | 超级用户所使用的二进制程序集合 | 21 | | `/srv` | 存放网站数据 | 22 | | `/sys` | 内核信息的虚拟文件系统 | 23 | | `/tmp` | 存放所有用户临时文件 | 24 | | `/usr` | 存放所有非必要文件、库以及共享文件的目录 | 25 | | `/var` | 存放经常变化的数据,例如日志文件 | 26 | 27 | > 表 11.1:文件系统布局 28 | -------------------------------------------------------------------------------- /chapter_16/Network_Diagnostic_Tools/dig.md: -------------------------------------------------------------------------------- 1 | #### dig 2 | 3 | `dig(1)` 工具用来手动执行更复杂的 DNS 查找。当你用 `dig` 解决 DNS 问题时,它就会变成一只“围栏里铁面无私的小狗”(the meanest dog in the pound)。使用 `dig`,你几乎可以执行任意类型的 DNS 查找,从反向查找(reverse lookups)到 _A_、_CNAME_、_MX_、_SP_、_TXT_ 字段的查找等等。还有太多太多的命令行选项和查找类型有待深入讨论,不过 man 手册中已经列出了它们的常见用法。 4 | 5 | ``` 6 | darkstar:~# dig @207.69.188.185 www.slackware.com a 7 | 8 | ; <<>> DiG 9.4.3-P4 <<>> @207.69.188.185 www.slackware.com a 9 | ; (1 server found) 10 | ;; global options: printcmd 11 | ;; Got answer: 12 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57965 13 | ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0 14 | 15 | ;; QUESTION SECTION: 16 | ;www.slackware.com. IN A 17 | 18 | ;; ANSWER SECTION: 19 | www.slackware.com. 86400 IN CNAME slackware.com. 20 | slackware.com. 86400 IN A 64.57.102.34 21 | 22 | ;; AUTHORITY SECTION: 23 | slackware.com. 86400 IN NS ns2.cwo.com. 24 | slackware.com. 86400 IN NS ns1.cwo.com. 25 | 26 | ;; Query time: 348 msec 27 | ;; SERVER: 207.69.188.185#53(207.69.188.185) 28 | ;; WHEN: Sat Jul 3 16:25:10 2010 29 | ;; MSG SIZE rcvd: 105 30 | ``` 31 | 32 | 我们来看看上面用到的命令行选项。参数 `@207.69.188.185` 告诉 `dig` 要在哪个 DNS 服务器上进行查找,如果不指定,`dig` 就在 `/etc/resolv.conf` 中列出的所有服务器上查找。末尾的参数 `a` 标明了要查找的 DNS 字段类型,在这个例子中我们要查找的是“A”字段包含的 IPv4 地址。 33 | -------------------------------------------------------------------------------- /chapter_04/Archive_and_Compression/gzip.md: -------------------------------------------------------------------------------- 1 | #### gzip 2 | 3 | Slackware 所附带的最古老的压缩工具就是 `gzip(1)` 了。它一次只能处理一个文件。与 `zip` 能够压缩和打包不同,`gzip` 只能压缩。你第一感觉这是个缺点,但实际上这是它的强大之处。UNIX 的哲学之一就是让程序只做一件事并做到最好。这就让程序们能以无限多的组合方式来完成工作。要想压缩一个(或多个)文件,只需将它们作为参数传递给 `gzip` 。 4 | 5 | ``` 6 | darkstar:~$ gzip /tmp/large_file 7 | ``` 8 | 9 | 解压就使用 `gunzip`,它会解压出文件并删除原来的压缩文件。 10 | 11 | ``` 12 | darkstar:~$ gunzip /tmp/large_file.gz 13 | darkstar:~$ ls /tmp/large_file* 14 | /tmp/large_file 15 | ``` 16 | 17 | 但如果我们不希望删除压缩文件,只想查看内容的话怎么办?`zcat` 程序能读取 `gzip` 文件,解压到内存并将内容传输到标准输出(也就是终端屏幕,除非使用了重定向。重定向详见“[输入输出重定向](../../chapter_05/Input_and_Output_Redirection.md)”)。 18 | 19 | ``` 20 | darkstar:~$ zcat /tmp/large_file.gz 21 | Wed Aug 26 10:00:38 CDT 2009 22 | Slackware 13.0 x86 is released as stable! Thanks to everyone who helped 23 | make this release possible -- see the RELEASE_NOTES for the credits. 24 | The ISOs are off to the replicator. This time it will be a 6 CD-ROM 25 | 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. We're taking 26 | pre-orders now at store.slackware.com. Please consider picking up a copy 27 | to help support the project. Once again, thanks to the entire Slackware 28 | community for all the help testing and fixing things and offering 29 | suggestions during this development cycle. 30 | ``` 31 | -------------------------------------------------------------------------------- /chapter_06/cron.md: -------------------------------------------------------------------------------- 1 | ### 计划任务 2 | 3 | 我们学习了许多不同的方法来查看系统上的进程和信号,但是如果我们想周期性的运行进程呢?幸运的是,Slackware 包含了 `crond(8)` 这个工具。cron 为每个用户按照计划表运行进程。这对于需要周期性运行但不需要守护进程的进程很有用,比如备份脚本。每个用户都有自己的 cron。数据库,所以非 root 用户也能周期性的运行程序。 4 | 5 | 为了从 cron 中运行程序,你需要使用 `crontab(1)` 。man 页面列出了许多方法,但是最常见的方法是传递 `-e` 参数。这会锁定用户的 cron 数据库(为了防止它被其它进程覆盖),然后打开由 `VISUAL` 环境变量指定的文本编辑器。在 Slackware 系统上,这通常是 vi 编辑器。你可以在继续阅读之前参照 vi 的那一章。 6 | 7 | cron 数据库最初可能看起来有点过时了,但是它们很灵活。每一个非注释行都会被处理,如果所有时间条件都匹配命令就会被执行。 8 | 9 | ``` 10 | darkstar:~$ crontab -e 11 | # Keep current with slackware 12 | 30 02 * * * /usr/local/bin/rsync-slackware64.sh 1>/dev/null 2>&1 13 | ``` 14 | 15 | 就像之前提到过的,cron 的语法一开始很难理解,所以让我们独立的看看每一部分。从左到右分别是*分钟*、_小时_、_天_、_月份_、*周几*和*命令*。任何 `*` 匹配每一分钟、小时、天等等。所以上面的例子中,命令是 `/usr/local/bin/rsync-slackware64.sh 1>/dev/null 2>&1`,而且它每个月里每周的每一天的上午 2:30 运行。 16 | 17 | cron 也会用命令的输出给本地用户发邮件。因此,一些任务会将输出重定向至 `/dev/null`,这是一个忽略所有输入的特殊设备文件。为了让你容易的记住它,你可能希望把下面的注释文本粘贴到 cron 配置的顶端。 18 | 19 | ``` 20 | # Redirect everything to /dev/null with: 21 | # 1>/dev/null 2>&1 22 | # 23 | # MIN HOUR DAY MONTH WEEKDAY COMMAND 24 | ``` 25 | 26 | 默认情况下,Slackware 在 root 的 crontab 里包括了一些配置文件和注释。这些文件通过在 `/etc` 目录下创建一些指出它们应该怎么运行的文件夹使设置周期性任务更加简单。放在这些目录下的所有脚本都会每小时、每天、每周、或每月运行一次。目录名需要能自解释:`/etc/cron.hourly` 、 `/etc/cron.daily` 、 `/etc/cron.weekly` 和 `/etc/cron.monthly` 。 27 | -------------------------------------------------------------------------------- /chapter_06/kill_and_killall.md: -------------------------------------------------------------------------------- 1 | ### Kill 和 Killall 2 | 3 | 管理进程并不仅仅是了解哪些进程在运行,还包括改变它们的行为。最常见的管理程序的方法就是结束它。做这项工作的工具是 `kill(1)` 。尽管名字如此,但它实际上并不结束进程,只是向它们发送信号。最常见的信号是 `SIGTERM`,它告诉进程结束正在进行的工作然后终结。还有一些其它可以发送的信号,最常用的三个是 `SIGTERM` 、 `SIGHUP` 和 `SIGKILL` 。 4 | 5 | 进程收到信号时会做什么呢。大多数程序收到任何信号时会退出(或者试图退出),但有些特殊的信号除外。对于初学者,`SIGTERM` 信号告诉进程应该结束自己。这给了进程完成重要活动的时间,比如在退出前向磁盘上写信息。相反的,`SIGKILL` 信号告诉进程立刻结束。这在杀死无响应的进程时很有用,这通常被称作“银弹”("silver bullet")。一些进程(通常是守护进程)会捕获 `SIGHUP` 信号并在收到这种信号时重新加载配置文件。 6 | 7 | 为了向进程发送信号,我们首先需要知道它的 PID。你可以使用我们说过的 `ps` 很容易的得到它。为了向正在运行的进程发送不同的信号,你可以使用信号编号和 `-s` 作为参数。 `-l` 参数列出了所有你可以选择的信号和它们的编号。你也可以使用 `-s` 和它们的名称来发送信号。 8 | 9 | > 译者注:PID 即为进程号。 10 | 11 | ``` 12 | darkstar:~$ kill -l 13 | 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 14 | 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 15 | 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 16 | 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17 | ... many more lines omitted ... 18 | darkstar:~$ kill -s 9 1234 # SIGKILL 19 | darkstar:~$ kill -s 1 1234 # SIGHUP 20 | darkstar:~$ kill -s HUP 1234 # SIGHUP 21 | ``` 22 | 23 | 有时你可能希望结束所有匹配某个进程名的进程。你可以使用 `killall(1)` 杀死这些进程。只需要向 `killall` 提供与 `kill` 相同的参数即可。 24 | 25 | ``` 26 | darkstar:~$ killall bash # SIGTERM 27 | darkstar:~$ killall -s 9 bash # SIGKILL 28 | darkstar:~$ killall -s 1 bash # SIGHUP 29 | darkstar:~$ killall -s HUP bash # SIGHUP 30 | ``` 31 | -------------------------------------------------------------------------------- /chapter_17/Package_Compression_Formats/slackpkg.md: -------------------------------------------------------------------------------- 1 | #### slackpkg 2 | 3 | `slackpkg` 是管理 Slackware Linux 软件包的自动化工具,它最初出现在 slackware-12.1 的 `extra/` 目录中。自 slackware-12.2 发布以来,`slackpkg` 已经被包含在了基本系统安装的 ap 系列中。 4 | 5 | > 译者注:`slackpkg` 并不帮你解决依赖问题,如果你想自动化地处理依赖,你或许需要的是 [slapt-get](https://github.com/jaos/slapt-get) 6 | 7 | 就像用 `installpkg` 可以从安装盘的 `extra/` 目录中安装 Slackware 软件包一样,用 `slackpkg` 可以从网上把软件包拖过来安装。对安全更新和已被上传到 Slackware 服务器的重要软件升级来说,这非常有用。 8 | 9 | 如果没有 `slackpkg`,就要这么做: 10 | 11 | 1. 在 Slackware 变要记录中看到有能用的更新。 12 | 2. 在当地的 Slackware 镜像站中找到更新软件包的下载链接。 13 | 3. 下载软件包。 14 | 4. 使用 `installpkg` 或 `pkgtool` 安装下载的软件包。 15 | 16 | 有了 `slackpkg`,变成了这样: 17 | 18 | 1. 在 Slackware 变要记录中看到有 `foo` 的更新。 19 | 2. 运行 `slackpkg install foo`。 20 | 21 | 很明显,效率提高了。 22 | 23 | 要使用 `slackpkg`,首先用 root 权限编辑 `/etc/slackpkg/mirrors` 来为系统选择一个 Slackware 镜像站,找到和你使用的 Slackware 版本、架构都一致的镜像站,然后取消注释就可以了。镜像列表提供了 ftp 和 http 两种访问方式,但只能取消注释一个镜像站。 24 | 25 | 一旦选择了一个镜像站,就要用命令 `slackpkg update` 来更新远程文件的列表。如果看到有新的软件包被上传到了 Slackware 服务器,同样要更新远程文件的列表(通常 Slackware 变更记录 ChangeLog.txt 里查看,见“[第十八章、追踪系统更新](../../chapter_18/README.md)”)。 26 | 27 | 要搜索一个软件包,使用命令 `slackpkg search foo`,要安装一个软件包,使用命令 `slackpkg install foo` 。 28 | 29 | 一旦用 `slackpkg` 安装了一个软件包,就可以用 `pkgtool` 或其他包管理命令移除或升级这个包,这些命令在“软件包的安装、移除和升级”小节中介绍过了。 30 | 31 | 关于 `slackpkg` 的更多信息在 man 手册 `slackpkg(8)` 、`slackpkg.conf(5)` 以及它的网站 [http://www.slackpkg.org/](http://www.slackpkg.org/) 中可以找到。 32 | -------------------------------------------------------------------------------- /chapter_05/Environment_Variables.md: -------------------------------------------------------------------------------- 1 | ### 环境变量 2 | 3 | 通过设置环境变量能使一些任务做起来更加容易。环境变量是一些用户希望存储或者以后会用到的信息的间断的名称。举个例子来说,环境变量 `PS1` 告诉 bash 如何显示提示符的格式。其他变量可能告诉应用程序如何运行。举个例子,`LESSOPEN` 变量告诉 `less` 运行简便的 `lesspipe.sh` 预处理器,`LS_OPTIONS` 为 `ls` 开启颜色显示。 4 | 5 | 设置你自己的环境变量是容易的。bash 包含两个内建的函数用来设置变量:`set` 和 `export` 。除此以外,环境变量也可以被 `unset` 移除。(如果你不小心用 `unset` 移除了一个你不知道干什么的环境变量,不要紧张。你可以通过登出终端后再重新登录的方式重置所有默认的变量)。你可以通过在变量名前加 `$` 符号来获取变量的值。 6 | 7 | ``` 8 | darkstar:~$ set FOO=bar 9 | darkstar:~$ echo $FOO 10 | bar 11 | ``` 12 | 13 | `set` 和 `export` 最主要的区别是 `export` 会将变量应用到子 shell 中(子 shell 就是运行在一个父 shell 中的另一个 shell)。你可以通过控制提示符显示的 `PS1` 变量来查看这一区别。 14 | 15 | ``` 16 | darkstar:~$ set PS1='FOO ' 17 | darkstar:~$ export PS1='FOO ' 18 | FOO 19 | ``` 20 | 21 | 还有其他重要的环境变量,不过其中最重要的一个环境变量是 `PATH` 。 `PATH` 一个用来搜索应用程序的目录列表。例如,`top` 位于 `/usr/bin/top` 。你可以输入完整路径来运行这个程序,但是如果 `/usr/bin` 位于 `PATH` 变量中,则直接输入 `top` 就可以运行,bash 会搜索到这里你无需手动输入完整路径。当你作为普通用户来尝试运行一个程序是,你首先需要看看它所在的目录在不在 `PATH` 变量中,例如 `ifconfig` 。 22 | 23 | ``` 24 | darkstar:~$ ifconfig 25 | bash: ifconfig: command not found 26 | darkstar:~$ echo $PATH 27 | /usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games:/opt/www/htdig/bin:. 28 | ``` 29 | 30 | 上面是一个典型的普通用户的 `PATH` 。你可以像改变其他环境变量一样改变它。如果你以 root 身份登录,你会看到不一样的 `PATH` 。 31 | 32 | ``` 33 | darkstar:~$ su - 34 | Password: 35 | darkstar:~# echo $PATH 36 | /usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games:/opt/www/htdig/bin 37 | ``` 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Slackware 中文手册 2 | 3 | ### 关于本书 4 | 5 | 本书是 [Slackbook][id_slackbook] 的中文版,项目托管于 [Github][id_github] 。 6 | 7 | ### 获取文档 8 | 9 | 推荐直接[在线阅读][id_online]本书,当然你也可以在[发布页面][id_releases]获取电子书版本。 10 | 11 | ### 自行编译 12 | 13 | [GitBook][id_gitbook] 需要 [Calibre][id_calibre] 以输出 PDF、EPUB 和 MOBI 格式。安装此软件前,确保你的 Slackware Linux 中已安装 `python3` 、 `wget` 、 `xdg-utils` 和 `xz` 软件包。 14 | 15 | ```shell 16 | curl -fsSL https://download.calibre-ebook.com/linux-installer.sh | sudo -E bash -s 17 | sudo npm install -g @0y0/gitbook-cli 18 | git clone https://github.com/slackwarecn/slackbook_cn.git 19 | cd ./slackbook_cn/ 20 | make 21 | ``` 22 | 23 | > 因为 GitBook 官方已经 [不再支持 CLI][id_gitbook_deprecation],所以这里使用了非官方维护的版本。 24 | 25 | ### 贡献力量 26 | 27 | 如果你想为项目贡献你的力量,请务必事先阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 。 28 | 29 | ### 版权 30 | 31 | Copyright (c) 2016-2023 The Slackware Linux CN Community (https://github.com/slackwarecn/) 32 | 33 | [id_calibre]: https://github.com/kovidgoyal/calibre "访问 Calibre 项目" 34 | [id_gitbook]: https://github.com/GitbookIO/gitbook "访问 Gitbook 项目" 35 | [id_gitbook_deprecation]: https://github.com/GitbookIO/gitbook#%EF%B8%8F-deprecation-warning "查看 GitBook 官方不再支持 CLI 的公告" 36 | [id_github]: https://github.com/slackwarecn/slackbook_cn "访问本项目主页" 37 | [id_online]: https://slackwarecn.gitbook.io/slackbook_cn "在线阅读本书" 38 | [id_releases]: https://github.com/slackwarecn/slackbook_cn/releases "查看发布页面" 39 | [id_slackbook]: http://slackbook.org "访问 The Revised Slackware Book Project 主页" 40 | -------------------------------------------------------------------------------- /chapter_16/rsync.md: -------------------------------------------------------------------------------- 1 | ### rsync 2 | 3 | 你准备好看一些很酷的东西了吗?你是否遇到过需要把服务器上一个巨大的目录中改变的内容下载下来,却不知道你需要下载哪些文件?你可以重新下载整个目录,但是那样会做很多重复的工作;你也可以手动比较并选择下载,但是这样非常繁琐。也许你已经下载了一个大文件,如光盘镜像,但是仅仅只要出现了几个字节的错误,你就不得不重新下载整个文件,这并不合理不是吗?让我们开始使用 `rsync(1)`,一个快速而灵活的远程文件同步工具。 4 | 5 | `rsync` 使用一些简单有效的技术来检查服务器上哪些内容发生了改变。通过检查时间戳和大小,`rsync` 可以确定两个文件是否不同,如果文件一些信息发生了变化,它可以确定文件哪些字节发生了改变。并直接下载改变的部分而不是整个文件,这是现代技术的奇迹。 6 | 7 | 在最简单的使用情景下,`rsync` 连接到*rsync*协议服务器下载文件和目录信息,包括时间戳和大小等信息。然后,`rsync` 会将此和本地文件比较(如果有的话),以确定它需要传输的文件。另外,它把大文件分解成小块,并且使用一个简单快速的哈希函数进行比较,只有不匹配的块才会被同步,因此同步的数据量大大减少。 `rsync` 也支持*压缩*、_详细输出_、_文件删除_、*权限管理*以及更多可选的选项。如果需要一个完整的列表,你可以查看手册。在此,我们列出了一些常用的选项。 8 | 9 | #### Table 1.6 rsync Arguments 10 | 11 | | 选项 | 说明 | 12 | | ---- | ---------------------------------------- | 13 | | `-v` | 更详细的输出 | 14 | | `-c` | 通过校验和检查每个文件而不是时间戳和大小 | 15 | | `-a` | 归档模式(与-rlptgoD 相同) | 16 | | `-e` | 使用指定的远程 shell | 17 | | `-r` | 递归模式 | 18 | | `-u` | 更新模式-跳过时间戳更新的本地文件 | 19 | | `-p` | 保留权限信息 | 20 | | `-n` | 测试运行,不更改任何数据 | 21 | | `-z` | 压缩-方便低速的网络环境 | 22 | 23 | `rsync` 的强大功能还在于能通过不同的方式调用。下面的两个例子使用 `rsync` 连接到*rsync*协议的服务器检索一些信息,然后使用*ssh*传输到另一台服务器。 24 | 25 | ``` 26 | darkstar:~# rsync -avz rsync://ftp.osuosl.org/pub/slackware/slackware-current/ \ 27 | /src/slackware-current/ 28 | darkstar:~# rsync -e ssh ftp.slackware.com:/home/alan/foo /tmp/foo 29 | ``` 30 | -------------------------------------------------------------------------------- /chapter_04/Dealing_with_Files_and_Directories/Listing_Files_and_Directory_Contents.md: -------------------------------------------------------------------------------- 1 | #### 列出文件和目录内容 2 | 3 | `ls(1)` 用于列出文件和目录,及其权限、大小、类型、inode、所有者和组,还有很多其他信息。比如,列出 Slackware 的 `/` 目录: 4 | 5 | ``` 6 | darkstar:~$ ls / 7 | bin/ dev/ home/ lost+found/ mnt/ proc/ sbin/ sys/ usr/ 8 | boot/ etc/ lib/ media/ opt/ root/ srv/ tmp/ var/ 9 | ``` 10 | 11 | 注意,上面所有列出项都是目录。通过后面附带的 `/` 我们能够很容易地把它们和文件区分开(标准文件没有这个后缀)。此外,可执行文件会有一个星号的后缀。 `ls` 还能做到更多。要列出文件和目录的权限,你需要“长列表”(long list): 12 | 13 | ``` 14 | darkstar:~$ ls -l /home/alan/Desktop 15 | -rw-r--r-- 1 alan users 15624161 2007-09-21 13:02 9780596510480.pdf 16 | -rw-r--r-- 1 alan users 3829534 2007-09-14 12:56 imgscan.zip 17 | drwxr-xr-x 3 alan root 168 2007-09-17 21:01 ipod_hack/ 18 | drwxr-xr-x 2 alan users 200 2007-12-03 22:11 libgpod/ 19 | drwxr-xr-x 2 alan users 136 2007-09-30 03:16 playground/ 20 | ``` 21 | 22 | 长列表能列出权限、用户和组所有权、文件大小、上次修改时间,以及文件名。注意,上面前两个列出项是文件,后三个是目录。这可以通过每行的第一个字母辨别出来。正常文件是一个 `-`,目录是一个 `d` 。其他文件类型有各自的符号,比如符号链接是 `l`. 23 | 24 | 最后,我要展示如何列出带点的文件,也就是隐藏文件。不像其他操作系统(比如 Microsoft Windows)那样,没有专门用来标识“隐藏”和“非隐藏”的文件性质。隐藏文件名开头是一个点。要想把隐藏文件也显示出来,给 `ls` 传递 `-a` 参数。 25 | 26 | ``` 27 | darkstar:~$ ls -a 28 | .xine/ .xinitrc-backup .xscreensaver .xsession-errors SBo/ 29 | .xinitrc .xinitrc-xfce .xsession .xwmconfig/ Shared/ 30 | ``` 31 | 32 | 你可能注意到了你的文件和目录显示出来颜色是不一样的。通过给 ls 传递各种参数,就能打开它的各种功能,比如颜色输出,标注文件类型的后缀字符等等。方便起见,Slackware 将 `ls` 设置为默认开启这些参数。可以通过 `LS_OPTIONS` 和 `LS_COLORS` 环境变量控制这些参数。我们将在第五章探讨这些环境变量。 33 | -------------------------------------------------------------------------------- /chapter_18/The_stable_Branch.md: -------------------------------------------------------------------------------- 1 | ### 稳定分支 2 | 3 | #### Slackware 的稳定分支 4 | 5 | 每当 Slackware 发布新版本,Slackware 的团队会按需发布升级包用以修复严重的安全问题和惹人厌的漏洞。因此让你当前版本的 Slackware 跟进最新的补丁是非常重要的,这种版本被称之为 `-stable` 分支。与之不同的还有一个 `-current` 分支,我们会在这个分支上进行下一个稳定版本的开发工作(所以经常会有一些引发问题的提交)。除非你愿意在一个可能出错的系统中工作并可以自食其力地解决这些问题。我们强烈建议你使用 `-stable` 分支。 6 | 7 | 由于本地无法获得 `-stable` 分支的安全更新,所以你需要从互联网上自行获取。许多个人和组织提供 Slackware 的镜像站,你可以在这些地方以多种方式下载到 Slackware 的完整目录树(也可能只是 `patches/` 目录)。有些镜像站可以在网页上访问,但更常见的方式是从运行着 ftp/rsync 服务器的镜像站上获取更新。Slackware 项目维护着一份按照国家分类的已知镜像站清单。如果你不确定该使用哪个镜像站,可以查看 [http://www.slackware.com/getslack/](http://www.slackware.com/getslack/) 获得帮助。如果你附近有一所大学,他们很可能会提供一份维护着许多开源项目的镜像站——Slackware 可能也在其中。一个镜像站可用的必要条件只有一个——它是官方镜像站的一个完整克隆。通常来说,最好使用距离你较近的镜像站以获得最快的访问速度和最少的网络资源占用。 8 | 9 | 那么如何知道有可用更新呢?最好的方法是在任意提供及时更新的镜像站上查看 ChangeLog.txt 文件。你可以在 Slackware 官网上获得 `-stable` 和 `-current` 分支的更新日志。但是如果你正在使用一个较旧版本的 Slackware,你需要从镜像站上查询是否有可用的更新。 10 | 11 | ``` 12 | darkstar:~# wget -O - \ 13 | ftp://slackware.osuosl.org/pub/slackware/slackware64-current/ChangeLog.txt \ 14 | | less 15 | Thu Aug 16 04:01:31 UTC 2012 16 | Getting close! Hopefully we've cleared out most of the remaining issues 17 | and are nearly ready here. We'll call this release candidate 2. 18 | Unless there's a very good rationale, versions are frozen. 19 | Any reports of remaining bugs will be gladly taken, though. 20 | #include 21 | a/aaa_base-14.0-x86_64-4.txz: Rebuilt. 22 | Remove mention of HAL in the initial welcome email (mention udisks2 23 | instead). Thanks to Dave Margell. 24 | a/bash-4.2.037-x86_64-1.txz: Upgraded. 25 | ``` 26 | -------------------------------------------------------------------------------- /chapter_04/Dealing_with_Files_and_Directories/File_and_Directory_Creation_and_Deletion.md: -------------------------------------------------------------------------------- 1 | #### 文件和目录的创建与删除 2 | 3 | 大多数程序都能自己创建文件和目录,你有时也像自己这么做。幸好,使用 `touch(1)` 和 `mkdir(1)` 就能很容易做到。 4 | 5 | `touch` 实际上只是修改文件的时间戳,如果文件不存在的话就会创建一个。 6 | 7 | ``` 8 | darkstar:~/foo$ ls -l 9 | -rw-r--r-- 1 alan users 0 2012-01-18 15:01 bar1 10 | darkstar:~/foo$ touch bar2 11 | -rw-r--r-- 1 alan users 0 2012-01-18 15:01 bar1 12 | -rw-r--r-- 1 alan users 0 2012-01-18 15:05 bar2 13 | darkstar:~/foo$ touch bar1 14 | -rw-r--r-- 1 alan users 0 2012-01-18 15:05 bar1 15 | -rw-r--r-- 1 alan users 0 2012-01-18 15:05 bar2 16 | ``` 17 | 18 | 注意 `bar2` 是如何被第二条命令创建出来的,以及第三条命令只是修改了 `bar1` 的时间戳。 19 | 20 | `mkdir` 用于(这名字很显然)创建目录。 `mkdir foo` 能在当前文件夹创建一个叫 `foo` 的目录。此外,你可使用 `-p` 参数创建传入命令中任一缺失的父级目录。 21 | 22 | ``` 23 | darkstar:~$ mkdir foo 24 | darkstar:~$ mkdir /slack/foo/bar/ 25 | mkdir: cannot create directory `/slack/foo/bar/': No such file or directory 26 | darkstar:~$ mkdir -p /slack/foo/bar/ 27 | ``` 28 | 29 | 在上面的例子中,我们创建了 `/slack`,然后是 `/slack/foo`,最后是 `/slack/foo/bar` 。如果没使用 `-p` 参数的话,那么就不能创建 `/slack/foo/bar`,除非前两级目录存在。 30 | 31 | 删除和创建一样简单。 `rm(1)` 命令能删除一个文件(假设你有足够的权限)。有一些常用的参数。第一个就是 `-f` 参数,用来强行删除文件(但也可能因为缺少权限失败)。 `-r` 参数用来删除目录及其中的内容。 32 | 33 | 还有另一个命令用来删除目录,就是毫无存在感的 `rmdir(1)` 。 `rmdir` 只能删除空目录,如果其中含有文件或子目录的话会报错。 34 | 35 | ``` 36 | darkstar:~$ ls 37 | foo_1/ foo_2/ 38 | darkstar:~$ ls foo_1 39 | bar_1 40 | darkstar:~$ rmdir foo_1 41 | rmdir: foo/: Directory not empty 42 | darkstar:~$ rm foo_1/bar 43 | darkstar:~$ rmdir foo_1 44 | darkstar:~$ ls foo_2 45 | bar_2/ 46 | darkstar:~$ rm -fr foo_2 47 | darkstar:~$ ls 48 | ``` 49 | -------------------------------------------------------------------------------- /chapter_07/Setting_Up_A_Graphical_Login.md: -------------------------------------------------------------------------------- 1 | ### 设置图形界面登陆 2 | 3 | 默认情况下,Slackware Linux 启动后显示的是登录提示符和虚拟终端,但这难以满足大多数人的需要。如果你只要运行命令行程序,直接登录就是了。如果你想要运行“X”, 只需运行 `startx`, 但像笔记本用户那样,除图形界面外几乎不使用其他功能呢?让 Slackware 直接把你带到图形界面不是更好吗?幸好,我们能简单地做到这一点。 4 | 5 | Slackware 使用 System V 启动系统,它能让管理员启动或跳转进不同的运行级别(runlevel, 就是系统能处于的不同“状态”)。实际上,关机就是改变运行级别的一个例子。运行级别十分复杂,所以如非必要我们不做探讨。 6 | 7 | 可用 `inittab(5)` 来配置运行级别。最常用的就是 runlevel 3(Slackware 默认)和 runlevel 4(图形界面)。要让 Slackware 启动图形界面,只要用你最喜欢的编辑器(编辑器可参考 `vi` 或 `emacs` 的相关章节)打开 `/etc/inittab`. 在文件开头就能看到相关条目。 8 | 9 | ``` 10 | # These are the default runlevels in Slackware: 11 | # 0 = halt 12 | # 1 = single user mode 13 | # 2 = unused (but configured the same as runlevel 3) 14 | # 3 = multiuser mode (default Slackware runlevel) 15 | # 4 = X11 with KDM/GDM/XDM (session managers) 16 | # 5 = unused (but configured the same as runlevel 3) 17 | # 6 = reboot 18 | 19 | # Default runlevel. (Do not set to 0 or 6) 20 | id:3:initdefault: 21 | ``` 22 | 23 | 在这个配置文件(其他配置文件也差不多)中,`#` 表示这一行是注释,不被 `init(8)` 读取。如果你不是很了解 `inittab` 的内容的话,不用担心,因为许多老手也不是很了解。现在我们最关注的就是上面例子中的最后一行,把 `3` 改成 `4`, 重启。 24 | 25 | ``` 26 | # These are the default runlevels in Slackware: 27 | # 0 = halt 28 | # 1 = single user mode 29 | # 2 = unused (but configured the same as runlevel 3) 30 | # 3 = multiuser mode (default Slackware runlevel) 31 | # 4 = X11 with KDM/GDM/XDM (session managers) 32 | # 5 = unused (but configured the same as runlevel 3) 33 | # 6 = reboot 34 | 35 | # Default runlevel. (Do not set to 0 or 6) 36 | id:4:initdefault: 37 | ``` 38 | 39 | > 译者注:**绝对**不要把运行级别改为 `0` 或者 `6`! 40 | -------------------------------------------------------------------------------- /chapter_03/Dual_Booting/Dual_Booting_with_Partitions.md: -------------------------------------------------------------------------------- 1 | #### 引导多个分区 2 | 3 | 在操作系统安装在各自分区的情况下,我们来配置多启动系统。您必须首先创建分区。如果在安装第一个操作系统之前就很好操作,在这种情况下,就是个简单的规划分区的事,使用 `fdisk` 或 `cfdisk` 分区工具,具体参见 [第二章的“分区”部分](../../chapter_02/Partitioning.md) 。 4 | 5 | > ##### 注意 6 | > 7 | > 如果你搭建的是两个 Linux 的双系统,我们不推荐两个系统共用 `/home`。虽然这在技术上可行,但因为不同的桌面环境和软件版本,会增加你的个人配置文件损坏几率。 8 | > 9 | > 但共用交换分区是安全的。 10 | 11 | 你应该至少给硬盘划分三个分区: 12 | 13 | - 一个为 Slackware 准备的分区。 14 | - 一个为其他系统准备的分区。 15 | - 一个交换分区。 16 | 17 | 首先,按照“[第二章、安装](../../chapter_02/README.md)”所述,把 Slackware 安装到第一个分区。 18 | 19 | 安装好,启动好,一切正常之后,重启进入第二系统。第二系统总会想要占用整个驱动器,你显然**不希望**这样做,所以它限制为仅第二个分区。此外,该操作系统将尝试把引导器安装到硬盘驱动器的开头,覆盖 LILO。 20 | 21 | 有关引导器,可采取如下做法: 22 | 23 | ##### 可能的启动引导器方案 24 | 25 | ###### 一、如果第二系统是 Linux,禁止它安装启动管理器 26 | 27 | 如果双启动进入另一 Linux 发行版,该发行版的安装程序通常会询问是否安装启动引导程序。你当然可以不安装引导程序,手动管理 LILO 来启动 Slackware 和另一发行版。 28 | 29 | 取决于另一发行版,比起只安装 Slackware 时你可能会更频繁地修改 LILO 配置。有些发行版因为频繁更新内核而臭名远扬,这就意味着每次更新你都要修改 LILO 配置。但如果你不想时时修改配置文件,你就不会选择 Slackware 了。 30 | 31 | ###### 二、如果第二系统是 Linux,让它用 GRUB 来替换 LILO 32 | 33 | 如果双启动进入另一 Linux 发行版,你完全可以用 GRUB 来替换 LILO,或最后安装 Slackware 并都使用 LILO。LILO 和 GRUB 都有自动检测的特性,所以不管最后安装的是谁都要探测其他发行版的存在并为它创建一个启动条目。 34 | 35 | 由于其他的发行版往往会自动更新他们的 GRUB 菜单,总有可能出点差错然后就无法启动 Slackware 了。发生这种情况,不要惊慌,进入其它 Linux 的分区,手动修改 GRUB 菜单的 Slackware 条目使之指向正确的分区,内核和 initrd(如果适用的话)。 36 | 37 | ##### 三、让第二系统替换掉 LILO 并在之后重新安装并配置 LILO 38 | 39 | 这个选择也是可行的,尤其是第二系统是 Windows 的时候。经常 Windows 更新之后会重写 MBR, 这时候就要手动重新安装 LILO 了。 40 | 41 | 要在其他系统抹除 LILO 之后修复,启动 Slackware 安装介质进入配置阶段。**不要**重新分区或重新安装 Slackware,直接跳到“[配置](../../chapter_02/The_setup_Program/Configure.md)”部分。 42 | 43 | 使用简单模式 LILO 的时候,它也会自动探测并创建启动菜单。如果失败了,那么就需要手动创建条目了。 44 | -------------------------------------------------------------------------------- /chapter_05/Customization.md: -------------------------------------------------------------------------------- 1 | ### 制定 2 | 3 | 现在你应该对 bash 有所熟悉,并且你可能会碰到一些奇特的情况。比如说,当你登录的时候,会呈现给你一个类似下面这样的提示。 4 | 5 | ``` 6 | alan@darkstar:~$ 7 | ``` 8 | 9 | 但是,有些时候你可能会看到像下面这样的提示: 10 | 11 | ``` 12 | bash-3.1$ 13 | ``` 14 | 15 | 造成这样的原因和控制 bash 提示的环境变量有关。一些 shell 被认为是“login shell”,而另一些 shell 则被认为是“interactive shell”,这两种 shell 当它们启动的时候读取的是不一样的配置文件。“login shell”读取的是 `/etc/profile` 和 `~/.bash_profile` 。“interactive shell”读取的是 `~/.bashrc` 。这对于一些有能力的用户来说是有好处的,但是对于新手来说它们并不关心这两种 shell 的不同,并且希望任何时候它们执行 bash 的时候都能有相同的环境。如果是这样,编辑你的 `~/.bashrc` 文件,然后写入以下几行。(更多关于配置文件的详情请阅读 bash 手册的“INVOCATION”一节) 16 | 17 | > 译者注:这里的“shell”特指 bash。 18 | 19 | ``` 20 | # ~/.bashrc 21 | . /etc/profile 22 | . ~/.bash_profile 23 | ``` 24 | 25 | 当输入上述内容后,“login shell”和“interactive shell”都会有同样的环境设置。现在如果我们想自己定制 shell 设定,只要编辑 `~/.bash_profile`(用户各自的)或者 `/etc/profile`(全局的)。让我们开始配置 bash 提示。 26 | 27 | 对于 bash 提示的格式每个用户都有各自的喜好。我个人倾向于短小的简单的提示,因为那样节省空间。但我也使用多多行提示。我其中的一个朋友甚至在它的提示中包含 ASCII-art。要改变你的提示格式,你只需要改变 `PS1` 变量。默认情况下,Slackware 将提示配置成如下格式: 28 | 29 | ``` 30 | darkstar:~$ echo $PS1 31 | \u@\h:\w\$ 32 | ``` 33 | 34 | 是的,这个看上去有点搞笑的一串东西控制着你 bash 的提示格式。基本上,每一个在 `PS1` 变量中的字符都包含在了提示中,除非之前有转义字符 `\`。有很多的转义序列,我们不会一个个去讨论,但是我会解释这里的这些。第一个 `\u` 会被转义成当前用户的用户名。 `\h` 是主机名。 `\w` 是当前的工作目录,`\$` 显示的要么是 `#`(root 用户)要么是 `$`(普通用户)。一个完整的转义序列列表可以在 bash 手册的“PROMOTING”一节中看到。 35 | 36 | 虽然我们已经讨论了这个默认的提示,不过我还要花些时间展示给你几个提示的例子以及 `PS1` 的设置。 37 | 38 | ``` 39 | Wed Jan 14 12:08 AM 40 | alan@raven:~$ echo $PS1 41 | \d \@\n\u@\h:\w$ 42 | HOST: raven - JOBS: 0 - TTY: 3 43 | alan@~/Desktop/sb_3.0:$ echo $PS1 44 | HOST: \H - JOBS: \j - TTY: \l\n\u@\w:\$ 45 | ``` 46 | 47 | 更多配置 bash 提示的信息,包括设置有颜色的提示,可以参考 `/usr/doc/Linux-HOWTOs/Bash-Prompt-HOWTO` 。这个文档会带给你一个好的想法。 48 | -------------------------------------------------------------------------------- /chapter_15/iwconfig.md: -------------------------------------------------------------------------------- 1 | ### iwconfig 2 | 3 | 无线网络相比传统的有线网络更为复杂,因此需要一些额外的配置工具。Slackware 包含了各种能在底层陪着无线网卡(WINC)的工具套件。我们不会每一个都讲,只是在这里为你快速上手打下一个坚实的基础。我们要研究的第一个工具就是 `iwconfig(8)` 。不带任何参数运行时,`iwconfig` 会显示当前所有网卡的网络信息。 4 | 5 | ``` 6 | darkstar:~# iwconfig 7 | lo no wireless extensions. 8 | 9 | eth0 no wireless extensions. 10 | 11 | wmaster0 no wireless extensions. 12 | 13 | wlan0 IEEE 802.11abgn ESSID:"nest" 14 | Mode:Managed Frequency:2.432 GHz Access Point: 15 | 00:13:10:EA:4E:BD 16 | Bit Rate=54 Mb/s Tx-Power=17 dBm 17 | Retry min limit:7 RTS thr:off Fragment thr=2352 B 18 | Encryption key:off 19 | Power Management:off 20 | Link Quality=100/100 Signal level:-42 dBm 21 | Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 22 | Tx excessive retries:0 Invalid misc:0 Missed beacon:0 23 | 24 | tun0 no wireless extensions. 25 | ``` 26 | 27 | 与有线网络工具不同,无线网络工具显得更加“模糊”。无线工具之间的界限很难划清,并且经常出现功能重叠。真想弄清楚的话,每个无线网络都有(希望它真的有)唯一标识符。两个最基本的就是服务区别号(Extended Service Set Identifier,ESSID)和信道或者说广播频率。ESSID 就是用来标识无线网络名称的,实际上你可能听说过它,只不过它被称为“网络名称”或者什么别的东西。 28 | 29 | 一般无线网络工作在 11 个不同的信道上。如果要连接到哪怕是最基础的无线网络上,你也要设置两部分信息,而且很可能在配置之前还要做点别的准备工作,比如无线网卡的 IP 地址。在这里你会看见我的 ESSID 设置为了 `nest`,我的笔记本射电频率是 2.432GHz。这些就是连接到无加密无线网所需的全部信息。(这是对那些想要到我家来蹭网的人说的:在连接到我的无加密无线网之前,你们还得破解一个 2048 位的 SSL 密钥才能连接到接入点上网) 30 | 31 | > 译者注:这里指传统的 2.4G 无线网络 32 | 33 | ``` 34 | darkstar:~# iwconfig wlan0 essid nest \ 35 | freq 2.432G 36 | ``` 37 | 38 | `freq` 和 `channel` 参数控制的基本上是同一个东西,你只要使用其中之一就行了。如果你不确定你用的是什么频率或者要用哪个信道,Slackware 会自动帮你处理。 39 | 40 | ``` 41 | darkstar:~# iwconfig wlan0 essid nest \ 42 | channel auto 43 | ``` 44 | 45 | 现在 Slackware 会用某种频率连接到 ESSID 为 `nest` 的最强的接入点。 46 | -------------------------------------------------------------------------------- /chapter_19/Working_with_Modules.md: -------------------------------------------------------------------------------- 1 | ### 设置内核模块 2 | 3 | 现代 linux 内核的复杂度是惊人的。 内核源码在未压缩的情况下有将近 400MB 大小。有成千上万的开发者为内核贡献代码,内核中有数以百计编译的选项,如果把这些都编译到一起,仅内核的大小都将会很快超过 100MB。为了防止内核容量过大(同时也防止内核所占用的 RAM 过多),大多数内核选项是作为模块(modules)被构建的。你可以把这些模块看做设备驱动程序,它们可以从运行中的内核上被随意添加或移除。但事实上,它们中的许多根本不是驱动程序,但是却包含了诸如网络协议,安全措施,甚至对文件系统的支持等内容。总之,几乎 linux 内核中任何一个部分都可以被构建成一个可加载模块。 4 | 5 | 我们需要认识到 Slackware 将为您自动处理大多数模块的加载。当您的系统启动时,`udevd` 已经启动并开始查找您的系统硬件。对于找到的每个设备,它都会自动加载适当的内核模块并在 `/dev` 下创建一个设备节点(device node)。这通常意味着你将不需要自己手动加载任何模块就可以使用您的计算机,但是有时候手动加载也是必要的。 6 | 7 | 那么,我们该如何知道什么模块当前加载我们的计算机上以及我们如何加载和卸载它们?幸运的是我们拥有一套完整的处理这个问题的工具。正如你可能已经猜到的那样,列出模块的工具是 `lsmod` 。 8 | 9 | ``` 10 | darkstar:~# lsmod 11 | Module Size Used by 12 | nls_utf8 1952 1 13 | cifs 240600 2 14 | i915 168584 2 15 | drm 168128 3 i915 16 | i2c_algo_bit 6468 1 i915 17 | tun 12740 1 18 | ... many more lines ommitted ... 19 | ``` 20 | 21 | 除了向您展示哪些模块被加载外,它还展示了每个模块的大小并告诉你有哪些其他模块正在使用这个模块。 22 | 23 | 我们有两个负责加载模块的应用程序:`insmod` 和 `modprobe` 。它们两个都可以加载模块并且报告任何错误(例如加载了一个系统中不存在的设备的模块),但我们首选 `modprobe`,因为它可以加载任何模块的依赖关系。这两个应用程序中的任何一个都可以被直接使用。 24 | 25 | ``` 26 | darkstar:~# insmod ext3 27 | darkstar:~# modprobe ext4 28 | darkstar:~# lsmod | grep ext 29 | ext4 239928 1 30 | jbd2 59088 1 ext4 31 | crc16 1984 1 ext4 32 | ext3 139408 0 33 | jbd 48520 1 ext3 34 | mbcache 8068 2 ext4,ext3 35 | ``` 36 | 37 | 移除一个模块是一个棘手的过程,这里我们也有两个工具来移除模块:`rmmod` 和 `modprobe` 。使用 `modprobe` 的 `-r` 参数可以移除一个模块。 38 | 39 | ``` 40 | darkstar:~# rmmod ext3 41 | darkstar:~# modprobe -r ext4 42 | darkstar:~# lsmod | grep ext 43 | ``` 44 | -------------------------------------------------------------------------------- /chapter_14/Automatic_Configuration_with_rc.inet1.conf.md: -------------------------------------------------------------------------------- 1 | ### 使用 rc.inet1.conf 自动配置网络 2 | 3 | 手动配置的接口是有一个重要的技能,但它很枯燥。没有人会在每次系统启动的时候手动设置自己的互联网连接。更重要的是,你不是每次启动机器时都可以动硬件连接,Slackware 的可以很容易地自动在系统启动时与 `/etc/rc.d/rc.inet1.conf` 配置以太网卡和无线网卡。现在,我们将专注于有线网络。下一章将讨论各种无线方案。 4 | 5 | `rc.inet1.conf` 是一个非常强大的配置文件,可在 Slackware 启动时自动配置大部分网卡。该文件自带了很多有用的说明,更多详细的用法可以参考它的使用手册页。首先,我们将看看一些我个人电脑上使用的选项。 6 | 7 | ``` 8 | # Config information for eth0 9 | IPADDR[0]="192.168.1.250" 10 | NETMASK[0]="255.255.255.0" 11 | USE_DHCP[0]="" 12 | DHCP_HOSTNAME[0]="" 13 | 14 | # Default gateway address 15 | GATEWAY="192.168.1.254" 16 | ``` 17 | 18 | 这表示大部分的所必需的信息到单个以太网控制器上配置一个静态 IP 地址。通常用 `netconfig` 将这些值填入为您在单个以太网设备。如果你的计算机里有多个网卡的机器并且都要在开机时自动启动,那么你就需要手动编辑或以同样的方式添加附加选项到该文件。首先,让我们熟悉下基本配置。 19 | 20 | 你可能已经猜到了,`IPADDR[n]` 是第 n 个网卡的互联网协议(IP)地址。通常,`n` 对应为 `eth0`,`eth1` 等等,但不绝对。您可以用 `IFNAME[N]` 这样的变量指定这些不同的网络控制器的配置值,但我们会保留到 [第 15 章、无线网络](../chapter_15/README.md) 去讨论,因为它更普遍适用于无线网络控制器。 21 | 22 | 同样地,`NETMASK[n]` 是网络控制器子网掩码。如果这些行留空,则静态 IP 地址不会自动分配给该网络控制器。 `USE_DHCP[N]` 变量告诉 Slackware 的使用 DHCP 配置接口。 `DHCP_HOSTNAME[n]` 已经很少使用了,但某些 DHCP 服务器要求有这个值。如果需要,它必须被设置为有效的主机名。最后,我们来到了 `GATEWAY` 变量。实际上它出现的位置应该比在我的实例文件中出现的位置低,它控制默认使用哪个网关。你可能会奇怪,为什么没有 `GATEWAY[n]` 变量。这个问题的答案就在于互联网协议如何工作的。我不会去深入的讨论这个问题,但我只想说,一台电脑不管连了多少个网卡接口,永远都只有一个默认路由。 23 | 24 | 如果您需要使用静态 IP 地址,你就必须获得一个唯一的静态 IP 地址和子网掩码,以及默认网关地址,并输入到这个文件里。在 `rc.inet1.conf` 中没有配置 DNS 信息的地方,因此 DNS 服务器将手动写入 `resolv.conf`,这在 `手动配置` 一节中讨论过。当然,如果你使用 `netconfig`,程序会自动帮你处理。现在,让我们来看看我的电脑上的另一个接口。 25 | 26 | ``` 27 | # Config information for eth1: 28 | IPADDR[1]="" 29 | NETMASK[1]="" 30 | USE_DHCP[1]="YES" 31 | DHCP_HOSTNAME[1]="" 32 | ``` 33 | 34 | 在这里,我告诉 Slackware 使用 DHCP 配置 `eth1` 。使用 DHCP 时我并不需要设置 `IPADDR[1]` 或 `NETMASK [1]`(事实上,它们即使设置了也会被忽略)。Slackware 会随着计算机启动去联系 DHCP 服务器。 35 | -------------------------------------------------------------------------------- /chapter_16/Mail_Clients/mailx.md: -------------------------------------------------------------------------------- 1 | #### mailx 2 | 3 | 基本上,有上面两个邮件客户端就足够了。但是如果你只是想要一个没有菜单的邮件客户端怎么办呢?mailx 可以满足你。 4 | 5 | `mailx` 基于伯克利邮件应用(Berkeley Mail application),支持一个和 AT&T 的第一版 UNIX 同时出现的 `mail` 命令。它可以交互式或非交互式使用。 6 | 7 | `mailx` 从你计算机的邮件池(mail spool )中读取邮件并显示一个包含了发送者、主题、状态和大小的列表,然后给用户一个交互式的提示。事实上,如果你在安装完 Slackware 后马上就查看了 Pat Volkerding 发给你的欢迎邮件,你也许会对这个提示感到很亲切。 8 | 9 | ``` 10 | darkstar:~# mailx 11 | Heirloom mailx version 12.4 7/29/08. Type ? for help. 12 | "/var/spool/mail/root": 2 messages 2 new 13 | >N 1 To root Thu Mar 10 23:33 52/1902 Register with the Linux counter project 14 | N 2 To root Thu Mar 10 23:35 321/15417 Welcome to Linux (Slackware 14.0)! 15 | ?; 16 | ``` 17 | 18 | 输入提示中消息的序号来阅读消息,然后这条消息就会被 `more` 显示出来。回车查看下一页,一旦到达了消息结尾,按 `q` 可以回到提示列表,或者按回车阅读下一条消息。 19 | 20 | 在提示中输入 `?` 可以查看可用的命令。使用提供的命令,你可以查看邮件池中的邮件头或者执行回复、删除、保存和其他常见的邮件操作。 21 | 22 | `mailx` 配合脚本使用会更强大。要查看所有 `mailx` 的选项,请参考 man 手册。简单的邮件发送只需要命令名字后边跟上目标地址: 23 | 24 | ``` 25 | darkstar:~$ mailx bob@example.com 26 | ``` 27 | 28 | 发送命令后,会出现一个交互式的提示,你需要在里面写上主题,消息主体和结束字符(空行上的一个英文句号)。 29 | 30 | 然而,`mailx` 也可以在无人干预下使用。一般来说,你可以假定任何以交互方式为 `mailx` 指定的属性也可以在脚本中以非交互方式指定。 31 | 32 | ``` 33 | darkstar:~$ mailx -n -s "Test message" bob@example.com < ~/message.txt 34 | ``` 35 | 36 | 在上面的例子中,不需要人为干预,文件 `message.txt` 的内容就被当作消息主体发送给了指定接收者。 37 | 38 | 在某人自己的计算机(localhost)或者网络中,以这种方式发送邮件是完全可能的。但在因特网上想这么做则需要额外的步骤。当然,最值得注意的变化就是 SMTP 服务器承担了传送邮件的任务,在邮件命令中可以这样指定 SMTP 服务器: 39 | 40 | ``` 41 | darkstar:~$ env MAILRC=/dev/null 42 | from="bob@example.com (Bob Dobbs)" 43 | smtp=relay.example.com mail -n -s "Test message" connie@example.com < ~/message.txt 44 | ``` 45 | 46 | 这里为了覆盖系统默认值,`MAILRC` 被设置成了 `/dev/null`,SMTP 服务器和 `FROM:` 行也在这里定义。剩下的部分则和上个例子相同。 47 | 48 | 总之,`mailx` 被当作是特性最少的邮件客户端。在很大程度上确实如此,但当你想要用脚本控制提醒邮件或重要更新的消息的发送时,`mailx` 要比像 `mutt` 或者 `pine` 这种完全交互式运行的程序更加有用。 49 | -------------------------------------------------------------------------------- /chapter_02/The_setup_Program/Configure.md: -------------------------------------------------------------------------------- 1 | #### Configure 2 | 3 | 一旦所有的软件包都安装完就快接近结束了。在这一步,Slackware 会让你对新的操作系统进行配置。大多数都是可选的,不过大多数用户都需要在这里设置某些东西。取决于你安装的软件包,你可能看到的配置选项和这里不同,我们会包含一些重要的讲。 4 | 5 | 首先可能会让你制作一个启动盘。过去一般使用 1.44MB 的软盘,但是如今 Linux 内核对软盘来说太大了,所以 Slackware 提供制作一个 USB 启动盘。当然这也需要你的计算机支持从 USB 启动。如果你并不打算使用 LILO 或者其他引导方式,你应该考虑制作一个 USB 启动盘。请注意这会清除 USB 上的数据。 6 | 7 | ![](../../png/use-boot-stick.png) 8 | 9 | LILO 用于引导 Linux 内核和连接 initrd 或是 root 文件系统。没有这个,Slackware 系统可能不会成功引导。Slackware 在这里提供一些选项。“simple”是自动配置 LILO。如果你并不信任这个方法或者像详细地看一下如何配置 LILO,可以选择“expert”。 10 | 11 | LILO 是 Slackware 系统很重要的一部分,所以整个第三章就是在讲这个。如果你对 LILO 不理解可以先看第三章。 12 | 13 | ![](../../png/setup-lilo.png) 14 | 15 | > 译者注:LILO 只是可选的引导程序,Slackware 在“A”(基本系统)软件包组中同样提供了 GRUB2。 16 | 17 | 下面会让你配置并激活控制台鼠标用于图形化桌面。通过激活控制台鼠标可以方便地在 Slackware 的终端进行复制和粘贴操作。大部分用户都从前三个选项中进行选择。 18 | 19 | ![](../../png/setup-mouse.png) 20 | 21 | 下面是配置网络。如果你不想配置网络可以跳过,否则就需要给计算机提供一个主机名。如果你不清楚在做什么可以先看 [第十四章](../../chapter_14/README.md) 。 22 | 23 | 接下来会让你输入主机名、域名。主机名和域名被用来在使用了内部 DNS 服务的网络中定位计算机或者配置 `/etc/hosts` 文件。默认主机名为 `darkstar`。 24 | 25 | 有三种方法可以配置 IP 地址:分配一个静态的 IP、DHCP 或者配置环回连接。最简单的是使用 DHCP。除非你安装 Slackwar 是作为网络服务器,这样你可能需要配置静态 IP。如果选择配置静态 IP,会让你输入 IP 地址、子网掩码、网关 IP 地址。最后是确认屏幕。 26 | 27 | 网络配置结束后会进行启动服务的配置。如果你不确定可以使用默认配置,之后可以通过 `pkgtool` 修改。 28 | 29 | 之后就是设置时间和时区。 30 | 31 | ![](../../png/setup-timezone.png) 32 | 33 | 如果你之前选择安装“X”集合,可能会提示你选择一个默认的窗口管理器或者桌面环境。你在这里选择的会应用于系统上的所有用户,除非某个用于运行 `xwmconfig` 来选择一个不同的。如果你看到的选项和下面的图片不同不要惊慌。 `xwmconfig` 只提供你安装的。 34 | 35 | ![](../../png/setup-xwmconfig.png) 36 | 37 | 最后的配置是设置 root 密码。root 用户是 Linux 中的超级用户。 38 | 39 | 最后步骤结束后就可以退出 Slackware 安装器并且重启了。移除安装盘,如果你所有安装步骤都正确则会正常启动 Slackware。当你重启并进入 Slackware 系统后,你首先要做的就是新建一个用户。默认情况下,安装结束后只有 root 用户,如果使用 root 用户操作系统会有危险。 40 | 41 | 最简单的创建用户的方法就是先以 root 用户身份登录,然后输入 `adduser` 命令,详情见 [管理用户和组](../../chapter_09/Managing_Users_and_Groups.md) 章节。 42 | -------------------------------------------------------------------------------- /chapter_10/SUID_SGID_and_the_Sticky_Bit.md: -------------------------------------------------------------------------------- 1 | ### SUID、SGID 和粘滞位 2 | 3 | 权限还有一部分尚未涉及,它们就是三种特殊权限,分别是 SUID,SGID 和粘滞位。只要一个文件有这三种的其中之一,它就会有一定的特殊之处。SUID 和 SGID 影响程序运行的方式,粘滞位限制该文件的删除。这些权限也能像读写执行一样用 `chmod` 设定,但稍有不同。 4 | 5 | SUID 和 SGID 分别表示“Set User ID”和“Set Group ID”。当程序文件设置了二者之一的权限时,程序运行起来后将拥有它所有者或所属组的权限,无论执行程序的是谁。让我们来看看一个 SUID 的例子—— `passwd` 和它管理的文件: 6 | 7 | ``` 8 | darkstar:~# ls -l /usr/bin/passwd \ 9 | /etc/passwd \ 10 | /etc/shadow 11 | -rw-r--r-- 1 root root 1106 2008-06-03 22:23 /etc/passwd 12 | -rw-r----- 1 root shadow 627 2008-06-03 22:22 /etc/shadow 13 | -rws--x--x 1 root root 34844 2008-03-24 16:11 /usr/bin/passwd* 14 | ``` 15 | 16 | 注意 `passwd` 的权限,它没有 `x` 权限而是一个 `s` 权限。这代表着,`passwd` 是一个 SUID 程序,当运行它的时候,它将拥有其所有者 `root` 的权限,无论执行者是谁。只要你看看它管理的文件你就知道为什么要这么做了:`/etc/passwd` 和 `/etc/shadow` 都是除了 `root` 外不可写入的。而用户需要修改各自的信息,因此 `passwd` 必须以 `root` 身份运行来修改这些文件。 17 | 18 | 那么粘滞位又是什么意思呢?它限制某个文件的移动和删除,并且只能设置在目录上。非 `root` 用户无法移动或删除设置了粘滞位的目录下的文件,除非该用户是目标文件的所有者。基本上所有人只要有了写权限都能移动或删除文件,粘滞位限制除了其所有者(当然还有 `root`)进行这些操作。让我们看看一个“粘滞”目录的例子: 19 | 20 | ``` 21 | darkstar:~# ls -ld /tmp 22 | drwxrwxrwt 1 root root 34844 2008-03-24 16:11 /tmp 23 | ``` 24 | 25 | 作为整个系统的临时文件存放地,`/tmp` 自然要对所有人开放读写执行权限。由于每个人都有可能在某个时间段在此存放了文件,那么为什么要禁止其他用户删除就很好理解了。你能在全局权限部分的 `x` 位置看见它,不过不是 `x` 而是 `t` 。 26 | 27 | | 权限类型 | 八进制表示 | 字母表示 | 28 | | -------- | ---------- | -------- | 29 | | SUID | `4` | `s` | 30 | | SGID | `2` | `s` | 31 | | 粘滞 | `1` | `t` | 32 | 33 | > 表 10.5;SUID,SGID 和粘滞权限 34 | 35 | 使用八进制设置的时候,必须在最前方加一位来表示。比如,`/tmp` 对应的就是 `1777`,`/usr/bin/passwd` 的权限就是 `4711` 。基本上这一位都不怎么用,`chmod` 自动填充 `0` 。 36 | 37 | ``` 38 | darkstar:~# chmod 1777 /tmp 39 | darkstar:~# chmod 4711 /usr/bin/passwd 40 | ``` 41 | 42 | 字母表示稍有不同。假设这两个文件权限都是 `0000`(没有任何权限),我们应该这样设置: 43 | 44 | ``` 45 | darkstar:~# chmod ug+rwx,o+rwt /tmp 46 | darkstar:~# chmod u+rws,go+x /usr/bin/passwd 47 | ``` 48 | -------------------------------------------------------------------------------- /chapter_16/Network_Diagnostic_Tools/traceroute.md: -------------------------------------------------------------------------------- 1 | #### traceroute 2 | 3 | `traceroute(8)` 是一个方便的工具,你可以用它来了解你的数据包经过了哪些路径才到达另一台计算机的。这个工具的主要用途是判断哪些计算机离你“远”,哪些计算机离你“近”,这里的“远近”严格来讲并不是地理位置上的远近,因为你的因特网服务提供商可能会为你的数据包选择奇怪的路径。 `traceroute` 显示从你的计算机到你要连接的计算机之间的所有路由器。不幸的是,很多提供商、防火墙还有路由器屏蔽了 `traceroute`,所以你得到的信息可能并不完整。 4 | 5 | ``` 6 | darkstar:~# traceroute www.slackware.com 7 | traceroute to slackware.com (64.57.102.34), 30 hops max, 46 byte 8 | packets 9 | 1 gw.ctsmacon.com (192.168.1.254) 1.468 ms 2.045 ms 1.387 ms 10 | 2 10.0.0.1 (10.0.0.1) 7.642 ms 8.019 ms 6.006 ms 11 | 3 68.1.8.49 (68.1.8.49) 10.446 ms 9.739 ms 7.003 ms 12 | 4 68.1.8.69 (68.1.8.69) 11.564 ms 6.235 ms 7.971 ms 13 | 5 dalsbbrj01-ae0.r2.dl.cox.net (68.1.0.142) 43.859 ms 43.287 ms 44.125 ms 14 | 6 dpr1-ge-2-0-0.dallasequinix.savvis.net (204.70.204.146) 41.927 ms 58.247 ms 44.989 ms 15 | 7 cr2-tengige0-7-5-0.dallas.savvis.net (204.70.196.29) 42.577 ms 46.110 ms 43.977 ms 16 | 8 cr1-pos-0-3-3-0.losangeles.savvis.net (204.70.194.53) 78.070 ms 76.735 ms 76.145 ms 17 | 9 bpr1-ge-3-0-0.LosAngeles.savvis.net (204.70.192.222) 77.533 ms 108.328 ms 120.096 ms 18 | 10 wiltel-communications-group-inc.LosAngeles.savvis.net (208.173.55.186) 79.607 ms 76.847 ms 75.998 ms 19 | 11 tg9-4.cr01.lsancarc.integra.net (209.63.113.57) 84.789 ms 85.436 ms 85.575 ms 20 | 12 tg13-1.cr01.sntdcabl.integra.net (209.63.113.106) 87.608 ms 84.278 ms 86.922 ms 21 | 13 tg13-4.cr02.sntdcabl.integra.net (209.63.113.134) 87.284 ms 85.924 ms 86.102 ms 22 | 14 tg13-1.cr02.rcrdcauu.integra.net (209.63.114.169) 85.578 ms 85.285 ms 84.148 ms 23 | 15 209.63.99.166 (209.63.99.166) 84.515 ms 85.424 ms 85.956 ms 24 | 16 208.186.199.158 (208.186.199.158) 86.557 ms 85.822 ms 86.072 ms 25 | 17 sac-main.cwo.com (209.210.78.20) 88.105 ms 87.467 ms 87.526 ms 26 | 18 slackware.com (64.57.102.34) 85.682 ms 86.322 ms 85.594 ms 27 | ``` 28 | -------------------------------------------------------------------------------- /chapter_07/Configuring_the_X_Server.md: -------------------------------------------------------------------------------- 1 | ### 配置 X 服务器 2 | 3 | 很久以前,配置“X”是个很难又很痛苦的事情,一个不小心显示屏就崩了。现在“X”进化得更用户友好了。实际上,大多数用户根本不用自己配置“X”, Slackware 已经为你做好了简要而合适的配置。不过,仍有一些电脑不能使用自动生成的配置,需要手动调试。 4 | 5 | 很久以前,“X”的配置文件位于 `/etc/X11/xorg.conf`, 如果你创建了这个文件,“X”会遵从你的每一行设定。不过,从**X.Org 1.6.3**起,`/etc/X11/xorg.conf` 再也不是“X”运行所必需了。如果你想要修改“X”的配置,不要去改那个文件,这是不科学的做法。你应该在 `/etc/X11/xorg.conf.d/` 文件夹内创建文件放入配置。“X”启动时会自动读取这里面的每个文件,这样你就能把配置拆分成几个小文件。举个例子,这是我笔记本上的 `/etc/X11/xorg.conf.d/synaptics.conf` 文件: 6 | 7 | ``` 8 | darkstar:~$ cat /etc/X11/xorg.conf.d/synaptics.conf 9 | Section "InputDevice" 10 | Identifier "Synaptics Touchpad" 11 | Driver "synaptics" 12 | Option "SendCoreEvents" "true" 13 | Option "Device" "/dev/psaux" 14 | Option "Protocol" "auto-dev" 15 | Option "SHMConfig" "on" 16 | Option "LeftEdge" "100" 17 | Option "RightEdge" "1120" 18 | Option "TopEdge" "50" 19 | Option "BottomEdge" "310" 20 | Option "FingerLow" "25" 21 | Option "FingerHigh" "30" 22 | Option "VertScrollDelta" "20" 23 | Option "HorizScrollDelta" "50" 24 | Option "MinSpeed" "0.79" 25 | Option "MaxSpeed" "0.88" 26 | Option "AccelFactor" "0.0015" 27 | Option "TapButton1" "1" 28 | Option "TapButton2" "2" 29 | Option "TapButton3" "3" 30 | Option "MaxTapMove" "100" 31 | Option "HorizScrollDelta" "0" 32 | Option "HorizEdgeScroll" "0" 33 | Option "VertEdgeScroll" "1" 34 | Option "VertTwoFingerScroll" "0" 35 | EndSection 36 | ``` 37 | 38 | 创建这些配置文件,你就能轻松地管理“X”配置。 39 | -------------------------------------------------------------------------------- /chapter_05/Input_and_Output_Redirection.md: -------------------------------------------------------------------------------- 1 | ### 输入、输出重定向 2 | 3 | Linux 和其他类 UNIX 操作系统的一个特点就是小和相对简单的应用程序的数量,以及能够将将它们堆叠在一起来创造复杂程序的能力。这可以通过重定向一个程序的输出到另一个程序,或者通过从一个文件或者第二个程序中提取输入来做到。 4 | 5 | 一开始,我们会演示给你如何将一个程序的输出重定向到文件中。这通过 `>` 字符来实现。当 bash 看到 `>` 字符时,会将标准输出(stdout)的内容重定向到字符后面跟着的文件中。 6 | 7 | ``` 8 | darkstar:~$ echo foo 9 | foo 10 | darkstar:~$ echo foo > /tmp/bar 11 | darkstar:~$ cat /tmp/bar 12 | foo 13 | ``` 14 | 15 | 在这个例子中,我们演示了如果没有将标准输出定位到一个文件中,`echo` 会显示的内容,之后我们将其重定向到 `/tmp/bar` 文件中。如果这个文件不存在,会被创建。然后 `echo` 输出的内容就会被放在其中。如果这个文件存在,则其中的内容会被覆盖。如果你想保存这个文件中原本的内容,可以使用 `>>` 来添加输出到文件的后面。 16 | 17 | ``` 18 | darkstar:~$ echo foo 19 | foo 20 | darkstar:~$ echo foo > /tmp/bar 21 | darkstar:~$ cat /tmp/bar 22 | foo 23 | darkstar:~$ echo foo2 >> /tmp/bar 24 | darkstar:~$ cat /tmp/bar 25 | foo 26 | foo2 27 | ``` 28 | 29 | 你也可以重定向标准错误(stderr)到文件中。这有一点不同,你需要使用 `2>` 而不是 `>`(因为 bash 能重定向标准输入,标准输出和标准错误,因此需要进行区分。 `0` 表示标准输入,`1` 表示标准输出,`2` 表示标准错误。除非你指明,否则 bash 会认为 `>` 表示的是重定向到标准输出。 `1>` 表示的也是重定向到标准输出)。 30 | 31 | ``` 32 | darkstar:~$ rm bar 33 | rm: cannot remove 'bar': No such file or directory 34 | darkstar:~$ rm bar 2> /tmp/foo 35 | darkstar:~$ cat /tmp/foo 36 | rm: cannot remove 'bar': No such file or directory 37 | ``` 38 | 39 | 如果你要重定向标准输入,使用 `<` 字符,尽管这并不常用。 40 | 41 | ``` 42 | darkstar:~$ fromdos < dosfile 43 | ``` 44 | 45 | 最后你也可以将一个程序的输出重定向到另一个程序的输入。这也许是 bash 和其他 shell 最有用的特点,可以通过 `|` 字符完成。(这个字符被认为是管道符,就好像连接两个程序的管道) 46 | 47 | ``` 48 | darkstar:~$ ps auxw | grep getty 49 | root 2632 0.0 0.0 1656 532 tty2 Ss+ Feb21 0:00 /sbin/agetty 38400 tty2 linux 50 | root 3199 0.0 0.0 1656 528 tty3 Ss+ Feb15 0:00 /sbin/agetty 38400 tty3 linux 51 | root 3200 0.0 0.0 1656 532 tty4 Ss+ Feb15 0:00 /sbin/agetty 38400 tty4 linux 52 | root 3201 0.0 0.0 1656 532 tty5 Ss+ Feb15 0:00 /sbin/agetty 38400 tty5 linux 53 | root 3202 0.0 0.0 1660 536 tty6 Ss+ Feb15 0:00 /sbin/agetty 38400 tty6 linux 54 | ``` 55 | -------------------------------------------------------------------------------- /chapter_06/top.md: -------------------------------------------------------------------------------- 1 | ### top 2 | 3 | 到目前为止,我们学习了如何查看当前活跃的进程,但是假如我们想监视系统一段时间呢?`top` 按照一定顺序显示你的系统上的进程,包括它们的相关信息。默认情况下,进程按照他们的 CPU 占用率排序且每 3 秒更新一次。 4 | 5 | ``` 6 | darkstar:~$ top 7 | top - 16:44:15 up 26 days, 5:53, 5 users, load average: 0.08, 0.03, 0.03 8 | Tasks: 122 total, 1 running, 119 sleeping, 0 stopped, 2 zombie 9 | Cpu(s): 3.4%us, 0.7%sy, 0.0%ni, 95.5%id, 0.1%wa, 0.0%hi, 0.2%si, 0.0%st 10 | Mem: 3058360k total, 2853780k used, 204580k free, 154956k buffers 11 | Swap: 0k total, 0k used, 0k free, 2082652k cached 12 | 13 | PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 14 | 1 root 20 0 3928 632 544 S 0 0.0 0:00.99 init 15 | 2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd 16 | 3 root RT -5 0 0 0 S 0 0.0 0:00.82 migration/0 17 | 4 root 15 -5 0 0 0 S 0 0.0 0:00.01 ksoftirqd/0 18 | 7 root 15 -5 0 0 0 S 0 0.0 0:11.22 events/0 19 | 9 root 15 -5 0 0 0 S 0 0.0 0:01.19 work_on_cpu/0 20 | 11 root 15 -5 0 0 0 S 0 0.0 0:00.01 khelper 21 | 102 root 15 -5 0 0 0 S 0 0.0 0:02.04 kblockd/0 22 | 105 root 15 -5 0 0 0 S 0 0.0 1:20.08 kacpid 23 | 106 root 15 -5 0 0 0 S 0 0.0 0:01.92 kacpi_notify 24 | 175 root 15 -5 0 0 0 S 0 0.0 0:00.00 ata/0 25 | 177 root 15 -5 0 0 0 S 0 0.0 0:00.00 ata_aux 26 | 178 root 15 -5 0 0 0 S 0 0.0 0:00.00 ksuspend_usbd 27 | 184 root 15 -5 0 0 0 S 0 0.0 0:00.02 khubd 28 | 187 root 15 -5 0 0 0 S 0 0.0 0:00.00 kseriod 29 | 242 root 20 0 0 0 0 S 0 0.0 0:03.37 pdflush 30 | 243 root 15 -5 0 0 0 S 0 0.0 0:02.65 kswapd0 31 | ``` 32 | 33 | man 页面包含了如何与 `top` 进行交互的详细帮助,比如改变延迟时间,进程显示的顺序,甚至是如何在 `top` 里立刻结束进程。 34 | -------------------------------------------------------------------------------- /chapter_15/Wifi_Protected_Access/rc.inet1.conf_revisited.md: -------------------------------------------------------------------------------- 1 | #### 再看 rc.inet1.conf 2 | 3 | `rc.inet1.conf`:欢迎回来。让我们回想一下 [第十四章,网络](../../chapter_14/README.md) 中我们使用了这个文件使得 Slackware 启动时让它自动配置网卡。现在,我们使用它来配置 wifi。 4 | 5 | > ##### 注意 6 | > 7 | > 如果你使用的是 WPA2,你需要首先配置好 `wpa_supplicant.conf` 。 8 | 9 | 还记得每个网卡都有个与变量配套,用来标识变量的名称或数字吗?这对无线网卡依然成立,只不过由于无线网络网络的复杂性,变量更多了而已。 10 | 11 | ``` 12 | # rc.inet1.conf (excert) 13 | # ====================== 14 | ## Example config information for wlan0. Uncomment the lines you need and fill 15 | ## in your info. (You may not need all of these for your wireless network) 16 | IFNAME[4]="wlan0" 17 | IPADDR[4]="" 18 | NETMASK[4]="" 19 | USE_DHCP[4]="yes" 20 | #DHCP_HOSTNAME[4]="icculus-wireless" 21 | #DHCP_KEEPRESOLV[4]="yes" 22 | #DHCP_KEEPNTP[4]="yes" 23 | #DHCP_KEEPGW[4]="yes" 24 | #DHCP_IPADDR[4]="" 25 | WLAN_ESSID[4]="nest" 26 | #WLAN_MODE[4]=Managed 27 | #WLAN_RATE[4]="54M auto" 28 | #WLAN_CHANNEL[4]="auto" 29 | #WLAN_KEY[4]="D5AD1F04ACF048EC2D0B1C80C7" 30 | #WLAN_IWPRIV[4]="set AuthMode=WPAPSK | \ 31 | # set EncrypType=TKIP | \ 32 | # set WPAPSK=96389dc66eaf7e6efd5b5523ae43c7925ff4df2f8b7099495192d44a774fda16" 33 | WLAN_WPA[4]="wpa_supplicant" 34 | #WLAN_WPADRIVER[4]="ndiswrapper" 35 | ``` 36 | 37 | 党我们讨论有线以太网的时候,与数字 `n` 配套的是 `ethn` 中每个变量里的 `n` 。然而,对无线网不成立。注意 `IFNAME[4]` 有个值为 `wlan0`(无线网卡有个除了 `ethn` 以外的名字很正常)。当启动脚本读取 `rc.inet1.conf` 时,Slackware 会将这些配置应用到 `wlan0` 网卡而不是(可能不存在的)`eth4` 网卡上。其他许多选项同理。IP 地址的配置要与 [第十四章,网络](../../chapter_14/README.md) 里讲的有线网卡配置方式完全一样。不过,还有些选项需要在下面进行解释。 38 | 39 | `WLAN_ESSID[n]` 和 `WLAN_CHANNEL[n]` 正如其名,分别表示 ESSID 和使用的频率。 `WLAN_MODE[n]` 可是 `managed` 或 `ad-hoc` 。连接到无线接入点的人需要使用 `managed` 模式。 `WLAN_KEY[n]` 是要使用的 WEP 密钥(如果你不得不使用 WEP 的话)。 `WLAN_IWPRIV[n]` 相当复杂,它设置了其他变量的值。 `WLAN_IWPRIV[n]` 是为 WPA2 网络准备的,在这里你告诉 Slackware 你所使用的 WPA2 连接的的认证模式,加密类型,密钥。请注意 `WLAN_KEY[n]` 和 `WLAN_IWPRIV[n]` 是相互独立的,在同一个接口上你不可能两个都用。如果你成功配置了以上项目,系统启动时 Slackware 就会尝试连接至你的无线网络。 40 | 41 | 等等,还有事没做!如果我要连接多个无线网怎么办?我平时带笔记本去上班和去学校,一旦进入无线网覆盖范围内就要马上配置以无缝切换,如果这么干的话就太麻烦了。对,你想的没错,有更方便的工具。 42 | -------------------------------------------------------------------------------- /chapter_12/vi_Cheat_Sheet.md: -------------------------------------------------------------------------------- 1 | ### vi 小纪 2 | 3 | 因为 vi 较难上手,所以我准备了一份在你入门之前对你都有帮助的小表格。 4 | 5 | | 命令 | 动作 | 6 | | --------------- | -------------------------------------------------- | 7 | | `h` | 光标左移一个字符 | 8 | | `j` | 光标下移一行 | 9 | | `k` | 光标上移一行 | 10 | | `l` | 光标右移一个字符 | 11 | | `10j` | 光标下移 10 行 | 12 | | `G` | 移动到文件尾 | 13 | | `^` | 移动到行首 | 14 | | `$` | 移动到行末 | 15 | | `dd` | 删除光标所在行(并存入复制缓冲区) | 16 | | `dd` | 删除光标所在行及其后四行(并存入复制缓冲区) | 17 | | `sw` | 删除光标所在单词(并存入复制缓冲区) | 18 | | `5dw` | 删除光标所在单词及其后四个单词(并存入复制缓冲区) | 19 | | `yy` | 将光标所在行存入复制缓冲区 | 20 | | `yw` | 将光标所在单词存入复制缓冲区 | 21 | | `5yw` | 将光标所在单词及其后四个单词存入复制缓冲区 | 22 | | `p` | 将复制缓冲区的内容插入倒光标位置之后 | 23 | | `P` | 将复制缓冲区的内容插入倒光标位置之前 | 24 | | `r` | 替换光标所在字符 | 25 | | `R` | 替换光标所在字符及其后若干字符 | 26 | | `x` | 删除光标所在字符 | 27 | | `X` | 删除光标所在字符的上一个字符 | 28 | | `u` | 撤销上一次操作 | 29 | | `:s/old/new/g` | 将当前行所有的 `old` 替换为 `new` | 30 | | `:%s/old/new/g` | 将当前行所有的 `old` 替换为 `new` | 31 | | `/asdf` | 定位到下一处 `asdf` 所在位置 | 32 | | `:q` | 退出 vi | 33 | | `:w` | 保存当前文件 | 34 | | `:w file` | 保存当前文件到 `file` | 35 | | `:x` | 保存并退出 | 36 | 37 | > 表 12.2:vi 的指令 38 | -------------------------------------------------------------------------------- /chapter_11/Using_mount.md: -------------------------------------------------------------------------------- 1 | ### 使用 mount 指令 2 | 3 | 现在我们知道了 Linux 中可用的几种文件系统,是时候来看看怎样使用它们了。要想向一个文件系统写数据,这个文件系统必须首先被挂载。要挂载文件系统,我们可以使用 `mount(8)` 。我们首先要做的是决定文件系统挂载到哪儿。再次强调,Linux 世界中没有驱动器号。而是所有的文件系统都挂载在目录上。在你安装的 Slackware 上基本文件系统总是位于 `/` 且其它的东西总是位于 `/` 的子目录中。 `/mnt/hd` 是一个常用来挂载分区的地方,我们把它用在第一个例子中。要挂在一个文件系统,我们必须告诉 `mount` 文件系统的类型,要挂载的位置以及其他特殊的选项。 4 | 5 | ``` 6 | darkstar:~# mount -t ext3 /dev/hda3 /mnt/hd -o ro 7 | ``` 8 | 9 | 我们来解读一下。我们有一个 ext3 文件系统在 IDE 设备的第三个分区,我们想把它挂载到 `/mnt/hd` 。此外,我们把它挂载为只读,这样就不会改变它的内容了。 `-t ext3` 参数告诉 `mount` 我们用的文件系统是什么类型,在本例中是 `ext3` 。这将告诉内核该使用那个驱动。通常 `mount` 会自行检查文件系统类型,但是最好还是显式的声明我们的分区类型。第二参数告诉 `mount` 我们想挂载的的位置,本例中是 `/mnt/hd` 。最后,我们必须决定要使用的参数,这些参数以 `-o` 开始声明。下面是最常用选项的简短列表。 10 | 11 | | 选项 | 描述 | 12 | | ---------- | ------------------------------ | 13 | | `ro` | 只读 | 14 | | `rw` | 读写(默认值) | 15 | | `uid` | 拥有此文件系统内容的用户 | 16 | | `gid` | 拥有此文件系统内容的组 | 17 | | `noexec` | 阻止执行此文件系统上的任何文件 | 18 | | `defaults` | 大多数文件系统通用的默认值 | 19 | 20 | > 表 11.2:常用的挂载选项 21 | 22 | 如果这是你第一次安装 Linux,你只需要关心 `ro` 和 `rw` 选项。有个例外是当你要处理不具有 Linux 权限机制的文件系统时,比如 vfat 或者 NTFS,你需要使用 `uid` 或 `gid` 选项来确保非 root 用户能够访问这些文件系统的内容。 23 | 24 | ``` 25 | darkstar:~# mount -t vfat /dev/hda4 /mnt/hd -o uid=alan 26 | ``` 27 | 28 | 但是我们不想每次加载 CD 时都告诉 `mount` 是什么文件系统,用什么选项,这会很烦。幸好有个简单的办法,`/etc/fstab` 这个文件包含了安装器为你设置的所有文件系统的信息,你也可以向里面添加东西。 `fstab(5)` 看起来是一个包含了设备、文件系统以及可选参数的简单表格。我们来看看。 29 | 30 | ``` 31 | darkstar:~# cat /etc/fstab 32 | /dev/hda1 / reiserfs defaults 1 1 33 | /dev/hda2 /home reiserfs defaults 1 2 34 | /dev/hda3 swap swap defaults 0 0 35 | /dev/cdrom /mnt/cdrom auto noauto,owner,ro,users 0 0 36 | /dev/fd0 /mnt/floppy auto noauto,owner 0 0 37 | devpts /dev/pts devpts gid=5,mode=620 0 0 38 | proc /proc proc defaults 0 0 39 | ``` 40 | 41 | 如果在 `fstab` 中有你的文件系统入口的话,你只需要告诉 `mount` 设备节点或者挂载位置就行了。 42 | 43 | ``` 44 | darkstar:~# mount /dev/cdrom 45 | darkstar:~# mount /home 46 | ``` 47 | 48 | 关于 `mount` 需要最后告诉你的是,你只需要运行 `mount` 而不加任何参数就能看到已经挂载的文件系统了。 49 | -------------------------------------------------------------------------------- /chapter_08/Setting_Up_a_Printer_in_CUPS.md: -------------------------------------------------------------------------------- 1 | ### 在 CUPS 中设置打印机 2 | 3 | 从这里开始,设置一个打印机只需要按照一系列的提示一步一步配置。但了解打印配置的实际工作也许能帮助你了解 CUPS 都做了什么。 4 | 5 | `/etc/cups/printers.conf` 文件是由你的计算机能访问的打印设备的详细定义构成,其中标记了一个默认设备。如果你想手动编辑这个文件,你需要先停止 `cupsd` 守护进程。 6 | 7 | 在文件中,一个典型的条目看起来就像这样: 8 | 9 | ``` 10 | 11 | Info Ricoh 1060 12 | Location Downstairs 13 | MakeModel Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.6 14 | DeviceURI lpd://192.168.4.8 15 | State Idle 16 | StateTime 1316011347 17 | Type 12308 18 | Filter application/vnd.cups-raw 0 - 19 | Filter application/vnd.cups-raster 100 rastertogutenprint.5.2 20 | # standard-ish stuff below here 21 | Accepting Yes 22 | Shared No 23 | JobSheets none none 24 | QuotaPeriod 0 25 | PageLimit 0 26 | KLimit 0 27 | OpPolicy default 28 | ErrorPolicy stop-printer 29 | 30 | ``` 31 | 32 | 本例中,我们的打印机名称是 `r1060`,便于阅读的标记名叫 Ricoh 1060。 33 | 34 | 我们可以使用 `lpinfo` 获取型号信息,这个命令列出了你系统上所有可用的打印驱动。所以,如果你知道你的系统有一台*Ricoh 1060*设备并希望输出它,那么你可以以 root 权限发出命令: 35 | 36 | ``` 37 | darkstar:~# lpinfo -m | grep 1060 38 | ``` 39 | 40 | 此命令列出了所有已安装的驱动后,使用 grep 查找有字符串 `1060` 的行: 41 | 42 | ``` 43 | gutenprint.5.2://brother-hl-1060/expert Brother HL-1060 - CUPS+Gutenprint v5.2.6 44 | gutenprint.5.2://ricoh-afc_1060/expert Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.6 45 | ``` 46 | 47 | 型号信息是结果的后半部分。在这个输出中,型号是*Ricoh Aficio 1060 - CUPS+Gutenprint V5.2.6*。 48 | 49 | 访问打印机至关重要的入口是设备 URI(统一资源标识符),或者是网络地址,或物理地址,如 USB 端口,通过这些东西使设备能被找到。在这个例子中,我们使用设备 URI 是 [lpd://192.168.4.8](lpd://192.168.4.8),`lpd://` 开头是因为我们要使用 LPD 协议将数据发送到打印机。 50 | 51 | 到现在,你应该明白了你真正在配置的是什么。你现在可以使用更普遍、更容易的方式从浏览器访问配置工具来做这些事。 52 | 53 | 在 CUPS 的界面中,选择管理标签,选择“添加打印机”。在这一步你应该会被要求输入管理员密码以授权。 54 | 55 | 然后,你将会被要求在列表中为你的打印机选择一个打印机接口和协议。在大多情况下,你的打印机应使用 LPD/LPR 协议(除非你知道你的打印机需要其他的协议)。 56 | 57 | 注意,如果你的打印机已经被接入了你的计算机,并且已启动,你应该能看到它被作为本地打印机列出来。 58 | 59 | 如果你的打印机是联网的,下一个界面将会询问你打印机的地址。请使用 `lpd://` 协议,输入你打印机的 IP 地址。如果你不知道打印机的 IP 地址,你可能需要查看打印机的设置,或者从路由器中确认它的地址。 60 | 61 | 无论你的打印机通过 USB 还是网络连接,下一个界面都会询问你关于打印机可读性(human-readable)的细节。这仅仅是作为您的参考。然后,输入您打印机的名称(通常是型号)和描述(如果您不止有一个打印机的话),还有位置(放在在哪里)。 62 | 63 | 在下一个界面,你需要为 CUPS 选择打印机驱动。如果你的打印机是 PostScript 打印机(大多数激光打印机都是),那么你的打印机只需要一个 PPD 文件。如果你的打印机不是 PostScript 打印机或者有特殊功能需要额外的驱动,那么你需要选择你打印机的制造商,然后你将会看到可用驱动程序的列表,在这选择合适的驱动程序。 64 | 65 | 现在,你的打印机已经安装完成并被设置为你所有应用程序的默认打印设备。 66 | -------------------------------------------------------------------------------- /chapter_17/Installing_Removing_and_Upgrading_Packages.md: -------------------------------------------------------------------------------- 1 | ### 软件包的安装、移除和升级 2 | 3 | `pkgtool` 很方便,但 `installpkg(8)` 更合适处理一些不常做的事,比如要安装一个单独的包,或者要安装一整个硬盘的包,又或者想用脚本控制安装过程等等。像所有的 Slackware 包管理工具一样, `installpkg` 不会自作聪明,只会乖乖的照吩咐办事。来看看 `installpkg` 最基本的用法:告诉 `installpkg` 要安装哪些包,它就会毫不犹豫地安装这些包。 4 | 5 | ``` 6 | darkstar:~# installpkg blackbox-0.70.1-i486-2.txz 7 | Verifying package blackbox-0.70.1-i486-2.txz. 8 | Installing package blackbox-0.70.1-i486-2.txz: 9 | PACKAGE DESCRIPTION: 10 | # blackbox (Blackbox window manager) 11 | # 12 | # Blackbox is that fast, light window manager you have been looking for 13 | # without all those annoying library dependencies. 14 | # 15 | # Also included in this package is the bbkeys utility for controlling 16 | # keyboard shortcut commands from within Blackbox. 17 | # 18 | # The Blackbox home page is http://blackboxwm.sourceforge.net 19 | # 20 | Package blackbox-0.70.1-i486-2.txz installed. 21 | ``` 22 | 23 | 借助于 shell 通配符,还可以一下子安装很多个包。要从一个已挂载的光盘中安装所有 N 系列的包,只需要这么做: 24 | 25 | ``` 26 | darkstar:~# installpkg /mnt/cdrom/slackware/n/*.txz 27 | ``` 28 | 29 | 不论何时,都可以查看 `/var/log/packages` 目录来了解当前系统中安装了哪些包和它们的版本。用 `cat` 命令可以显示一个包的内容,包括它的大小,它是做什么的,它在哪里安装了哪些文件: 30 | 31 | ``` 32 | darkstar:~# cat /var/log/packages/foo-1.0-x86_64.txz 33 | ``` 34 | 35 | 移除包和安装包一样简单。也许和你想的一样,移除包的命令是 `removepkg(8)` 。告诉 `removepkg` 要移除哪些包,它会在软件包数据库中检查这些包的内容,给出一个警告,然后移除这些包中所有的文件和目录。如果要移除的文件属于多个包共同拥有,该文件不会被删除,如果一个目录中有其他文件,这个目录不会被删除。因此,移除一个包会比安装它更费时间。 36 | 37 | ``` 38 | darkstar:~# removepkg blackbox-0.70.1-i486-2.txz 39 | ``` 40 | 41 | 最后,升级包也是那么简单,你一定猜到了,用 `upgradepkg(8)` 。 `upgradepkg` 先安装新软件包,再移除旧软件包留下的所有文件和目录。要注意的是 `upgradepkg` 不会检查已安装包的版本是不是比“新”软件包的版本还要高,有了这一点,`upgradepkg` 也可以用来降级软件包。 42 | 43 | ``` 44 | darkstar:~# upgradepkg blackbox-0.70.1-i486-2.txz 45 | 46 | +============================================================================== 47 | | Upgrading blackbox-0.65.0-x86_64-4 package using 48 | ./blackbox-0.70.1-i486-2.txz 49 | +============================================================================== 50 | 51 | Pre-installing package blackbox-0.70.1-i486-2... 52 | 53 | Removing package 54 | /var/log/packages/blackbox-0.65.0-x86_64-4-upgraded-2010-02-23,16:50:51... 55 | --> Deleting symlink /usr/share/blackbox/nls/POSIX 56 | --> Deleting symlink /usr/share/blackbox/nls/US_ASCII 57 | --> Deleting symlink /usr/share/blackbox/nls/de 58 | --> Deleting symlink /usr/share/blackbox/nls/en 59 | --> Deleting symlink /usr/share/blackbox/nls/en_GB 60 | ... 61 | Package blackbox-0.65.0-x86_64-4 upgraded with new package 62 | ./blackbox-0.70.1-i486-2.txz. 63 | ``` 64 | 65 | 以上所有工具都可以添加很多有用的参数。比如,向 `installpkg` 添加 `--root` 参数可以把包安装在任何目录中。 `--dry-run` 参数可以命令 `upgradepkg` 在不对系统做任何改变的情况下显示它要做的事。更多细节请参考 man 手册。 66 | -------------------------------------------------------------------------------- /chapter_02/Booting_the_Installer.md: -------------------------------------------------------------------------------- 1 | ### 从安装介质启动 2 | 3 | 从安装介质启动意味着将 Slackware 的光盘放入光驱中然后启动。你可能需要进入 BIOS 然后选择从光驱启动。一些厂商允许你在启动界面按特殊的按键进入启动选项的选择(例如 `F12`)。因为不同的厂商这个特殊的按键是不一样的,所以在这里没有办法统一说明,但是方法都是一样的。 4 | 5 | 一旦你的电脑从光驱启动,你会看到屏幕上会让你输入一些特殊的内核参数。这里是允许你进入急救模式的。某些系统可能需要特殊的内核参数才能引导,不过这是极少数的情况。大部分的用户可以直接输入回车键进入引导。 6 | 7 | ``` 8 | Welcome to Slackware version 14.0 (Linux kernel 3.2.27)! 9 | 10 | If you need to pass extra parameters to the kernel, enter them at the prompt 11 | below after the name of the kernel to boot (huge.s etc). 12 | 13 | In a pinch, you can boot your system from here with a command like: 14 | 15 | boot: huge.s root=/dev/sda1 rdinit= ro 16 | 17 | In the example above, /dev/sda1 is the / Linux partition. 18 | 19 | To test your memory with memtest86+, enter memtest on the boot line below. 20 | 21 | This prompt is just for entering extra parameters. If you don't need to enter any parameters, hit ENTER to boot the default kernel "huge.s" or press [F2] for a listing of more kernel choices. 22 | ``` 23 | 24 | 在输入回车键后可以看到一大段的信息,不要紧张这是正常现象。这些文本是引导时由内核生成的,用来发现计算机的硬件以及载入安装程序。如果你感兴趣你可以在之后通过 `dmesg` 命令查看。这些信息对排查可能有的硬件问题很重要。一旦内核完成了硬件发现过程,这些信息就会停下来,然后你会在屏幕上看到载入非英式键盘的选项: 25 | 26 | ``` 27 |