├── logo.jpg ├── pic ├── ppid.gif ├── boot-1.jpg ├── boot-3.jpg ├── cmd_1.gif ├── command.gif ├── cover.jpg ├── dac_mac.jpg ├── dir_3.png ├── dirtree.gif ├── grub-06.jpg ├── grub2-1.jpg ├── grub2-2.jpg ├── grub2-3.jpg ├── grub2-4.jpg ├── grub2-5.jpg ├── inode.jpg ├── library.gif ├── loader.gif ├── newgrp.gif ├── os_01.gif ├── pam-1.gif ├── pam-2.gif ├── pe_vg.gif ├── raid0.gif ├── raid1+0.jpg ├── raid1.gif ├── raid5.gif ├── testing.jpg ├── var_01.gif ├── var_02.gif ├── word_01.gif ├── yum-01.gif ├── abprogram.gif ├── compiler.gif ├── connect02.jpg ├── find_time.gif ├── kernel-01.jpg ├── ldconfig.gif ├── logrotate.gif ├── number_01.gif ├── process_1.gif ├── sata_pin.jpg ├── selinux_1.gif ├── selinux_3.jpg ├── snapshot.gif ├── soft_hard.gif ├── x_ser_cli.gif ├── 0320bash_1.jpg ├── 0320bash_3.png ├── 0320bash_5.png ├── Disktructure.jpg ├── asus_z97_ar.png ├── centos7_01.jpg ├── centos7_02.jpg ├── centos7_03.jpg ├── centos7_04.jpg ├── centos7_05.jpg ├── centos7_06.jpg ├── centos7_07.jpg ├── centos7_08.jpg ├── centos7_09.jpg ├── centos7_10.jpg ├── centos7_11.jpg ├── centos7_12.jpg ├── centos7_13.jpg ├── centos7_14.jpg ├── centos7_15.jpg ├── centos7_16.jpg ├── centos7_17.jpg ├── centos7_18.jpg ├── centos7_19.jpg ├── centos7_20.jpg ├── centos7_21.jpg ├── centos7_22.jpg ├── centos7_23.jpg ├── centos7_24.jpg ├── centos7_25.jpg ├── centos7_26.jpg ├── centos7_27.jpg ├── centos7_28.jpg ├── centos7_29.jpg ├── centos7_30.jpg ├── centos7_31.jpg ├── centos7_32.jpg ├── centos7_33.jpg ├── centos7_34.jpg ├── centos7_35.jpg ├── centos7_36.jpg ├── centos7_37.jpg ├── centos7_38.jpg ├── centos7_39.jpg ├── centos7_info.gif ├── centos7_lvm.jpg ├── centos7_suid.gif ├── centos7_vfs.gif ├── chipset_z87.jpg ├── computer01.gif ├── computer02.gif ├── computer03.gif ├── computer07.gif ├── differential.gif ├── distribution.gif ├── filesystem-1.jpg ├── filesystem-2.jpg ├── firewall-01.jpg ├── firewall-02.jpg ├── firewall-03.jpg ├── firewall-04.jpg ├── firewall-05.jpg ├── firewall-06.jpg ├── hard_disk01.jpg ├── hard_link1.gif ├── incremental.gif ├── loader_menu.gif ├── partition-1.png ├── partition-2.png ├── partition-3.png ├── partition-4.gif ├── partition-5.gif ├── password-1.jpg ├── password-2.jpg ├── port_daemon.gif ├── pri_cpu_no.gif ├── pri_cpu_yes.gif ├── vbird_face.gif ├── vim-commands.jpg ├── vim-files-01.jpg ├── virtual_01.jpg ├── virtual_02.jpg ├── virtual_03.jpg ├── virtual_04.jpg ├── virtual_05.jpg ├── virtual_06.jpg ├── virtual_07.jpg ├── virtual_08.jpg ├── virtual_09.jpg ├── x_client_os.gif ├── xwin_test_1.gif ├── authconfig-tui.jpg ├── centos7_dump-1.gif ├── centos7_font_1.jpg ├── centos7_source.gif ├── centos7_vim-01.jpg ├── centos7_vim-02.jpg ├── computer_coms.png ├── fork-and-exec.gif ├── make_configure.gif ├── symbolic_link1.gif ├── syslog_daemon.gif ├── 0110whatislinux_2.jpg ├── centos7_bashrc_1.gif ├── centos7_dir_block.jpg ├── centos7_find_exec.gif ├── centos7_gnome_01.jpg ├── centos7_gnome_02.jpg ├── centos7_gnome_05.jpg ├── centos7_gnome_06.jpg ├── centos7_gnome_07.jpg ├── centos7_gnome_08.jpg ├── centos7_gnome_09.jpg ├── centos7_gnome_10.jpg ├── centos7_gnome_11.jpg ├── centos7_gnome_12.jpg ├── centos7_gnome_13.jpg ├── centos7_gnome_14.jpg ├── centos7_gnome_15.jpg ├── centos7_id_link.jpg ├── centos7_nvidia_1.jpg ├── centos7_nvidia_2.jpg ├── centos7_nvidia_3.jpg ├── centos7_selinux_2.jpg ├── centos7_vi-insert.jpg ├── centos7_vi-mode.gif ├── computer_driver.png ├── ext2_filesystem.jpg ├── gpt_partition_1.jpg ├── mbr_boot_sector.gif ├── multi_boot_mbr_1.jpg ├── multi_boot_mbr_2.jpg ├── multi_boot_mbr_3.jpg ├── multi_boot_mbr_4.jpg ├── multi_boot_mbr_5.jpg ├── multi_boot_mbr_6.jpg ├── program_process.gif ├── rsyslogd_server.jpg ├── source_to_binary.gif ├── centos7_non-source.gif ├── centos7_redirection.jpg ├── centos7_vi-command.jpg ├── centos7_x_login_01.jpg ├── centos7_x_login_02.jpg ├── centos7_x_login_03.jpg ├── centos7_x_login_05.jpg ├── centos7_x_login_08.jpg ├── centos7_xwin_test_2.jpg ├── centos7_xwin_test_3.jpg ├── centos7_xwin_test_4.jpg ├── 0210filepermission_1.jpg ├── 0210filepermission_3.gif ├── centos7_vi-command-2.jpg ├── centos7_vim-block-01.jpg ├── centos7_vim-block-02.jpg ├── centos7_vim-block-03.jpg ├── centos7_vim-window-01.jpg ├── centos7_vim-window-02.jpg ├── centos7_vi-command-line.jpg ├── centos7_vim-complete-01.jpg ├── osloader-flow-initramfs.jpg ├── centos7_0210filepermission_2.gif └── centos7_0210filepermission_4.jpg ├── chapter_6 ├── chapter_6.md ├── 6.7重点回顾.md ├── 6.9参考资料与延伸阅读.md ├── 6.6极重要的复习-权限与指令间的关系.md └── 6.8本章习题.md ├── chapter_8 ├── chapter_8.md ├── 8.7重点回顾.md ├── 8.9参考资料与延伸阅读.md ├── 8.8本章习题.md └── 8.1压缩文件的用途与技术.md ├── chapter_14 ├── chapter_14.md ├── 14.4重点回顾.md ├── 14.6参考资料与延伸阅读.md └── 14.5本章习题.md ├── chapter_0 ├── chapter_0.md ├── 0.6本章习题.md ├── 0.5重点回顾.md ├── 0.3数据表示方式.md └── 0.7参考资料与延伸阅读.md ├── chapter_4 ├── chapter_4.md ├── 4.6重点回顾.md ├── 4.8参考资料与延伸阅读.md ├── 4.4超简单文字编辑器-nano.md └── 4.7本章习题.md ├── chapter_16 ├── chapter_16.md ├── 16.7本章习题.md ├── 16.6重点回顾.md └── 16.8参考资料与延伸阅读.md ├── chapter_15 ├── chapter_15.md ├── 15.5重点回顾.md ├── 15.6本章习题.md └── 15.1什么是例行性工作调度.md ├── chapter_10 ├── chapter_10.md ├── 10.7重点回顾.md ├── 10.9参考资料与延伸阅读.md └── 10.8本章习题.md ├── chapter_19 ├── chapter_19.md ├── 19.5重点回顾.md ├── 19.7参考资料与延伸阅读.md ├── 19.6本章习题.md └── 19.4开机过程的问题解决.md ├── chapter_3 ├── chapter_3.md ├── 3.4重点回顾.md ├── 3.5本章习题.md ├── 3.6参考资料与延伸阅读.md └── 3.1本练习机的规划-尤其是分区参数.md ├── chapter_5 ├── chapter_5.md ├── 5.5本章习题.md ├── 5.4重点回顾.md ├── 5.6参考资料与延伸阅读.md └── 5.1使用者与群组.md ├── chapter_22 ├── chapter_22.md ├── 22.5重点回顾.md ├── 22.7参考资料与延伸阅读.md └── 22.6本章习题.md ├── chapter_7 ├── chapter_7.md ├── 7.7重点回顾.md ├── 7.9参考资料与延伸阅读.md └── 7.8本章习题.md ├── chapter_1 ├── chapter_1.md ├── 1.5重点回顾.md ├── 1.6本章习题.md └── 1.7参考资料与延伸阅读.md ├── chapter_9 ├── chapter_9.md ├── 9.5重点回顾.md ├── 9.7参考资料与延伸阅读.md ├── 9.6本章习题.md └── 9.1vi与vim.md ├── chapter_18 ├── chapter_18.md ├── 18.7本章习题.md ├── 18.6重点回顾.md └── 18.8参考资料与延伸阅读.md ├── chapter_24 ├── chapter_24.md ├── 24.6重点回顾.md ├── 24.8参考资料与延伸阅读.md ├── 24.7本章习题.md └── 24.5以最新核心版本编译CentOS7.x的核心.md ├── chapter_23 ├── chapter_23.md ├── 23.4重点回顾.md ├── 23.6参考资料与延伸阅读.md └── 23.5本章习题.md ├── chapter_13 ├── chapter_13.md ├── 13.8重点回顾.md ├── 13.10参考资料与延伸阅读.md └── 13.9本章习题.md ├── chapter_20 ├── chapter_20.md ├── 20.7重点回顾.md ├── 20.6灾难复原的考虑.md ├── 20.8本章习题.md └── 20.9参考资料与延伸阅读.md ├── chapter_12 ├── chapter_12.md ├── 12.7重点回顾.md ├── 12.6ShellScript的追踪与debug.md └── 12.8本章习题.md ├── chapter_17 ├── chapter_17.md ├── 17.6重点回顾.md ├── 17.8参考资料与延伸阅读.md └── 17.7本章习题.md ├── chapter_2 ├── chapter_2.md ├── 2.4重点回顾.md ├── 2.5本章习题.md └── 2.6参考资料与延伸阅读.md ├── chapter_11 ├── chapter_11.md ├── 11.5重点回顾.md ├── 11.7参考资料与延伸阅读.md ├── 11.3延伸正则表达式.md ├── 11.6本章习题.md └── 11.1开始之前-什么是正则表达式.md └── chapter_21 ├── chapter_21.md ├── 21.7重点回顾.md ├── 21.9参考资料与延伸阅读.md ├── 21.6检验软件正确性.md └── 21.8本章习题.md /logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/logo.jpg -------------------------------------------------------------------------------- /pic/ppid.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/ppid.gif -------------------------------------------------------------------------------- /pic/boot-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/boot-1.jpg -------------------------------------------------------------------------------- /pic/boot-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/boot-3.jpg -------------------------------------------------------------------------------- /pic/cmd_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/cmd_1.gif -------------------------------------------------------------------------------- /pic/command.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/command.gif -------------------------------------------------------------------------------- /pic/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/cover.jpg -------------------------------------------------------------------------------- /pic/dac_mac.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/dac_mac.jpg -------------------------------------------------------------------------------- /pic/dir_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/dir_3.png -------------------------------------------------------------------------------- /pic/dirtree.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/dirtree.gif -------------------------------------------------------------------------------- /pic/grub-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/grub-06.jpg -------------------------------------------------------------------------------- /pic/grub2-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/grub2-1.jpg -------------------------------------------------------------------------------- /pic/grub2-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/grub2-2.jpg -------------------------------------------------------------------------------- /pic/grub2-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/grub2-3.jpg -------------------------------------------------------------------------------- /pic/grub2-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/grub2-4.jpg -------------------------------------------------------------------------------- /pic/grub2-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/grub2-5.jpg -------------------------------------------------------------------------------- /pic/inode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/inode.jpg -------------------------------------------------------------------------------- /pic/library.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/library.gif -------------------------------------------------------------------------------- /pic/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/loader.gif -------------------------------------------------------------------------------- /pic/newgrp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/newgrp.gif -------------------------------------------------------------------------------- /pic/os_01.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/os_01.gif -------------------------------------------------------------------------------- /pic/pam-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/pam-1.gif -------------------------------------------------------------------------------- /pic/pam-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/pam-2.gif -------------------------------------------------------------------------------- /pic/pe_vg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/pe_vg.gif -------------------------------------------------------------------------------- /pic/raid0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/raid0.gif -------------------------------------------------------------------------------- /pic/raid1+0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/raid1+0.jpg -------------------------------------------------------------------------------- /pic/raid1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/raid1.gif -------------------------------------------------------------------------------- /pic/raid5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/raid5.gif -------------------------------------------------------------------------------- /pic/testing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/testing.jpg -------------------------------------------------------------------------------- /pic/var_01.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/var_01.gif -------------------------------------------------------------------------------- /pic/var_02.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/var_02.gif -------------------------------------------------------------------------------- /pic/word_01.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/word_01.gif -------------------------------------------------------------------------------- /pic/yum-01.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/yum-01.gif -------------------------------------------------------------------------------- /pic/abprogram.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/abprogram.gif -------------------------------------------------------------------------------- /pic/compiler.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/compiler.gif -------------------------------------------------------------------------------- /pic/connect02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/connect02.jpg -------------------------------------------------------------------------------- /pic/find_time.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/find_time.gif -------------------------------------------------------------------------------- /pic/kernel-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/kernel-01.jpg -------------------------------------------------------------------------------- /pic/ldconfig.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/ldconfig.gif -------------------------------------------------------------------------------- /pic/logrotate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/logrotate.gif -------------------------------------------------------------------------------- /pic/number_01.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/number_01.gif -------------------------------------------------------------------------------- /pic/process_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/process_1.gif -------------------------------------------------------------------------------- /pic/sata_pin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/sata_pin.jpg -------------------------------------------------------------------------------- /pic/selinux_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/selinux_1.gif -------------------------------------------------------------------------------- /pic/selinux_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/selinux_3.jpg -------------------------------------------------------------------------------- /pic/snapshot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/snapshot.gif -------------------------------------------------------------------------------- /pic/soft_hard.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/soft_hard.gif -------------------------------------------------------------------------------- /pic/x_ser_cli.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/x_ser_cli.gif -------------------------------------------------------------------------------- /pic/0320bash_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/0320bash_1.jpg -------------------------------------------------------------------------------- /pic/0320bash_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/0320bash_3.png -------------------------------------------------------------------------------- /pic/0320bash_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/0320bash_5.png -------------------------------------------------------------------------------- /pic/Disktructure.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/Disktructure.jpg -------------------------------------------------------------------------------- /pic/asus_z97_ar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/asus_z97_ar.png -------------------------------------------------------------------------------- /pic/centos7_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_01.jpg -------------------------------------------------------------------------------- /pic/centos7_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_02.jpg -------------------------------------------------------------------------------- /pic/centos7_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_03.jpg -------------------------------------------------------------------------------- /pic/centos7_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_04.jpg -------------------------------------------------------------------------------- /pic/centos7_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_05.jpg -------------------------------------------------------------------------------- /pic/centos7_06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_06.jpg -------------------------------------------------------------------------------- /pic/centos7_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_07.jpg -------------------------------------------------------------------------------- /pic/centos7_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_08.jpg -------------------------------------------------------------------------------- /pic/centos7_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_09.jpg -------------------------------------------------------------------------------- /pic/centos7_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_10.jpg -------------------------------------------------------------------------------- /pic/centos7_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_11.jpg -------------------------------------------------------------------------------- /pic/centos7_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_12.jpg -------------------------------------------------------------------------------- /pic/centos7_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_13.jpg -------------------------------------------------------------------------------- /pic/centos7_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_14.jpg -------------------------------------------------------------------------------- /pic/centos7_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_15.jpg -------------------------------------------------------------------------------- /pic/centos7_16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_16.jpg -------------------------------------------------------------------------------- /pic/centos7_17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_17.jpg -------------------------------------------------------------------------------- /pic/centos7_18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_18.jpg -------------------------------------------------------------------------------- /pic/centos7_19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_19.jpg -------------------------------------------------------------------------------- /pic/centos7_20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_20.jpg -------------------------------------------------------------------------------- /pic/centos7_21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_21.jpg -------------------------------------------------------------------------------- /pic/centos7_22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_22.jpg -------------------------------------------------------------------------------- /pic/centos7_23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_23.jpg -------------------------------------------------------------------------------- /pic/centos7_24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_24.jpg -------------------------------------------------------------------------------- /pic/centos7_25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_25.jpg -------------------------------------------------------------------------------- /pic/centos7_26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_26.jpg -------------------------------------------------------------------------------- /pic/centos7_27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_27.jpg -------------------------------------------------------------------------------- /pic/centos7_28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_28.jpg -------------------------------------------------------------------------------- /pic/centos7_29.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_29.jpg -------------------------------------------------------------------------------- /pic/centos7_30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_30.jpg -------------------------------------------------------------------------------- /pic/centos7_31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_31.jpg -------------------------------------------------------------------------------- /pic/centos7_32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_32.jpg -------------------------------------------------------------------------------- /pic/centos7_33.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_33.jpg -------------------------------------------------------------------------------- /pic/centos7_34.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_34.jpg -------------------------------------------------------------------------------- /pic/centos7_35.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_35.jpg -------------------------------------------------------------------------------- /pic/centos7_36.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_36.jpg -------------------------------------------------------------------------------- /pic/centos7_37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_37.jpg -------------------------------------------------------------------------------- /pic/centos7_38.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_38.jpg -------------------------------------------------------------------------------- /pic/centos7_39.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_39.jpg -------------------------------------------------------------------------------- /pic/centos7_info.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_info.gif -------------------------------------------------------------------------------- /pic/centos7_lvm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_lvm.jpg -------------------------------------------------------------------------------- /pic/centos7_suid.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_suid.gif -------------------------------------------------------------------------------- /pic/centos7_vfs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vfs.gif -------------------------------------------------------------------------------- /pic/chipset_z87.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/chipset_z87.jpg -------------------------------------------------------------------------------- /pic/computer01.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/computer01.gif -------------------------------------------------------------------------------- /pic/computer02.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/computer02.gif -------------------------------------------------------------------------------- /pic/computer03.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/computer03.gif -------------------------------------------------------------------------------- /pic/computer07.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/computer07.gif -------------------------------------------------------------------------------- /pic/differential.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/differential.gif -------------------------------------------------------------------------------- /pic/distribution.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/distribution.gif -------------------------------------------------------------------------------- /pic/filesystem-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/filesystem-1.jpg -------------------------------------------------------------------------------- /pic/filesystem-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/filesystem-2.jpg -------------------------------------------------------------------------------- /pic/firewall-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/firewall-01.jpg -------------------------------------------------------------------------------- /pic/firewall-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/firewall-02.jpg -------------------------------------------------------------------------------- /pic/firewall-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/firewall-03.jpg -------------------------------------------------------------------------------- /pic/firewall-04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/firewall-04.jpg -------------------------------------------------------------------------------- /pic/firewall-05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/firewall-05.jpg -------------------------------------------------------------------------------- /pic/firewall-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/firewall-06.jpg -------------------------------------------------------------------------------- /pic/hard_disk01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/hard_disk01.jpg -------------------------------------------------------------------------------- /pic/hard_link1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/hard_link1.gif -------------------------------------------------------------------------------- /pic/incremental.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/incremental.gif -------------------------------------------------------------------------------- /pic/loader_menu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/loader_menu.gif -------------------------------------------------------------------------------- /pic/partition-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/partition-1.png -------------------------------------------------------------------------------- /pic/partition-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/partition-2.png -------------------------------------------------------------------------------- /pic/partition-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/partition-3.png -------------------------------------------------------------------------------- /pic/partition-4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/partition-4.gif -------------------------------------------------------------------------------- /pic/partition-5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/partition-5.gif -------------------------------------------------------------------------------- /pic/password-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/password-1.jpg -------------------------------------------------------------------------------- /pic/password-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/password-2.jpg -------------------------------------------------------------------------------- /pic/port_daemon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/port_daemon.gif -------------------------------------------------------------------------------- /pic/pri_cpu_no.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/pri_cpu_no.gif -------------------------------------------------------------------------------- /pic/pri_cpu_yes.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/pri_cpu_yes.gif -------------------------------------------------------------------------------- /pic/vbird_face.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/vbird_face.gif -------------------------------------------------------------------------------- /pic/vim-commands.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/vim-commands.jpg -------------------------------------------------------------------------------- /pic/vim-files-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/vim-files-01.jpg -------------------------------------------------------------------------------- /pic/virtual_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/virtual_01.jpg -------------------------------------------------------------------------------- /pic/virtual_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/virtual_02.jpg -------------------------------------------------------------------------------- /pic/virtual_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/virtual_03.jpg -------------------------------------------------------------------------------- /pic/virtual_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/virtual_04.jpg -------------------------------------------------------------------------------- /pic/virtual_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/virtual_05.jpg -------------------------------------------------------------------------------- /pic/virtual_06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/virtual_06.jpg -------------------------------------------------------------------------------- /pic/virtual_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/virtual_07.jpg -------------------------------------------------------------------------------- /pic/virtual_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/virtual_08.jpg -------------------------------------------------------------------------------- /pic/virtual_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/virtual_09.jpg -------------------------------------------------------------------------------- /pic/x_client_os.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/x_client_os.gif -------------------------------------------------------------------------------- /pic/xwin_test_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/xwin_test_1.gif -------------------------------------------------------------------------------- /pic/authconfig-tui.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/authconfig-tui.jpg -------------------------------------------------------------------------------- /pic/centos7_dump-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_dump-1.gif -------------------------------------------------------------------------------- /pic/centos7_font_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_font_1.jpg -------------------------------------------------------------------------------- /pic/centos7_source.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_source.gif -------------------------------------------------------------------------------- /pic/centos7_vim-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vim-01.jpg -------------------------------------------------------------------------------- /pic/centos7_vim-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vim-02.jpg -------------------------------------------------------------------------------- /pic/computer_coms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/computer_coms.png -------------------------------------------------------------------------------- /pic/fork-and-exec.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/fork-and-exec.gif -------------------------------------------------------------------------------- /pic/make_configure.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/make_configure.gif -------------------------------------------------------------------------------- /pic/symbolic_link1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/symbolic_link1.gif -------------------------------------------------------------------------------- /pic/syslog_daemon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/syslog_daemon.gif -------------------------------------------------------------------------------- /pic/0110whatislinux_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/0110whatislinux_2.jpg -------------------------------------------------------------------------------- /pic/centos7_bashrc_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_bashrc_1.gif -------------------------------------------------------------------------------- /pic/centos7_dir_block.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_dir_block.jpg -------------------------------------------------------------------------------- /pic/centos7_find_exec.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_find_exec.gif -------------------------------------------------------------------------------- /pic/centos7_gnome_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_01.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_02.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_05.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_06.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_07.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_08.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_09.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_10.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_11.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_12.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_13.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_14.jpg -------------------------------------------------------------------------------- /pic/centos7_gnome_15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_gnome_15.jpg -------------------------------------------------------------------------------- /pic/centos7_id_link.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_id_link.jpg -------------------------------------------------------------------------------- /pic/centos7_nvidia_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_nvidia_1.jpg -------------------------------------------------------------------------------- /pic/centos7_nvidia_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_nvidia_2.jpg -------------------------------------------------------------------------------- /pic/centos7_nvidia_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_nvidia_3.jpg -------------------------------------------------------------------------------- /pic/centos7_selinux_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_selinux_2.jpg -------------------------------------------------------------------------------- /pic/centos7_vi-insert.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vi-insert.jpg -------------------------------------------------------------------------------- /pic/centos7_vi-mode.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vi-mode.gif -------------------------------------------------------------------------------- /pic/computer_driver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/computer_driver.png -------------------------------------------------------------------------------- /pic/ext2_filesystem.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/ext2_filesystem.jpg -------------------------------------------------------------------------------- /pic/gpt_partition_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/gpt_partition_1.jpg -------------------------------------------------------------------------------- /pic/mbr_boot_sector.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/mbr_boot_sector.gif -------------------------------------------------------------------------------- /pic/multi_boot_mbr_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/multi_boot_mbr_1.jpg -------------------------------------------------------------------------------- /pic/multi_boot_mbr_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/multi_boot_mbr_2.jpg -------------------------------------------------------------------------------- /pic/multi_boot_mbr_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/multi_boot_mbr_3.jpg -------------------------------------------------------------------------------- /pic/multi_boot_mbr_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/multi_boot_mbr_4.jpg -------------------------------------------------------------------------------- /pic/multi_boot_mbr_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/multi_boot_mbr_5.jpg -------------------------------------------------------------------------------- /pic/multi_boot_mbr_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/multi_boot_mbr_6.jpg -------------------------------------------------------------------------------- /pic/program_process.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/program_process.gif -------------------------------------------------------------------------------- /pic/rsyslogd_server.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/rsyslogd_server.jpg -------------------------------------------------------------------------------- /pic/source_to_binary.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/source_to_binary.gif -------------------------------------------------------------------------------- /pic/centos7_non-source.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_non-source.gif -------------------------------------------------------------------------------- /pic/centos7_redirection.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_redirection.jpg -------------------------------------------------------------------------------- /pic/centos7_vi-command.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vi-command.jpg -------------------------------------------------------------------------------- /pic/centos7_x_login_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_x_login_01.jpg -------------------------------------------------------------------------------- /pic/centos7_x_login_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_x_login_02.jpg -------------------------------------------------------------------------------- /pic/centos7_x_login_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_x_login_03.jpg -------------------------------------------------------------------------------- /pic/centos7_x_login_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_x_login_05.jpg -------------------------------------------------------------------------------- /pic/centos7_x_login_08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_x_login_08.jpg -------------------------------------------------------------------------------- /pic/centos7_xwin_test_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_xwin_test_2.jpg -------------------------------------------------------------------------------- /pic/centos7_xwin_test_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_xwin_test_3.jpg -------------------------------------------------------------------------------- /pic/centos7_xwin_test_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_xwin_test_4.jpg -------------------------------------------------------------------------------- /pic/0210filepermission_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/0210filepermission_1.jpg -------------------------------------------------------------------------------- /pic/0210filepermission_3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/0210filepermission_3.gif -------------------------------------------------------------------------------- /pic/centos7_vi-command-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vi-command-2.jpg -------------------------------------------------------------------------------- /pic/centos7_vim-block-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vim-block-01.jpg -------------------------------------------------------------------------------- /pic/centos7_vim-block-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vim-block-02.jpg -------------------------------------------------------------------------------- /pic/centos7_vim-block-03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vim-block-03.jpg -------------------------------------------------------------------------------- /pic/centos7_vim-window-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vim-window-01.jpg -------------------------------------------------------------------------------- /pic/centos7_vim-window-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vim-window-02.jpg -------------------------------------------------------------------------------- /pic/centos7_vi-command-line.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vi-command-line.jpg -------------------------------------------------------------------------------- /pic/centos7_vim-complete-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_vim-complete-01.jpg -------------------------------------------------------------------------------- /pic/osloader-flow-initramfs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/osloader-flow-initramfs.jpg -------------------------------------------------------------------------------- /pic/centos7_0210filepermission_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_0210filepermission_2.gif -------------------------------------------------------------------------------- /pic/centos7_0210filepermission_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inityun/vbird_linux_gitbook/HEAD/pic/centos7_0210filepermission_4.jpg -------------------------------------------------------------------------------- /chapter_6/chapter_6.md: -------------------------------------------------------------------------------- 1 | # 第六章、Linux 文件与目录管理 2 | 3 | 4 | 在前一章我们认识了Linux系统下的文件权限概念以及目录的配置说明。 在这个章节当中,我们就直接来进一步的操作与管理文件及目录吧!包括在不同的目录间变换、 创建与删除目录、创建与删除文件,还有寻找文件、查阅文件内容等等,都会在这个章节作个简单的介绍啊! -------------------------------------------------------------------------------- /chapter_8/chapter_8.md: -------------------------------------------------------------------------------- 1 | # 第八章、文件与文件系统的压缩,打包与备份 2 | 3 | 4 | 在 Linux 下面有相当多的压缩指令可以运行喔!这些压缩指令可以让我们更方便从网络上面下载容量较大的文件呢! 此外,我们知道在 Linux 下面的扩展名是没有什么很特殊的意义的,不过,针对这些压缩指令所做出来的压缩文件, 为了方便记忆,还是会有一些特殊的命名方式啦!就让我们来看看吧! -------------------------------------------------------------------------------- /chapter_14/chapter_14.md: -------------------------------------------------------------------------------- 1 | # 第十四章、磁盘配额(Quota)与进阶文件系统管理 2 | 3 | 4 | 如果您的 Linux 服务器有多个用户经常存取数据时,为了维护所有使用者在硬盘容量的公平使用,磁盘配额 (Quota) 就是一项非常有用的工具!另外,如果你的用户常常抱怨磁盘容量不够用,那么更进阶的文件系统就得要学习学习。 本章我们会介绍磁盘阵列 (RAID) 及逻辑卷轴文件系统 (LVM),这些工具都可以帮助你管理与维护使用者可用的磁盘容量喔! -------------------------------------------------------------------------------- /chapter_0/chapter_0.md: -------------------------------------------------------------------------------- 1 | # 第零章、计算机概论 2 | 3 | 由过去的经验当中,鸟哥发现到因为兴趣或生活所逼而必须要接触 Linux 的朋友,很多可能并非信息相关专业出身, 因此对于电脑软/硬件方面的概念不熟。然而操作系统这种咚咚跟硬件有相当程度的关连性, 所以,如果不了解一下计算机概论,要很快的了解 Linux 的概念是有点难度的。因此,鸟哥就自作聪明的新增一个小章节来谈谈计概啰! 因为鸟哥也不是信息相关学科出身,所以,写的不好的地方请大家多多指教啊!^\_^ -------------------------------------------------------------------------------- /chapter_4/chapter_4.md: -------------------------------------------------------------------------------- 1 | # 第四章、首次登陆与线上求助 2 | 3 | 终于可以开始使用Linux这个有趣的系统了!由于Linux系统使用了非同步的磁盘/内存数据传输模式,同时又是个多用户多任务的环境, 所以你不能随便的不正常关机,关机有一定的程序喔!错误的关机方法可能会造成磁盘数据的损毁呢! 此外,Linux有多种不同的操作方式,图形接口与命令行的操作有何不同? 我们能否在命令行取得大量的指令说明,而不需要硬背某些指令的选项与参数等等。这都是这一章要来介绍的呢! -------------------------------------------------------------------------------- /chapter_16/chapter_16.md: -------------------------------------------------------------------------------- 1 | # 第十六章、程序管理与 SELinux 初探 2 | 3 | 4 | 一个程序被载入到内存当中运行,那么在内存内的那个数据就被称为程序(process)。程序是操作系统上非常重要的概念, 所有系统上面跑的数据都会以程序的型态存在。那么系统的程序有哪些状态?不同的状态会如何影响系统的运行? 程序之间是否可以互相控管等等的,这些都是我们所必须要知道的项目。 另外与程序有关的还有 SELinux 这个加强文件存取安全性的咚咚,也必须要做个了解呢! -------------------------------------------------------------------------------- /chapter_15/chapter_15.md: -------------------------------------------------------------------------------- 1 | # 第十五章、例行性工作调度(crontab) 2 | 3 | 4 | 学习了基础篇也一阵子了,你会发现到为什么系统常常会主动的进行一些任务?这些任务到底是谁在设置工作的? 如果你想要让自己设计的备份程序可以自动的在系统下面执行,而不需要手动来启动他,又该如何处置? 这些例行的工作可能又分为“单一”工作与“循环”工作,在系统内又是哪些服务在负责? 还有还有,如果你想要每年在老婆的生日前一天就发出一封信件提醒自己不要忘记,可以办的到吗? 嘿嘿!这些种种要如何处理,就看看这一章先! -------------------------------------------------------------------------------- /chapter_10/chapter_10.md: -------------------------------------------------------------------------------- 1 | # 第十章、认识与学习BASH 2 | 3 | 4 | 在 Linux 的环境下,如果你不懂 bash 是什么,那么其他的东西就不用学了!因为前面几章我们使用终端机下达指令的方式, 就是通过 bash 的环境来处理的喔!所以说,他很重要吧!bash 的东西非常的多,包括变量的设置与使用、 bash 操作环境的创建、数据流重导向的功能,还有那好用的管线命令!好好清一清脑门,准备用功去啰~ ^\_^ 这个章节几乎是所有命令行界面 (command line) 与未来主机维护与管理的重要基础,一定要好好仔细的阅读喔! 5 | -------------------------------------------------------------------------------- /chapter_19/chapter_19.md: -------------------------------------------------------------------------------- 1 | # 第十九章、开机流程、模块管理与 Loader 2 | 3 | 4 | 系统开机其实是一项非常复杂的程序,因为核心得要侦测硬件并载入适当的驱动程序后, 接下来则必须要调用程序来准备好系统运行的环境,以让使用者能够顺利的操作整部主机系统。 如果你能够理解开机的原理,那么将有助于你在系统出问题时能够很快速的修复系统喔! 而且还能够顺利的配置多重操作系统的多重开机问题。为了多重开机的问题,你就不能不学学 grub2 这个 Linux 下面优秀的开机管理程序 (boot loader)。 而在系统运行期间,你也得要学会管理核心模块呢! -------------------------------------------------------------------------------- /chapter_3/chapter_3.md: -------------------------------------------------------------------------------- 1 | # 第三章、安装 CentOS7.x 2 | 3 | Linux distributions越作越成熟,所以在安装方面也越来越简单!虽然安装非常的简单, 但是刚刚前一章所谈到的基础认知还是需要了解的,包括MBR/GPT, partition, boot loader, mount, software的选择等等的数据。 这一章鸟哥的安装定义为“一部练习机”,所以安装的方式都是以最简单的方式来处理的。 另外,鸟哥选择的是CentOS 7.x的版本来安装的啦!在内文中,只要标题内含有(Option) 的,代表是鸟哥额外的说明,你应该看看就好,不需要实作喔!^\_^ -------------------------------------------------------------------------------- /chapter_5/chapter_5.md: -------------------------------------------------------------------------------- 1 | # 第五章、Linux 的文件权限与目录配置 2 | 3 | 4 | Linux最优秀的地方之一就在于他的多用户多任务环境。而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要了。 Linux一般将文件可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限。若管理不当,你的Linux主机将会变的很“不苏湖!@\_@”。另外,你如果首次接触Linux的话,那么, 在Linux下面这么多的目录/文件,到底每个目录/文件代表什么意义呢?下面我们就来一一介绍呢! 5 | -------------------------------------------------------------------------------- /chapter_22/chapter_22.md: -------------------------------------------------------------------------------- 1 | # 第二十二章、软件安装 RPM, SRPM 与 YUM 2 | 3 | 4 | 虽然使用源代码进行软件编译可以具有客制化的设置,但对于 Linux distribution 的发布商来说,则有软件管理不易的问题, 毕竟不是每个人都会进行源代码编译的。如果能够将软件预先在相同的硬件与操作系统上面编译好才发布的话, 不就能够让相同的 distribution 具有完全一致的软件版本吗?如果再加上简易的安装/移除/管理等机制的话, 对于软件控管就会简易的多。有这种东西吗?有的,那就是 RPM 与 YUM 这两个好用的咚咚。 既然这么好用,我们当然不能错过学习机会啰!赶紧来参详参详! -------------------------------------------------------------------------------- /chapter_7/chapter_7.md: -------------------------------------------------------------------------------- 1 | # 第七章、Linux 磁盘与文件系统管理 2 | 3 | 系统管理员很重要的任务之一就是管理好自己的磁盘文件系统,每个分区不可太大也不能太小, 太大会造成磁盘容量的浪费,太小则会产生文件无法储存的困扰。此外,我们在前面几章谈到的文件权限与属性中, 这些权限与属性分别记录在文件系统的哪个区块内?这就得要谈到 filesystem 中的 inode 与 block 了。同时,为了虚拟化与大容量磁盘, 现在的 CentOS 7 默认使用大容量性能较佳的 xfs 当默认文件系统了!这也得了解一下。 在本章我们的重点在于如何制作文件系统,包括分区、格式化与挂载等,是很重要的一个章节喔! -------------------------------------------------------------------------------- /chapter_1/chapter_1.md: -------------------------------------------------------------------------------- 1 | # 第一章、Linux是什么与如何学习 2 | 3 | 众所皆知的,Linux的核心原型是1991年由托瓦兹(Linus Torvalds)写出来的,但是托瓦兹为何可以写出Linux这个操作系统? 为什么他要选择386的计算机来开发?为什么Linux的发展可以这么迅速?又为什么Linux是免费且可以自由学习的? 以及目前为何有这么多的Linux套件版本(distributions)呢?了解这些东西后,才能够知道为何Linux可以免除专利软件之争, 并且了解到Linux为何可以同时在个人计算机与大型主机上面大放异彩! 所以,在实际进入Linux的世界前,就让我们来谈一谈这些有趣的历史故事吧! ^\_^ -------------------------------------------------------------------------------- /chapter_9/chapter_9.md: -------------------------------------------------------------------------------- 1 | # 第九章、vim 程序编辑器 2 | 3 | 4 | 系统管理员的重要工作就是得要修改与设置某些重要软件的配置文件,因此至少得要学会一种以上的命令行的文书编辑器。 在所有的 Linux distributions 上头都会有的一套文书编辑器就是 vi ,而且很多软件默认也是使用 vi 做为他们编辑的接口, 因此鸟哥建议您务必要学会使用 vi 这个正规的文书编辑器。此外,vim 是进阶版的 vi , vim 不但可以用不同颜色显示文字内容,还能够进行诸如 shell script, C program 等程序编辑功能, 你可以将 vim 视为一种程序编辑器!鸟哥也是用 vim 编辑鸟站的网页文章呢! ^\_^ -------------------------------------------------------------------------------- /chapter_18/chapter_18.md: -------------------------------------------------------------------------------- 1 | # 第十八章、认识与分析登录文件 2 | 3 | 4 | 当你的 Linux 系统出现不明原因的问题时,很多人都告诉你,你要查阅一下登录文件才能够知道系统出了什么问题了,所以说, 了解登录文件是很重要的事情呢。登录文件可以记录系统在什么时间、哪个主机、哪个服务、出现了什么讯息等信息, 这些信息也包括使用者识别数据、系统故障排除须知等信息。如果你能够善用这些登录文件信息的话,你的系统出现错误时, 你将可以在第一时间发现,而且也能够从中找到解决的方案,而不是昏头转向的乱问人呢。 此外,登录文件所记录的信息量是非常大的,要人眼分析实在很困难。此时利用 shell script 或者是其他软件提供的分析工具来处理复杂的登录文件,可以帮助你很多很多喔! -------------------------------------------------------------------------------- /chapter_24/chapter_24.md: -------------------------------------------------------------------------------- 1 | # 第二十四章、Linux 核心编译与管理 2 | 3 | 4 | 我们说的 Linux 其实指的就是核心 (kernel) 而已。这个核心控制你主机的所有硬件并提供系统所有的功能, 所以说,他重不重要啊!我们开机的时候其实就是利用开机管理程序载入这个核心文件来侦测硬件, 在核心载入适当的驱动程序后,你的系统才能够顺利的运行。现今的系统由于强调线上升级机制,因此非常不建议自订核心编译! 但是,如果你想要将你的 Linux 安装到 U盘、想要将你的 Eee PC 小笔记本安装自己的 Linux , 想让你的 Linux 可以驱动你的小家电,此时,核心编译就是相当重要的一个任务了! 这一篇比较进阶,如果你对系统移植没有兴趣的话,这一篇可以先略过喔! ^\_^ -------------------------------------------------------------------------------- /chapter_23/chapter_23.md: -------------------------------------------------------------------------------- 1 | # 第二十三章、X Window 设置介绍 2 | 3 | 4 | 在 Linux 上头的图形接口我们称之为 X Window System,简称为 X 或 X11 啰! 为何称之为系统呢?这是因为 X 窗口系统又分为 X server 与 X client ,既然是 Server/Client (主从架构) 这就表示其实 X 窗口系统是可以跨网络且跨平台的!X 窗口系统对于 Linux 来说仅是一个软件, 只是这个软件日趋重要喔!因为 Linux 是否能够在桌面电脑上面流行,与这个 X 窗口系统有关啦! 好在,目前的 X 窗口系统整合到 Linux 已经非常优秀了,而且也能够具有 3D 加速的功能, 只是,我们还是得要了解一下 X 窗口系统才好,这样如果出问题,我们才有办法处理啊! 5 | -------------------------------------------------------------------------------- /chapter_13/chapter_13.md: -------------------------------------------------------------------------------- 1 | # 第十三章、Linux 帐号管理与 ACL 权限设置 2 | 3 | 4 | 要登陆 Linux 系统一定要有帐号与密码才行,否则怎么登陆,您说是吧?不过, 不同的使用者应该要拥有不同的权限才行吧?我们还可以通过 user/group 的特殊权限设置, 来规范出不同的群组开发专案呢~在 Linux 的环境下,我们可以通过很多方式来限制使用者能够使用的系统资源, 包括 [第十章、bash] 提到的 [ulimit] 限制、还有特殊权限限制,如 [umask] 等等。 通过这些举动,我们可以规范出不同使用者的使用资源。另外,还记得系统管理员的帐号吗?对! 就是 root 。请问一下,除了 root 之外,是否可以有其他的系统管理员帐号? 为什么大家都要尽量避免使用数字体态的帐号?如何修改使用者相关的信息呢?这些我们都得要了解了解的! -------------------------------------------------------------------------------- /chapter_20/chapter_20.md: -------------------------------------------------------------------------------- 1 | # 第二十章、基础系统设置与备份策略 2 | 3 | 4 | 新的 CentOS 7 有针对不同的服务提供了相当大量的命令行设置模式,因此过去那个 setup 似乎没有什么用了! 取而代之的是许多加入了 bash-complete 提供了不少参数补全的设置工具!甚至包括网络设置也是通过这个机制哩! 我们这个小章节主要就是在介绍如何通过这些基本的指令来设置系统就是了。另外, 万一不幸你的 Linux 被骇客入侵了、或是你的 Linux 系统由于硬件关系 (不论是天灾还是人祸) 而挂掉了!这个时候,请问如何快速的回复你的系统呢?呵呵!当然啰,如果有备份数据的话, 那么回复系统所花费的时间与成本将降低相当的多!平时最好就养成备份的习惯, 以免突然间的系统损毁造成手足无措!此外,哪些文件最需要备份呢?又,备份是需要完整的备份还是仅备份重要数据即可? 嗯!确实需要考虑看看呦! -------------------------------------------------------------------------------- /chapter_12/chapter_12.md: -------------------------------------------------------------------------------- 1 | # 第十二章、学习 Shell Scripts 2 | 3 | 4 | 如果你真的很想要走信息这条路,并且想要管理好属于你的主机,那么,别说鸟哥不告诉你, 可以自动管理系统的好工具: Shell scripts!这家伙真的是得要好好学习学习的! 基本上, shell script 有点像是早期的批处理文件,亦即是将一些指令汇整起来一次执行,但是 Shell script 拥有更强大的功能,那就是他可以进行类似程序 (program) 的撰写,并且不需要经过编译 (compile) 就能够执行, 真的很方便。加上我们可通过 shell script 来简化我们日常的工作管理, 而且,整个 Linux 环境中,一些服务 (services) 的启动都是通过 shell script 的, 如果你对于 script 不了解,嘿嘿!发生问题时,可真是会求助无门喔!所以,好好的学一学他吧! -------------------------------------------------------------------------------- /chapter_17/chapter_17.md: -------------------------------------------------------------------------------- 1 | # 第十七章、认识系统服务 (daemons) 2 | 3 | 4 | 在 Unix-Like 的系统中,你会常常听到 daemon 这个字眼!那么什么是传说中的 daemon 呢?这些 daemon 放在什么地方?他的功能是什么?该如何启动这些 daemon ?又如何有效的将这些 daemon 管理妥当?此外,要如何视察这些 daemon 开了多少个 ports ?又这些 ports 要如何关闭?还有还有,晓得你系统的这些 port 各代表的是什么服务吗? 这些都是最基础需要注意的呢!尤其是在架设网站之前,这里的观念就显的更重要了。 5 | 6 | 从 CentOS 7.x 这一版之后,传统的 init 已经被舍弃,取而代之的是 systemd 这个家伙~这家伙跟之前的 init 有什么差异? 优缺点为何?如何管理不同种类的服务类型?以及如何取代原本的“执行等级”等等,很重要的改变喔! -------------------------------------------------------------------------------- /chapter_2/chapter_2.md: -------------------------------------------------------------------------------- 1 | # 第二章、主机规划与磁盘分区 2 | 3 | 事实上,要安装好一部Linux主机并不是那么简单的事情,你必须要针对distributions的特性、服务器软件的能力、 未来的升级需求、硬件扩充性需求等等来考虑,还得要知道磁盘分区、文件系统、Linux操作较频繁的目录等等, 都得要有一定程度的了解才行,所以,安装Linux并不是那么简单的工作喔! 不过,要学习Linux总得要有Linux系统存在吧?所以鸟哥在这里还是得要提前说明如何安装一部Linux练习机。 在这一章里面,鸟哥会介绍一下,在开始安装Linux之前,您应该要先思考哪些工作? 好让您后续的主机维护轻松愉快啊!此外,要了解这个章节的重要性,您至少需要了解到Linux文件系统的基本概念, 这部份初学者是不可能具备的!所以初学者在这个章节里面可能会觉得很多部份都是莫名其妙!没关系! 在您完成了后面的相关章节之后,记得要再回来这里看看如何规划主机即可! ^\_^ -------------------------------------------------------------------------------- /chapter_15/15.5重点回顾.md: -------------------------------------------------------------------------------- 1 | # 15.5 重点回顾 2 | 3 | - 系统可以通过 at 这个指令来调度单一工作的任务!“at TIME”为指令下达的方法,当 at 进入调度后, 系统执行该调度工作时,会到下达时的目录进行任务; 4 | - at 的执行必须要有 atd 服务的支持,且 /etc/at.deny 为控制是否能够执行的使用者帐号; 5 | - 通过 atq, atrm 可以查询与删除 at 的工作调度; 6 | - batch 与 at 相同,不过 batch 可在 CPU 工作负载小于 0.8 时才进行后续的工作调度; 7 | - 系统的循环例行性工作调度使用 crond 这个服务,同时利用 crontab -e 及 /etc/crontab 进行调度的安排; 8 | - crontab -e 设置项目分为六栏,“分、时、日、月、周、指令”为其设置依据; 9 | - /etc/crontab 设置分为七栏,“分、时、日、月、周、执行者、指令”为其设置依据; 10 | - anacron 配合 /etc/anacrontab 的设置,可以唤醒停机期间系统未进行的 crontab 任务! -------------------------------------------------------------------------------- /chapter_11/chapter_11.md: -------------------------------------------------------------------------------- 1 | # 第十一章、正则表达式与文件格式化处理 2 | 3 | 4 | 正则表达式 (Regular Expression, RE, 或称为常规表达式)是通过一些特殊字符的排列,用以“搜寻/取代/删除”一列或多列文字字串, 简单的说,正则表达式就是用在字串的处理上面的一项“表示式”。正则表达式并不是一个工具程序, 而是一个字串处理的标准依据,如果您想要以正则表达式的方式处理字串,就得要使用支持正则表达式的工具程序才行, 这类的工具程序很多,例如 vi, sed, awk 等等。 5 | 6 | 正则表达式对于系统管理员来说实在是很重要!因为系统会产生很多的讯息,这些讯息有的重要有的仅是告知, 此时,管理员可以通过正则表达式的功能来将重要讯息撷取出来,并产生便于查阅的报表来简化管理流程。此外, 很多的套装软件也都支持正则表达式的分析,例如邮件服务器的过滤机制(过滤垃圾信件)就是很重要的一个例子。 所以,您最好要了解正则表达式的相关技能,在未来管理主机时,才能够更精简处理您的日常事务! 7 | 8 | 本章节使用者需要多加练习,因为目前很多的套件都是使用正则表达式来达成其“过滤、分析”的目的, 为了未来主机管理的便利性,使用者至少要能看的懂正则表达式的意义! -------------------------------------------------------------------------------- /chapter_21/chapter_21.md: -------------------------------------------------------------------------------- 1 | # 第二十一章、软件安装:源代码与 Tarball 2 | 3 | 我们在[第一章、Linux是什么]当中提到了 GNU 计划与 GPL 授权所产生的自由软件与开放源码等咚咚。不过,前面的章节都还没有提到真正的开放源码是什么的讯息!在这一章当中,我们将借由 Linux 操作系统里面的可执行文件,来理解什么是可执行的程序,以及了解什么是编译器。另外,与程序息息相关的函数库 (library) 的信息也需要了解一番!不过,在这个章节当中,鸟哥并不是要你成为一个开放源码的程序设计师, 而是希望你可以了解如何将开放源码的程序设计、加入函数库的原理、通过编译而成为可以执行 的 binary program,最后该可执行文件可被我们所使用的一连串过程! 4 | 5 | 了解上面的咚咚有什么好处呢?因为在 Linux 的世界里面,由于客制化的关系,有时候我们需要自行安装软件在自己的 Linux 系统上面,所以如果你有简单的程序编译概念,那么将很容易进行软件的安装。 甚至在发生软件编译过程中的错误时,你也可以自行作一些简易的修订呢!而最传统的软件安装过程, 自然就是由源代码编译而来的啰!所以,在这里我们将介绍最原始的软件管理方式:使用 Tarball 来安装与升级管理我们的软件喔! 6 | -------------------------------------------------------------------------------- /chapter_18/18.7本章习题.md: -------------------------------------------------------------------------------- 1 | # 18.7 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 实作题: 4 | 5 | - 请在你的 CentOS 7.x 上面,依照鸟哥提供的 logfile.sh 去安装,并将结果取出分析看看。 6 | 7 | ------------------------------------------------------------------------ 8 | 9 | 简答题部分: 10 | 11 | - 如果你想要将 auth 这个服务的结果中,只要讯息等级高于 warn 就给予发送 email 到 root 的信箱,该如何处理?利用 vim 去编辑 /etc/rsyslog.conf 文件,内容为 auth.warn root 12 | - 启动系统登录信息时,需要启动哪两个 daemon 呢?systemd-journald.service, rsyslog.service 13 | - rsyslogd 以及 logrotate 个别通过什么机制来执行?rsyslogd 为 stand alone daemon 的机制; logrotate 则是通过 crontab 来执行的!只是个指令而已。 14 | -------------------------------------------------------------------------------- /chapter_20/20.7重点回顾.md: -------------------------------------------------------------------------------- 1 | # 20.7 重点回顾 2 | 3 | - 网际网络 (Internet) 就是 TCP/IP ,而 IP 的取得需与 ISP 要求。一般常见的取得 IP 的方法有:(1)手动直接设置 (2)自动取得 (dhcp) (3)拨接取得 (4)cable宽带 等方式。 4 | - 主机的网络设置要成功,必须要有下面的数据:(1)IP (2)Netmask (3)gateway (4)DNS 服务器 等项目; 5 | - 本章新增硬件信息的收集指令有: lspci, lsusb, iostat 等; 6 | - 备份是系统损毁时等待救援的救星,但造成系统损毁的因素可能有硬件与软件等原因。 7 | - 由于主机的任务不同,备份的数据与频率等考虑参数也不相同。 8 | - 常见的备份考虑因素有:关键文件、储存媒体、备份方式(完整/关键)、备份频率、使用的备份工具等。 9 | - 常见的关键数据有:/etc, /home, /var/spool/mail, /boot, /root 等等 10 | - 储存媒体的选择方式,需要考虑的地方有:备份速度、媒体的容量、经费与媒体的可靠性等。 11 | - 与完整备份有关的备份策略主要有:累积备份与差异备份。 12 | - 累积备份可具有较小的储存数据量、备份速度快速等。但是在还原方面则比差异备份的还原慢。 13 | - 完整备份的策略中,常用的工具有 dd, cpio, tar, xfsdump 等等。 -------------------------------------------------------------------------------- /chapter_24/24.6重点回顾.md: -------------------------------------------------------------------------------- 1 | # 24.6 重点回顾 2 | 3 | - 其实核心就是系统上面的一个文件而已,这个文件包含了驱动主机各项硬件的侦测程序与驱动模块; 4 | - 上述的核心模块放置于:/lib/modules/\$(uname -r)/kernel/ 5 | - “驱动程序开发”的工作上面来说,应该是属于硬件发展厂商的问题 6 | - 一般的使用者,由于系统已经将核心编译的相当的适合一般使用者使用了,因此一般入门的使用者,基本上,不太需要编译核心 7 | - 编译核心的一般目的:新功能的需求、原本的核心太过臃肿、与硬件搭配的稳定性、其他需求(如嵌入式系统) 8 | - 编译核心前,最好先了解到您主机的硬件,以及主机的用途,才能选择好核心功能; 9 | - 编译前若想要保持核心源代码的干净,可使用 make mrproper 来清除暂存盘与配置文件; 10 | - 挑选核心功能与模块可用 make 配合:menuconfig, oldconfig, xconfig, gconfig 等等 11 | - 核心功能挑选完毕后,一般常见的编译过程为:make bzImage, make modules 12 | - 模块编译成功后的安装方式为: make modules_install 13 | - 核心的安装过程中,需要移动 bzImage 文件、创建 initramfs 文件、重建 grub.cfg 等动作; 14 | - 我们可以自行由硬件开发商之官网下载驱动程序来自行编译核心模块! -------------------------------------------------------------------------------- /chapter_3/3.4重点回顾.md: -------------------------------------------------------------------------------- 1 | # 3.4 重点回顾 2 | 3 | - 不论你要安装什么样的Linux操作系统角色,都应该要事先规划例如分区、开机管理程序等; 4 | - 建议练习机安装时的磁盘分区能有/, /boot, /home, swap四个分区; 5 | - 安装CentOS 7.x的模式至少有两种,分别是图形接口与命令行; 6 | - CentOS 7 会主动依据你的磁盘容量判断要用 MBR 或 GPT 分区方式,你也可以强迫使用 GPT; 7 | - 若安装笔记本电脑时失败,可尝试在开机时加入“linux nofb apm=off acpi=off”来关闭省电功能; 8 | - 安装过程进入分区后,请以“自订的分区模式”来处理自己规划的分区方式; 9 | - 在安装的过程中,可以创建逻辑卷轴管理员 (LVM); 10 | - 一般要求swap应该要是1.5\~2倍的实体内存量,但即使没有swap依旧能够安装与运行Linux操作系统; 11 | - CentOS 7默认使用 xfs 作为文件系统 12 | - 没有连上Internet时,可尝试关闭防火墙,但SELinux最好选择“强制”状态; 13 | - 设置时不要选择启动kdump,因为那是给核心开发者查阅死机数据的; 14 | - 可加入时间服务器来同步化时间,台湾可选择tock.stdtime.gov.tw这一部; 15 | - 尽量使用一般用户来操作Linux,有必要再转身份成为root即可。 16 | - 即使是练习机,在创建 root 密码时,建议依旧能够保持良好的密码规则,不要随便设置! 17 | -------------------------------------------------------------------------------- /chapter_3/3.5本章习题.md: -------------------------------------------------------------------------------- 1 | # 3.5 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 问答题部分: 4 | 5 | - Linux的目录配置以“树状目录”来配置,至于磁盘分区(partition)则需要与树状目录相配合! 请问,在默认的情况下,在安装的时候系统会要求你一定要分区出来的两个Partition为何?就是根目录“/”与内存交换空间“Swap” 6 | 7 | - 默认使用 MBR 分区方式的情况下,在第二颗 SATA 磁盘中,分区“六个有用”的分区 (具有 filesystem 的) ,此外,已知有两个 primary 的分区类型!请问六个分区的文件名?/dev/sdb1(primary) /dev/sdb2(primary) /dev/sdb3(extended) /dev/sdb5(logical 下面皆为 logical) /dev/sdb6 /dev/sdb7 /dev/sdb8 请注意,5-8 这四个 logical 容量相加的总和为 /dev/sdb3! 8 | 9 | - 什么是GMT时间?台北时间差几个钟头?GMT 时间指的是格林威治时间,称为标准的时间,而台北时间较 GMT 快了 8 小时! 10 | 11 | - 软件磁盘阵列的设备文件名为何?RAID : /dev/md\[0-127\]; 12 | 13 | - 如果我的磁盘分区时使用 MBR 方式,且设置了四个 Primary 分区,但是磁盘还有空间,请问我还能不能使用这些空间?不行!因为最多只有四个 Primary 的磁盘分区,没有多的可以进行分区了!且由于没有 Extended ,所以自然不能再使用 Logical 分区 -------------------------------------------------------------------------------- /chapter_4/4.6重点回顾.md: -------------------------------------------------------------------------------- 1 | # 4.6 重点回顾 2 | 3 | - 为了避免瞬间断电造成的Linux系统危害,建议做为服务器的Linux主机应该加上不断电系统来持续提供稳定的电力; 4 | - 养成良好的操作习惯,尽量不要使用 root 直接登陆系统,应使用一般帐号登陆系统,有需要再转换身份 5 | - 可以通过“活动总览”查看系统所有使用的软件及快速启用惯用软件 6 | - 在X的环境下想要“强制”重新启动X的组合按键为:“\[alt\]+\[ctrl\]+\[backspace\]”; 7 | - 默认情况下,Linux提供tty1\~tty6的终端机界面; 8 | - 在终端机环境中,可依据提示字符为\$或#判断为一般帐号或root帐号; 9 | - 取得终端机支持的语系数据可下达“echo \$LANG”或“locale”指令; 10 | - date可显示日期、cal可显示日历、bc可以做为计算机软件; 11 | - 组合按键中,\[tab\]按键可做为(1)命令补齐或(2)文件名补齐或(3)参数选项补齐,\[crtl\]-\[c\]可以中断目前正在运行中的程序; 12 | - Linux 系统上的英文大小写为不同的数据 13 | - 线上说明系统有man及info两个常见的指令; 14 | - man page说明后面的数字中,1代表一般帐号可用指令,8代表系统管理员常用指令,5代表系统配置文件格式; 15 | - info page可将一份说明文档拆成多个节点(node)显示,并具有类似超链接的功能,增加易读性; 16 | - 系统需正确的关机比较不容易损坏,可使用shutdown, poweroff等指令关机。 17 | -------------------------------------------------------------------------------- /chapter_18/18.6重点回顾.md: -------------------------------------------------------------------------------- 1 | # 18.6 重点回顾 2 | 3 | - 登录文件可以记录一个事件的何时、何地、何人、何事等四大信息,故系统有问题时务必查询登录文件; 4 | - 系统的登录文件默认都集中放置到 /var/log/ 目录内,其中又以 messages 记录的信息最多! 5 | - 登录文件记录的主要服务与程序为: systemd-journald.service, rsyslog.service, rsyslogd 6 | - rsyslogd 的配置文件在 /etc/rsyslog.conf ,内容语法为:“ 服务名称.等级 记载设备或文件” 7 | - 通过 linux 的 syslog 函数查询,了解上述服务名称有 kernel, user, mail...从 0 到 23 的服务序号 8 | - 承上,等级从不严重到严重依序有 info, notice, warning, error, critical, alert, emergency 等 9 | - rsyslogd 本身有提供登录文件服务器的功能,通过修改 /etc/rsyslog.conf 内容即可达成; 10 | - logrotate 程序利用 crontab 来进行登录文件的轮替功能; 11 | - logrotate 的配置文件为 /etc/logrotate.conf ,而额外的设置则可写入 /etc/logrotate.d/\* 内; 12 | - 新的 CentOS 7 由于内置 systemd-journald.service 的功能,可以使用 journalctl 直接从内存读出登录文件,查询性能较佳 13 | - logwatch 为 CentOS 7 默认提供的一个登录文件分析软件。 -------------------------------------------------------------------------------- /chapter_21/21.7重点回顾.md: -------------------------------------------------------------------------------- 1 | # 21.7 重点回顾 2 | 3 | - 源代码其实大多是纯文本文件,需要通过编译器的编译动作后,才能够制作出 Linux 系统能够认识的可执行的 binary file ; 4 | - 开放源代码可以加速软件的更新速度,让软件性能更快、漏洞修补更实时; 5 | - 在 Linux 系统当中,最标准的 C 语言编译器为 gcc ; 6 | - 在编译的过程当中,可以借由其他软件提供的函数库来使用该软件的相关机制与功能; 7 | - 为了简化编译过程当中的复杂的指令输入,可以借由 make 与 makefile 规则定义,来简化程序的更新、编译与链接等动作; 8 | - Tarball 为使用 tar 与 gzip/bzip2/xz 压缩功能所打包与压缩的,具有源代码的文件; 9 | - 一般而言,要使用 Tarball 管理 Linux 系统上的软件,最好需要 gcc, make, autoconfig, kernel source, kernel header 等前驱软件才行,所以在安装 Linux 之初,最好就能够选择 Software development 以及 kernel development 之类的群组; 10 | - 函数库有动态函数库与静态函数库,动态函数库在升级上具有较佳的优势。动态函数库的扩展名为 *.so 而静态则是* .a ; 11 | - patch 的主要功能在更新源代码,所以更新源代码之后,还需要进行重新编译的动作才行; 12 | - 可以利用 ldconfig 与 /etc/ld.so.conf /etc/ld.so.conf.d/\*.conf 来制作动态函数库的链接与高速缓存! 13 | - 通过 MD5/SHA1/SHA256 的编码可以判断下载的文件是否为原本厂商所释出的文件。 -------------------------------------------------------------------------------- /chapter_23/23.4重点回顾.md: -------------------------------------------------------------------------------- 1 | # 23.4 重点回顾 2 | 3 | - Unix Like 操作系统上面的 GUI 使用的是最初由 MIT 所开发的 X window system,在 1987 释出 X11 版,并于 1994 更改为 X11R6 ,故此 GUI 接口也被称为 X 或 X11 4 | - X window system 的 X server 最初由 XFree86 计划所开发,后来则由 Xorg 基金会所持续开发; 5 | - X window system 主要分为 X server 与 X client ,其中 X Server 在管理硬件,而 X Client 则是应用程序。 6 | - 在运行上,X Client 应用程序会将所想要呈现的画面告知 X Server ,最终由 X server 来将结果通过他所管理的硬件绘制出来! 7 | - 每一支 X client 都不知道对方的存在,必须要通过特殊的 X client ,称为 Window Manager 的, 来管理各窗口的重叠、移动、最小化等工作。 8 | - 若有需要登陆图形接口,有时会有 Display Manager 来管理这方面的动作 9 | - startx 可以侦测 X server / X client 的启动脚本,并调用 xinit 来分别执行; 10 | - X 可以启动多个,各个 X 显示的位置使用 -display 来处理,显示位置为 :0, :1... 11 | - Xorg 是一个 X server ,配置文件位于 /etc/X11/xorg.conf ,里面含有 Module, Files, Monitor, Device 等设置阶段。目前较新的设置中, 会将额外的设置放置于 /etc/X11/xorg.conf.d/\*.conf 12 | -------------------------------------------------------------------------------- /chapter_24/24.8参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 24.8 参考资料与延伸阅读 2 | 3 | - [\[1\]](#216.html#ac1)通过在 /usr/src/kernels/linux-3.10.89 下面的 README 以及“ make help ”可以得到相当多的解释 4 | - 核心编译的功能:可以用来测试 CPU 性能喔!因为 compile 非常耗系统资源! 5 | 6 | 2002/05/29:第一次完成 2003/02/11:重新编排与加入 FAQ 2004/06/11:原本的 2.4.xx 版本核心被移动到 [此处](http://linux.vbird.org/linux_basic/0540kernel/0540kernel-2.4.18.php) 2005/11/15:原本的模块管理已经先移动到[开机流程管理](../Text/index.html#kernel)那一篇啰! 2005/12/05:经过将近一个月,呵呵!终于给他整理出来这一篇了~真难得~ 2007/06/27:增加了 initrd 的简单说明,详细还是得看 loader 那一章。 2009/07/21:将基于 FC4 所撰写的文章移动到[此处](http://linux.vbird.org/linux_basic/0540kernel/0540kernel-fc4.php) 2009/08/03:原本的 KDE/GNOME 使用的发动机写错了! KDE 用 Qt ,而 GNOME 是用 Gtk !非常感谢 Chua Tze An 兄提供的指正! 2009/09/18:加入两个简单的题目,给大家思考一下而已。 2015/09/23:将基于 CentOS 5 的旧的版本移动到[这里](http://linux.vbird.org/linux_basic/0540kernel/0540kernel-centos5.php)。 -------------------------------------------------------------------------------- /chapter_20/20.6灾难复原的考虑.md: -------------------------------------------------------------------------------- 1 | # 20.6 灾难复原的考虑 2 | 3 | 之所以要备份当然就是预防系统挂点啦!如果系统真的挂点的话,那么你该如何还原系统呢? 4 | 5 | - 硬件损毁,且具有完整备份的数据时 6 | 7 | 由于是硬件损毁,所以我们不需要考虑系统软件的不稳定问题,所以可以直接将完整的系统复原回去即可。 首先,你必须要先处理好你的硬件,举例来说,将你的硬盘作个适当的处理,譬如创建成为磁盘阵列之类的。 然后依据你的备份状态来复原。举例来说,如果是使用差异备份,那么将完整备份复原后, 将最后一次的差异备份复原回去,你的系统就恢复了!非常简单吧! 8 | 9 | - 由于软件的问题产生的被攻破资安事件 10 | 11 | 由于系统的损毁是因为被攻击,此时即使你恢复到正常的系统,那么这个系统既然会被攻破, 没道理你还原成旧系统就不会被再次攻破!所以,此时完整备份的复原可能不是个好方式喔!最好是需要这样进行啦: 12 | 13 | 1. 先拔除网络线,最好将系统进行完整备份到其他媒体上,以备未来查验 14 | 2. 开始查阅登录文件,尝试找出各种可能的问题 15 | 3. 开始安装新系统 (最好找最新的 distribution) 16 | 4. 进行系统的升级,与防火墙相关机制的制订 17 | 5. 根据 2 的错误,在安装完成新系统后,将那些 bug 修复 18 | 6. 进行各项服务与相关数据的恢复 19 | 7. 正式上线提供服务,并且开始测试 20 | 21 | 软件资安事件造成的问题可大可小,一般来说,标准流程都是建议你将出问题的系统备份下来, 如果被追踪到你的主机曾经攻击过别人的话,那么你至少可以拿出备份数据来佐证说,你是被攻击者, 而不是主动攻击别人的坏人啊!然后,记得一定要找出问题点并予以克服,不然的话,你的系统将一再地被攻击啊! 那样可就伤脑筋啰~ -------------------------------------------------------------------------------- /chapter_22/22.5重点回顾.md: -------------------------------------------------------------------------------- 1 | # 22.5 重点回顾 2 | 3 | - 为了避免使用者自行编译的困扰,开发商自行在特定的硬件与操作系统平台上面预先编译好软件, 并将软件以特殊格式封包成文件,提供终端用户直接安装到固定的操作系统上,并提供简单的查询/安装/移除等流程。 此称为软件管理员。常见的软件管理员有 RPM 与 DPKG 两大主流。 4 | - RPM 的全名是 RedHat Package Manager,原本是由 Red Hat 公司所发展的,流传甚广; 5 | - RPM 类型的软件中,所含有的软件是经过编译后的 binary program ,所以可以直接安装在使用者端的系统上, 不过,也由于如此,所以 RPM 对于安装者的环境要求相当严格; 6 | - RPM 除了将软件安装至使用者的系统上之外,还会将该软件的版本、名称、文件与目录配置、系统需求等等均记录于数据库 (/var/lib/rpm) 当中,方便未来的查询与升级、移除; 7 | - RPM 可针对不同的硬件等级来加以编译,制作出来的文件可于扩展名 (i386, i586, i686, x86_64, noarch) 来分辨; 8 | - RPM 最大的问题为软件之间的相依性问题; 9 | - SRPM 为 Source RPM ,内含的文件为 Source code 而非为 binary file ,所以安装 SRPM 时还需要经过 compile ,不过,SRPM 最大的优点就是可以让使用者自行修改设置参数 (makefile/configure 的参数) ,以符合使用者自己的 Linux 环境; 10 | - RPM 软件的属性相依问题,已经可以借由 yum 或者是 APT 等方式加以克服。 CentOS 使用的就是 yum 机制。 11 | - yum 服务器提供多个不同的软件库放置个别的软件,以提供用户端分别管理软件类别。 -------------------------------------------------------------------------------- /chapter_16/16.7本章习题.md: -------------------------------------------------------------------------------- 1 | # 16.7 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 4 | 5 | - 简单说明什么是程序 (program) 而什么是程序 (process)?程序 (program) 是系统上面可以被执行的文件,由于 Linux 的完整文件名 (由 / 写起) 仅能有一个, 所以 program 的文件名具有单一性。当程序被执行后,就会启动成程序 (process), 一个 program 可以被不同的使用者或者相同的使用者重复的执行成为多个程序, 且该程序所造成的程序还因为不同的使用者,而有不同的权限,且每个 process 几乎都是独立的。 6 | - 我今天想要查询 /etc/crontab 与 crontab 这个程序的用法与写法,请问我该如何线上查询?查询 crontab 指令可以使用 man crontab 或 info crontab ,至于查询 /etc/crontab ,则可以使用 man 5 crontab 啰! 7 | - 我要如何查询 crond 这个 daemon 的 PID 与他的 PRI 值呢?ps -lA \| grep crond 即可查到! 8 | - 我要如何修改 crond 这个 PID 的优先执行序?先以 ps aux 找到 crond 的 PID 后,再以: renice -n number PID 来调整! 9 | - 我是一般身份使用者,我是否可以调整不属于我的程序的 nice 值?此外,如果我调整了我自己的程序的 nice 值到 10 ,是否可以将他调回 5 呢?不行!一般身份使用者仅能调整属于自己的 PID 程序,并且,只能将 nice 值一再地调高,并不能调低,所以调整为 10 之后,就不能降回 5 啰! 10 | - 我要怎么知道我的网卡在开机的过程中有没有被捉到?可以使用 dmesg 来视察! -------------------------------------------------------------------------------- /chapter_11/11.5重点回顾.md: -------------------------------------------------------------------------------- 1 | # 11.5 重点回顾 2 | 3 | - 正则表达式就是处理字串的方法,他是以行为单位来进行字串的处理行为; 4 | - 正则表达式通过一些特殊符号的辅助,可以让使用者轻易的达到“搜寻/删除/取代”某特定字串的处理程序; 5 | - 只要工具程序支持正则表达式,那么该工具程序就可以用来作为正则表达式的字串处理之用; 6 | - 正则表达式与万用字符是完全不一样的东西!万用字符 (wildcard) 代表的是 bash 操作接口的一个功能, 但正则表达式则是一种字串处理的表示方式! 7 | - 使用 grep 或其他工具进行正则表达式的字串比对时,因为编码的问题会有不同的状态,因此, 你最好将 LANG 等变量设置为 C 或者是 en 等英文语系! 8 | - grep 与 egrep 在正则表达式里面是很常见的两支程序,其中, egrep 支持更严谨的正则表达式的语法; 9 | - 由于编码系统的不同,不同的语系 (LANG) 会造成正则表达式撷取数据的差异。因此可利用特殊符号如 \[:upper:\] 来替代编码范围较佳; 10 | - 由于严谨度的不同,正则表达式之上还有更严谨的延伸正则表达式; 11 | - 基础正则表达式的特殊字符有: \*, ., \[\], \[-\], ^([](#101.html#fn_)), ^, \$ 等! 12 | - 常见的支持正则表达式的工具软件有: grep , sed, vim 等等 13 | - printf 可以通过一些特殊符号来将数据进行格式化输出; 14 | - awk 可以使用“字段”为依据,进行数据的重新整理与输出; 15 | - 文件的比对中,可利用 diff 及 cmp 进行比对,其中 diff 主要用在纯文本方面的新旧版本比对 16 | - patch 指令可以将旧版数据更新到新版 (主要亦由 diff 创建 patch 的补丁来源文件) -------------------------------------------------------------------------------- /chapter_14/14.4重点回顾.md: -------------------------------------------------------------------------------- 1 | # 14.4 重点回顾 2 | 3 | - Quota 可公平的分配系统上面的磁盘容量给使用者;分配的资源可以是磁盘容量(block)或可创建文件数量(inode); 4 | - Quota 的限制可以有 soft/hard/grace time 等重要项目; 5 | - Quota 是针对整个 filesystem 进行限制,XFS 文件系统可以限制目录! 6 | - Quota 的使用必须要核心与文件系统均支持。文件系统的参数必须含有 usrquota, grpquota, prjquota 7 | - Quota 的 xfs_quota 实作的指令有 report, print, limit, timer... 等指令; 8 | - 磁盘阵列 (RAID) 有硬件与软件之分,Linux 操作系统可支持软件磁盘阵列,通过 mdadm 套件来达成; 9 | - 磁盘阵列创建的考虑依据为“容量”、“性能”、“数据可靠性”等; 10 | - 磁盘阵列所创建的等级常见有的 raid0, raid1, raid1+0, raid5 及 raid6 11 | - 硬件磁盘阵列的设备文件名与 SCSI 相同,至于 software RAID 则为 /dev/md\[0-9\] 12 | - 软件磁盘阵列的状态可借由 /proc/mdstat 文件来了解; 13 | - LVM 强调的是“弹性的变化文件系统的容量”; 14 | - 与 LVM 有关的元件有: PV/VG/PE/LV 等元件,可以被格式化者为 LV 15 | - 新的 LVM 拥有 LVM thin volume 的功能,能够动态调整磁盘的使用率! 16 | - LVM 拥有快照功能,快照可以记录 LV 的数据内容,并与原有的 LV 共享未更动的数据,备份与还原就变的很简单; 17 | - XFS 通过 xfs_growfs 指令,可以弹性的调整文件系统的大小 -------------------------------------------------------------------------------- /chapter_12/12.7重点回顾.md: -------------------------------------------------------------------------------- 1 | # 12.7 重点回顾 2 | 3 | - shell script 是利用 shell 的功能所写的一个“程序 (program)”,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的 4 | - shell script 用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上, 就不够好了,因为 Shell scripts 的速度较慢,且使用的 CPU 资源较多,造成主机资源的分配不良。 5 | - 在 Shell script 的文件中,指令的执行是从上而下、从左而右的分析与执行; 6 | - shell script 的执行,至少需要有 r 的权限,若需要直接指令下达,则需要拥有 r 与 x 的权限; 7 | - 良好的程序撰写习惯中,第一行要宣告 shell (#!/bin/bash) ,第二行以后则宣告程序用途、版本、作者等 8 | - 对谈式脚本可用 read 指令达成; 9 | - 要创建每次执行脚本都有不同结果的数据,可使用 date 指令利用日期达成; 10 | - script 的执行若以 source 来执行时,代表在父程序的 bash 内执行之意! 11 | - 若需要进行判断式,可使用 test 或中括号 ( \[\] ) 来处理; 12 | - 在 script 内,\$0, \$1, \$2..., \$@ 是有特殊意义的! 13 | - 条件判断式可使用 if...then 来判断,若是固定变量内容的情况下,可使用 case \$var in ... esac 来处理 14 | - 循环主要分为不定循环 (while, until) 以及固定循环 (for) ,配合 do, done 来达成所需任务! 15 | - 我们可使用 sh -x script.sh 来进行程序的 debug -------------------------------------------------------------------------------- /chapter_8/8.7重点回顾.md: -------------------------------------------------------------------------------- 1 | # 8.7 重点回顾 2 | 3 | - 压缩指令为通过一些运算方法去将原本的文件进行压缩,以减少文件所占用的磁盘容量。 压缩前与压缩后的文件所占用的磁盘容量比值, 就可以被称为是“压缩比” 4 | - 压缩的好处是可以减少磁盘容量的浪费,在 WWW 网站也可以利用文件压缩的技术来进行数据的传送,好让网站带宽的可利用率上升喔 5 | - 压缩文件的扩展名大多是:“*.gz,* .bz2, *.xz,* .tar, *.tar.gz,* .tar.bz2, \*.tar.xz” 6 | - 常见的压缩指令有 gzip, bzip2, xz。压缩率最佳的是 xz,若可以不计时间成本,建议使用 xz 进行压缩。 7 | - tar 可以用来进行文件打包,并可支持 gzip, bzip2, xz 的压缩。 8 | - 压 缩:tar -Jcv -f filename.tar.xz 要被压缩的文件或目录名称 9 | - 查 询:tar -Jtv -f filename.tar.xz 10 | - 解压缩:tar -Jxv -f filename.tar.xz -C 欲解压缩的目录 11 | - xfsdump 指令可备份文件系统或单一目录 12 | - xfsdump 的备份若针对文件系统时,可进行 0-9 的 level 差异备份!其中 level 0 为完整备份; 13 | - xfsrestore 指令可还原被 xfsdump 创建的备份文件; 14 | - 要创建光盘烧录数据时,可通过 mkisofs 指令来创建; 15 | - 可通过 wodim 来写入 CD 或 DVD 烧录机 16 | - dd 可备份完整的 partition 或 disk ,因为 dd 可读取磁盘的 sector 表面数据 17 | - cpio 为相当优秀的备份指令,不过必须要搭配类似 find 指令来读入欲备份的文件名数据,方可进行备份动作。 18 | -------------------------------------------------------------------------------- /chapter_9/9.5重点回顾.md: -------------------------------------------------------------------------------- 1 | # 9.5 重点回顾 2 | 3 | - Linux 下面的配置文件多为文本文件,故使用 vim 即可进行设置编辑; 4 | - vim 可视为程序编辑器,可用以编辑 shell script, 配置文件等,避免打错字; 5 | - vi 为所有 unix like 的操作系统都会存在的编辑器,且执行速度快速; 6 | - vi 有三种模式,一般指令模式可变换到编辑与命令行界面,但编辑模式与命令行界面不能互换; 7 | - 常用的按键有i, \[Esc\], :wq 等; 8 | - vi 的画面大略可分为两部份,(1)上半部的本文与(2)最后一行的状态+命令行界面; 9 | - 数字是有意义的,用来说明重复进行几次动作的意思,如 5yy 为复制 5 列之意; 10 | - 光标的移动中,大写的 G 经常使用,尤其是 1G, G 移动到文章的头/尾功能! 11 | - vi 的取代功能也很棒! :n1,n2s/old/new/g 要特别注意学习起来; 12 | - 小数点“ . ”为重复进行前一次动作,也是经常使用的按键功能! 13 | - 进入编辑模式几乎只要记住: i, o, R 三个按钮即可!尤其是新增一列的 o 与取代的 R 14 | - vim 会主动的创建 swap 暂存盘,所以不要随意断线! 15 | - 如果在文章内有对齐的区块,可以使用 \[ctrl\]-v 进行复制/贴上/删除的行为 16 | - 使用 :sp 功能可以分区窗口 17 | - 若使用 vim 来撰写网页,若需要 CSS 元素数据,可通过 \[crtl\]+x, \[crtl\]+o 这两个连续组合按键来取得关键字 18 | - vim 的环境设置可以写入在 \~/.vimrc 文件中; 19 | - 可以使用 iconv 进行文件语系编码的转换 20 | - 使用 dos2unix 及 unix2dos 可以变更文件每一列的行尾断行字符。 -------------------------------------------------------------------------------- /chapter_0/0.6本章习题.md: -------------------------------------------------------------------------------- 1 | # 0.6 本章习题 2 | 3 | - 根据本章内文的说明,请找出目前全世界跑的最快的超级计算机的:(1)系统名称 (2)所在位置 (3)使用的 CPU 型号与规格 (4)总共使用的 CPU 数量 (5)全功率操作 1 天时,可能耗用的电费 (请上台电网站查询相关电价来计算)。 4 | 5 | - 动动手实作题:假设你不知道你的主机内部的各项元件数据,请拆开你的主机机箱,并将内部所有的元件拆开,并且依序列出: 6 | 7 | - CPU的厂牌、型号、最高频率; 8 | - 内存的容量、接口 (DDR/DDR2/DDR3 等); 9 | - 显卡的接口 (AGP/PCIe/内置) 与容量 10 | - 主板的厂牌、南北桥的芯片型号、BIOS的厂牌、有无内置的网卡或声卡等 11 | - 硬盘的连接接口 (SATA/SAS等)、硬盘容量、转速、缓冲内存容量等。然后再将他组装回去。注意,拆装前务必先取得你主板的说明书,因此你可能必须要上网查询上述的各项数据。 12 | 13 | - 利用软件:假设你不想要拆开主机机箱,但想了解你的主机内部各元件的信息时,该如何是好? 如果使用的是Windows操作系统,可使用CPU-Z()这套软件,如果是Linux环境下,可以使用“cat /proc/cpuinfo” 及使用“lspci”来查阅各项元件的型号; 14 | 15 | - 如本章[图0.2.1]所示,找出第四代 Intel i7 4790 CPU 的: (1)与南桥沟通的 DMI 带宽有多大? (2)第二层高速缓存的容量多大? (3)最大 PCIe 信道数量有多少?并据以说明主板上面 PCIe 插槽的数量限制。(请 google 此 CPU 相关数据即可发现) 16 | 17 | - 由 google 查询 Intel SSD 520 固态硬盘相关的功能表,了解 (1)连接接口、(2)最大读写速度及 (3)最大随机读写数据 (IOPS) 的数据。 -------------------------------------------------------------------------------- /chapter_2/2.4重点回顾.md: -------------------------------------------------------------------------------- 1 | # 2.4 重点回顾 2 | 3 | - 新添购计算机硬件配备时,需要考虑的角度有“游戏机/工作机”、“性能/价格比”、“性能/消耗瓦数”、“支持度”等; 4 | - 旧的硬件配备可能由于保存的问题或者是电子零件老化的问题,导致计算机系统非常容易在运行过程中出现不明的死机情况 5 | - Red Hat的硬件支持: 6 | - 在Linux系统中,每个设备都被当成一个文件来对待,每个设备都会有设备文件名。 7 | - 磁盘设备文件名通常分为两种,实际SATA/USB设备文件名为/dev/sd\[a-p\],而虚拟机的设备可能为/dev/vd\[a-p\] 8 | - 磁盘的第一个扇区主要记录了两个重要的信息,分别是: (1)主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446 Bytes (1)分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes; 9 | - 磁盘的 MBR 分区方式中,主要与延伸分区最多可以有四个,逻辑分区的设备文件名号码,一定由5号开始; 10 | - 如果磁盘容量大于 2TB 以上时,系统会自动使用 GPT 分区方式来处理磁盘分区。 11 | - GPT 分区已经没有延伸与逻辑分区的概念,你可以想像成所有的分区都是主分区! 12 | - 某些操作系统要使用 GPT 分区时,必须要搭配 UEFI 的新型 BIOS 格式才可安装使用。 13 | - 开机的流程由:BIOS-->MBR-->-->boot loader-->核心文件; 14 | - boot loader的功能主要有:提供菜单、载入核心、转交控制权给其他loader 15 | - boot loader可以安装的地点有两个,分别是 MBR 与 boot sector 16 | - Linux操作系统的文件使用目录树系统,与磁盘的对应需要有“挂载”的动作才行; 17 | - 新手的简单分区,建议只要有/及swap两个分区即可 -------------------------------------------------------------------------------- /chapter_18/18.8参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 18.8 参考资料与延伸阅读 2 | 3 | - [\[1\]](#164.html#ac1)关于 console 的说明可以参考下面的链接: 4 | - 关于 logfile 也有[网友提供英文版](http://phorum.vbird.org/viewtopic.php?f=10&t=34996&p=148198)喔: 5 | 6 | 2002/06/24:第一次完成 2003/02/11:重新编排与加入 FAQ 2005/10/12:旧的文章已经被移动到 [此处](http://linux.vbird.org/linux_basic/0570syslog/0570syslog.php)。 2005/10/24:终于写完了~啊!怎么写这么久?? 2006/07/23:修改了 /etc/logrotate.d/syslog 的设置数据 2009/03/31:将旧的基于 FC4 版本的数据移动至 [此处](http://linux.vbird.org/linux_basic/0570syslog/0570syslog-fc4.php) 2009/09/14:加入了一些例题而已。这一篇太简单了~想不到什么好的题目说~ 2010/12/24:感谢网友 [eujiang](http://phorum.vbird.org/viewtopic.php?f=10&t=34996&p=148198) 提供的英文版 logfile.sh 程序喔! 2015/08/14:将旧的基于 CentOS 5 的版本移动到 [这里](http://linux.vbird.org/linux_basic/0570syslog//0570syslog-centos5.php),有需要的前往观察! -------------------------------------------------------------------------------- /chapter_20/20.8本章习题.md: -------------------------------------------------------------------------------- 1 | # 20.8 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看) 简答题部分: 4 | 5 | - 如果你想要知道整个系统的周边硬件设备,可以使用哪个指令查询?lspci 可以查询到,更可使用 lspci -v 来查询更详细信息。 6 | 7 | - 承上题,那么如果单纯只想要知道 USB 设备呢?又该如何查询?lsusb就可以查询的到! 8 | 9 | - (挑战题)如果你的网络设置妥当了,但是却老是发现网络不通,你觉得应该如何进行测试?(1)先检查硬件,每个环节 (网卡、hub/switch、路由器等) 的灯号是否有亮?有亮再进行下个动作; (2)使用 ifconfig 检查 IP 与 netmask 的数据是否正确,若正确才可进行下一步; (3)使用 route 看看 default gateway 是否正确,若正确再进行下一步; (4)使用 ping -c 3 \[gateway IP\] ,若有回应才进行下一步; (5)使用 ping -c 3 \[外部IP,例如 168.95.1.1\] ,若有回应则 IP 正常,若无回应,请检查 gateway 的设置 (6)使用 dig www.google.com 看看能否找到 IP ,找不到则请检查 /etc/resolv.conf 的设置。 10 | 11 | - 挑战题:尝试将你在学习本书所进行的各项任务备份下来,然后删除你的系统,接下来重新安装最新的 CentOS 7.x , 再将你备份的数据复原回来,看看能否成功的让你的系统回复到之前的状态呢? 12 | 13 | - 挑战题:查询一下何谓企鹅龙软件,讨论一下该软件的还原机制是属于累积备份?还是完整备份? 14 | 15 | - 常用的完整备份 (full backup) 工具指令有哪些?xfsdump + xfsrestore, dd, cpio 搭配 find 等软件。 16 | 17 | - 你所看到的常见的储存设备有哪些?Floppy, Mo, Zip, CD-RW, DVD-RW, 外接式 USB 硬盘, Tape, 外接式储存阵列 (RAID),额外的储存架构,如 SAN, NAS 等。 18 | -------------------------------------------------------------------------------- /chapter_24/24.7本章习题.md: -------------------------------------------------------------------------------- 1 | # 24.7 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看) 4 | 5 | - 简单说明核心编译的步骤为何? 6 | 7 | 1. 先下载核心源代码,可以从 或者是 distributions 的 SRPM 来着手; 8 | 2. 以下以 Tarball 来处理,解开源代码到 /usr/src/kernels 目录下; 9 | 3. 先进行旧数据删除的动作:“make mrproper”; 10 | 4. 开始挑选核心功能,可以利用“make menuconfig”、“make oldconfig”、“make gconfig”等等; 11 | 5. 清除过去的中间暂存盘数据:“make clean” 12 | 6. 开始核心文件与核心模块的编译:“make bzImage”、“make modules” 13 | 7. 开始核心模块的安装:“make modules_install” 14 | 8. 开始核心文件的安装,可以使用的方式有:“make install”或者是通过手动的方式复制核心文件到 /boot/ 当中; 15 | 9. 创建 initramfs 文件; 16 | 10. 使用 grub2-mkconfig 修改 /boot/grub2/grub.cfg 文件; 17 | 18 | - 如果你利用新编译的核心来操作系统,发现系统并不稳定,你想要移除这个自行编译的核心该如何处理? 19 | 20 | 1. 重新开机,并使用旧的稳定的核心开机! 21 | 2. 此时才可以将新版核心模块删除: rm -rf /lib/modules/3.10.89vbird 22 | 3. 删除掉 /boot 里面的新核心: rm /boot/vmlinuz-3.10.89vbird /boot/initramfs-3.10.89vbird.img ... 23 | 4. 重建 grub.cfg: grub2-mkconfig -o /boot/grub2/grub.cfg -------------------------------------------------------------------------------- /chapter_5/5.5本章习题.md: -------------------------------------------------------------------------------- 1 | # 5.5 本章练习 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 4 | 5 | - 早期的 Unix 系统文件名最多允许 14 个字符,而新的 Unix 与 Linux 系统中,文件名最多可以容许几个字符?由于使用Ext2/Ext3/Ext4/xfs 文件系统,单一文件名可达 255 字符 6 | 7 | - 当一个一般文件权限为 -rwxrwxrwx 则表示这个文件的意义为?任何人皆可读取、修改或编辑、可以执行,但不一定能删除。 8 | 9 | - 我需要将一个文件的权限改为 -rwxr-xr-- 请问该如何下达指令?chmod 754 filename 或 chmod u=rwx,g=rx,o=r filename 10 | 11 | - 若我需要更改一个文件的拥有者与群组,该用什么指令?chown, chgrp 12 | 13 | - 请问下面的目录与主要放置什么数据: /etc/, /boot, /usr/bin, /bin, /usr/sbin, /sbin, /dev, /var/log, /run 14 | 15 | - /etc/:几乎系统的所有设置文件均在此,尤其 passwd,shadow 16 | - /boot:开机配置文件,也是默认摆放核心 vmlinuz 的地方 17 | - /usr/bin, /bin:一般可执行文件摆放的地方 18 | - /usr/sbin, /sbin:系统管理员常用指令集 19 | - /dev:摆放所有系统设备文件的目录 20 | - /var/log:摆放系统登录文件的地方 21 | - /run:CentOS 7 以后才有,将经常变动的项目(每次开机都不同,如程序的PID)移动到内存暂存,所以 /run 并不占实际磁盘容量 22 | 23 | - 若一个文件的文件名开头为“ . ”,例如 .bashrc 这个文件,代表什么?另外,如何显示出这个文件名与他的相关属性?有“ . ”为开头的为隐藏文件,需要使用 ls -a 这个 -a 的选项才能显示出隐藏文件的内容,而使用 ls -al 才能显示出属性。 -------------------------------------------------------------------------------- /chapter_3/3.6参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 3.6 参考资料与延伸阅读 2 | 3 | - [\[1\]](#31.html#ac1)虚拟机管理员创建一部虚拟机的流程: 4 | - [\[2\]](#31.html#ac2)CentOS 7 网卡的命名规则: 5 | - [\[3\]](#31.html#ac3)进阶内存测试网站: 6 | - [\[4\]](#31.html#ac4)更多的核心参数可以参考如下链接: 对于安装过程所加入的参数有兴趣的,则可以参考下面这篇链接,里面有详细说明硬件原因: 7 | - 安装过程的简易示意图: 8 | 9 | 2015/05/06:首次释出新版本 -------------------------------------------------------------------------------- /chapter_4/4.8参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 4.8 参考资料与延伸阅读 2 | 3 | - 为了让Linux的窗口显示效果更佳,很多团体开始发展桌面应用的环境,GNOME/KDE都是。 他们的目标就是发展出类似Windows桌面的一整套可以工作的桌面环境,他可以进行窗口的定位、放大、缩小、 同时还提供很多的桌面应用软件。下面是KDE与GNOME的相关链接: 4 | 5 | 2002/07/16:第一次完成吧? 2003/02/06:重新编排与加入 FAQ 2004/05/01:在shutdown的指令部分,修改 shutdown -k "messages" 成为 shutdown -k now "messages",很抱歉,写错了! 2005/06/17:将原本的文章移动到 [这里](http://linux.vbird.org/linux_basic/0160startlinux/0160startlinux.php) 2005/06/27:终于写完了!写的真久~没办法,将 man page 扩大解释,增加的幅度还挺多的! 2005/08/23:刚刚才发现,那个man page的内部指令说明中, n 与 N 的说明错误了!已订正! 2007/12/08:通过网友sheaushyong的发现,之前将Live CD中,说明要挂载 / 才 fsck 是不对的! 2008/09/03:将原本的Fedora Core IV的文章移动到[此处](http://linux.vbird.org/linux_basic/0160startlinux/0160startlinux-fc4.php)。 2008/09/08:加入了一些图示说明,尤其是info的部分多了一个示意图! 2008/09/09:加入了[nano](../Text/index.html#nano)这个简单的文书编辑器说明,以及[情境仿真题](../Text/index.html#ex)的解释! 2009/09/17:修订了显示的信息,将图片重新抓图汇整。 2015/05/21:基于 CentOS 5.x 的首次开机说明文档移到[这里](http://linux.vbird.org/linux_basic/0160startlinux//0160startlinux-centos5.php)了! 6 | -------------------------------------------------------------------------------- /chapter_19/19.5重点回顾.md: -------------------------------------------------------------------------------- 1 | # 19.5 重点回顾 2 | 3 | - Linux 不可随意关机,否则容易造成文件系统错乱或者是其他无法开机的问题; 4 | - 开机流程主要是:BIOS、MBR、Loader、kernel+initramfs、systemd 等流程 5 | - Loader 具有提供菜单、载入核心文件、转交控制权给其他 loader 等功能。 6 | - boot loader 可以安装在 MBR 或者是每个分区的 boot sector 区域中 7 | - initramfs 可以提供核心在开机过程中所需要的最重要的模块,通常与磁盘及文件系统有关的模块; 8 | - systemd 的配置文件为主要来自 /etc/systemd/system/default.target 项目; 9 | - 额外的设备与模块对应,可写入 /etc/modprobe.d/\*.conf 中; 10 | - 核心模块的管理可使用 lsmod, modinfo, rmmod, insmod, modprobe 等指令; 11 | - modprobe 主要参考 /lib/modules/\$(uanem -r)/modules.dep 的设置来载入与卸载核心模块; 12 | - grub2 的配置文件与相关文件系统定义文件大多放置于 /boot/grub2 目录中,配置文件名为 grub.cfg 13 | - grub2 对磁盘的代号设置与 Linux 不同,主要通过侦测的顺序来给予设置。如 (hd0) 及 (hd0,1) 等。 14 | - grub.cfg 内每个菜单与 menuentry 有关,而直接指定核心开机时,至少需要 linux16 及 initrd16 两个项目 15 | - grub.cfg 内设置 loader 控制权移交时,最重要者为 chainloader +1 这个项目。 16 | - 若想要重建 initramfs ,可使用 dracut 或 mkinitrd 处理 17 | - 重新安装 grub2 到 MBR 或 boot sector 时,可以利用 grub2-install 来处理。 18 | - 若想要进入救援模式,可于开机菜单过程中,在 linux16 的项目后面加入“ rd.break ”或“ init=/bin/bash ”等方式来进入救援模式。 19 | - 我们可以对 grub2 的个别菜单给予不同的密码。 20 | -------------------------------------------------------------------------------- /chapter_21/21.9参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 21.9 参考资料与延伸阅读 2 | 3 | - [\[1\]](#192.html#ac1)GNU 的 make 网页: 4 | - 几种常见加密机制的全名: md5 (Message-Digest algorithm 5) sha (Secure Hash Algorithm) des (Data Encryption Standard) 5 | - 洪朝贵老师的 C 程序语言: 6 | 7 | 2002/08/21:第一次完成 2003/02/11:重新编排与加入 FAQ 2004/03/25:原本是 Tarball 与 RPM ,本日开始将 Tarball 与 RPM 分开说明与讲解(后续会花好几天喔!),       最重要的是 Source code 的说明,并提到相关的 gcc compile 功能等等! 2004/04/10:经历了当兵中的无奈生活,终于将这篇给他完工了~(当时的鸟哥在将军渔港与青山港~) 2005/09/30:旧版文章 (Tarball 与 RPM 的简单说明) 移动到 [此处](http://linux.vbird.org/linux_basic/0520softwaremanager/0520rpmtarball.php) 。 2005/10/01:将风格作个转变之外,也将一些测试移转到 FC4 上面进行! 2008/01/10:感谢网友 ayttk 的说明,原本的 make 语法网页已经移动到其他地方了,请参考 [这里](../Text/index.html#20080110)。 2009/06/04:将基于 FC4 撰写的文章移动到 [此处](http://linux.vbird.org/linux_basic/0520source/0505.html-fc4.php) 2009/06/20:增加一个小练习,需要使用到 X software development 的软件群组喔! 2009/09/15:加入一个情境仿真,其实有点功力练功练功而已的习题啰! -------------------------------------------------------------------------------- /chapter_5/5.4重点回顾.md: -------------------------------------------------------------------------------- 1 | # 5.4 重点回顾 2 | 3 | - Linux的每个文件中,可分别给予使用者、群组与其他人三种身份个别的 rwx 权限; 4 | - 群组最有用的功能之一,就是当你在团队开发资源的时候,且每个帐号都可以有多个群组的支持; 5 | - 利用ls -l显示的文件属性中,第一个字段是文件的权限,共有十个位,第一个位是文件类型, 接下来三个为一组共三组,为使用者、群组、其他人的权限,权限有r,w,x三种; 6 | - 如果文件名之前多一个“ . ”,则代表这个文件为“隐藏文件”; 7 | - 若需要root的权限时,可以使用 su - 这个指令来切换身份。处理完毕则使用 exit 离开 su 的指令环境。 8 | - 更改文件的群组支持可用chgrp,修改文件的拥有者可用chown,修改文件的权限可用chmod 9 | - chmod修改权限的方法有两种,分别是符号法与数字法,数字法中r,w,x分数为4,2,1; 10 | - 对文件来讲,权限的性能为: 11 | - r:可读取此一文件的实际内容,如读取文本文件的文字内容等; 12 | - w:可以编辑、新增或者是修改该文件的内容(但不含删除该文件); 13 | - x:该文件具有可以被系统执行的权限。 14 | - 对目录来说,权限的性能为: 15 | - r (read contents in directory) 16 | - w (modify contents of directory) 17 | - x (access directory) 18 | - 要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给; 19 | - 能否读取到某个文件内容,跟该文件所在的目录权限也有关系 (目录至少需要有 x 的权限)。 20 | - Linux文件名的限制为:单一文件或目录的最大容许文件名为 255 个英文字符或 128 个中文字符; 21 | - 根据FHS的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下 22 | - FHS订定出来的四种目录特色为:shareable, unshareable, static, variable等四类; 23 | - FHS所定义的三层主目录为:/, /var, /usr三层而已; 24 | - 绝对路径文件名为从根目录 / 开始写起,否则都是相对路径的文件名。 25 | -------------------------------------------------------------------------------- /chapter_17/17.6重点回顾.md: -------------------------------------------------------------------------------- 1 | # 17.6 重点回顾 2 | 3 | - 早期的服务管理使用 systemV 的机制,通过 /etc/init.d/\*, service, chkconfig, setup 等指令来管理服务的启动/关闭/默认启动; 4 | - 从 CentOS 7.x 开始,采用 systemd 的机制,此机制最大功能为平行处理,并采单一指令管理 (systemctl),开机速度加快! 5 | - systemd 将各服务定义为 unit,而 unit 又分类为 service, socket, target, path, timer 等不同的类别,方便管理与维护 6 | - 启动/关闭/重新启动的方式为: systemctl \[start\|stop\|restart\] unit.service 7 | - 设置默认启动/默认不启动的方式为: systemctl \[enable\|disable\] unit.service 8 | - 查询系统所有启动的服务用 systemctl list-units --type=service 而查询所有的服务 (含不启动) 使用 systemctl list-unit-files --type=service 9 | - systemd 取消了以前的 runlevel 概念 (虽然还是有相容的 target),转而使用不同的 target 操作环境。常见操作环境为 multi-user.targer 与 graphical.target。 不重新开机而转不同的操作环境使用 systemctl isolate unit.target,而设置默认环境则使用 systemctl set-default unit.target 10 | - systemctl 系统默认的配置文件主要放在 /usr/lib/systemd/system,管理员若要修改或自行设计时,则建议放在 /etc/systemd/system/ 目录下。 11 | - 管理员应使用 man systemd.unit, man systemd.service, man systemd.timer 查询 /etc/systemd/system/ 下面配置文件的语法, 并使用 systemctl daemon-reload 载入后,才能自行撰写服务与管理服务喔! 12 | - 除了 atd 与 crond 之外,可以 通过 systemd.timer 亦即 timers.target 的功能,来使用 systemd 的时间管理功能。 13 | - 一些不需要的服务可以关闭喔! -------------------------------------------------------------------------------- /chapter_22/22.7参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 22.7 参考资料与延伸阅读 2 | 3 | - [\[1\]](#200.html#ac1)GNU Privacy Guard (GPG) 官方网站的介绍: 4 | - RPM 包装文件管理程序: 5 | - 中文 RPM HOW-TO: 6 | - RPM 的使用: 7 | - 大家来作 RPM : 8 | - 一本 RPM 的原文书: 9 | - 台湾网络危机处理小组: 10 | 11 | 2002/08/21:第一次完成 2003/02/11:重新编排与加入 FAQ 2004/04/11:已经完成了 [Source code 与 Tarball] ,开始进行 RPM 与 SRPM 的介绍!(需要耗时多日啊!因为又要进兵营去了!) 2004/04/20:终于给他熬出来啦!又是过了两个休假期间~啊!给我退伍令、其余免谈! 2005/10/02:旧版的 SRPM 数据已经移动到 [此处](http://linux.vbird.org/linux_basic/0520softwaremanager/0530srpm.php) 。 2005/10/03:旧版的针对 Red Hat 与 Mandriva 的版本移动到 [此处](http://linux.vbird.org/linux_basic/0520softwaremanager/0520rpm_and_srpm.php)。 2005/10/03:将原本去年的版本改为 FC4 为范例的模样! 2009/06/20:原本的针对 FC4 写的旧版文章移动到[此处](http://linux.vbird.org/linux_basic/0520softwaremanager/0520rpm_and_srpm-fc4.php)。 2009/09/18:加入了简单的情境仿真,也加入了一些关于 yum 的习题喔! 2015/10/16:加入了 ELRepo 这个专门提供核心给 CentOS 使用的软件库功能介绍! -------------------------------------------------------------------------------- /chapter_1/1.5重点回顾.md: -------------------------------------------------------------------------------- 1 | # 1.5 重点回顾 2 | 3 | - 操作系统(Operation System)主要在管理与驱动硬件,因此必须要能够管理内存、管理设备、 负责行程管理以及系统调用等等。因此,只要能够让硬件准备妥当(Ready)的情况, 就是一个阳春的操作系统了。 4 | - Unix的前身是由贝尔实验室(Bell lab.)的Ken Thompson利用组合语言写成的, 后来在1971-1973年间由Dennis Ritchie以C程序语言进行改写,才称为Unix。 5 | - 1977年由Bill Joy释出BSD (Berkeley Software Distribution),这些称为Unix-like的操作系统。 6 | - 1984年由Andrew Tanenbaum开始制作Minix操作系统,该系统可以提供源代码以及软件; 7 | - 1984年由Richard Stallman提倡GNU计划,倡导自由软件(Free software), 强调其软件可以“自由的取得、复制、修改与再发行”,并规范出GPL授权模式, 任何GPL(General Public License)软件均不可单纯仅贩卖其软件,也不可修改软件授权。 8 | - 1991年由芬兰人Linus Torvalds开发出Linux操作系统。简而言之,Linux成功的地方主要在于: Minix(Unix), GNU, Internet, POSIX 及虚拟团队的产生。 9 | - 符合 Open source 理念的授权相当多,比较知名的如 Apache / BSD / GPL / MIT 等。 10 | - Linux本身就是个最阳春的操作系统,其开发网站设立在[http://www.kernel.org](http://www.kernel.org/),我们亦称Linux操作系统最底层的数据为“核心(Kernel)”。 11 | - 从 Linux kernel 3.0 开始,已经舍弃奇数、偶数的核心版本规划,新的规划使用主线版本 (MainLine) 为依据, 并提供长期支持版本 (longterm) 来加强某些功能的持续维护。 12 | - Linux distributions的组成含有:“Linux Kernel + Free Software + Documentations(Tools) + 可完整安装的程序”所制成的一套完整的系统。 13 | - 常见的 Linux distributions 分类有“商业、社群”分类法,或“RPM、DPKG”分类法 14 | - 学习 Linux 最好从头由基础开始学习,找到一本适合自己的书籍,加强实作才能学会 -------------------------------------------------------------------------------- /chapter_9/9.7参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 9.7 参考资料与延伸阅读 2 | 3 | - [\[1\]](#85.html#ac1)常见文书编辑器专案计划链接: 4 | - emacs: 5 | - pico: [https://en.wikipedia.org/wiki/Pico\_(text_editor)](https://en.wikipedia.org/wiki/Pico_(text_editor)) 6 | - nano: 7 | - joe: 8 | - vim: [http://www.vim.org](http://www.vim.org/) 9 | - 常见文书编辑器比较: 10 | - 维基百科的文书编辑器比较: 11 | - 维基百科:ASCII 的代码与图示对应表: 12 | - 关于 vim 是什么的“中文”说明:。 13 | - vim 补齐功能介绍: 14 | 15 | 2002/04/05:第一次完成 2003/02/07:重新编排与加入 FAQ 2003/02/25:新加入本章节与 LPI 的相关性说明! 2005/07/28:将旧文章移动到 [这里](http://linux.vbird.org/linux_basic/0310vi/0310vi.php) 。 2005/08/01:加入果正兄文章的参考,还有查阅 vim 官方网站的数据! 2008/12/18:将原本针对 FC4 版本的文章移动到 [此处](http://linux.vbird.org/linux_basic/0310vi/0310vi-fc4.php) 2009/01/13:这么简单的一篇改写,竟改了一个月!原因只是期末考将近太忙了~ 2009/08/20:加入实作题,编辑简答题,加入 vim 指令示意图等 -------------------------------------------------------------------------------- /chapter_20/20.9参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 20.9 参考资料与延伸阅读 2 | 3 | - [\[1\]](#182.html#ac1)维基百科的备份说明: 4 | - [\[2\]](#182.html#ac2)关于 differential 与 incremental 备份的优缺点说明: 5 | - [\[3\]](#182.html#ac3)一些备份计划的实施: 6 | 7 | 2005/10/25:准备准备~写一些跟硬件比较有关系的数据! 2005/11/08:准备完毕 USB 与 lm_sensors 的部分了~啊!拖了真久~还有 RAID 的说明也差不多哩! 2005/11/09:加入了 FC4 的setup 指令,尤其是打印机的部分,可以参考参考! 2005/11/10:终于将 iSCSI 的设备写好了~这部份真的是很有趣!不过,一般使用者可能碰不到就是了。 2005/11/13:终于将 CUPS 架构设置好自己的 Printer 部分了! 2005/11/14:连同 LVM 也大致的给他写完了!那个 resize2fs 指令确实有趣! 2005/11/25:加入一个简单的练习题~利用 dd 配合 resize2fs 来制作备份的数据! 2009/04/30:将 LVM 移动到 [第十五章](../Text/index.html#lvm) ,且拿掉 [iSCSI 的说明](http://linux.vbird.org/linux_basic/0610hardware/0610hardware-fc4.php)了。 2009/04/30:将旧的基于 FC4 撰写的版本移动到 [此处](http://linux.vbird.org/linux_basic/0610hardware/0610hardware-fc4.php) 。 2009/06/03:加入 udev 与 hal 的简单说明! 2009/09/15:简单修订一些语句,修改章节的习题,并没有改到什么重要的信息。 2015/08/31:将旧的基于 CentOS 5 的版本移动到 [这里](http://linux.vbird.org/linux_basic/0610hardware/0610hardware-centos5.php)。 2015/09/xx:将备份策略的文章也挪到本章来,同时移除很多数据,包括 CUPS 打印机等等都拿掉了! -------------------------------------------------------------------------------- /chapter_23/23.6参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 23.6 参考资料与延伸阅读 2 | 3 | - [\[1\]](#207.html#ac1)维基百科对 X Window 的介绍: 4 | - [\[2\]](#207.html#ac2)X Server/X client 与网络相关性的参考图示: 5 | - [\[3\]](#207.html#ac3)系统的 man page: man xinit 、 man Xorg 、 man startx 6 | - [\[4\]](#207.html#ac4)一些与中文字体有关的网页链接: 洪朝贵老师评论员的字体设置: 7 | - X 相关的官方网站: X.org 官方网站 ()、 XFree86 官方网站 () 8 | 9 | 2003/02/12:第一次完成 2005/06/29:将旧的文章移动到 [这里](http://linux.vbird.org/linux_basic/0590xwindow/0590xwindow.php) 。如果你需要旧版的 xf86config 与相关的工具,则请前往该旧文章查阅! 2005/07/11:经历了许多的时间,将主机的配置文件重复改了改,终于完成一些简单的 X 测试! 2006/11/07:经由网友[x1215 这一篇](http://phorum.vbird.org/viewtopic.php?t=27157)的介绍,得知该网站,赶紧去处理! 2009/07/03:将旧版基于 FC4 的版本移动到[此处](http://linux.vbird.org/linux_basic/0590xwindow/0590xwindow-fc4.php) 2009/07/15:奋战好几天,将驱动程序安装加上,同时加入字体管理功能。 2009/07/28:网友 LazyBug Chan 兄热情回报,使用 XFCE 的 Ubuntu 是 Xubuntu 这个分支!感谢回报! 2009/08/07:加入 Window Manger 的全名与链接 2015/09/11:将旧的基于 CentOS 5.x 的版本移动到 [此处](http://linux.vbird.org/linux_basic/0590xwindow//0590xwindow/0590xwindow-centos5.php) -------------------------------------------------------------------------------- /chapter_6/6.7重点回顾.md: -------------------------------------------------------------------------------- 1 | # 6.7 重点回顾 2 | 3 | - 绝对路径:“一定由根目录 / 写起”;相对路径:“不由 / 写起,而是由相对当前目录写起” 4 | - 特殊目录有:., .., -, \~, \~account需要注意; 5 | - 与目录相关的指令有:cd, mkdir, rmdir, pwd 等重要指令; 6 | - rmdir 仅能删除空目录,要删除非空目录需使用“ rm -r ”指令; 7 | - 使用者能使用的指令是依据 PATH 变量所规定的目录去搜寻的; 8 | - ls 可以检视文件的属性,尤其 -d, -a, -l 等选项特别重要! 9 | - 文件的复制、删除、移动可以分别使用:cp, rm , mv等指令来操作; 10 | - 检查文件的内容(读档)可使用的指令包括有:cat, tac, nl, more, less, head, tail, od 等 11 | - cat -n 与 nl 均可显示行号,但默认的情况下,空白行会不会编号并不相同; 12 | - touch 的目的在修改文件的时间参数,但亦可用来创建空文件; 13 | - 一个文件记录的时间参数有三种,分别是 access time(atime), status time (ctime), modification time(mtime),ls 默认显示的是 mtime。 14 | - 除了传统的rwx权限之外,在Ext2/Ext3/Ext4/xfs文件系统中,还可以使用chattr与lsattr设置及观察隐藏属性。 常见的包括只能新增数据的 +a 与完全不能更动文件的 +i 属性。 15 | - 新建文件/目录时,新文件的默认权限使用 umask 来规范。默认目录完全权限为drwxrwxrwx, 文件则为-rw-rw-rw-。 16 | - 文件具有SUID的特殊权限时,代表当使用者执行此一binary程序时,在执行过程中使用者会暂时具有程序拥有者的权限 17 | - 目录具有SGID的特殊权限时,代表使用者在这个目录下面新建的文件之群组都会与该目录的群组名称相同。 18 | - 目录具有SBIT的特殊权限时,代表在该目录下使用者创建的文件只有自己与root能够删除! 19 | - 观察文件的类型可以使用 file 指令来观察; 20 | - 搜寻指令的完整文件名可用 which 或 type ,这两个指令都是通过 PATH 变量来搜寻文件名; 21 | - 搜寻文件的完整文件名可以使用 whereis 找特定目录或 locate 到数据库去搜寻,而不实际搜寻文件系统; 22 | - 利用 find 可以加入许多选项来直接查询文件系统,以获得自己想要知道的文件名。 23 | -------------------------------------------------------------------------------- /chapter_14/14.6参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 14.6 参考资料与延伸阅读 2 | 3 | - [\[1\]](#130.html#ac1)相关的 XFS 文件系统的 quota 说明,可以参考下面的文件: 4 | - XFS 官网说明: 5 | 6 | - [\[2\]](#130.html#ac2)若想对 RAID 有更深入的认识,可以参考下面的链接与书目: 杨振和、“操作系统导论:第十一章”、学贯出版社,2006 7 | 8 | - [\[3\]](#130.html#ac3)详细的 mdstat 说明也可以参考如下网页: 9 | 10 | - [\[4\]](#130.html#ac4)徐秉义老师在网管人杂志的文章,文章篇名分别是: 11 | - 磁盘管理:SoftRAID 与 LVM 综合实做应用 (上) 12 | - 磁盘管理:SoftRAID 与 LVM 综合实做应用 (下)目前文章已经找不到了~可能需要 google 一下旧文章的备份才能看到了! 13 | 14 | 2002/07/14:第一次完成 2003/02/10:重新编排与加入 FAQ 2003/09/02:加入 quotacheck 发生错误时的解决方法。 2005/09/06:将旧的文章移动到 [此处](http://linux.vbird.org/linux_basic/0420quota/0420quota.php) 。 2005/09/06:进行版面风格的转换,并且进行数据的查询,加入 repquota 的简单说明而已! 2009/03/04:将原本旧的基于 FC4 的文件移动到 [此处](http://linux.vbird.org/linux_basic/0420quota/0420quota-fc4.php) 。 2009/03/06:加入 warnquota 这玩意儿!挺有趣的哩! 2009/03/12:加入了 software RAID 与 LVM 的加强说明,尤其是 LVM 的快照 (snapshot) 的说明! 2009/09/10:修改一些字样之外,增加情境仿真,以及后续的简答题部分题目。 2012/06/14:在解释 PE 的部分有错误!是 [Physical Extent 而不是 Physical Extend](../Text/index.html#20120614) !真抱歉! -------------------------------------------------------------------------------- /chapter_2/2.5本章习题.md: -------------------------------------------------------------------------------- 1 | # 2.5 本章习题 2 | 3 | (要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看) 实作题部分: 4 | 5 | - 请分析你的家用计算机,以你的硬件配备来计算可能产生的耗电量,最终再以计算出来的总瓦数乘上你可能开机的时间, 以推估出一年你可能会花费多少钱在你的这部主机上面?硬件里面包括 CPU/硬盘/主板/内存/显卡/屏幕等等都会消耗电力,同时电源供应器也会消耗一部份的电力。 若有实际测量工具时,请使用测量结果来计算。若无测量工具,请上网找出每个元件的最大理论消耗功率来计算。 6 | 7 | 问答题部分: 8 | 9 | - 一部计算机主机是否只要 CPU 够快,整体速度就会提高?不见得!一部计算机系统的速度与整体计算机系统的运行有关,每个元件皆会影响计算机的速度! 这包括了内存、CPU、AGP与显卡速度,硬盘的速度以及其他相关的输入输出接口等等! 所以,如果您的系统是升级的,那么还得必须要注意各个旧元件是否可以保留, 或者旧的可以用的元件必须要舍弃! 10 | 11 | - Linux 对于硬件的要求需要的考虑为何?是否一定要很高的配备才能安装 Linux ?Linux 对于硬件的要求是因“服务种类、服务范围及主机的角色”而定的。例如一部专门用来运算数值解析的 Linux 运算工作站,需要比较强大的 CPU 与足够的 RAM 来进行工作,至于一般家庭用的仅用来做为 ADSL 宽带分享器的 Linux 主机,则只要 P-III 等级的计算机,甚至 P-II 系列的等级,就可以很顺利的运行 Linux 了。 12 | 13 | - 一部好的主机在安装之前,最好先进行规划,哪些是必定需要注意的 Linux 主机规划事项?依据上一题的答案内容,我们知道 Linux 对于硬件的要求是“因地制宜”地!所以,要进行 Linux 的安装之前,一定需要规划 Linux 主机的定位与角色!因此, Linux 的主机是否开放网络服务?这部主机的未来规划中,是否需要进行大量的运算?这 部主机是否需要提供很大的硬盘容量来服务客户端的使用?这部主机预计开放的网络服务内容? 等等,都是需要经过考虑的,尤其未来的“套件选择安装”上面,更需要依据这些规划来设置。 14 | 15 | - 请写下下列配备中,在 Linux 的设备文件名: SATA硬盘: CDROM: 打印机: 软盘机: 16 | 17 | - SATA硬盘:/dev/sd\[a-d\] 18 | - CDROM:/dev/cdrom 19 | - 打印机:/dev/lp\[0-2\] 20 | - 软盘机:/dev/fd\[0-1\] 21 | 22 | - 目前在个人计算机上面常见的硬盘与主板的连接接口有哪两个?有内置的 SATA 界面与外接式的 USB 界面 -------------------------------------------------------------------------------- /chapter_6/6.9参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 6.9 参考资料与延伸阅读 2 | 3 | - 小洲大大回答 SUID/SGID 的一篇讨论: 4 | 5 | 2002/06/26:第一次完成 2003/02/06:重新编排与加入 FAQ 2003/02/07:加入 basename 与 dirname 的说明 2004/03/15:将链接文件的内容移动至下一章节:[Linux 磁盘与硬件管理] 2005/07/19:将旧的文章移动到 [这里](http://linux.vbird.org/linux_basic/0220filemanager/0220filemanager.php) 了。 2005/07/20:呼呼!好不容易啊~在被台风尾扫到的七月份,终于写完这个咚咚~ 2005/07/21:在 find 部分,多增加了范例九,以及关于利用文件大小 (size) 搜寻的功能。 2005/07/25:在 SUID/SGID/SBIT 部分,依据 netman 与 小州 兄的建议,修改了部分的叙述! 2006/04/09:在 rmdir 的范例内,少了一个 -p 的参数! 2006/06/15:经由讨论区网友 dm421 的通知,发现 chattr 的部分关于 d 写错了,已订正。 2006/08/22:增加 rm 的一些简单的说明!尤其是“ rm ./-aaa- ”的删除方法! 2008/09/23:将针对FC4版写的数据移到[此处](http://linux.vbird.org/linux_basic/0220filemanager/0220filemanager-fc4.php) 2008/09/29:加入[权限与指令的关系]一节,并新增[情境仿真]题目喔!大家帮忙除错一下! 2009/08/18:加入符号法的方式来处理 SUID/SGID/SBIT 啰! 2009/08/26:感谢网友告知习题部分,找出 /etc 下面容量大于 50k 的那题,应使用 -type f 或 ls -ld 来避免目录内重复显示! 2015/06/04:将旧的基于 CentOS 5 的文章移动到[此处](http://linux.vbird.org/linux_basic/0220filemanager/0220filemanager-centos5.php)。 2015/06/24:感谢网友“学习日记博客”的告知,whereis 以前一直写错了!这次给它订正一下!感谢! 2015/08/25:感谢网友“学习日记博客”的告知,cp 的参数内, -a 不仅代表 -pdr !因为有 SELinux 的影响的关系! 6 | 7 | ------------------------------------------------------------------------ 8 | -------------------------------------------------------------------------------- /chapter_13/13.8重点回顾.md: -------------------------------------------------------------------------------- 1 | # 13.8 重点回顾 2 | 3 | - Linux 操作系统上面,关于帐号与群组,其实记录的是 UID/GID 的数字而已; 4 | - 使用者的帐号/群组与 UID/GID 的对应,参考 /etc/passwd 及 /etc/group 两个文件 5 | - /etc/passwd 文件结构以冒号隔开,共分为七个字段,分别是“帐号名称、密码、UID、GID、全名、主文件夹、shell” 6 | - UID 只有 0 与非为 0 两种,非为 0 则为一般帐号。一般帐号又分为系统帐号 (1\~999) 及可登陆者帐号 (大于 1000) 7 | - 帐号的密码已经移动到 /etc/shadow 文件中,该文件权限为仅有 root 可以更动。该文件分为九个字段,内容为“ 帐号名称、加密密码、密码更动日期、密码最小可变动日期、密码最大需变动日期、密码过期前警告日数、密码失效天数、 帐号失效日、保留未使用” 8 | - 使用者可以支持多个群组,其中在新建文件时会影响新文件群组者,为有效群组。而写入 /etc/passwd 的第四个字段者, 称为初始群组。 9 | - 与使用者创建、更改参数、删除有关的指令为:useradd, usermod, userdel等,密码创建则为 passwd; 10 | - 与群组创建、修改、删除有关的指令为:groupadd, groupmod, groupdel 等; 11 | - 群组的观察与有效群组的切换分别为:groups 及 newgrp 指令; 12 | - useradd 指令作用参考的文件有: /etc/default/useradd, /etc/login.defs, /etc/skel/ 等等 13 | - 观察使用者详细的密码参数,可以使用“ chage -l 帐号 ”来处理; 14 | - 使用者自行修改参数的指令有: chsh, chfn 等,观察指令则有: id, finger 等 15 | - ACL 的功能需要文件系统有支持,CentOS 7 默认的 XFS 确实有支持 ACL 功能! 16 | - ACL 可进行单一个人或群组的权限管理,但 ACL 的启动需要有文件系统的支持; 17 | - ACL 的设置可使用 setfacl ,查阅则使用 getfacl ; 18 | - 身份切换可使用 su ,亦可使用 sudo ,但使用 sudo 者,必须先以 visudo 设置可使用的指令; 19 | - PAM 模块可进行某些程序的验证程序!与 PAM 模块有关的配置文件位于 /etc/pam.d/ *及 /etc/security/* 20 | - 系统上面帐号登陆情况的查询,可使用 w, who, last, lastlog 等; 21 | - 线上与使用者交谈可使用 write, wall,离线状态下可使用 mail 传送邮件! -------------------------------------------------------------------------------- /chapter_5/5.6参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 5.6 参考资料与延伸阅读 2 | 3 | - [\[1\]](#47.html#ac1)各种文件系统的文件名长度限制,维基百科: 4 | - [\[2\]](#47.html#ac2)FHS 标准的相关说明: 维基百科简易说明: FHS 2.3 (2004 年版)的标准文件: FHS 3.0 (2015 年版)的标准文件: 5 | - 关于 Journaling 日志式文章的相关说明 6 | 7 | 2002/07/18:第一次完成 2003/02/06:重新编排与加入FAQ 2005/06/28:将旧的数据移动到 [这里](http://linux.vbird.org/linux_basic/0210filepermission//0210filepermission.php) 2005/07/15:呼呼~终于改完成了~这次的修订当中,加入了 FHS 的说明,希望大家能够比较清楚 Linux 的目录配置! 2005/08/05:修订了最大文件名字符,应该是 255 才对!另外,加入了“文件名限制”的部分! 2005/09/03:修订了目录权限相关的说明,将原本仅具有 r 却写成无法使用 ls 浏览的说明数据移除! 2008/09/08:旧的针对FC4所写的文章移动到[此处](http://linux.vbird.org/linux_basic/0210filepermission//0210filepermission-fc4.php) 2008/09/20:针对FHS加强说明了一下,分为/, /usr, /var三层来个别说明!并非抄袭官网的数据而已喔! 2008/09/23:经过一场大感冒,停工了四、五天,终于还是给他完工了!^\_^ 2008/10/21:原本的第四小节 Linux 的文件系统,因为与第八章重复性太高,将他移除了! 2009/08/01:加入了 lsb_release 的相关说明! 2009/08/18:调整一下显示的情况,使得更易读~ 2015/06/02:将原本基于 CentOS 5.x 撰写的就文章放在[这里](http://linux.vbird.org/linux_basic/0210filepermission//0210filepermission-centos5.php)了喔! 8 | -------------------------------------------------------------------------------- /chapter_10/10.7重点回顾.md: -------------------------------------------------------------------------------- 1 | # 10.7 重点回顾 2 | 3 | - 由于核心在内存中是受保护的区块,因此我们必须要通过“ Shell ”将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作 4 | - 学习 shell 的原因主要有:命令行的 shell 在各大 distribution 都一样;远端管理时命令行速度较快; shell 是管理 Linux 系统非常重要的一环,因为 Linux 内很多控制都是以 shell 撰写的。 5 | - 系统合法的 shell 均写在 /etc/shells 文件中; 6 | - 使用者默认登陆取得的 shell 记录于 /etc/passwd 的最后一个字段; 7 | - bash 的功能主要有:命令编修能力;命令与文件补全功能;命令别名设置功能;工作控制、前景背景控制;程序化脚本;万用字符 8 | - type 可以用来找到执行指令为何种类型,亦可用于与 which 相同的功能; 9 | - 变量就是以一组文字或符号等,来取代一些设置或者是一串保留的数据 10 | - 变量主要有环境变量与自订变量,或称为全域变量与区域变量 11 | - 使用 env 与 export 可观察环境变量,其中 export 可以将自订变量转成环境变量; 12 | - set 可以观察目前 bash 环境下的所有变量; 13 | - \$? 亦为变量,是前一个指令执行完毕后的回传值。在 Linux 回传值为 0 代表执行成功; 14 | - locale 可用于观察语系数据; 15 | - 可用 read 让使用者由键盘输入变量的值 16 | - ulimit 可用以限制使用者使用系统的资源情况 17 | - bash 的配置文件主要分为 login shell 与 non-login shell。login shell 主要读取 /etc/profile 与 \~/.bash_profile, non-login shell 则仅读取 \~/.bashrc 18 | - 在使用 vim 时,若不小心按了 \[crtl\]+s 则画面会被冻结。你可以使用 \[ctrl\]+q 来解除冻结 19 | - 万用字符主要有: \*, ?, \[\] 等等 20 | - 数据流重导向通过 >, 2>, \< 之类的符号将输出的信息转到其他文件或设备去; 21 | - 连续命令的下达可通过 ; && \|\| 等符号来处理 22 | - 管线命令的重点是:“管线命令仅会处理 standard output,对于 standard error output 会予以忽略” “管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。” 23 | - 本章介绍的管线命令主要有:cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand, split, xargs 等。 -------------------------------------------------------------------------------- /chapter_17/17.8参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 17.8 参考资料与延伸阅读 2 | 3 | - freedesktop.org 的重要介绍: 4 | - Red Hat 官网的介绍:[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7 /html/System_Administrators_Guide/chap-Managing_Services_with_systemd.html](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/chap-Managing_Services_with_systemd.html) 5 | - man systemd.unit, man systemd.service, man systemd.kill, man systemd.timer, man systemd.time 6 | - 关于 timer 的相关介绍: 7 | - archlinux.org: 8 | - Janson's Blog: 9 | - freedesktop.org: 10 | 11 | 2002/07/10:第一次完成 2003/02/11:重新编排与加入 FAQ 2005/10/03:将原本旧版的数据移动到 [此处](http://linux.vbird.org/linux_basic/0560daemons/0560daemons.php) 。 2005/10/12:经过一段时间的修订,将原本在 [系统设置工具](http://linux.vbird.org/linux_basic/9999old/0550setup.php) 的内容移动到此,并新增完毕! 2009/03/25:将原本旧的基于 FC4 的数据移动到[此处](http://linux.vbird.org/linux_basic/0560daemons/0560daemons-fc4.php)。 2009/04/02:加入一些默认启动的服务说明。 2009/09/14:加入情境仿真,并且修订课后练习题的部分了。 2015/08/10:将旧的基于 CentOS 5 的版本移动到[这里](http://linux.vbird.org/linux_basic/0560daemons//0560daemons-centos5.php)。 -------------------------------------------------------------------------------- /chapter_8/8.9参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 8.9 参考资料与延伸阅读 2 | 3 | - 台湾学术网络管理文件:Backup Tools in UNIX(Linux): 4 | 5 | - 中文 How to 文件计划 (CLDP): 6 | 7 | - 熊宝贝工作记录之: Linux 烧录实作: 8 | 9 | - PHP5 网管实验室: 10 | 11 | - CentOS 7.x 之 man xfsdump 12 | 13 | - CentOS 7.x 之 man xfsrestore 14 | 15 | 2003/02/09:第一次完成 2003/05/05:修改 tar 的部分内容,尤其是 -P 这个参数的配合用法 2005/07/26:将旧有的文章移动到 [这里](http://linux.vbird.org/linux_basic/0240tarcompress/0240tarcompress.php) 2005/07/27:大略修改了一些风格,另外,动作较大的是在范例的部分! 2005/08/29:加入了 [dd](../Text/index.html#dd) 这个有趣的指令喔! 2006/05/02:将原本“tar -zxvpf /tmp/etc.tar.gz /etc”修改为“tar -zcvpf /tmp/etc.tar.gz /etc” 感谢讨论区网友 chinu 提供的信息。 2008/10/31:将原本针对 FC4 的旧版本移动到[此处](http://linux.vbird.org/linux_basic/0240tarcompress//0240tarcompress-fc4.php) 2008/12/18:这次的改版在这一章添加了不少东西!尤其是将 cpio 与 dd 的范例重新做个整理!并加入 dump/restore, mkisofs/cdrecord 2009/08/20:加入情境仿真的题目。 2015/06/29:将就的基于 CentOS 5.x 的版本移动到[此处](http://linux.vbird.org/linux_basic/0240tarcompress//0240tarcompress-centos5.php) 2015/06/29:因为 compress 几乎没人在用了,所以这一章将他拿掉,而加入的是新的 xz 喔! 2015/07/16:竟然忘记复原 /etc 需要恢复 SELinux type 的说明!请参考[这一个项目](../Text/index.html#untar)的说明喔! 16 | -------------------------------------------------------------------------------- /chapter_0/0.5重点回顾.md: -------------------------------------------------------------------------------- 1 | # 0.5 重点回顾 2 | 3 | - 计算机的定义为:“接受使用者输入指令与数据,经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的信息”; 4 | - 电脑的五大单元包括:输入单元、输出单元、控制单元、算数逻辑单元、存储单元五大部分。其中CPU占有控制、算术逻辑单元,存储单元又包含内存与辅助内存; 5 | - 数据会流进/流出内存是CPU所发布的控制命令,而CPU实际要处理的数据则完全来自于内存; 6 | - CPU依设计理念主要分为:精简指令集(RISC)与复杂指令集(CISC)系统; 7 | - 关于CPU的频率部分:外频指的是CPU与外部元件进行数据传输时的速度,倍频则是CPU内部用来加速工作性能的一个倍数, 两者相乘才是CPU的频率速度; 8 | - 新的 CPU 设计中,已经将北桥的内存控制芯片整合到 CPU 内,而 CPU 与内存、显卡沟通的总线通常称为系统总线。 南桥就是所谓的输入输出(I/O)总线,主要在联系硬盘、USB、网卡等周边设备; 9 | - CPU每次能够处理的数据量称为字组大小(word size),字组大小依据CPU的设计而有32位与64位。 我们现在所称的电脑是32或64位主要是依据这个 CPU解析的字组大小而来的! 10 | - 个人电脑的内存主要元件为动态随机存取内存(Dynamic Random Access Memory, DRAM), 至于CPU内部的第二层高速缓存则使用静态随机存取内存(Static Random Access Memory, SRAM); 11 | - BIOS(Basic Input Output System)是一套程序,这套程序是写死到主板上面的一个内存芯片中, 这个内存芯片在没有通电时也能够将数据记录下来,那就是只读存储器(Read Only Memory, ROM); 12 | - 目前主流的外接卡接口大多为 PCIe 接口,且最新为 PCIe 3.0,单信道速度高达 1GBytes/s 13 | - 常见的显卡连接到屏幕的接口有 HDMI/DVI/D-Sub/Display port 等等。HDMI 可同时传送影像与声音。 14 | - 传统硬盘的组成为:圆形盘片、机械手臂、 磁头与主轴马达所组成的,其中盘片的组成为扇区、磁道与柱面; 15 | - 磁盘连接到主板的接口大多为 SATA 或 SAS,目前台式机主流为 SATA 3.0,理论极速可达 600MBytes/s。 16 | - 常见的文字编码为 ASCII,繁体中文编码主要有 Big5 及 UTF8 两种,目前主流为 UTF8 17 | - 操作系统(Operating System, OS)其实也是一组程序, 这组程序的重点在于管理电脑的所有活动以及驱动系统中的所有硬件。 18 | - 电脑主要以二进制作为单位,常用的磁盘容量单位为Bytes,其单位换算为1 Byte = 8bits。 19 | - 最阳春的操作系统仅在驱动与管理硬件,而要使用硬件时,就得需要通过应用软件或者是壳程序(shell)的功能, 来调用操作系统操纵硬件工作。目前称为操作系统的,除了上述功能外,通常已经包含了日常工作所需要的应用软件在内了。 -------------------------------------------------------------------------------- /chapter_7/7.7重点回顾.md: -------------------------------------------------------------------------------- 1 | # 7.7 重点回顾 2 | 3 | - 一个可以被挂载的数据通常称为“文件系统, filesystem”而不是分区 (partition) 喔! 4 | 5 | - 基本上 Linux 的传统文件系统为 Ext2 ,该文件系统内的信息主要有: 6 | 7 | - superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等; 8 | - inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码; 9 | - block:实际记录文件的内容,若文件太大时,会占用多个 block 。 10 | 11 | - Ext2 文件系统的数据存取为索引式文件系统(indexed allocation) 12 | 13 | - 需要磁盘重组的原因就是文件写入的 block 太过于离散了,此时文件读取的性能将会变的很差所致。 这个时候可以通过磁盘重组将同一个文件所属的 blocks 汇整在一起。 14 | 15 | - Ext2文件系统主要有:boot sector, superblock, inode bitmap, block bitmap, inode table, data block 等六大部分。 16 | 17 | - data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种而已 18 | 19 | - inode 记录文件的属性/权限等数据,其他重要项目为: 每个 inode 大小均为固定,有 128/256Bytes 两种基本容量。每个文件都仅会占用一个 inode 而已; 因此文件系统能够创建的文件数量与 inode 的数量有关; 20 | 21 | - 文件的 block 在记录文件的实际数据,目录的 block 则在记录该目录下面文件名与其 inode 号码的对照表; 22 | 23 | - 日志式文件系统 (journal) 会多出一块记录区,随时记载文件系统的主要活动,可加快系统复原时间; 24 | 25 | - Linux 文件系统为增加性能,会让内存作为大量的磁盘高速缓存; 26 | 27 | - 实体链接只是多了一个文件名对该 inode 号码的链接而已; 28 | 29 | - 符号链接就类似Windows的捷径功能。 30 | 31 | - 磁盘的使用必需要经过:分区、格式化与挂载,分别惯用的指令为:gdisk, mkfs, mount三个指令 32 | 33 | - 分区时,应使用 parted 检查分区表格式,再判断使用 fdisk/gdisk 来分区,或直接使用 parted 分区 34 | 35 | - 为了考虑性能,XFS 文件系统格式化时,可以考虑加上 agcount/su/sw/extsize 等参数较佳 36 | 37 | - 如果磁盘已无未分区的容量,可以考虑使用大型文件取代磁盘设备的处理方式,通过 dd 与格式化功能。 38 | 39 | - 开机自动挂载可参考/etc/fstab之设置,设置完毕务必使用 mount -a 测试语法正确否; -------------------------------------------------------------------------------- /chapter_2/2.6参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 2.6 参考资料与延伸阅读 2 | 3 | - [\[1\]](#24.html#ac1)GUID / GPT 磁盘分区表与 MBR 的限制 wiki 简介: [http://zh.wikipedia.org/wiki/GUID磁盘分区表](http://zh.wikipedia.org/wiki/GUID%E7%A3%81%E7%A2%9F%E5%88%86%E5%89%B2%E8%A1%A8) [http://zh.wikipedia.org/wiki/全局唯一标识符](http://zh.wikipedia.org/wiki/%E5%85%A8%E5%B1%80%E5%94%AF%E4%B8%80%E6%A0%87%E8%AF%86%E7%AC%A6) 4 | - [\[2\]](#24.html#ac2)与 UEFI 界面有关的介绍: Wiki 介绍:[http://zh.wikipedia.org/wiki/统一可延伸固件接口](http://zh.wikipedia.org/wiki/%E7%B5%B1%E4%B8%80%E5%8F%AF%E5%BB%B6%E4%BC%B8%E9%9F%8C%E9%AB%94%E4%BB%8B%E9%9D%A2) T客帮介绍: 黄明华先生的介绍: 5 | 6 | 2002/04/08:第一次完成吧? 2003/02/02:重新编排与加入 FAQ 2005/06/04:将旧的文章移动到 [这里](http://linux.vbird.org/linux_basic/0130designlinux/0130designlinux.php) 2005/06/12:风格修订之外,新增了 Linux 练习机硬件选择与软件安装的建议 2005/06/15:感谢上奇编辑 Tim 兄来信告知一些可能有争议的部分!包括 AthlonXP 已被 Sempron 取代,已经修订! 2008/07/29:将旧的FC4文章移动到[此处](http://linux.vbird.org/linux_basic/0130designlinux/0130designlinux-fc4.php)。 2008/08/21:将整份文件作个重新整理,移除计概有谈到的硬件部分,增加partition的数据量。 2009/08/06:重新修订习题与解答,尤其一些计概方面的问题将他挪开! 2015/04/23:将旧的基于 CentOS5 之前的文章移动到[此处](http://linux.vbird.org/linux_basic/0130designlinux/0130designlinux-centos5.php)。 2015/04/28:加入了阅读许久的 UEFI 界面以及 GPT 的相关说明!更厘清了为啥 /boot 不在 /dev/sda1 的位置上啰! 7 | 8 | ------------------------------------------------------------------------ -------------------------------------------------------------------------------- /chapter_16/16.6重点回顾.md: -------------------------------------------------------------------------------- 1 | # 16.6 重点回顾 2 | 3 | - 程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等),为实体文件的型态存在; 4 | - 程序 (process):程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,程序就是一个正在运行中的程序。 5 | - 程序彼此之间是有相关性的,故有父程序与子程序之分。而 Linux 系统所有程序的父程序就是 init 这个 PID 为 1 号的程序。 6 | - 在 Linux 的程序调用通常称为 fork-and-exec 的流程!程序都会借由父程序以复制 (fork) 的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec 的方式来执行实际要进行的程序,最终就成为一个子程序的存在。 7 | - 常驻在内存当中的程序通常都是负责一些系统所提供的功能以服务使用者各项任务,因此这些常驻程序就会被我们称为:服务 (daemon)。 8 | - 在工作管理 (job control) 中,可以出现提示字符让你操作的环境就称为前景 (foreground),至于其他工作就可以让你放入背景 (background) 去暂停或运行。 9 | - 与 job control 有关的按键与关键字有: &, \[ctrl\]-z, jobs, fg, bg, kill %n 等; 10 | - 程序管理的观察指令有: ps, top, pstree 等等; 11 | - 程序之间是可以互相控制的,传递的讯息 (signal) 主要通过 kill 这个指令在处理; 12 | - 程序是有优先顺序的,该项目为 Priority,但 PRI 是核心动态调整的,使用者只能使用 nice 值去微调 PRI 13 | - nice 的给予可以有: nice, renice, top 等指令; 14 | - vmstat 为相当好用的系统资源使用情况观察指令; 15 | - SELinux 当初的设计是为了避免使用者资源的误用,而 SELinux 使用的是 MAC 委任式存取设置; 16 | - SELinux 的运行中,重点在于主体程序 (Subject) 能否存取目标文件资源 (Object) ,这中间牵涉到政策 (Policy) 内的规则, 以及实际的安全性本文类别 (type); 17 | - 安全性本文的一般设置为:“Identify:role:type”其中又以 type 最重要; 18 | - SELinux 的模式有: enforcing, permissive, disabled 三种,而启动的政策 (Policy) 主要是 targeted 19 | - SELinux 启动与关闭的配置文件在: /etc/selinux/config 20 | - SELinux 的启动与观察: getenforce, sestatus 等指令 21 | - 重设 SELinux 的安全性本文可使用 restorecon 与 chcon 22 | - 在 SELinux 有启动时,必备的服务至少要启动 auditd 这个! 23 | - 若要管理默认的 SELinux 布林值,可使用 getsebool, setsebool 来管理! -------------------------------------------------------------------------------- /chapter_16/16.8参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 16.8 参考资料与延伸阅读 2 | 3 | - [\[1\]](#146.html#ac1)关于 fork-and-exec 的说明可以参考如下网页与书籍: 吴贤明老师维护的网站: 杨振和、操作系统导论、第三章、学贯出版社 4 | - [\[2\]](#146.html#ac2)对 Linux 核心有兴趣的话,可以先看看下面的链接: 5 | - [\[3\]](#146.html#ac3)来自 Linux Journal 的关于 /proc 的说明: 6 | - [\[4\]](#146.html#ac4)关于 SELinux 相关的网站与文件数据: 美国国家安全局的 SELinux 简介: 陈永升、“企业级Linux 系统管理宝典”、学贯行销股份有限公司 Fedora SELinux 说明: 美国国家安全局对 SELinux 的白皮书: 7 | 8 | 2002/06/28:第一次完成 2003/02/10:重新编排与加入 FAQ 2005/09/07:将旧的文章移动到 [此处](http://linux.vbird.org/linux_basic/0440processcontrol/0440processcontrol.php) 。 2005/09/18:哈哈,终于将这篇写完啰。新增了一些简单的小指令啦。 2009/03/15:将旧的基于 FC4 的文章移动到[此处](http://linux.vbird.org/linux_basic/0440processcontrol/0440processcontrol-fc4.php)。 2009/03/19:调整 sar 成为 [vmstat](../Text/index.html#vmstat) ,因为 vmstat 是默认有安装的分析工具! 2009/09/11:加入了 [nohup](../Text/index.html#nohup) 的说明啰!并加入了情境仿真题 2011/04/14:原本的[习题](../Text/index.html#20110414)解答为 ps aux ,应该是 ps -lA 才好!感谢网友 redsc 的回报! 2012/06/14:原本是“内存字段(procs)”错了!是“程序字段”才对! 2013/08/02:在 signal 的相关说明中,SIGSTOP 之前写错了!应该是 19 号才对!请观察 man 7 signal(感谢网友王兄来信说明) 2015/08/03:将旧的基于 CentOS 5.x 的版本移动到 [此处](http://linux.vbird.org/linux_basic/0440processcontrol/0440processcontrol-centos5.php),有需要请前往查阅。 -------------------------------------------------------------------------------- /chapter_19/19.7参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 19.7 参考资料与延伸阅读 2 | 3 | - [\[1\]](#172.html#ac1)BIOS 的 POST 功能解释: 4 | - [\[2\]](#172.html#ac2)BIOS 的 INT 13 硬件中断解释: 5 | - \[3\]关于 splash 的相关说明: 6 | - \[4\]一些 grub 出错时的解决之道: 7 | - info grub (尤其是 6.1 的段落,在讲解 /etc/default/grub 的设置项目) 8 | - GNU 官方网站关于 grub 的说明文档: 9 | - 纯文本屏幕分辨率的修改方法: 10 | 11 | 2003/02/10:第一次完成 2005/09/19:将旧的文章移动到 [此处](http://linux.vbird.org/linux_basic/0510osloader/0510osloader.php) 。 2005/09/26:将 [核心编译] 一文订为进阶篇,不一定要学啦!但是核心模块不可不题,所以,新增一小节! 2005/09/28:终于给他完成去!好累~ 2005/10/09:加上参考文献数据,以及修改一些些 kernel 开机时, grub 的 vga 设置值的解说。 2005/11/09:加上了关于较大硬盘所产生的困扰! 2006/08/21:MBR 应该只有 512 Bytes ,结果误植为 512 KBytes ,抱歉! 2007/06/27:新增 initrd 的说明,请参考[这里](../Text/index.html#grub_initrd)。 2009/04/09:将旧的基于 FC4 的文章移动到[此处](http://linux.vbird.org/linux_basic/0510osloader/0510osloader-fc4.php)。 2009/04/10:取消了 LILO 的 boot loader 说明!毕竟这玩意儿已经退流行!所以不再强调!有需要请查询[此处](http://linux.vbird.org/linux_basic/0510osloader/0510osloader-fc4.php#lilo)。 2009/04/30:修订完毕,加强 init=/bin/bash 的说明,以及 grub 的密码管理! 2009/09/14:加入情境仿真,并根据讨论区 linuxfans 兄的建议,修改了一些地方!详情请参考讨论区建议! 2015/08/20:将旧的基于 CentOS 5.x 的 grub 1.x 版本移动到[这里](http://linux.vbird.org/linux_basic/0510osloader//0510osloader-centos5.php)啰! -------------------------------------------------------------------------------- /chapter_15/15.6本章习题.md: -------------------------------------------------------------------------------- 1 | # 15.6 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 简答题: 4 | 5 | - 今天假设我有一个指令程序,名称为: ping.sh 这个文件名!我想要让系统每三分钟执行这个文件一次, 但是偏偏这个文件会有很多的讯息显示出来,所以我的 root 帐号每天都会收到差不多四百多封的信件,光是收信就差不多快要疯掉了! 那么请问应该怎么设置比较好呢?这个涉及数据流重导向的问题,我们可以将他导入文件或者直接丢弃!如果该讯息不重要的话, 那么就予以丢弃,如果讯息很重要的话,才将他保留下来!假设今天这个命令不重要, 所以将他丢弃掉!因此,可以这样写: 6 | 7 | \> */3* \* root /usr/local/ping.sh > /dev/null 2>&1 8 | 9 | - 您预计要在 2016 年的 2 月 14 日寄出一封给 kiki ,只有该年才寄出!该如何下达指令?at 1am 2016-02-14 10 | 11 | - 下达 crontab -e 之后,如果输入这一行,代表什么意思? 12 | - 15 1-5 /usr/local/bin/tea_time.sh在每星期的 1\~5 ,下午 3 点的每分钟,共进行 60 次 /usr/local/bin/tea_time.sh 这个文件。 要特别注意的是,每个星期 1\~5 的 3 点都会进行 60 次ㄟ!很麻烦吧~是错误的写法啦~ 应该是要写成: 30 15 1-5 /usr/local/bin/tea_time.sh 13 | 14 | - 我用 vi 编辑 /etc/crontab 这个文件,我编辑的那一行是这样的: 25 00 0 /usr/local/bin/backup.sh 这一行代表的意义是什么?这一行代表......没有任何意义!因为语法错误!您必须要了解,在 /etc/crontab 当中每一行都必须要有使用者才行!所以,应该要将原本那行改成: 25 00 0 root /usr/local/bin/backup.sh 15 | 16 | - 请问,您的系统每天、每周、每个月各有进行什么工作?因为 CentOS 系统默认的例行性命令都放置在 /etc/cron.\* 里面,所以,你可以自行去: /etc/cron.daily/, /etc/cron.week/, /etc/cron.monthly/ 这三个目录内看一看, 就知道啦! ^\_^ 17 | 18 | - 每个星期六凌晨三点去系统搜寻一下内有 SUID/SGID 的任何文件!并将结果输出到 /tmp/uidgid.filesvi /etc/crontab 0 3 6 root find / -perm /6000 > /tmp/uidgid.files 19 | 20 | 2002/05/30:第一次完成 2003/02/10:重新编排与加入 FAQ 2005/09/07:将旧的文章移动到 [此处](http://linux.vbird.org/linux_basic/0430cron/0430cron.php) 。 2005/09/07:呼呼!终于完成风格啰~同时加入一些习题练习。 2009/03/12:将旧的文件移动到[此处](http://linux.vbird.org/linux_basic/0430cron/0430cron-fc4.php)。 2009/03/14:加入 [batch](../Text/index.html#batch) 这个项目的说明!与 at 有关! 2009/03/15:加入了 anacron 这玩意的简单说明! 2009/09/11:稍微修订一下说明语气与链接数据。 2015/07/31:将旧的基于 CentOS5 的版本移动到[这里](http://linux.vbird.org/linux_basic/0430cron/0430cron-centos5.php)。 -------------------------------------------------------------------------------- /chapter_11/11.7参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 11.7 参考资料与延伸阅读 2 | 3 | - [\[1\]](#103.html#ac1)关于正则表达式与 POSIX 及特殊语法的参考网址可以查询下面的来源: 维基百科的说明: ZYTRAX 网站介绍: 4 | 5 | - [\[2\]](#103.html#ac2)其他关于正则表达式的网站介绍: 洪朝贵老师的网页: 龙门少尉的窝: PCRE 官方网站: 6 | 7 | - [\[3\]](#103.html#ac3)关于 ASCII 编码对照表可参考维基百科的介绍: 维基百科 (ASCII) 条目: 8 | 9 | - [\[4\]](#103.html#ac4)关于 awk 的进阶文献,包括有下面几个链接: 中研院计算中心 ASPAC 计划之 awk 程序介绍: 鸟哥备份: 这份文件写的非常棒!欢迎大家多多参考! Study Area: 10 | 11 | 2002/07/29:第一次完成; 2003/02/10:重新编排与加入 FAQ ; 2005/01/28:重新汇整基础正则表达式的内容!重点在 regular_express.txt 的处理与练习上! 2005/03/30:修订了 grep -n 'goo*g' regular_express.txt 这一段 2005/05/23:修订了 grep -n '^\[a-z\]' regular_express.txt 所要撷取的是小写,之前写成大写,错了! 2005/08/22:加入了 awk, sed 等工具的介绍,还有 diff 与 cmp 等指令的说明! 2005/09/05:加入 printf 内,关于 \\xNN 的说明! 2006/03/10:将原本的 sed 内的动作(action)中, s 由“搜寻”改成“取代”了! 2006/10/05:在 sed 当中多了一个 -i 的参数说明,也多了一个范例八可以参考。感谢讨论区的thyme兄! 2008/10/08:加入 grep 内的 --color=auto 说明! 2009/02/07:将旧的基于 FC4 版本的文章移动到[此处](http://linux.vbird.org/linux_basic/0330regularex/0330regularex-fc4.php) 2009/02/10:重新排版,并且加入[语系](../Text/index.html#lang)的说明,以及特殊 \[:数据:\] 的说明!更改不少范例的说明。 2009/05/14:感谢网友 Jack 的回报, cmp 应该是使用“字节 Bytes”而非位 bits,感谢 Jack 兄。 2009/08/26:加入情境仿真题目了! 2010/04/16:由[linux_task](http://phorum.vbird.org/viewtopic.php?f=10&t=33387&p=144272#p144272)兄提供的意见, 将\[原本的* 说明订正\](../Text/index.html#20100416)一些部分,可读性较佳!感谢您! 2015/07/10:将旧的基于 CentOS 5.x 的版本移动到 [这里](http://linux.vbird.org/linux_basic/0330regularex//0330regularex-centos5.php)了! 2015/07/14:大部分改以一般帐号的身份来操作系统了!不过改动的幅度不大! -------------------------------------------------------------------------------- /chapter_10/10.9参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 10.9 参考资料与延伸阅读 2 | 3 | - [\[1\]](#95.html#ac1)Webmin 的官方网站: 4 | - [\[2\]](#95.html#ac2)关于 shell 的相关历史可以参考网络农夫兄所整理的优秀文章。不过由于网络农夫兄所创建的网站暂时关闭, 因此下面的链接为鸟哥到网络上找到的片段文章链接。若有任何侵权事宜,请来信告知,谢谢: 5 | - [\[3\]](#95.html#ac3)使用 man bash,再以 PS1 为关键字去查询,按下数次 n 往后查询后,可以得到 PS1 的变量说明。 6 | - 在语系数据方面,i18n 是由一些 Linux distribution 贡献者共同发起的大型计划,目的在于让众多的 Linux distributions 能够有良好的万国码 (Unicode) 语系的支持。详细的数据可以参考: 7 | - i18n 的 wiki 介绍: 8 | - 康桥大学 Dr Markus Kuhn 的文献: 9 | - Debian 社群所写的文件: 10 | - GNU 计划的 BASH 说明: 11 | - man bash 12 | 13 | 2002/06/27:第一次完成 2003/02/10:重新编排与加入 FAQ 2005/08/17:将旧的数据放置到 [这里](http://linux.vbird.org/linux_basic/0320bash/0320bash.php) 2005/08/17:终于稍微搞定了~花了半个多月不眠不休~呼~补充了较多的管线命令与数据流重导向! 2005/08/18:加入[额外的变量设置](../Text/index.html#variable_other)部分! 2005/08/30:加入了 login 与 non-login shell 的简单说明! 2006/03/19:原先在 col 的说明当中,原本指令“cat -A /etc/man.config \| col -x \| cat -A \| more”不该有 -A! 2006/10/05:感谢小州兄的告知,修正了原本 \~/.bashrc 说明当中的错误。 2007/04/05:原本的 cut 范例说明有误,原本是“我要找出第三个”应该改为“[我要找出第五个](../Text/index.html#20070405)”才对! 2007/04/11:原本的 join 说明没有加上排序,应该需要[排序后再处理](../Text/index.html#20070411)才对! 2007/07/15:原本的额外的变量功能表格有误,在 var=\${str+expr} 与var=\${str:+expr} 需要修改,请参考 [此处](../Text/index.html#20070715) 2009/01/13:将原本基于 FC4 写作的旧文章移动到[此处](http://linux.vbird.org/linux_basic/0320bash/0320bash-fc4.php) 2009/02/03:拿掉了原本的“变量的用途”部分,改以案例说明 2009/02/05:多加了变量删除、取代与替代部分的范例,看起来应该不会像前一版那样不容易理解! 2009/08/25:加入了情境仿真,并且进行一些说明的细部修改而已。 2010/04/16:感谢[wenyenyang](http://phorum.vbird.org/viewtopic.php?f=10&t=33829)兄的告知, wc -c 错误,是 [wc -m](../Text/index.html#20100416) 才是! -------------------------------------------------------------------------------- /chapter_9/9.6本章习题.md: -------------------------------------------------------------------------------- 1 | # 9.6 本章练习 2 | 3 | (要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看) 实作题部分: 4 | 5 | - 在第七章的情境仿真题二的第五点,编写 /etc/fstab 时,当时使用 nano 这个指令, 请尝试使用 vim 去编辑 /etc/fstab ,并且将第七章新增的那一列的 defatuls 改成 default ,会出现什么状态? 离开前请务必要修订成原本正确的信息。此外,如果将该列注解 (最前面加 #),你会发现字体颜色也有变化喔! 6 | 7 | - 尝试在你的系统中,你惯常使用的那个帐号的主文件夹下,将本章介绍的 vimrc 内容进行一些常用设置,包括: 8 | 9 | - 设置搜寻高亮度反白 10 | - 设置语法检验启动 11 | - 设置默认启动行号显示 12 | - 设置有两行状态列 (一行状态+一行命令行) :set laststatus=2 13 | 14 | ------------------------------------------------------------------------ 15 | 16 | 简答题部分: 17 | 18 | - 我用 vi 打开某个文件后,要在第 34 列向右移动 15 个字符,应该在一般指令模式中下达什么指令?(1)先按下 34G 到第 34 列;(2)再按下 \[ 15 + 向右键 \],或 \[ 15l \] 亦可! 19 | - 在 vi 打开的文件中,如何去到该文件的页首或页尾?去页首按下 1G 或 gg ;去页尾按下 G 即可 20 | - 在 vi 打开的文件中,如何在光标所在列中,移动到行头及行尾?移动到行头,按 0 ,移动到行尾按 \$ 即可! 21 | - vi 的一般指令模式情况下,按下“ r ”有什么功能?取代光标所在的那个字符 22 | - 在 vi 的环境中,如何将目前正在编辑的文件另存新文件名为 newfilename?:w newfilename 23 | - 在 linux 下面最常使用的文书编辑器为 vi ,请问如何进入编辑模式?在一般指令模式下面输入: i, I, a, A 为在本列当中输入新字符;(出现 –Insert- ) 在一般指令模式当中输入: o, O 为在一个新的一列输入新字符; 在一般指令模式当中输入: r, R 为取代字符!(左下角出现 –Replace-) 24 | - 在 vi 软件中,如何由编辑模式跳回一般指令模式?可以按下\[Esc\] 25 | - 在 vi 环境中,若上下左右键无法使用时,请问如何在一般指令模式移动光标?\[h, j, k, l\]分别代表\[左、下、上、右\] 26 | - 在 vi 的一般指令模式中,如何删除一列、n列;如何删除一个字符?分别为 dd, ndd, x 或 X (dG 及 d1G 分别表示删除到页首及页尾) 27 | - 在 vi 的一般指令模式中,如何复制一列、n列并加以贴上?分别为 yy, nyy, p 或 P 28 | - 在 vi 的一般指令模式中如何搜寻 string 这个字串??string (往前搜寻) /string (往后搜寻) 29 | - 在 vi 的一般指令模式中,如何取代 word1 成为 word2,而若需要使用者确认机制,又该如何?:1,\$s/word1/word2/g 或 :1,\$s/word1/word2/gc (需要使用者确认) 30 | - 在 vi 目前的编辑文件中,在一般指令模式下,如何读取一个文件 filename 进来目前这个文件?:r filename 31 | - 在 vi 的一般指令模式中,如何存盘、离开、存盘后离开、强制存盘后离开?:w; :q: :wq; :wq! 32 | - 在 vi 下面作了很多的编辑动作之后,却想还原成原来的文件内容,应该怎么进行?直接按下 :e! 即可恢复成文件的原始状态! 33 | - 我在 vi 这个程序当中,不想离开 vi ,但是想执行 ls /home 这个指令,vi 有什么额外的功能可以达到这个目的:事实上,可以使用\[ :! ls /home \]不过,如果你学过后面的章节之后,你会发现,执行\[ ctrl + z \]亦可暂时退出 vi 让你在命令行界面当中执行指令喔! -------------------------------------------------------------------------------- /chapter_6/6.6极重要的复习-权限与指令间的关系.md: -------------------------------------------------------------------------------- 1 | # 6.6 极重要的复习!权限与指令间的关系 2 | 3 | 我们知道权限对于使用者帐号来说是非常重要的,因为他可以限制使用者能不能读取/创建/删除/修改文件或目录! 在这一章我们介绍了很多文件系统的管理指令,第五章则介绍了很多文件权限的意义。在这个小节当中, 我们就将这两者结合起来,说明一下什么指令在什么样的权限下才能够运行吧!^\_^ 4 | 5 | 一、让使用者能进入某目录成为“可工作目录”的基本权限为何: 6 | 7 | - 可使用的指令:例如 cd 等变换工作目录的指令; 8 | - 目录所需权限:使用者对这个目录至少需要具有 x 的权限 9 | - 额外需求:如果使用者想要在这个目录内利用 ls 查阅文件名,则使用者对此目录还需要 r 的权限。 10 | 11 | 二、使用者在某个目录内读取一个文件的基本权限为何? 12 | 13 | - 可使用的指令:例如本章谈到的 cat, more, less等等 14 | - 目录所需权限:使用者对这个目录至少需要具有 x 权限; 15 | - 文件所需权限:使用者对文件至少需要具有 r 的权限才行! 16 | 17 | 三、让使用者可以修改一个文件的基本权限为何? 18 | 19 | - 可使用的指令:例如 [nano] 或未来要介绍的 [vi] 编辑器等; 20 | - 目录所需权限:使用者在该文件所在的目录至少要有 x 权限; 21 | - 文件所需权限:使用者对该文件至少要有 r, w 权限 22 | 23 | 四、让一个使用者可以创建一个文件的基本权限为何? 24 | 25 | - 目录所需权限:使用者在该目录要具有 w,x 的权限,重点在 w 啦! 26 | 27 | 五、让使用者进入某目录并执行该目录下的某个指令之基本权限为何? 28 | 29 | - 目录所需权限:使用者在该目录至少要有 x 的权限; 30 | - 文件所需权限:使用者在该文件至少需要有 x 的权限 31 | 32 | 例题:让一个使用者 dmtsai 能够进行“cp /dir1/file1 /dir2”的指令时,请说明 dir1, file1, dir2 的最小所需权限为何?答:执行 cp 时, dmtsai 要“能够读取来源文件,并且写入目标文件!”所以应参考上述第二点与第四点的说明! 因此各文件/目录的最小权限应该是: 33 | 34 | - dir1 :至少需要有 x 权限; 35 | - file1:至少需要有 r 权限; 36 | - dir2 :至少需要有 w, x 权限。 37 | 38 | 例题:有一个文件全名为 /home/student/www/index.html ,各相关文件/目录的权限如下: 39 | 40 | ```shell 41 | drwxr-xr-x 23 root root 4096 Sep 22 12:09 / 42 | drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home 43 | drwx------ 6 student student 4096 Sep 29 02:23 /home/student 44 | drwxr-xr-x 6 student student 4096 Sep 29 02:24 /home/student/www 45 | -rwxr--r-- 6 student student 369 Sep 29 02:27 /home/student/www/index.html 46 | ``` 47 | 48 | 请问 vbird 这个帐号(不属于student群组)能否读取 index.html 这个文件呢?答:虽然 www 与 index.html 是可以让 vbird 读取的权限,但是因为目录结构是由根目录一层一层读取的, 因此 vbird 可进入 /home 但是却不可进入 /home/student/ ,既然连进入 /home/student 都不许了, 当然就读不到 index.html 了!所以答案是“vbird不会读取到 index.html 的内容”喔! 49 | 50 | 那要如何修改权限呢?其实只要将 /home/student 的权限修改为最小 711 ,或者直接给予 755 就可以啰! 这可是很重要的概念喔! 51 | -------------------------------------------------------------------------------- /chapter_0/0.3数据表示方式.md: -------------------------------------------------------------------------------- 1 | # 0.3 数据表示方式 2 | 3 | 事实上我们的电脑只认识0与1,记录的数据也是只能记录0与1而已,所以电脑常用的数据是二进制的。 但是我们人类常用的数值运算是十进制,文字方面则有非常多的语言,台湾常用的语言就有英文、中文(又分正体与简体中文)、日文等。 那么电脑如何记录与显示这些数值/文字呢?就得要通过一系列的转换才可以啦!下面我们就来谈谈数值与文字的编码系统啰! 4 | 5 | ## 0.3.1 数字系统 6 | 7 | 早期的电脑使用的是利用通电与否的特性的真空管,如果通电就是1,没有通电就是0, 后来沿用至今,我们称这种只有0/1的环境为二进制制,英文称为binary的哩。所谓的十进制指的是逢十进一位, 因此在个位数归为零而十位数写成1。所以所谓的二进制,就是逢二就前进一位的意思。 8 | 9 | 那二进制怎么用呢?我们先以十进制来解释好了。如果以十进制来说,3456的意义为: 10 | 11 | 3456 = 3x10³ + 4x10² + 5x10¹ + 6x10⁰ 12 | 13 | 特别注意:“任何数值的零次方为1”所以100的结果就是1啰。 同样的,将这个原理带入二进制的环境中,我们来解释一下1101010的数值转为十进制的话,结果如下: 14 | 15 | 1101010=1x2⁶ + 1x2⁵ + 0x2⁴ + 1x2³ + 0x2² + 1x2¹ + 0x2⁰ = 64 + 32 + 0x16 + 8 + 0x4 + 2 + 0x1 = 106 16 | 17 | 这样你了解二进制的意义了吗?二进制是电脑基础中的基础喔!了解了二进制后,八进位、十六进制就依此类推啦! 那么知道二进制转成十进制后,那如果有十进制数值转为二进制的环境时,该如何计算? 刚刚是乘法,现在则是除法就对了!我们同样的使用十进制的106转成二进制来测试一下好了: 18 | 19 | ![二进制转十进制](/pic/number_01.gif) 20 | *图0.3.1、十进制转二进制的方法* 21 | 22 | 最后的写法就如同上面的红色箭头,由最后的数字向上写,因此可得到1101010的数字啰! 这些数字的转换系统是非常重要的,因为电脑的加减乘除都是使用这些机制来处理的! 有兴趣的朋友可以再参考一下其他计算计概论的书籍中,关于1的补数/2的补数等运算方式喔! 23 | 24 | ## 0.3.2 文字编码系统 25 | 26 | 既然电脑都只有记录0/1而已,甚至记录的数据都是使用Byte/bit等单位来记录的,那么文字该如何记录啊? 事实上文字文件也是被记录为0与1而已,而这个文件的内容要被取出来查阅时,必须要经过一个编码系统的处理才行。 所谓的“编码系统”可以想成是一个“字码对照表”,他的概念有点像下面的图示: 27 | 28 | ![编码表](/pic/word_01.gif) 29 | *图0.3.2、数据参考编码表的示意图* 30 | 31 | 当我们要写入文件的文字数据时,该文字数据会由编码对照表将该文字转成数字后,再存入文件当中。 同样的,当我们要将文件内容的数据读出时,也会经过编码对照表将该数字转成对应的文字后,再显示到屏幕上。 现在你知道为何浏览器上面如果编码写错时,会出现乱码了吗?这是因为编码对照表写错, 导致对照的文字产生误差之故啦! 32 | 33 | 常用的英文编码表为ASCII系统,这个编码系统中, 每个符号(英文、数字或符号等)都会占用1Bytes的记录, 因此总共会有28=256种变化。至于中文字当中的编码系统早期最常用的就是big5这个编码表了。 每个中文字会占用2Bytes,理论上最多可以有216=65536,亦即最多可达6万多个中文字。 但是因为big5编码系统并非将所有的位都拿来运用成为对照,所以并非可达这么多的中文字码的。 目前big5仅定义了一万三千多个中文字,很多中文利用big5是无法成功显示的~所以才会有造字程序说。 34 | 35 | big5码的中文字编码对于某些数据库系统来说是很有问题的,某些字码例如“许、盖、功”等字, 由于这几个字的内部编码会被误判为单/双引号,在写入还不成问题,在读出数据的对照表时, 常常就会变成乱码。不只中文字,其他非英语系国家也常常会有这样的问题出现啊! 36 | 37 | 为了解决这个问题,由国际组织ISO/IEC跳出来制订了所谓的Unicode编码系统, 我们常常称呼的UTF8或万国码的编码就是这个咚咚。因为这个编码系统打破了所有国家的不同编码, 因此目前网际网络社会大多朝向这个编码系统在走,所以各位亲爱的朋友啊,记得将你的编码系统修订一下喔! -------------------------------------------------------------------------------- /chapter_11/11.3延伸正则表达式.md: -------------------------------------------------------------------------------- 1 | # 11.3 延伸正则表达式 2 | 3 | 事实上,一般读者只要了解基础型的正则表达式大概就已经相当足够了,不过,某些时刻为了要简化整个指令操作, 了解一下使用范围更广的延伸型正则表达式的表示式会更方便呢!举个简单的例子好了,在上节的[例题三的最后一个例子]中,我们要去除空白行与行首为 # 的行列,使用的是 4 | 5 | > grep -v '^\$' regular_express.txt \| grep -v '^#' 6 | 7 | 需要使用到管线命令来搜寻两次!那么如果使用延伸型的正则表达式,我们可以简化为: 8 | 9 | > egrep -v '^\$\|^#' regular_express.txt 10 | 11 | 延伸型正则表达式可以通过群组功能“ \| ”来进行一次搜寻!那个在单引号内的管线意义为“或 or”啦! 是否变的更简单呢?此外,grep 默认仅支持基础正则表达式,如果要使用延伸型正则表达式,你可以使用 grep -E , 不过更建议直接使用 egrep !直接区分指令比较好记忆!其实 egrep 与 grep -E 是类似命令别名的关系啦! 12 | 13 | 熟悉了正则表达式之后,到这个延伸型的正则表达式,你应该也会想到,不就是多几个重要的特殊符号吗? ^*^y 是的~所以,我们就直接来说明一下,延伸型正则表达式有哪几个特殊符号?由于下面的范例还是有使用到 regular_express.txt ,不巧的是刚刚我们可能将该文件修改过了 @*@,所以,请重新下载该文件来练习喔! 14 | 15 | | RE 字符 | 意义与范例 | 16 | |---------|------------| 17 | | \+ | 意义:重复“一个或一个以上”的前一个 RE 字符 范例:搜寻 (god) (good) (goood)... 等等的字串。 那个 o+ 代表“一个以上的 o ”所以,下面的执行成果会将第 1, 9, 13 行列出来。 `> egrep -n 'go+d' regular_express.txt` | 18 | | ? | 意义:“零个或一个”的前一个 RE 字符 范例:搜寻 (gd) (god) 这两个字串。 那个 o? 代表“空的或 1 个 o ”所以,上面的执行成果会将第 13, 14 行列出来。 有没有发现到,这两个案例( 'go+d' 与 'go?d' )的结果集合与 'go\*d' 相同? 想想看,这是为什么喔! ^\_^ `> egrep -n 'go?d' regular_express.txt` | 19 | | \| | 意义:用或( or )的方式找出数个字串 范例:搜寻 gd 或 good 这两个字串,注意,是“或”! 所以,第 1,9,14 这三行都可以被打印出来喔!那如果还想要找出 dog 呢? `> egrep -n 'gd|good' regular_express.txt` `> egrep -n 'gd|good|dog' regular_express.txt` | 20 | | () | 意义:找出“群组”字串 范例:搜寻 (glad) 或 (good) 这两个字串,因为 g 与 d 是重复的,所以, 我就可以将 la 与 oo 列于 ( ) 当中,并以 \| 来分隔开来,就可以啦! `> egrep -n 'g(la|oo)d' regular_express.txt` | 21 | | ()+ | 意义:多个重复群组的判别 范例:将“AxyzxyzxyzxyzC”用 echo 叫出,然后再使用如下的方法搜寻一下! `> echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'` | 22 | 23 | 上面的例子意思是说,我要找开头是 A 结尾是 C ,中间有一个以上的 "xyz" 字串的意思~ 24 | 25 | 以上这些就是延伸型的正则表达式的特殊字符。另外,要特别强调的是,那个 ! 在正则表达式当中并不是特殊字符, 所以,如果你想要查出来文件中含有 ! 与 \> 的字行时,可以这样: 26 | 27 | ```shell 28 | > grep -n '[!>]' regular_express.txt 29 | ``` 30 | 31 | 这样可以了解了吗?常常看到有陷阱的题目写:“反向选择这样对否? '\[!a-z\]'?”, 呵呵!是错的呦~要 '^([a-z](#99.html#fn_a-z)) 才是对的!至于更多关于正则表达式的进阶文章,请参考文末的参考数据 -------------------------------------------------------------------------------- /chapter_12/12.6ShellScript的追踪与debug.md: -------------------------------------------------------------------------------- 1 | # 12.6 shell script 的追踪与 debug 2 | 3 | scripts 在执行之前,最怕的就是出现语法错误的问题了!那么我们如何 debug 呢?有没有办法不需要通过直接执行该 scripts 就可以来判断是否有问题呢?呵呵!当然是有的!我们就直接以 bash 的相关参数来进行判断吧! 4 | 5 | ```shell 6 | [dmtsai@study ~]$ sh [-nvx] scripts.sh 7 | 选项与参数: 8 | -n :不要执行 script,仅查询语法的问题; 9 | -v :再执行 sccript 前,先将 scripts 的内容输出到屏幕上; 10 | -x :将使用到的 script 内容显示到屏幕上,这是很有用的参数! 11 | 12 | 范例一:测试 dir_perm.sh 有无语法的问题? 13 | [dmtsai@study ~]$ sh -n dir_perm.sh 14 | # 若语法没有问题,则不会显示任何信息! 15 | 16 | 范例二:将 show_animal.sh 的执行过程全部列出来~ 17 | [dmtsai@study ~]$ sh -x show_animal.sh 18 | + PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/bin 19 | + export PATH 20 | + for animal in dog cat elephant 21 | + echo 'There are dogs.... ' 22 | There are dogs.... 23 | + for animal in dog cat elephant 24 | + echo 'There are cats.... ' 25 | There are cats.... 26 | + for animal in dog cat elephant 27 | + echo 'There are elephants.... ' 28 | There are elephants.... 29 | ``` 30 | 31 | 请注意,上面范例二中执行的结果并不会有颜色的显示!鸟哥为了方便说明所以在 + 号之后的数据都加上颜色了! 在输出的讯息中,在加号后面的数据其实都是指令串,由于 sh -x 的方式来将指令执行过程也显示出来, 如此使用者可以判断程序码执行到哪一段时会出现相关的信息!这个功能非常的棒!通过显示完整的指令串, 你就能够依据输出的错误信息来订正你的脚本了! 32 | 33 | 熟悉 sh 的用法,将可以使你在管理 Linux 的过程中得心应手!至于在 Shell scripts 的学习方法上面,需要“多看、多模仿、并加以修改成自己的样式!” 是最快的学习手段了!网络上有相当多的朋友在开发一些相当有用的 scripts ,若是你可以将对方的 scripts 拿来,并且改成适合自己主机的样子!那么学习的效果会是最快的呢! 34 | 35 | 另外,我们 Linux 系统本来就有很多的服务启动脚本,如果你想要知道每个 script 所代表的功能是什么? 可以直接以 vim 进入该 script 去查阅一下,通常立刻就知道该 script 的目的了。 举例来说,我们之前一直提到的 /etc/init.d/netconsole ,这个 script 是干嘛用的? 利用 vim 去查阅最前面的几行字,他出现如下信息: 36 | 37 | ```shell 38 | # netconsole This loads the netconsole module with the configured parameters. 39 | # chkconfig: - 50 50 40 | # description: Initializes network console logging 41 | # config: /etc/sysconfig/netconsole 42 | ``` 43 | 44 | 意思是说,这个脚本在设置网络终端机来应付登陆的意思,且配置文件在 /etc/sysconfig/netconsole 设置内! 所以,你写的脚本如果也能够很清楚的交待,那就太棒了! 45 | 46 | 另外,本章所有的范例都可以在 里头找到喔!加油~ 47 | -------------------------------------------------------------------------------- /chapter_8/8.8本章习题.md: -------------------------------------------------------------------------------- 1 | # 8.8 本章习题 2 | 3 | (要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看) 4 | 5 | - 情境仿真题一:请将本章练习过程中产生的不必要的文件删除,以保持系统容量不要被恶搞! 6 | 7 | - rm /home/CentOS-7-x86_64-Minimal-1503-01.iso 8 | - rm -rf /srv/newcd/ 9 | - rm /custom.iso 10 | - rm -rf /tmp/vda2.img /tmp/boot.cpio /tmp/boot /tmp/boot2 /tmp/boot3 11 | - rm -rf /tmp/services */tmp/system.* 12 | - rm -rf /root/etc\* /root/system.tar.bz2 /root/boot 13 | 14 | - 情境仿真题二:你想要逐时备份 /home 这个目录内的数据,又担心每次备份的信息太多, 因此想要使用 xfsdump 的方式来逐一备份数据到 /backups 这个目录下。该如何处理? 15 | 16 | - 目标:了解到 xfsdump 以及各个不同 level 的作用; 17 | 18 | - 前提:被备份的数据为单一 partition ,亦即本例中的 /home 实际处理的方法其实还挺简单的!我们可以这样做看看: 19 | 20 | - 先替该目录制作一些数据,亦即复制一些东西过去吧! mkdir /home/chapter8; cp -a /etc /boot /home/chapter8 21 | 22 | - 开始进行 xfsdump ,记得,一开始是使用 level 0 的完整备份喔! mkdir /backups xfsdump -l 0 -L home_all -M home_all -f /backups/home.dump /home 23 | 24 | - 尝试将 /home 这个文件系统加大,将 /var/log/ 的数据复制进去吧! cp -a /var/log/ /home/chapter8 此时原本的 /home 已经被改变了!继续进行备份看看! 25 | 26 | - 将 /home 以 level 1 来进行备份: xfsdump -l 1 -L home_1 -M home_1 -f /backups/home.dump.1 /home ls -l /backups 你应该就会看到两个文件,其中第二个文件 (home.dump.1) 会小的多!这样就搞定啰备份数据! 27 | 28 | - 情境仿真三:假设过了一段时间后,你的 /home 变的怪怪的,你想要将该 filesystem 以刚刚的备份数据还原, 此时该如何处理呢?你可以这样做的: 29 | 30 | 1. 由于 /home 这个 partition 是用户只要有登陆就会使用,因此你应该无法卸载这个东西!因此,你必须要登出所有一般用户, 然后在 tty2 直接以 root 登陆系统,不要使用一般帐号来登陆后 su 转成 root !这样才有办法卸载 /home 喔! 31 | 32 | 2. 先将 /home 卸载,并且将该 partition 重新格式化! df -h /home /dev/mapper/centos-home 5.0G 245M 4.8G 5% /home umount /home mkfs.xfs -f /dev/mapper/centos-home 33 | 34 | 3. 重新挂载原本的 partition ,此时该目录内容应该是空的! mount -a 你可以自行使用 df 以及 ls -l /home 查阅一下该目录的内容,是空的啦! 35 | 36 | 4. 将完整备份的 level 0 的文件 /backups/home.dump 还原回来: cd /home xfsrestore -f /backups/home.dump . 此时该目录的内容为第一次备份的状态!还需要进行后续的处理才行! 37 | 38 | 5. 将后续的 level 1 的备份也还原回来: xfsrestore -f /backups/home.dump.1 . 此时才是恢复到最后一次备份的阶段!如果还有 level 2, level 3 时,就得要一个一个的依序还原才行! 39 | 40 | 6. 最后删除本章练习的复制档 rm -rf /home/chapter8 -------------------------------------------------------------------------------- /chapter_22/22.6本章习题.md: -------------------------------------------------------------------------------- 1 | # 22.6 本章习题 2 | 3 | - 情境仿真题:通过 EPEL 安装 NTFS 文件系统所需要的软件 4 | 5 | - 目标:利用 EPEL 提供的软件来搜寻是否有 NTFS 所需要的各项模块!; 6 | 7 | - 目标:你的 Linux 必须要已经接上 Internet 才行; 8 | 9 | - 需求:最好了解磁盘容量是否够用,以及如何启动服务等。 其实这个任务非常简单!因为我们在前面各小节的说明当中已经说明了如何设置 EPEL 的 yum 配置文件,此时你只要通过下面的方式来处理即可: 10 | 11 | - 使用 yum --enablerepo=epel search ntfs 找出所需要的软件名称 12 | 13 | - 再使用 yum --enablerepo=epel install ntfs-3g ntfsprogs 来安装即可! 14 | 15 | ------------------------------------------------------------------------ 16 | 17 | 简答题部分: 18 | 19 | - 如果你曾经修改过 yum 配置文件内的软件库设置 (/etc/yum.repos.d/\*.repo) ,导致下次使用 yum 进行安装时老是发现错误, 此时你该如何是好?先确认你的配置文件确实是正确的,如果没问题,可以将 yum 的高速缓存清除,使用“yum clean all”即可。 事实上, yum 的所有高速缓存、下载软件、下载软件的表头数据,都放置于 /var/cache/yum/ 目录下。 20 | 21 | - 简单说明 RPM 与 SRPM 的异同?RPM 文件是由程序打包者 (通常是由 distribution 的开发商) 借由程序的源代码,在特定的平台上面所编译成功的 binary program 的数据,并将该数据制作成为 RPM 的格式,以方便相同软、硬件平台的使用者之安装使用。 在安装时显的很简单,因为程序打包者的平台与使用者所使用的平台默认为相同。 至于 SRPM 则是借由与 RPM 相同的配置文件数据,不过将源代码直接包在 SRPM 文件当中,而不经过编译。 因为 SRPM 所内含的数据为源代码,所以安装时必须要再经过编译的行为才能成为 RPM 并提供使用者安装。 22 | 23 | - 假设我想要安装一个软件,例如 pkgname.i386.rpm ,但却老是发生无法安装的问题,请问我可以加入哪些参数来强制安装他?可以加入 --nodeps 等参数。例如 rpm -ivh --nodeps pkgname.i386.rpm 24 | 25 | - 承上题,你认为强制安装之后,该软件是否可以正常执行?为什么?一般来说,应该是“不能执行”的,因为该软件具有相依属性的问题, 某些时刻该软件的程序可能需要调用外部的函数库,但函数库可能未安装,因此当然无法执行成功。 26 | 27 | - 有些人使用 CentOS 7.x 安装在自己的 Atom CPU 上面,却发现无法安装,在查询了该原版光盘的内容,发现里面的文件名称为 *\**.x86_64.rpm 。请问,无法安装的可能原因为何?Atom 虽然也是属于 x86 的架构,但是某些 atom 是属于 32 位的系统。但是 CentOS 7 已经仅释出 64 位的版本,所以当然无法安装了! 28 | 29 | - 请问我使用 rpm -Fvh *.rpm 及 rpm -Uvh* .rpm 来升级时,两者有何不同?-Uvh 后面接的软件,如果原本未安装,则直接安装,原本已安装时,则直接升级; -Fvh 后面接的软件,如果原本未安装,则不安装,原本已安装时,则直接升级; 30 | 31 | - 假设有一个厂商推出软件时,自行处理了数码签章,你想要安装他们的软件所以需要使用数码签章,假设数码签章的文件名为 signe, 那你该如何安装?rpm --import signe 32 | 33 | - 承上,假设该软件厂商提供了 yum 的安装网址为: ,那你该如何处理 yum 的配置文件?可以自行取个文件名,在此例中我们使用“ vim /etc/yum.repos.d/their.repo ”,扩展名要正确! 内容有点像这样即可: 34 | 35 | ```shell 36 | [their] 37 | name=their server name 38 | baseurl=http://their.server.name/path/ 39 | enable=1 40 | gpgcheck=0 41 | ``` 42 | 43 | 然后使用 yum 去安装该软件看看。 -------------------------------------------------------------------------------- /chapter_19/19.6本章习题.md: -------------------------------------------------------------------------------- 1 | # 19.6 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 4 | 5 | - 情境仿真题一:利用救援光盘来处理系统的错误导致无法开机的问题。 6 | 7 | - 目标:了解救援光盘的功能; 8 | 9 | - 前提:了解 grub 的原理,并且知道如何使用 chroot 功能; 10 | 11 | - 需求:打字可以再加快一点啊! ^\_^ 这个部分鸟哥就不捉图了,请大家自行处理啰~假设你的系统出问题而无法顺利开机,此时拿出原版光盘,然后重新以光盘来启动你的系统。 然后你应该要这样作的: 12 | 13 | - 利用光盘开机时,看到开机项目后,请选择“Troubleshooting”项目 --> “Rescue a CentOS system”项目,按下 Enter 就开始开机程序; 14 | 15 | - 然后就进入救援光盘模式的文件系统搜寻了!这个救援光盘会去找出目前你的主机里面与 CentOS 7.x 相关的操作系统, 并将该操作系统汇整成为一个 chroot 的环境等待你的处置!但是他会有三个模式可以选择,分别是“continue”继续成为可读写挂载; “Read-Only”将侦测到的操作系统变成只读挂载;“Skip”略过这次的救援动作。在这里我们选择“ Continue ”吧! 16 | 17 | - 如果你有安装多个 CentOS 7.x 的操作系统 (多重操作系统的实作),那就会出现菜单让你选择想要处理的根目录是哪个! 选择完毕就请按 Enter 吧! 18 | 19 | - 然后系统会将侦测到的信息通知你!一般来说,可能会在屏幕上显示类似这样的讯息:“ chroot /mnt/sysimage”此时请按下 OK 吧! 20 | 21 | - 按下 OK 后,系统会丢给你一个 shell 使用,先用 df 看一下挂载情况是否正确? 若不正确请手动挂载其他未被挂载的 partition 。等到一切搞定后,利用 chroot /mnt/sysimage 来转成你原本的操作系统环境吧!等到你将一切出问题的地方都搞定,请 reboot 系统,且取出光盘,用硬盘开机吧! 22 | 23 | ------------------------------------------------------------------------ 24 | 25 | 简答题部分: 26 | 27 | - 因为 root 密码忘记,我使用 rd.break 的核心参数重新开机,并且修改完 root 密码,重新开机后可以顺利开机完毕, 但是我使用所有的帐号却都无法登陆系统!为何会如此?可能原因为何?最可能的原因是 /.autorelabel 没有创建,且你为 SELinux Enforcing 的模式之故。如果是这样, 那你必须要重新进入 rd.break ,然后重新创建 /.autorelabel 即可。若不想要于开机过程等太久, 可以将 /etc/selinux/config 内的 SELinux 类型设置为 permissive 再以 19.4.1 的方法去 restorecon 回复 /etc 下面的文件 SELinux 类型即可。 28 | - 万一不幸,我的一些模块没有办法让 Linux 的核心捉到,但是偏偏这个核心明明就有支持该模块, 我要让该模块在开机的时候就被载入,那么应该写入那个文件?应该写入 /etc/modprobe.d/*.conf 这个文件,他是模块载入相关的地方呢!当然,也可以写入 /etc/sysconfig/modules/* 里面。 29 | - 如何在 grub2 开机过程当中,指定以“ multi-user.target ”来开机?在开机进入 boot loader 之后,利用 grub shell 的功能,亦即输入“ e ”进入编辑模式, 然后在 linux16 后面增加: linux16 .... systemd.unit=multi-user.target 就能够进入纯文本模式啰! 30 | - 如果你不小心先安装 Linux 再安装 Windows 导致 boot loader 无法找到 Linux 的开机菜单,该如何挽救? 方法有很多,例如: (1)借助第三方软件,安装类似 spfdisk 的软件在 MBR 里面,因为他同时认识 Linux 与 Windows ,所以就可以用他来进入 Linux 啦! (2)或者使用类似 KNOPPIX 的 Live CD 以光盘开机进入 Linux 之后,再以 chroot 软件切换根目录 (/),然后重新安装 grub 等 boot loader ,同样也可以重新让两个操作系统存在啦! 总之,只要你知道 MBR / Super block / boot loader 之间的相关性,怎么切换都可能啊! ^\_^ -------------------------------------------------------------------------------- /chapter_23/23.5本章习题.md: -------------------------------------------------------------------------------- 1 | # 23.5 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 4 | 5 | - 在 X 设置没问题的情况下,你在 Linux 主机如何取得窗口接口?如果是在 multi-user.target 模式下,可以使用 startx 进入,至于 graphical.target ,则直接进入 tty1 即可使用 display manager 登陆 X Window 系统。 6 | 7 | - 利用 startx 可以在 multi-user.target 的环境下进入 X Window 系统。请问 startx 的主要功能?整个 X 窗口系统的重点在启动 X server 并载入 X client ,而执行 X server/X client 调用的任务为 xinit ,startx 只是一个较为友好的脚本程序,可以搜寻系统上面的 X server / X client 设置值, 以提供 xinit 来执行而已。 8 | 9 | - 如何知道你系统当中 X 系统的版本与计划?最简单可以利用 root 的身份下达 X -version 或 Xorg -version 即可知道! 10 | 11 | - 要了解为何 X 系统可以允许不同硬件、主机、操作系统之间的沟通,需要知道 X server / X client 的相关知识。 请问 X Server / X client / Window manager 的主要用途功能?X Server 主要负责屏幕的绘制,以及周边输入设备如鼠标、键盘等数据的收集,并回报给 X Client ; X Client 主要负责数据的运算,收到来自 X Server 的数据后,加以运算得到图形的数据,并回传给 X Server, 让 X server 自行绘制图形。至于 Window manager 是一个比较特殊的 X Client ,他可以管理更多控制元素, 最重要的地方还是在于窗口的大小、重叠、移动等等的功能。 12 | 13 | - 如何重新启动 X 14 | 15 | - 最简单在 X Window System 下,直接按下 \[alt\]+\[ctrl\]+\[backspace\<--\] 即可 16 | - 也可以 systemctl isolate multi-usertarget 再 systemctl isolate graphical.target 17 | - 也可以关闭 X 后,再 startx 启动等等。 18 | 19 | - 试说明 \~/.xinitrc 这个文件的用途?当我们要启动 X 时,必须要启动 X Client 软件端。这个 \~/.xinitrc 即是在客制化自己的 X Client , 你可以在这个文件内输入你自己的 X Client 。若无此文件,则默认以 /etc/X11/xinit/xinitrc 替代。 20 | 21 | - 我在 CentOS 的系统中,默认使用 GNOME 登陆 X 。但我想要改以 KDE 登陆,该怎么办? 22 | 23 | - 首先你必须要已经安装 KDE 环境 (参考前一章的 yum grouplist 功能), 24 | - 然后可以借由修改 /etc/sysconfig/desktop 内的设置值即可。 25 | - 但如果你不是 root 无法修订该文件时,亦可以在自己的主文件夹参考 /etc/X11/xinit/xinitrc 的内容自行制作 \~/.xinitrc 文件来修改! 26 | 27 | - X Server 的 port 默认开放在?目前默认并不会启动 TCP 端口。不过如果经过设置,则 X port 默认开放在 port 6000 ,而且称此一显示为 :0 28 | 29 | - Linux 主机是否可以有两个以上的 X是的!可以!第一个 X 通常在 tty1 ,第二个在 tty2 以后,依序类推。 第几个是以启动的顺序来定义,并非 :0 , :1 的意思~ 30 | 31 | - X Server 的配置文件是 xorg.conf,在该文件中, Section Files 干嘛用的?相当重要!是设置显示字体用的。而字体一般放置目录在 /usr/share/X11/fonts/ 及 /usr/share/fonts/ 当中。 32 | 33 | - 我发现我的 X 系统键盘所输入的字母老是打不出我所需要的单字,可能原因该如何修订?应该是键盘符号对应表跑掉了。可以修改 xorg.conf 文件内, 关于 Keyboard 的 Option XkbLayout 项目,将他改为 us 即可! 34 | 35 | - 当我的系统内有安装 GNOME 及 KDE 两个 X Widnow Manager ,我原本是以 KDE 为默认的 WM, 若想改为 GNOME 时,应该如何修改?修改 /etc/sysconfig/desktop 内部,成为 GNOME 即可! -------------------------------------------------------------------------------- /chapter_8/8.1压缩文件的用途与技术.md: -------------------------------------------------------------------------------- 1 | # 8.1 压缩文件的用途与技术 2 | 3 | 你是否有过文件文件太大,导致无法以正常的 email 方式发送出去 (很多 email 都有容量大约 25MB 每封信的限制啊!)? 又或者学校、厂商要求使用 CD 或 DVD 来传递归档用的数据,但是你的单一文件却都比这些传统的一次性储存媒体还要大!那怎么分成多片来烧录呢? 还有,你是否有过要备份某些重要数据,偏偏这些数据量太大了,耗掉了你很多的磁盘空间呢? 这个时候,那个好用的“文件压缩”技术可就派的上用场了! 4 | 5 | 因为这些比较大型的文件通过所谓的文件压缩技术之后,可以将他的磁盘使用量降低,可以达到减低文件大小的效果。此外,有的压缩程序还可以进行容量限制, 使一个大型文件可以分区成为数个小型文件,以方便软盘片携带呢! 6 | 7 | 那么什么是“文件压缩”呢?我们来稍微谈一谈他的原理好了。目前我们使用的计算机系统中都是使用所谓的 Bytes 单位来计量的!不过,事实上,计算机最小的计量单位应该是 bits 才对啊。此外,我们也知道 1 Byte = 8 bits 。但是如果今天我们只是记忆一个数字,亦即是 1 这个数字呢?他会如何记录?假设一个 Byte 可以看成下面的模样: 8 | 9 | > □□□□□□□□ 10 | 11 | 12 | > [!TIP] 13 | > 由于 1 Byte = 8 bits ,所以每个 Byte 当中会有 8 个空格,而每个空格可以是 0, 1 ,这里仅是做为一个约略的介绍, 更多的详细数据请参考[第零章的计算机概论]吧! 14 | 15 | 由于我们记录数字是 1 ,考虑计算机所谓的二进制喔,如此一来, 1 会在最右边占据 1 个 bit ,而其他的 7 个 bits 将会自动的被填上 0 啰!你看看,其实在这样的例子中,那 7 个 bits 应该是“空的”才对!不过,为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为 Byte 的型态来记录了!而一些聪明的计算机工程师就利用一些复杂的计算方式, 将这些没有使用到的空间“丢”出来,以让文件占用的空间变小!这就是压缩的技术啦! 16 | 17 | 另外一种压缩技术也很有趣,他是将重复的数据进行统计记录的。举例来说,如果你的数据为“111....”共有100个1时, 那么压缩技术会记录为“100个1”而不是真的有100个1的位存在!这样也能够精简文件记录的容量呢! 非常有趣吧! 18 | 19 | 简单的说,你可以将他想成,其实文件里面有相当多的“空间”存在,并不是完全填满的, 而“压缩”的技术就是将这些“空间”填满,以让整个文件占用的容量下降! 不过,这些“压缩过的文件”并无法直接被我们的操作系统所使用的,因此, 若要使用这些被压缩过的文件数据,则必须将他“还原”回来未压缩前的模样, 那就是所谓的“解压缩”啰!而至于压缩后与压缩的文件所占用的磁盘空间大小, 就可以被称为是“压缩比”啰!更多的技术文件或许你可以参考一下: 20 | 21 | - [RFC 1952 文件:http://www.ietf.org/rfc/rfc1952.txt](http://www.ietf.org/rfc/rfc1952.txt) 22 | - 鸟哥站上的备份:[http://linux.vbird.org/linux_basic/0240tarcompress/0240tarcompress_gzip.php](http://linux.vbird.org/linux_basic/0240tarcompress//0240tarcompress_gzip.php) 23 | 24 | 这个“压缩”与“解压缩”的动作有什么好处呢?最大的好处就是压缩过的文件大小变小了, 所以你的硬盘容量无形之中就可以容纳更多的数据。此外,在一些网络数据的传输中,也会由于数据量的降低, 好让网络带宽可以用来作更多的工作!而不是老是卡在一些大型的文件传输上面呢!目前很多的 WWW 网站也是利用文件压缩的技术来进行数据的传送,好让网站带宽的可利用率上升喔! 25 | 26 | 27 | 28 | > [!TIP] 29 | > 上述的WWW网站压缩技术蛮有趣的!他让你网站上面“看的到的数据”在经过网络传输时,使用的是“压缩过的数据”, 等到这些压缩过的数据到达你的计算机主机时,再进行解压缩,由于目前的计算机运算速度相当的快速, 因此其实在网页浏览的时候,时间都是花在“数据的传输”上面,而不是 CPU 的运算啦!如此一来,由于压缩过的数据量降低了,自然传送的速度就会增快不少! 30 | 31 | 若你是一位软件工程师,那么相信你也会喜欢将你自己的软件压缩之后提供大家下载来使用, 毕竟没有人喜欢自己的网站天天都是带宽满载的吧?举个例子来说, Linux 3.10.81 (CentOS 7 用的延伸版本) 完整的核心大小约有 570 MB 左右,而由于核心主要多是 ASCII code 的纯文本体态文件,这种文件的“多余空间”最多了。而一个提供下载的压缩过的 3.10.81 核心大约仅有 76MB 左右,差了几倍呢?你可以自己算一算喔! -------------------------------------------------------------------------------- /chapter_13/13.10参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 13.10 参考资料与延伸阅读 2 | 3 | - [\[1\]](#123.html#ac1)最完整与详细的密码档说明,可参考各 distribution 内部的 man page。 本文中以 CentOS 7.x 的“ man 5 passwd ”及“ man 5 shadow ”的内容说明; 4 | - [\[2\]](#123.html#ac2)MD5, DES, SHA 均为加密的机制,详细的解释可参考维基百科的说明: 5 | - MD5: 6 | - DES: 7 | - SHA家族:在早期的 Linux 版本中,主要使用 MD5 加密演算法,近期则使用 SHA512 作为默认演算法。 8 | - [\[3\]](#123.html#ac3)telnet 与 ssh 都是可以由远端用户主机连线到 Linux 服务器的一种机制!详细数据可查询鸟站文章: 远端连线服务器: 9 | - [\[4\]](#123.html#ac4)详细的说明请参考 man sudo ,然后以 5 作为关键字搜寻看看即可了解。 10 | - [\[5\]](#123.html#ac5)详细的 PAM 说明可以参考如下链接: 维基百科: Linux-PAM网页: 11 | 12 | 2002/05/15:第一次完成 2003/02/10:重新编排与加入 FAQ 2005/08/25:加入一个大量创建帐号的实例,简单说明一下而已! 2005/08/29:将原本的旧文放置到 [此处](http://linux.vbird.org/linux_basic/0410accountmanager/0410accountmanager.php) 2005/08/31:因为 [userconf](http://linux.vbird.org/linux_basic/0410accountmanager/0410accountmanager.php#userconf) 已经不再这么好用了,使用指令模式比较简单,所以,将他拿掉了~ 2005/09/05:终于将大量创建帐号的那支程序写完了~真是高兴啊! 2006/03/02:更新使用者 UID 号码,由 65535 升级到 2^32-1 这么大! 2007/04/15:原本写的 /etc/pam.d/limits.conf 错了!应该是 [/etc/security/limits.conf](../Text/index.html#20070415) 才对! 2008/04/28:sudo 关于密码重新输入的部分写错了!已经更新,在[这里](../Text/index.html#20080426)查阅看看。感谢网友 superpmo 的告知! 2009/02/18:将基于 FC4 版本的旧文章移动到 [此处](http://linux.vbird.org/linux_basic/0410accountmanager/0410accountmanager-fc4.php)。 2009/02/26:加入 [chage](../Text/index.html#chage) 以及“ chage -d 0 帐号”的功能! 2009/02/27:加入 [acl](../Text/index.html#acl_talk) 的控制项目! 2009/03/04:加入一个简单的帐号新增范例,以及修改原本的帐号新增范例! 2009/04/28:取消 sudo 内的 -c 选项功能说明!之前说的是错的~ 2009/09/09:加入一些仿真题,修改一些语词的用法。 2010/04/27:[情境仿真第三步骤的程序脚本错了](../Text/index.html#20100427)!原本是:“useradd -G youcan -s -m \$username”!感谢 [linux_task](http://phorum.vbird.org/viewtopic.php?f=10&t=33387&start=38) 兄的说明呢! 2015/07/17:将旧的基于 CentOS 5 的版本备份到[这里](http://linux.vbird.org/linux_basic/0410accountmanager//0410accountmanager-centos5.php)。 2015/07/27:忘记加入 authconfig-tui 的说明!今日补上! -------------------------------------------------------------------------------- /chapter_21/21.6检验软件正确性.md: -------------------------------------------------------------------------------- 1 | # 21.6 检验软件正确性 2 | 3 | 前面提到很多升级与安装需要注意的事项,因为我们需要克服很多的程序漏洞,所以需要前往 Linux distribution 或者是某些软件开发商的网站,下载最新并且较安全的软件文件来安装才行。 好了,那么“有没有可能我们下载的文件本身就有问题?” 是可能的!因为 cracker 无所不在,很多的软件开发商已经公布过他们的网页所放置的文件曾经被窜改过! 那怎么办?连下载原版的数据都可能有问题了?难道没有办法判断文件的正确性吗? 4 | 5 | 这个时候我们就要通过每个文件独特的指纹验证数据了!因为每个文件的内容与文件大小都不相同, 所以如果一个文件被修改之后,必然会有部分的信息不一样!利用这个特性,我们可以使用 MD5/sha1 或更严密的 sha256 等指纹验证机制来判断该文件有没有被更动过!举个例子来说,在每个 CentOS 7.x 原版光盘的下载点都会有提供几个特别的文件, 你可以先到下面的链接看看: 6 | 7 | - 8 | 9 | 仔细看喔,上述的 URL 里面除了有所有光盘的下载点之外,还有提供刚刚说到的 md5, sha1, sha256 等指纹验证机制喔!通过这个编码的比对, 我们就可以晓得下载的文件是否有问题。那么万一 CentOS 提供的光盘镜像文件被下载之后,让有心人士偷偷修改过,再转到 Internet 上面流传,那么你下载的这个文件偏偏不是原厂提供的,呵呵! 你能保证该文件的内容完全没有问题吗?当然不能对不对!是的,这个时候就有 md5sum, sha1sum, sha256sum 这几文件指纹的咚咚出现啦!说说他的用法吧! 10 | 11 | ## 21.6.1 md5sum / sha1sum / sha256sum 12 | 13 | 目前有多种机制可以计算文件的指纹码,我们选择使用较为广泛的 MD5, SHA1 或 SHA256 加密机制来处理, 例如上面链接中 CentOS 7.x 的相关指纹确认。不过 ISO文件实在太大了,下载来确认实在很浪费带宽。 所以我们拿前一个小节谈到的 NTP 软件来检查看看好了。记得我们下载的 NTP 软件版本为 4.2.8p3 这一版, 在官网上面仅有提供 md5sum 的数据而已,在下载页面的 MD5 数据为: 14 | 15 | ```shell 16 | b98b0cbb72f6df04608e1dd5f313808b ntp-4.2.8p3.tar.gz 17 | ``` 18 | 19 | 如何确认我们下载的文件是正确没问题的呢?这样处理一下: 20 | 21 | ```shell 22 | [root@study ~]# md5sum/sha1sum/sha256sum [-bct] filename 23 | [root@study ~]# md5sum/sha1sum/sha256sum [--status|--warn] --check filename 24 | 选项与参数: 25 | -b :使用 binary 的读档方式,默认为 Windows/DOS 文件型态的读取方式; 26 | -c :检验文件指纹; 27 | -t :以文字体态来读取文件指纹。 28 | 29 | 范例一:将刚刚的文件下载后,测试看看指纹码 30 | [root@study ~]# md5sum ntp-4.2.8p3.tar.gz 31 | b98b0cbb72f6df04608e1dd5f313808b ntp-4.2.8p3.tar.gz 32 | # 看!显示的编码是否与上面相同呢?赶紧测试看看! 33 | ``` 34 | 35 | 一般而言,每个系统里面的文件内容大概都不相同,例如你的系统中的 /etc/passwd 这个登陆信息档与我的一定不一样,因为我们的使用者与密码、 Shell 及主文件夹等大概都不相同,所以由 md5sum 这个文件指纹分析程序所自行计算出来的指纹表当然就不相同啰! 36 | 37 | 好了,那么如何应用这个东西呢?基本上,你必须要在你的 Linux 系统上为你的这些重要的文件进行指纹数据库的创建 (好像在做户口调查!),将下面这些文件创建数据库: 38 | 39 | - /etc/passwd 40 | - /etc/shadow (假如你不让使用者改密码了) 41 | - /etc/group 42 | - /usr/bin/passwd 43 | - /sbin/rpcbind 44 | - /bin/login (这个也很容易被骇!) 45 | - /bin/ls 46 | - /bin/ps 47 | - /bin/top 48 | 49 | 这几个文件最容易被修改了!因为很多木马程序执行的时候,还是会有所谓的“执行序, PID”为了怕被 root 追查出来,所以他们都会修改这些检查调度的文件,如果你可以替这些文件创建指纹数据库 (就是使用 md5sum 检查一次,将该文件指纹记录下来,然后常常以 [shell script] 的方式由程序自行来检查指纹表是否不同了!),那么对于文件系统会比较安全啦! -------------------------------------------------------------------------------- /chapter_1/1.6本章习题.md: -------------------------------------------------------------------------------- 1 | # 1.6 本章习题 2 | 3 | (要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看) 实作题部分: 4 | 5 | - 请上网找出目前 Linux 核心的最新稳定版与发展中版本的版本号码,请注明查询的日期与版本的对应。 6 | 7 | - 请上网找出 Linux 的吉祥物企鹅的名字,以及最原始的图像文件画面。(提示:请前往 查阅) 8 | 9 | - 请上网找出 Andriod 与 Linux 核心版本间的关系。(提示:请前往 查阅) 10 | 11 | 简答题部分: 12 | 13 | - 你在你的主机上面安装了一张网卡,但是开机之后,系统却无法使用,你确定网卡是好的,那么可能的问题出在哪里?该如何解决?因为所有的硬件都没有问题,所以,可能出问题的地方在于系统的核心(kernel) 不支持这张网卡。解决的方法,(1)到网卡的开发商网站,(2)下载支持你主机操作系统的驱动程序, (3)安装网卡驱动程序后,就可以使用了。 14 | - 一个操作系统至少要能够完整的控制整个硬件,请问,操作系统应该要控制硬件的哪些单元?根据硬件的运行,以及数据在主机上面的运算情况与写入/读取情况,我们知道至少要能够控制: (1)input/output control, (2)device control, (3)process management, (4)file management. 等等! 15 | - 我在Windows上面玩的游戏,可不可以拿到Linux去玩?当然不行!因为游戏也是一个应用程序 (application),他必须要使用到核心所提供的工具来开发他的游戏, 所以这个游戏是不可在不同的平台间运行的。除非这个游戏已经进行了移植。 16 | - Linux本身仅是一个核心与相关的核心工具而已,不过,他已经可以驱动所有的硬件, 所以,可以算是一个很阳春的操作系统了。经过其他应用程序的开发之后,被整合成为Linux distribitions。请问众多的distributions之间,有何异同?相同:(1)同样使用 所释出的核心; (2)支持同样的标准,如 FHS、LSB 等; (3)使用几乎相同的自由软件 (例如 GNU 里面的 gcc/glibc/vi/apache/bind/sendmail... ); (4)几乎相同的操作接口 (例如均使用 bash/KDE/GNOME 等等)。 不同:使用的 kernel 与各软件的版本可能会不同;各开发商加入的应用工具不同,使用的套件管理模式不同(dpkg 与 RPM) 17 | - Unix 是谁写出来的? GNU 计划是谁发起的?Unix 是 Ken Thompson 写的,1973 年再由 Dennis Ritchie 以 C 语言改写成功。 至于 GNU 与 FSF 则是 Richard Stallman 发起的。 18 | - GNU 的全名为何?他主要由那个基金会支持?GNU 是 GNU is Not Unix 的简写,是个无穷循环! 另外,这个计划是由自由软件基金会 (Free Software Foundation, FSF) 所支持的! 两者都是由 Stallman 先生所发起的! 19 | - 何谓多用户 ( Multi-user ) 多任务 ( Multitask )?Multiuser 指的是 Linux 允许多人同时连上主机之外,每个使用者皆有其各人的使用环境,并且可以同时使用系统的资源! Multitask 指的是多任务环境,在 Linux 系统下, CPU 与其他例如网络资源可以同时进行多项工作, Linux 最大的特色之一即在于其多任务时,资源分配较为平均! 20 | - 简单说明 GNU General Public License ( GPL ) 与 Open Source 的精神:1. GPL 的授权之软件,乃为自由软件(Free software),任何人皆可拥有他; 2. 开发 GPL 的团体(或商业企业)可以经由该软件的服务来取得服务的费用; 3. 经过 GPL 授权的软件,其属于 Open source 的情况,所以应该公布其源代码; 4. 任何人皆可修改经由 GPL 授权过的软件,使符合自己的需求; 5. 经过修改过后 Open source 应该回馈给 Linux 社群。 21 | - 什么是 POSIX ?为何说 Linux 使用 POSIX 对于发展有很好的影响?POSIX 是一种标准规范,主要针对在 Unix 操作系统上面跑的程序来进行规范。 若你的操作系统符合 POSIX ,则符合 POSIX 的程序就可以在你的操作系统上面运行。 Linux 由于支持 POSIX ,因此很多 Unix 上的程序可以直接在 Linux 上运行, 因此程序的移植相当简易!也让大家容易转换平台,提升 Linux 的使用率。 22 | - 简单说明 Linux 成功的因素?1. 借由 Minix 操作系统开发的 Unix like ,没有版权的纠纷; 2. 借助于 GNU 计划所提供的各项工具软件, gcc/bash 等; 3. 借由 Internet 广为流传; 4. 借由支持 POSIX 标准,让核心能够适合所有软件的开发; 5. 托瓦兹强调务实,虚拟团队的自然形成! -------------------------------------------------------------------------------- /chapter_21/21.8本章习题.md: -------------------------------------------------------------------------------- 1 | # 21.8 本章习题 2 | 3 | 实作题部分: 4 | 5 | - 请前往企鹅游戏网站 下载 xpenguins-2.2.tar.gz 源代码文件,并安装该软件。安装完毕之后,请在 GNOME 图形接口执行 xpenguins , 看看有没有出现如同官网上面出现的小企鹅?(你有可能需要安装 yum install libX\*-devel 才行喔) 6 | 7 | ------------------------------------------------------------------------ 8 | 9 | 情境仿真题部分: 10 | 11 | - 请依照下面的方式来创建你的系统的重要文件指纹码,并每日比对此重要工作。 12 | 13 | 1. 将 /etc/{passwd,shadow,group} 以及系统上面所有的 SUID/SGID 文件创建文件列表,该列表文件名为“ important.file ”; 14 | 15 | ```shell 16 | [root@study ~]# ls /etc/{passwd,shadow,group} > important.file 17 | [root@study ~]# find /usr/sbin /usr/bin -perm /6000 > important.file 18 | ``` 19 | 20 | 2. 通过这个文件名列表,以名为 md5.checkfile.sh 的文件名去创建指纹码,并将该指纹码文件“ finger1.file ”设置成为不可修改的属性; 21 | 22 | ```shell 23 | [root@study ~]# vim md5.checkfile.sh 24 | #!/bin/bash 25 | for filename in $(cat important.file) 26 | do 27 | md5sum $filename > finger1.file 28 | done 29 | 30 | [root@study ~]# sh md5.checkfile.sh 31 | [root@study ~]# chattr +i finger1.file 32 | ``` 33 | 34 | 3. 通过相同的机制去创建后续的分析数据为 finger_new.file ,并将两者进行比对,若有问题则提供 email 给 root 查阅: 35 | 36 | ```shell 37 | [root@study ~]# vim md5.checkfile.sh 38 | #!/bin/bash 39 | if [ "$1" == "new" ]; then 40 | for filename in $(cat important.file) 41 | do 42 | md5sum $filename > finger1.file 43 | done 44 | echo "New file finger1.file is created." 45 | exit 0 46 | fi 47 | if [ ! -f finger1.file ]; then 48 | echo "file: finger1.file NOT exist." 49 | exit 1 50 | fi 51 | 52 | [ -f finger_new.file ] && rm finger_new.file 53 | for filename in $(cat important.file) 54 | do 55 | md5sum $filename > finger_new.file 56 | done 57 | 58 | testing=$(diff finger1.file finger_new.file) 59 | if [ "$testing" != "" ]; then 60 | diff finger1.file finger_new.file | mail -s 'finger trouble..' root 61 | fi 62 | 63 | [root@study ~]# vim /etc/crontab 64 | 30 2 * * * root cd /root; sh md5.checkfile.sh 65 | ``` 66 | 67 | 如此一来,每天系统会主动的去分析你认为重要的文件之指纹数据,然后再加以分析,看看有没有被更动过。 不过,如果该变动是正常的,例如 CentOS 自动的升级时,那么你就得要删除 finger1.file , 再重新创建一个新的指纹数据库才行!否则你会每天收到有问题信件的回报喔! -------------------------------------------------------------------------------- /chapter_9/9.1vi与vim.md: -------------------------------------------------------------------------------- 1 | # 9.1 vi 与 vim 2 | 3 | 由前面一路走来,我们一直建议使用文字模式来处理 Linux 系统的设置问题,因为不但可以让你比较容易了解到 Linux 的运行状况,也比较容易了解整个设置的基本精神,更能“保证”你的修改可以顺利的被运行。 所以,在 Linux 的系统中使用文字编辑器来编辑你的 Linux 参数配置文件,可是一件很重要的事情呦!也因此呢,系统管理员至少应该要熟悉一种文书处理器的! 4 | 5 | 6 | 7 | > [!TIP] 8 | > 这里要再次的强调,不同的 Linux distribution 各有其不同的附加软件,例如 Red Hat Enterprise Linux 与 Fedora 的 ntsysv 与 setup 等,而 SuSE 则有 YAST 管理工具等等, 因此,如果你只会使用此种类型的软件来控制你的 Linux 系统时,当接管不同的 Linux distributions 时,呵呵!那可就苦恼了! 9 | 10 | 在 Linux 的世界中,绝大部分的配置文件都是以 ASCII 的纯文本形态存在,因此利用简单的文字编辑软件就能够修改设置了! 与微软的 Windows 系统不同的是,如果你用惯了 Microsoft Word 或 Corel Wordperfect 的话,那么除了 X window 里面的图形接口编辑程序(如 xemacs )用起来尚可应付外,在 Linux 的文字模式下,会觉得文书编辑程序都没有窗口接口来的直观与方便。 11 | 12 | 13 | 14 | > [!TIP] 15 | > 什么是纯文本文件?其实文件记录的就是 0 与 1 ,而我们通过编码系统来将这些 0 与 1 转成我们认识的文字就是了。 在[第零章里面的数据表示方式]有较多说明,请自行查阅。 ASCII 就是其中一种广为使用的文字编码系统,在 ASCII 系统中的图示与代码可以参考 呢! 16 | 17 | 那么 Linux 在命令行下的文书编辑器有哪些呢?其实有非常多喔!常常听到的就有: [emacs](http://www.gnu.org/software/emacs/), [pico](https://en.wikipedia.org/wiki/Pico_(text_editor)), [nano](http://sourceforge.net/projects/nano/), [joe](http://sourceforge.net/projects/joe-editor/), 与 [vim](http://www.vim.org/) 等等。 既然有这么多命令行的文书编辑器,那么我们为什么一定要学 vi 啊?还有那个 vim 是做啥用的?下面就来谈一谈先! 18 | 19 | ## 9.1.1 为何要学 vim 20 | 21 | 文书编辑器那么多,我们之前在[第四章]也曾经介绍过那简单好用的 [nano] ,既然已经学会了 nano ,干嘛鸟哥还一直要你学这不是很友善的 vi 呢?其实是有原因的啦!因为: 22 | 23 | - 所有的 Unix Like 系统都会内置 vi 文书编辑器,其他的文书编辑器则不一定会存在; 24 | - 很多个别软件的编辑接口都会主动调用 vi (例如未来会谈到的 [crontab], [visudo], edquota 等指令); 25 | - vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计; 26 | - 因为程序简单,编辑速度相当快速。 27 | 28 | 其实重点是上述的第二点,因为有太多 Linux 上面的指令都默认使用 vi 作为数据编辑的接口,所以你必须、一定要学会 vi ,否则很多指令你根本就无法操作呢!这样说,有刺激到你务必要学会 vi 的热情了吗? ^\_^ 29 | 30 | 那么什么是 vim 呢?其实你可以将 vim 视作 vi 的进阶版本,vim 可以用颜色或底线等方式来显示一些特殊的信息。 举例来说,当你使用 vim 去编辑一个 C 程序语言的文件,或者是我们后续会谈到的 [shell script] 脚本程序时,vim 会依据文件的扩展名或者是文件内的开头信息, 判断该文件的内容而自动的调用该程序的语法判断式,再以颜色来显示程序码与一般信息。也就是说, 这个 vim 是个“程序编辑器”啦!甚至一些 Linux 基础配置文件内的语法,都能够用 vim 来检查呢! 例如我们在第七章谈到的 [/etc/fstab] 这个文件的内容。 31 | 32 | 简单的来说, vi 是老式的文书处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具,就连 vim 的官方网站 ([http://www.vim.org](http://www.vim.org/)) 自己也说 vim 是一个“程序开发工具”而不是文书处理软件~^\_^。 因为 vim 里面加入了很多额外的功能,例如支持正则表达式的搜寻架构、多文件编辑、区块复制等等。 这对于我们在 Linux 上面进行一些配置文件的修订工作时,是很棒的一项功能呢! 33 | 34 | 35 | 36 | > [!TIP] 37 | > 什么时候会使用到 vim 呢?其实鸟哥的整个网站都是在 vim 的环境下一字一字的创建起来的喔! 早期鸟哥使用网页制作软件在编写网页,但是老是发现网页编辑软件都不怎么友善,尤其是写到 PHP 方面的程序码时。 后来就干脆不使用所见即所得的编辑软件,直接使用 vim ,然后标签 (tag) 也都自行用键盘输入! 这样整个文件也比较干净!所以说,鸟哥我是很喜欢 vim 的啦! ^\_^ 38 | 39 | 下面鸟哥会先就简单的 vi 做个介绍,然后再跟大家报告一下 vim 的额外功能与用法呢! -------------------------------------------------------------------------------- /chapter_10/10.8本章习题.md: -------------------------------------------------------------------------------- 1 | # 10.8 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 4 | 5 | - 情境仿真题一:由于 \~/.bash_history 仅能记录指令,我想要在每次登出时都记录时间,并将后续的指令 50 笔记录下来, 可以如何处理? 6 | 7 | - 目标:了解 history ,并通过数据流重导向的方式记录历史命令; 8 | - 前提:需要了解本章的数据流重导向,以及了解 bash 的各个环境配置文件信息。 其实处理的方式非常简单,我们可以了解 date 可以输出时间,而利用 \~/.myhistory 来记录所有历史记录, 而目前最新的 50 笔历史记录可以使用 history 50 来显示,故可以修改 \~/.bash_logout 成为下面的模样: 9 | 10 | ```shell 11 | [dmtsai@study ~]$ vim ~/.bash_logout 12 | date > ~/.myhistory 13 | history 50 > ~/.myhistory 14 | clear 15 | ``` 16 | 17 | ------------------------------------------------------------------------ 18 | 19 | 简答题部分: 20 | 21 | - 在 Linux 上可以找到哪些 shell(举出三个) ?那个文件记录可用的 shell ?而 Linux 默认的 shell 是?1) /bin/bash, /bin/tcsh, /bin/csh 2) /etc/shells 3) bash ,亦即是 /bin/bash。 22 | - 你输入一串指令之后,发现前面写的一长串数据是错的,你想要删除光标所在处到最前面的指令串内容,应该如何处理?按下 \[crtl\]+u 组合键即可! 23 | - 在 shell 环境下,有个提示字符 (prompt),他可以修改吗?要改什么?默认的提示字符内容是?可以修改的,改 PS1 这个变量,这个 PS1 变量的默认内容为:“\[\\u@\\h \\W\]\$” 24 | - 如何显示 HOME 这个环境变量?echo \$HOME 25 | - 如何得知目前的所有变量与环境变量的设置值?环境变量用 env 或 export 而所有变量用 set 即可显示 26 | - 我是否可以设置一个变量名称为 3myhome ?不行!变量不能以数字做为开头,参考变量设置规则的内容 27 | - 在这样的练习中“A=B”且“B=C”,若我下达“unset \$A”,则取消的变量是 A 还是 B?被取消的是 B 喔,因为 unset \$A 相当于 unset B 所以取消的是 B ,A 会继续存在! 28 | - 如何取消变量与命令别名的内容?使用 unset 及 unalias 即可 29 | - 如何设置一个变量名称为 name 内容为 It's my name ?name=It\\'s\\ my\\ name 或 name="It's my name" 30 | - bash 环境配置文件主要分为哪两种类型的读取?分别读取哪些重要文件?(1)login shell:主要读取 /etc/profile 及 \~/.bash_profile (2)non-logni shell:主要读取 \~/.bashrc 而已。 31 | - CentOS 7.x 的 man page 的路径设置文件?/etc/man_db.conf 32 | - 试说明 ', ", 与 `这些符号在变量定义中的用途?参考变量规则那一章节,其中, " 可以具有变量的内容属性,' 则仅有一般字符,至于` 之内则是可先被执行的指令。 33 | - 跳脱符号 \\ 有什么用途?可以用来跳脱特殊字符,例如 Enter, \$ 等等,使成为一般字符! 34 | - 连续命令中, ;, &&, \|\| 有何不同?分号可以让两个 command 连续运行,不考虑 command1 的输出状态, && 则前一个指令必需要没有错误讯息,亦即回传值需为 0 则 command2 才会被执行, \|\| 则与 && 相反! 35 | - 如何将 last 的结果中,独立出帐号,并且印出曾经登陆过的帐号? last \| cut -d ' ' -f1 \| sort \| uniq 36 | - 请问 foo1 && foo2 \| foo3 > foo4 ,这个指令串当中, foo1/foo2/foo3/foo4 是指令还是文件? 整串指令的意义为?foo1, foo2 与 foo3 都是指令, foo4 是设备或文件。整串指令意义为: (1)当 foo1 执行结果有错误时,则该指令串结束; (2)若 foo1 执行结果没有错误时,则执行 foo2 \| foo3 > foo4 ;其中: (2-1)foo2 将 stdout 输出的结果传给 foo3 处理; (2-2)foo3 将来自 foo2 的 stdout 当成 stdin ,处理完后将数据流重新导向 foo4 这个设备/文件 37 | - 如何秀出在 /bin 下面任何以 a 为开头的文件文件名的详细数据?ls -ld /bin/a\* 38 | - 如何秀出 /bin 下面,文件名为四个字符的文件?ls -ld /bin/???? 39 | - 如何秀出 /bin 下面,文件名开头不是 a-d 的文件?ls -ld /bin/^([a-d](#94.html#fn_a-d))\* 40 | - 我想要让终端机接口的登陆提示字符修改成我自己喜好的模样,应该要改哪里?(filename)/etc/issue 41 | - 承上题,如果我是想要让使用者登陆后,才显示欢迎讯息,又应该要改哪里?/etc/motd -------------------------------------------------------------------------------- /chapter_1/1.7参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 1.7 参考资料与延伸阅读 2 | 3 | - [\[1\]](#17.html#ac1)Multics计划网站:。 4 | - [\[2\]](#17.html#ac2)Ken Thompson 的 wiki 简介: 5 | - [\[3\]](#17.html#ac3)Dennis Ritchie 的 wiki 简介: 6 | - [\[4\]](#17.html#ac4)Bill joy 的 wiki 简介: 7 | - [\[5\]](#17.html#ac5)Andrew Tanenbaum 的 wiki 简介: 8 | - [\[6\]](#17.html#ac6)Richard Stallman的个人网站: 9 | - [\[7\]](#17.html#ac7)GNU 计划的官网: 10 | - [\[8\]](#17.html#ac8)开放源代码促进会针对 open source 的解释: 以及 Open source 与 free software 的差异: 11 | - [\[9\]](#17.html#ac9)开放源代码促进会针对 Open source 授权的汇整介绍: 12 | - [\[10\]](#17.html#ac10)Linus Torvalds 在 Wiki 的介绍: 13 | - [\[11\]](#17.html#ac11)Cluster Computer 在 Wiki 的介绍: 14 | - [\[12\]](#17.html#ac12)Android 在 Wiki 的介绍: 15 | - 洪朝贵老师的GNU/FSF介绍: 16 | - 葛林穆迪着,杜默译,“Linux传奇”,时报文化出版企业。 书本介绍: 17 | - XFree86的网站: 18 | - POSIX的相关说明: 维基百科: IEEE POSIX标准: 19 | 20 | 2002/06/25:第一次完成 2003/01/26:重新修订,加入一些历史事件、重新编排与加入 FAQ 2003/02/28:加入百资以及 distrowatch 两个网站的推荐! 2005/05/31:旧有的数据放于 [此处](http://linux.vbird.org/linux_basic/0110whatislinux/0110whatislinux.php) 2005/06/02:做了大幅度的改版,很多数据参考了网络农夫及 Linux 传奇等书籍,建议大家要多看看网络农夫的大作喔! 2005/06/08:将原本的 binary / compiler / Emacs 的地方再说明一下!比较容易了解那是什么!顺便加入习题 2005/07/21:网络农夫的网站结束了~真伤心~只好提供网络农夫之前发表的文章链接了! 2005/08/03:感谢网友 babab 的来信告知,修订了国家高速网络中心网址: 2005/10/24:经由网友的回报,洪朝贵老师已经调职到树德大学,因此整个链接内容已作修订。 2006/05/31:加入了重点回顾的项目啦! 2006/06/06:感谢网友 "Warren Hsieh" 兄的提醒,由于MAC在 2006 年后使用 Intel 的 x86 硬件架构,故 Windows 是可能可以在上面安装的! 2008/07/23:因为加入了计算机概论的章节,所以本文做了挺大幅度的修改!原本针对FC4的版本请点选[这里](http://linux.vbird.org/linux_basic/0110whatislinux/0110whatislinux-fc4.php)。 2007/07/26:将整份文章重新校阅过,修订一些文辞,也将格式调整为适合的XHTML了! 2007/07/29:将主、次核心版本加强说明! 2009/08/05:移除最后一小节的标准,将FHS与LSB向前挪到distribution解释中。拿掉服务器、工作站、终端机的说明。 2012/02/20:更新了 [Linux 在台湾](../Text/index.html#20120220)的相关链接信息 2015/04/17:旧的基于 CentOS 5 的数据放置在[这里喔!](http://linux.vbird.org/linux_basic/0110whatislinux/0110whatislinux-centos5.php) 2015/04/23:同时整合了[Linux 如何学习](http://linux.vbird.org/linux_basic/0120howtolinux.php)这一章的内容!减少一些不必要的碎碎念 21 | -------------------------------------------------------------------------------- /chapter_4/4.4超简单文字编辑器-nano.md: -------------------------------------------------------------------------------- 1 | # 4.4 超简单文书编辑器: nano 2 | 3 | 在Linux系统当中有非常多的文书编辑器存在,其中最重要的就是后续章节我们会谈到的 [vim]这家伙! 不过其实还有很多不错用的文书编辑器存在的!在这里我们就介绍一下简单的nano这一支文书编辑器来玩玩先! 4 | 5 | nano的使用其实很简单,你可以直接加上文件名就能够打开一个旧文件或新文件!下面我们就来打开一个名为text.txt的文件名来看看: 6 | 7 | ```shell 8 | [dmtsai@study ~]$ nano text.txt 9 | # 不管text.txt存不存在都没有关系!存在就打开旧文件,不存在就打开新文件 10 | 11 | GNU nano 2.3.1 File: text.txt 12 | 13 | <==这个是光标所在处 14 | 15 | [ New File ] 16 | ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos 17 | ^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Te ^T To Spell 18 | # 上面两行是指令说明列,其中^代表的是[ctrl]的意思 19 | ``` 20 | 21 | 如上图所示,你可以看到第一行反白的部分,那仅是在宣告nano的版本与文件名(File: text.txt)而已。 之后你会看到最下面的三行,分别是文件的状态(New File)与两行指令说明列。指令说明列反白的部分就是组合键, 接的则是该组合键的功能。那个指数符号(^)代表的是键盘的\[Ctrl\]按键啦!下面先来说说比较重要的几个组合按键: 22 | 23 | - \[ctrl\]-G:取得线上说明(help),很有用的! 24 | - \[ctrl\]-X:离开naon软件,若有修改过文件会提示是否需要储存喔! 25 | - \[ctrl\]-O:储存盘案,若你有权限的话就能够储存盘案了; 26 | - \[ctrl\]-R:从其他文件读入数据,可以将某个文件的内容贴在本文件中; 27 | - \[ctrl\]-W:搜寻字串,这个也是很有帮助的指令喔! 28 | - \[ctrl\]-C:说明目前光标所在处的行数与列数等信息; 29 | - \[ctrl\]-\_:可以直接输入行号,让光标快速移动到该行; 30 | - \[alt\]-Y:校正语法功能打开或关闭(按一下开、再按一下关) 31 | - \[alt\]-M:可以支持鼠标来移动光标的功能 32 | 33 | 比较常见的功能是这些,如果你想要取得更完整的说明,可以在nano的画面中按下\[ctrl\]-G或者是\[F1\]按键, 就能够显示出完整的naon内指令说明了。好了,请你在上述的画面中随便输入许多字, 输入完毕之后就储存后离开,如下所示: 34 | 35 | ```shell 36 | GNU nano 2.3.1 File: text.txt 37 | 38 | Type some words in this nano editor program. 39 | You can use [ctrl] plus some keywords to go to some functions. 40 | Hello every one. 41 | Bye bye. 42 | <==这个是由标所在处 43 | 44 | ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos 45 | ^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Te ^T To Spell 46 | ``` 47 | 48 | 此时按下\[crtl\]-X会出现类似下面的画面: 49 | 50 | ```shell 51 | GNU nano 2.3.1 File: text.txt 52 | 53 | Type some words in this nano editor program. 54 | You can use [ctrl] plus some keywords to go to some functions. 55 | Hello every one. 56 | Bye bye. 57 | 58 | Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ? ▋ 59 | Y Yes 60 | N No ^C Cancel 61 | ``` 62 | 63 | 如果不要储存数据只想要离开,可以按下N即可离开。如果确实是需要储存的,那么按下Y后,最后三行会出现如下画面: 64 | 65 | ```shell 66 | File Name to Write: text.txt▋ <==可在这里修改文件名或直接按[enter] 67 | ^G Get Help M-D DOS Format M-A Append M-B Backup File 68 | ^C Cancel M-M Mac Format M-P Prepend 69 | ``` 70 | 71 | 如果是单纯的想要储存而已,直接按下\[enter\]即可储存后离开nano程序。不过上表中最下面还有两行,我们知道指数符号代表\[crtl\], 那个M是代表什么呢?其实就是\[alt\]啰!其实nano也不需要记太多指令啦!只要知道怎么进入nano、怎么离开,怎么搜寻字串即可。 未来我们还会学习更有趣的vi呢! -------------------------------------------------------------------------------- /chapter_15/15.1什么是例行性工作调度.md: -------------------------------------------------------------------------------- 1 | # 15.1 什么是例行性工作调度 2 | 3 | 每个人或多或少都有一些约会或者是工作,有的工作是例行性的, 例如每年一次的加薪、每个月一次的工作报告、每周一次的午餐会报、每天需要的打卡等等; 有的工作则是临时发生的,例如刚好总公司有高官来访,需要你准备演讲器材等等! 用在生活上面,例如每年的爱人的生日、每天的起床时间等等、还有突发性的 3C 用品大降价 (啊!真希望天天都有!) 等等啰。 4 | 5 | 像上面这些例行性工作,通常你得要记录在行事历上面才能避免忘记!不过,由于我们常常在计算机前面的缘故, 如果计算机系统能够主动的通知我们的话,那么不就轻松多了!嘿嘿!这个时候 Linux 的例行性工作调度就可以派上场了! 在不考虑硬件与我们服务器的链接状态下,我们的 Linux 可以帮你提醒很多任务,例如:每一天早上 8:00 钟要服务器连接上音响,并启动音乐来唤你起床;而中午 12:00 希望 Linux 可以发一封信到你的邮件信箱,提醒你可以去吃午餐了; 另外,在每年的你爱人生日的前一天,先发封信提醒你,以免忘记这么重要的一天。 6 | 7 | 那么 Linux 的例行性工作是如何进行调度的呢?所谓的调度就是将这些工作安排执行的流程之意! 咱们的 Linux 调度就是通过 crontab 与 at 这两个东西!这两个玩意儿有啥异同?就让我们来瞧瞧先! 8 | 9 | ## 15.1.1 Linux 工作调度的种类: at, cron 10 | 11 | 从上面的说明当中,我们可以很清楚的发现两种工作调度的方式: 12 | 13 | - 一种是例行性的,就是每隔一定的周期要来办的事项; 14 | - 一种是突发性的,就是这次做完以后就没有的那一种 ( 3C 大降价...) 15 | 16 | 那么在 Linux 下面如何达到这两个功能呢?那就得使用 at 与 crontab 这两个好东西啰! 17 | 18 | - at :at 是个可以处理仅执行一次就结束调度的指令,不过要执行 at 时, 必须要有 atd 这个[服务 (第十七章)] 的支持才行。在某些新版的 distributions 中,atd 可能默认并没有启动,那么 at 这个指令就会失效呢!不过我们的 CentOS 默认是启动的! 19 | 20 | - crontab :crontab 这个指令所设置的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外,亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 这个服务喔! 21 | 22 | 下面我们先来谈一谈 Linux 的系统到底在做什么事情,怎么有若干多的工作调度在进行呢?然后再回来谈一谈 at 与 crontab 这两个好东西! 23 | 24 | ## 15.1.2 CentOS Linux 系统上常见的例行性工作 25 | 26 | 如果你曾经使用过 Linux 一阵子了,那么你大概会发现到 Linux 会主动的帮我们进行一些工作呢! 比方说自动的进行线上更新 (on-line update)、自动的进行 updatedb ([第六章谈到的 locate 指令]) 更新文件名数据库、自动的作登录文件分析 (所以 root 常常会收到标题为 logwatch 的信件) 等等。这是由于系统要正常运行的话, 某些在背景下面的工作必须要定时进行的缘故。基本上 Linux 系统常见的例行性任务有: 27 | 28 | - 进行登录文件的轮替 (log rotate): Linux 会主动的将系统所发生的各种信息都记录下来,这就是[登录文件 (第十八章)]。 由于系统会一直记录登录信息,所以登录文件将会越来越大!我们知道大型文件不但占容量还会造成读写性能的困扰, 因此适时的将登录文件数据挪一挪,让旧的数据与新的数据分别存放,则比较可以有效的记录登录信息。这就是 log rotate 的任务!这也是系统必要的例行任务; 29 | 30 | - 登录文件分析 logwatch 的任务: 如果系统发生了软件问题、硬件错误、资安问题等,绝大部分的错误信息都会被记录到登录文件中, 因此系统管理员的重要任务之一就是分析登录文件。但你不可能手动通过 vim 等软件去检视登录文件,因为数据太复杂了! 我们的 CentOS 提供了一只程序“ logwatch ”来主动分析登录信息,所以你会发现,你的 root 老是会收到标题为 logwatch 的信件,那是正常的!你最好也能够看看该信件的内容喔! 31 | 32 | - 创建 locate 的数据库: 在第六章我们谈到的 [locate] 指令时, 我们知道该指令是通过已经存在的文件名数据库来进行系统上文件名的查询。我们的文件名数据库是放置到 /var/lib/mlocate/ 中。 问题是,这个数据库怎么会自动更新啊?嘿嘿!这就是系统的例行性工作所产生的效果啦!系统会主动的进行 updatedb 喔! 33 | 34 | - man page 查询数据库的创建: 与 locate 数据库类似的,可提供快速查询的 man page db 也是个数据库,但如果要使用 man page 数据库时,就得要执行 mandb 才能够创建好啊! 而这个 man page 数据库也是通过系统的例行性工作调度来自动执行的哩! 35 | 36 | - RPM 软件登录文件的创建: RPM ([第二十二章]) 是一种软件管理的机制。由于系统可能会常常变更软件, 包括软件的新安装、非经常性更新等,都会造成软件文件名的差异。为了方便未来追踪,系统也帮我们将文件名作个排序的记录呢! 有时候系统也会通过调度来帮忙 RPM 数据库的重新创建喔! 37 | 38 | - 移除暂存盘: 某些软件在运行中会产生一些暂存盘,但是当这个软件关闭时,这些暂存盘可能并不会主动的被移除。 有些暂存盘则有时间性,如果超过一段时间后,这个暂存盘就没有效用了,此时移除这些暂存盘就是一件重要的工作! 否则磁盘容量会被耗光。系统通过例行性工作调度执行名为 tmpwatch 的指令来删除这些暂存盘呢! 39 | 40 | - 与网络服务有关的分析行为: 如果你有安装类似 WWW 服务器软件 (一个名为 apache 的软件),那么你的 Linux 系统通常就会主动的分析该软件的登录文件。 同时某些凭证与认证的网络信息是否过期的问题,我们的 Linux 系统也会很友好的帮你进行自动检查! 41 | 42 | 其实你的系统会进行的例行性工作与你安装的软件多寡有关,如果你安装过多的软件,某些服务功能的软件都会附上分析工具, 那么你的系统就会多出一些例行性工作啰!像鸟哥的主机还多加了很多自己撰写的分析工具,以及其他第三方协力软件的分析软件, 嘿嘿!俺的 Linux 工作量可是非常大的哩!因为有这么多的工作需要进行,所以我们当然得要了解例行性工作的处理方式啰! -------------------------------------------------------------------------------- /chapter_11/11.6本章习题.md: -------------------------------------------------------------------------------- 1 | # 11.6 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 4 | 5 | - 情境仿真题一:通过 grep 搜寻特殊字串,并配合数据流重导向来处理大量的文件搜寻问题。 6 | 7 | - 目标:正确的使用正则表达式; 8 | 9 | - 前提:需要了解数据流重导向,以及通过子指令 \$(command) 来处理文件名的搜寻; 我们简单的以搜寻星号 (\*) 来处理下面的任务: 10 | 11 | - 利用正则表达式找出系统中含有某些特殊关键字的文件,举例来说,找出在 /etc 下面含有星号 (\*) 的文件与内容: 12 | 13 | 解决的方法必须要搭配万用字符,但是星号本身就是正则表达式的字符,因此需要如此进行: 14 | 15 | ```shell 16 | [dmtsai@study ~]$ grep '\*' /etc/* 2> /dev/null 17 | ``` 18 | 19 | 你必须要注意的是,在单引号内的星号是正则表达式的字符,但我们要找的是星号,因此需要加上跳脱字符 (\\)。但是在 /etc/ *的那个* 则是 bash 的万用字符! 代表的是文件的文件名喔!不过由上述的这个结果中,我们仅能找到 /etc 下面第一层子目录的数据,无法找到次目录的数据, 如果想要连同完整的 /etc 次目录数据,就得要这样做: 20 | 21 | ```shell 22 | [dmtsai@study ~]$ grep '\*' $(find /etc -type f ) 2> /dev/null 23 | # 如果只想列出文件名而不要列出内容的话,使用下面的方式来处理即可喔! 24 | [dmtsai@study ~]$ grep -l '\*' $(find /etc -type f ) 2> /dev/null 25 | ``` 26 | 27 | - 但如果文件数量太多呢?如同上述的案例,如果要找的是全系统 (/) 呢?你可以这样做: 28 | 29 | ```shell 30 | [dmtsai@study ~]$ grep '\*' $(find / -type f 2> /dev/null ) 31 | -bash: /usr/bin/grep: Argument list too long 32 | ``` 33 | 34 | 真要命!由于命令行的内容长度是有限制的,因此当搜寻的对象是整个系统时,上述的指令会发生错误。那该如何是好? 此时我们可以通过管线命令以及 xargs 来处理。举例来说,让 grep 每次仅能处理 10 个文件名,此时你可以这样想: 35 | 36 | 1. 先用 find 去找出文件; 37 | 2. 用 xargs 将这些文件每次丢 10 个给 grep 来作为参数处理; 38 | 3. grep 实际开始搜寻文件内容。 所以整个作法就会变成这样: 39 | 40 | ```shell 41 | [dmtsai@study ~]$ find / -type f 2> /dev/null | xargs -n 10 grep '\*' 42 | ``` 43 | 44 | - 从输出的结果来看,数据量实在非常庞大!那如果我只是想要知道文件名而已呢?你可以通过 grep 的功能来找到如下的参数! 45 | 46 | ```shell 47 | [dmtsai@study ~]$ find / -type f 2> /dev/null | xargs -n 10 grep -l '\*' 48 | ``` 49 | 50 | - 情境仿真题二:使用管线命令配合正则表达式创建新指令与新变量。我想要创建一个新的指令名为 myip , 这个指令能够将我系统的 IP 捉出来显示。而我想要有个新变量,变量名为 MYIP ,这个变量可以记录我的 IP 。 51 | 52 | 处理的方式很简单,我们可以这样试看看: 53 | 54 | 1. 首先,我们依据本章内的 ifconfig, sed 与 awk 来取得我们的 IP ,指令为: 55 | 56 | ```shell 57 | [dmtsai@study ~]$ ifconfig eth0 | grep 'inet ' | sed 's/^.*inet //g'| sed 's/ *netmask.*$//g' 58 | ``` 59 | 60 | 2. 再来,我们可以将此指令利用 alias 指定为 myip 喔!如下所示: 61 | 62 | ```shell 63 | [dmtsai@study ~]$ alias myip="ifconfig eth0 | grep 'inet ' | sed 's/^.*inet //g'| \ 64 | > sed 's/ *netmask.*$//g' 65 | ``` 66 | 67 | 3. 最终,我们可以通过变量设置来处理 MYIP 喔! 68 | 69 | ```shell 70 | [dmtsai@study ~]$ MYIP=$( myip ) 71 | ``` 72 | 73 | 4. 如果每次登陆都要生效,可以将 alias 与 MYIP 的设置那两行,写入你的 \~/.bashrc 即可! 74 | 75 | ------------------------------------------------------------------------ 76 | 77 | 简答题部分: 78 | 79 | - 我想要知道,在 /etc 下面,只要含有 XYZ 三个字符的任何一个字符的那一行就列出来,要怎样进行?grep \[XYZ\] /etc/\* 80 | - 将 /etc/kdump.conf 内容取出后,(1)去除开头为 # 的行 (2)去除空白行 (3)取出开头为英文字母的那几行 (4)最终统计总行数该如何进行?grep -v '^#' /etc/kdump.conf \| grep -v '^\$' \| grep '^\[\[:alpha:\]\]' \| wc -l 81 | -------------------------------------------------------------------------------- /chapter_12/12.8本章习题.md: -------------------------------------------------------------------------------- 1 | # 12.8 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 下面皆为实作题,请自行撰写出程序喔! 4 | 5 | - 请创建一支 script ,当你执行该 script 的时候,该 script 可以显示: 1. 你目前的身份 (用 whoami ) 2. 你目前所在的目录 (用 pwd) 6 | 7 | ```shell 8 | #!/bin/bash 9 | echo -e "Your name is ==> $(whoami)" 10 | echo -e "The current directory is ==> $(pwd)" 11 | ``` 12 | 13 | - 请自行创建一支程序,该程序可以用来计算“你还有几天可以过生日”啊? 14 | 15 | ```shell 16 | #!/bin/bash 17 | read -p "Pleas input your birthday (MMDD, ex> 0709): " bir 18 | now=`date +%m%d` 19 | if [ "$bir" == "$now" ]; then 20 | echo "Happy Birthday to you!!!" 21 | elif [ "$bir" -gt "$now" ]; then 22 | year=`date +%Y` 23 | total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24)) 24 | echo "Your birthday will be $total_d later" 25 | else 26 | year=$((`date +%Y`+1)) 27 | total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24)) 28 | echo "Your birthday will be $total_d later" 29 | fi 30 | ``` 31 | 32 | - 让使用者输入一个数字,程序可以由 1+2+3... 一直累加到使用者输入的数字为止。 33 | 34 | ```shell 35 | #!/bin/bash 36 | read -p "Please input an integer number: " number 37 | i=0 38 | s=0 39 | while [ "$i" != "$number" ] 40 | do 41 | i=$(($i+1)) 42 | s=$(($s+$i)) 43 | done 44 | echo "the result of '1+2+3+...$number' is ==> $s" 45 | ``` 46 | 47 | - 撰写一支程序,他的作用是: 1.) 先查看一下 /root/test/logical 这个名称是否存在; 2.) 若不存在,则创建一个文件,使用 touch 来创建,创建完成后离开; 3.) 如果存在的话,判断该名称是否为文件,若为文件则将之删除后创建一个目录,文件名为 logical ,之后离开; 4.) 如果存在的话,而且该名称为目录,则移除此目录! 48 | 49 | ```shell 50 | #!/bin/bash 51 | if [ ! -e logical ]; then 52 | touch logical 53 | echo "Just make a file logical" 54 | exit 1 55 | elif [ -e logical ] && [ -f logical ]; then 56 | rm logical 57 | mkdir logical 58 | echo "remove file ==> logical" 59 | echo "and make directory logical" 60 | exit 1 61 | elif [ -e logical ] && [ -d logical ]; then 62 | rm -rf logical 63 | echo "remove directory ==> logical" 64 | exit 1 65 | else 66 | echo "Does here have anything?" 67 | fi 68 | ``` 69 | 70 | - 我们知道 /etc/passwd 里面以 : 来分隔,第一栏为帐号名称。请写一只程序,可以将 /etc/passwd 的第一栏取出,而且每一栏都以一行字串“The 1 account is "root" ”来显示,那个 1 表示行数。 71 | 72 | ```shell 73 | #!/bin/bash 74 | accounts=`cat /etc/passwd | cut -d':' -f1` 75 | for account in $accounts 76 | do 77 | declare -i i=$i+1 78 | echo "The $i account is \"$account\" " 79 | done 80 | ``` 81 | 82 | 2002/06/27:第一次完成 2003/02/10:重新编排与加入 FAQ 2005/08/29:将旧的文章移动到 [这里](http://linux.vbird.org/linux_basic/0340bashshell-scripts/0340bashshell-scripts.php) 了。 2005/08/29:呼呼~加入了一些比较有趣的练习题~比第一版要难的多~大家多多玩一玩喔~ 2009/02/10:将旧的基于 FC4 版本的文章移动到[此处](http://linux.vbird.org/linux_basic/0340bashshell-scripts/0340bashshell-scripts-fc4.php) 2009/02/17:加入 [shift](../Text/index.html#shift) 的介绍 2009/02/18:加入了一些额外的练习,包括 [for 的 ping](../Text/index.html#for_ping) 处理! 2015/07/17:全部的脚本通通小修改过,并且加上阵列、乱数与午餐大乱斗的脚本程序 -------------------------------------------------------------------------------- /chapter_11/11.1开始之前-什么是正则表达式.md: -------------------------------------------------------------------------------- 1 | # 11.1 开始之前:什么是正则表达式 2 | 3 | 约略了解了 Linux 的基本指令 ([BASH]) 并且熟悉了 [vim] 之后,相信你对于敲击键盘的打字与指令下达比较不陌生了吧? 接下来,下面要开始介绍一个很重要的观念,那就是所谓的“正则表达式 (Regular Expression)”啰! 4 | 5 | - 什么是正则表达式 6 | 7 | 任何一个有经验的系统管理员,都会告诉你:“正则表达式真是挺重要的!” 为什么很重要呢?因为日常生活就使用的到啊!举个例子来说, 在你日常使用 [vim] 作文书处理或程序撰写时使用到的“搜寻/取代”等等的功能, 这些举动要作的漂亮,就得要配合正则表达式来处理啰! 8 | 9 | 简单的说,正则表达式就是处理字串的方法,他是以行为单位来进行字串的处理行为, 正则表达式通过一些特殊符号的辅助,可以让使用者轻易的达到“搜寻/删除/取代”某特定字串的处理程序! 10 | 11 | 举例来说,我只想找到 VBird(前面两个大写字符) 或 Vbird(仅有一个大写字符) 这个字样,但是不要其他的字串 (例如 VBIRD, vbird 等不需要),该如何办理?如果在没有正则表达式的环境中(例如 MS word),你或许就得要使用忽略大小写的办法, 或者是分别以 VBird 及 Vbird 搜寻两遍。但是,忽略大小写可能会搜寻到 VBIRD/vbird/VbIrD 等等的不需要的字串而造成困扰。 12 | 13 | 再举个系统常见的例子好了,假设你发现系统在开机的时候,老是会出现一个关于 mail 程序的错误, 而开机过程的相关程序都是在 /lib/systemd/system/ 下面,也就是说,在该目录下面的某个文件内具有 mail 这个关键字,你想要将该文件捉出来进行查询修改的动作。此时你怎么找出来含有这个关键字的文件? 你当然可以一个文件一个文件的打开,然后去搜寻 mail 这个关键字,只是.....该目录下面的文件可能不止 100 个说~ 如果了解正则表达式的相关技巧,那么只要一行指令就找出来啦:“grep 'mail' /lib/systemd/system/\*” 那个 grep 就是支持正则表达式的工具程序之一!如何~很简单吧! 14 | 15 | 谈到这里就得要进一步说明了,正则表达式基本上是一种“表达式”, 只要工具程序支持这种表达式,那么该工具程序就可以用来作为正则表达式的字串处理之用。 例如 vi, grep, awk ,sed 等等工具,因为她们有支持正则表达式, 所以,这些工具就可以使用正则表达式的特殊字符来进行字串的处理。但例如 cp, ls 等指令并未支持正则表达式, 所以就只能使用 [bash 自己本身的万用字符]而已。 16 | 17 | - 正则表达式对于系统管理员的用途 18 | 19 | 那么为何我需要学习正则表达式呢?对于一般使用者来说,由于使用到正则表达式的机会可能不怎么多, 因此感受不到他的魅力,不过,对于身为系统管理员的你来说,正则表达式则是一个“不可不学的好东西!” 怎么说呢?由于系统如果在繁忙的情况之下,每天产生的讯息信息会多到你无法想像的地步, 而我们也都知道,系统的“[错误讯息登录文件 (第十八章)]” 的内容记载了系统产生的所有讯息,当然,这包含你的系统是否被“入侵”的记录数据。 20 | 21 | 但是系统的数据量太大了,要身为系统管理员的你每天去看这么多的讯息数据, 从千百行的数据里面找出一行有问题的讯息,呵呵~光是用肉眼去看,想不疯掉都很难! 这个时候,我们就可以通过“正则表达式”的功能,将这些登录的信息进行处理, 仅取出“有问题”的信息来进行分析,哈哈!如此一来,你的系统管理工作将会 “快乐得不得了”啊!当然,正则表达式的优点还不止于此,等你有一定程度的了解之后,你会爱上他喔! 22 | 23 | - 正则表达式的广泛用途 24 | 25 | 正则表达式除了可以让系统管理员管理主机更为便利之外,事实上,由于正则表达式强大的字串处理能力, 目前一堆软件都支持正则表达式呢!最常见的就是“邮件服务器”啦! 26 | 27 | 如果你留意网际网络上的消息,那么应该不难发现,目前造成网络大塞车的主因之一就是“垃圾/广告信件”了, 而如果我们可以在服务器端,就将这些问题邮件剔除的话,用户端就会减少很多不必要的带宽耗损了。 那么如何剔除广告信件呢?由于广告信件几乎都有一定的标题或者是内容,因此, 只要每次有来信时,都先将来信的标题与内容进行特殊字串的比对,发现有不良信件就予以剔除! 嘿!这个工作怎么达到啊?就使用正则表达式啊!目前两大邮件服务器软件 sendmail 与 postfix 以及支持邮件服务器的相关分析软件,都支持正则表达式的比对功能! 28 | 29 | 当然还不止于此啦,很多的服务器软件都支持正则表达式呢!当然, 虽然各家软件都支持他,不过,这些“字串”的比对还是需要系统管理员来加入比对规则的, 所以啦!身为系统管理员的你,为了自身的工作以及用户端的需求, 正则表达式实在是很需要也很值得学习的一项工具呢! 30 | 31 | - 正则表达式与 Shell 在 Linux 当中的角色定位 32 | 33 | 说实在的,我们在学数学的时候,一个很重要、但是粉难的东西是一定要“背”的, 那就是九九乘法表,背成功了之后,未来在数学应用的路途上,真是一帆风顺啊! 这个九九乘法表我们在小学的时候几乎背了一整年才背下来,并不是这么好背的呢! 但他却是基础当中的基础!你现在一定受惠相当的多呢 ^\_^! 34 | 35 | 而我们谈到的这个正则表达式,与前一章的 [BASH] 就有点像是数学的九九乘法表一样,是 Linux 基础当中的基础,虽然也是最难的部分, 不过,如果学成了之后,一定是“大大的有帮助”的!这就好像是金庸小说里面的学武难关:任督二脉! 打通任督二脉之后,武功立刻成倍成长!所以啦, 不论是对于系统的认识与系统的管理部分,他都有很棒的辅助啊!请好好的学习这个基础吧! ^\_^ 36 | 37 | - 延伸的正则表达式 38 | 39 | 唔!正则表达式还有分喔?没错喔!正则表达式的字串表示方式依照不同的严谨度而分为: 基础正则表达式与延伸正则表达式。延伸型正则表达式除了简单的一组字串处理之外,还可以作群组的字串处理, 例如进行搜寻 VBird 或 netman 或 lman 的搜寻,注意,是“或(or)”而不是“和(and)”的处理, 此时就需要延伸正则表达式的帮助啦!借由特殊的“ ( ”与“ \| ”等字符的协助, 就能够达到这样的目的!不过,我们在这里主力仅是介绍最基础的基础正则表达式而已啦!好啦!清清脑门,咱们用功去啰! 40 | 41 | 42 | 43 | > [!TIP] 44 | > 有一点要向大家报告的,那就是:“**正则表达式与万用字符是完全不一样的东西!**” 这很重要喔!因为“万用字符 (wildcard) 代表的是 bash 操作接口的一个功能”,但正则表达式则是一种字串处理的表示方式! 这两者要分的很清楚才行喔!所以,学习本章,请将前一章 bash 的万用字符意义先忘掉吧! 45 | 46 | 老实说,鸟哥以前刚接触正则表达式时,老想着要将这两者归纳在一起,结果就是...错误认知一大堆~ 所以才会建议您学习本章先忘记万用字符再来学习吧! -------------------------------------------------------------------------------- /chapter_3/3.1本练习机的规划-尤其是分区参数.md: -------------------------------------------------------------------------------- 1 | # 3.1 本练习机的规划--尤其是分区参数 2 | 3 | 读完[主机规划与磁盘分区章节]之后,相信你对于安装 Linux 之前要作的事情已经有基本的概念了。唔!并没有读第二章...千万不要这样跳着读,赶紧回去念一念第二章, 了解一下安装前的各种考虑对你Linux的学习会比较好啦! 4 | 5 | 如果你已经读完第二章了,那么下面就实际针对第二章的介绍来一一规划我们所要安装的练习机了吧! 请大家注意唷,我们后续的章节与本章的安装都有相关性,所以,请务必要了解到我们这一章的作法喔! 6 | 7 | - Linux主机的角色定位: 本主机架设的主要目的在于练习Linux的相关技术,所以几乎所有的数据都想要安装进来。 因此连较耗系统资源的X Window System也必须要包含进来才行。 8 | 9 | - 选择的distribution: 由于我们对于Linux的定位为“服务器”的角色,因此选择号称完全相容于商业版RHEL的社群版本, 就是CentOS 7.x版啰。请回到[2.3.1 章]去获得下载的信息吧! ^\_^。 10 | 11 | - 计算机系统硬件配备: 由于虚拟机越来越流行,因此鸟哥这里使用的是 Linux 原生的 KVM 所搭建出来的虚拟硬件环境。对于 Linux 还不熟的朋友来说, 建议你使用[2.4 章]提到的 virtualbox 来进行练习吧! 至于鸟哥使用的方式可以参考文末的延伸阅读,里面有许多的文件可参考 鸟哥的虚拟机硬件配备如下: 12 | - CPU等级类别: 通过 Linux 原生的虚拟机管理员的处理,使用本机的 CPU 类型。本机 CPU 为 Intel i7 2600 这颗三、四年前很流行的 CPU 喔! 至于芯片组则是 KVM 自行设置的喔! 13 | - 内存: 通过虚拟化技术提供大约 1.2G 左右的内存 14 | - 硬盘: 使用一颗 40GB 的 VirtI/O 芯片组的磁盘,因此磁盘文件名应该会是 /dev/vda 才对。同时提供一颗 2GB 左右的 IDE 界面的磁盘, 这颗磁盘仅是作为测试之用,并不安装系统!因此还有一颗 /dev/sda 才对喔! 15 | - 网卡: 使用 bridge (桥接) 的方式设置了对外网卡,网卡同样使用 VirtI/O 的芯片,还好 CentOS 本身就有提供驱动程序, 所以可以直接抓到网卡喔! 16 | - 显卡(VGA): 使用的是在 Linux 环境下运行还算顺畅的 QXL 显卡,给予 60M 左右的显示内存。 17 | - 其他输入/输出设备: 还有仿真光驱、USB鼠标、USB键盘以及 17 英寸屏幕输出等设备喔! 18 | 19 | - 磁盘分区的配置 在第二章里面有谈到 MBR 与 GPT 磁盘分区表配置的问题,在目前的 Linux 环境下, 如果你的磁盘没有超过 2TB 的话,那么 Linux 默认是会以 MBR 模式来处理你的分区表的。由于我们仅切出 40GB 的磁盘来玩, 所以默认上会以 MBR 来配置!这鸟哥不喜欢!因为就无法练习新的环境了~因此,我们得在安装的时候加上某些参数, 强迫系统使用 GPT 的分区表来配置我们的磁盘喔!而预计实际分区的情况如下: 20 | 21 | | 所需目录/设备 | 磁盘容量 | 文件系统 | 分区格式 | 22 | | --- | --- | --- | --- | 23 | | BIOS boot | 2MB | 系统自订 | 主分区 | 24 | | /boot | 1GB | xfs | 主分区 | 25 | | / | 10GB | xfs | LVM 方式 | 26 | | /home | 5GB | xfs | LVM 方式 | 27 | | swap | 1GB | swap | LVM 方式 | 28 | 29 | 由于使用 GPT 的关系,因此根本无须考虑主/延伸/逻辑分区的差异。不过,由于 CentOS 默认还是会使用 LVM 的方式来管理你的文件系统, 而且我们后续的章节也会介绍如何管理这东西,因此,我们这次就使用 LVM 管理机制来安装系统看看! 30 | 31 | - 开机管理程序(boot loader): 练习机的开机管理程序使用CentOS 7.x默认的grub2软件,并且安装到MBR上面。 也必须要安装到MBR上面才行!因为我们的硬盘是全部用在Linux上面的啊! ^\_^ 32 | 33 | - 选择软件: 我们预计这部练习机是要作为服务器用的,同时可能会用到图形接口来管理系统,因此使用的是“含有 X 接口的服务器软件”的软件方式来安装喔! 要注意的是,从 7.x 开始,默认选择的软件模式会是最小安装!所以千万记得软件安装时,要特别挑选一下才行! 34 | 35 | - 检查表单: 最后,你可以使用下面的表格来检查一下,你要安装的数据与实际的硬件是否吻合喔: 36 | 37 | 38 | | 是与否,或详细信息 | 细部项目 | 39 | | --- | --- | 40 | | 是, DVD版 | 01\. 是否已下载且烧录所需的Linux distribution?(DVD或CD) | 41 | | CentOS 7.1, x64 | 02\. Linux distribution的版本为何?(如CentOS 7.1 x86_64版本) | 42 | | x64 | 03\. 硬件等级为何(如i386, x86_64, SPARC等等,以及DVD/CD-ROM) | 43 | | 是, 均为x86_64 | 04\. 前三项安装媒体/操作系统/硬件需求,是否吻合? | 44 | | 是 | 05\. 硬盘数据是否可以全部被删除? | 45 | | 已确认分区方式 | 06\. Partition是否做好确认(包括/与swap等容量) | 46 | | | 硬盘数量: 1颗40GB硬盘,并使用 GPT 分区表
BIOS boot (2MB)
/boot (1GB)
/ (10GB)
/home (5GB)
swap (1GB) | 47 | | 有,使用 VirtI/O | 07\. 是否具有特殊的硬件设备(如SCSI磁盘阵列卡等) | 48 | | CentOS 已内置 | 08\. 若有上述特殊硬件,是否已下载驱动程序? | 49 | | grub2, MBR | 09\. 开机管理程序与安装的位置为何? | 50 | | 未取得IP参数 | 10\. 网络信息(IP参数等等)是否已取得? | 51 | | | 未取得IP的情况下,可以套用如下的IP参数:
是否使用DHCP:无
IP:192.168.1.100
子网掩码:255.255.255.0
主机名称:study.centos.vbird | 52 | | Server with X | 11\. 所需要的软件有哪些? | 53 | 54 | 55 | 如果上面表单确认过都没有问题的话,那么我们就可以开始来安装咱们的CentOS 7.x x86*64版本啰! ^*^ 56 | -------------------------------------------------------------------------------- /chapter_24/24.5以最新核心版本编译CentOS7.x的核心.md: -------------------------------------------------------------------------------- 1 | # 24.5 以最新核心版本编译 CentOS 7.x 的核心 2 | 3 | 如果你跟鸟哥一样,曾经为了某些缘故需要最新的 4.x.y 的核心版本来实作某些特定的功能时,那该如何是好?没办法,只好使用最新的核心版本来编译啊! 你可以依照上面的程序来一个一个处理,没有问题~不过,你也可以根据 ELRepo 网站提供的 SRPM 来重新编译打包喔! 当然你可以直接使用 ELRepo 提供的 CentOS 7.x 专属的核心来直接安装。 4 | 5 | 下面我们使用 ELRepo 网站提供的 SRPM 文件来实作核心编译。而要这么重新编译的原因是,鸟哥需要将 VFIO 的 VGA 直接支持的核心功能打开! 因此整个程序会变成类似这样: 6 | 7 | 1. 先从 ELRepo 网站下载不含源代码的 SRPM 文件,并且安装该文件 8 | 2. 从 www.kernel.org 网站下载满足 ELRepo 网站所需要的核心版本来处理 9 | 3. 修改核心功能 10 | 4. 通过 SRPM 的 rpmbuild 重新编译打包核心 11 | 12 | 就让我们来测试一下啰!(注意,鸟哥使用的是 2015/10/20 当下最新的 4.2.3 这一版的核心。由于核心版本的升级太快,因此在你实作的时间, 可能已经有更新的核心版本了。此时你应该要前往 ELRepo 查阅最新的 SRPM 之后,再决定你想使用的版本喔!) 13 | 14 | ```shell 15 | 1\. 先下载 ELRepo 上面的 SRPM 文件!同时安装它: 16 | [root@study ~]# wget http://elrepo.org/linux/kernel/el7/SRPMS/kernel-ml-4.2.3-1.el7.elrepo.nosrc.rpm 17 | [root@study ~]# rpm -ivh kernel-ml-4.2.3-1.el7.elrepo.nosrc.rpm 18 | 19 | 2\. 根据上述的文件,下载正确的核心源代码: 20 | [root@study ~]# cd rpmbuild/SOURCES 21 | [root@study SOURCES]# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.2.3.tar.xz 22 | [root@study SOURCES]# ll -tr 23 | .....(前面省略)..... 24 | -rw-r--r--. 1 root root 85523884 Oct 3 19:58 linux-4.2.3.tar.xz # 核心源代码 25 | -rw-rw-r--. 1 root root 294 Oct 3 22:04 cpupower.service 26 | -rw-rw-r--. 1 root root 150 Oct 3 22:04 cpupower.config 27 | -rw-rw-r--. 1 root root 162752 Oct 3 22:04 config-4.2.3-x86_64 # 主要的核心功能 28 | 29 | 3\. 修改核心功能设置: 30 | [root@study SOURCES]# vim config-4.2.3-x86_64 31 | # 大约在 5623 行找到下面这一行,并在下面新增一行设置值! 32 | # CONFIG_VFIO_PCI_VGA is not set 33 | CONFIG_VFIO_PCI_VGA=y 34 | 35 | [root@study SOURCES]# cd ../SPECS 36 | [root@study SPECS]# vim kernel-ml-4.2.spec 37 | # 大概在 145 左右找到下面这一行: 38 | Source0: ftp://ftp.kernel.org/pub/linux/kernel/v4.x/linux-%{LKAver}.tar.xz 39 | # 将它改成如下的模样: 40 | Source0: linux-%{LKAver}.tar.xz 41 | 42 | 4\. 开始编译并打包: 43 | [root@study SPECS]# rpmbuild -bb kernel-ml-4.2.spec 44 | # 接下来会有很长的一段时间在进行编译行为,鸟哥的机器曾经跑过两个小时左右才编译完! 45 | # 所以,请耐心等候啊! 46 | Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-4.2.3-1.el7.centos.x86_64.rpm 47 | Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-devel-4.2.3-1.el7.centos.x86_64.rpm 48 | Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-headers-4.2.3-1.el7.centos.x86_64.rpm 49 | Wrote: /root/rpmbuild/RPMS/x86_64/perf-4.2.3-1.el7.centos.x86_64.rpm 50 | Wrote: /root/rpmbuild/RPMS/x86_64/python-perf-4.2.3-1.el7.centos.x86_64.rpm 51 | Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-tools-4.2.3-1.el7.centos.x86_64.rpm 52 | Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-tools-libs-4.2.3-1.el7.centos.x86_64.rpm 53 | Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-tools-libs-devel-4.2.3-1.el7.centos.x86_64.rpm 54 | ``` 55 | 56 | 如上表最后的状态,你会发现竟然已经有 kernel-ml 的软件包产生了!接下来你也不需要像手动安装核心一样,得要一个一个项目移动到正确的位置去, 只要使用 yum install 新的核心版本,就会有 4.2.3 版的核心在你的 CentOS 7.x 当中了耶!相当神奇! 57 | 58 | ```shell 59 | [root@study ~]# yum install /root/rpmbuild/RPMS/x86_64/kernel-ml-4.2.3-1.el7.centos.x86_64.rpm 60 | [root@study ~]# reboot 61 | 62 | [root@study ~]# uname -a 63 | Linux study.centos.vbird 4.2.3-1.el7.centos.x86_64 #1 SMP Wed Oct 21 02:31:18 CST 2015 x86_64 64 | x86_64 x86_64 GNU/Linux 65 | ``` 66 | 67 | 这样就让我们的 CentOS 7.x 具有最新的核心啰!与核心官网相同版本咧~够帅气吧! -------------------------------------------------------------------------------- /chapter_5/5.1使用者与群组.md: -------------------------------------------------------------------------------- 1 | # 5.1 使用者与群组 2 | 3 | 经过[第四章]的洗礼之后,你应该可以在Linux的命令行界面下面输入指令了吧? 接下来,当然是要让你好好的浏览一下Linux系统里面有哪些重要的文件啰。 不过,每个文件都有相当多的属性与权限,其中最重要的可能就是文件的拥有者的概念了。 所以,在开始文件相关信息的介绍前,鸟哥先就简单的(1)使用者及(2)群组与(3)非本群组外的其他人等概念作个说明吧~ 好让你快点进入状况的哩! ^\_^ 4 | 5 | 1. 文件拥有者 6 | 7 | 初次接触Linux的朋友大概会觉得很怪异,怎么“Linux有这么多使用者, 还分什么群组,有什么用?”。这个“使用者与群组”的功能可是相当健全而好用的一个安全防护呢!怎么说呢? 由于Linux是个多用户多任务的系统,因此可能常常会有多人同时使用这部主机来进行工作的情况发生, 为了考虑每个人的隐私权以及每个人喜好的工作环境,因此,这个“文件拥有者”的角色就显的相当的重要了! 8 | 9 | 例如当你将你的e-mail情书转存成文件之后,放在你自己的主文件夹,你总不希望被其他人看见自己的情书吧? 这个时候,你就把该文件设置成“只有文件拥有者,就是我,才能看与修改这个文件的内容”, 那么即使其他人知道你有这个相当“有趣”的文件,不过由于你有设置适当的权限, 所以其他人自然也就无法知道该文件的内容啰! 10 | 11 | 2. 群组概念 12 | 13 | 那么群组呢?为何要设置文件还有所属的群组?其实,群组最有用的功能之一,就是当你在团队开发资源的时候啦! 举例来说,假设有两组专题生在我的主机里面,第一个专题组别为projecta,里面的成员有 class1, class2, class3三个;第二个专题组别为projectb,里面的成员有class4, class5, class6。 这两个专题之间是有竞争性质的,但却要缴交同一份报告。每组的组员之间必须要能够互相修改对方的数据, 但是其他组的组员则不能看到本组自己的文件内容,此时该如何是好? 14 | 15 | 在Linux下面这样的限制是很简单啦!我可以经由简易的文件权限设置,就能限制非自己团队(亦即是群组啰) 的其他人不能够阅览内容啰!而且亦可以让自己的团队成员可以修改我所创建的文件! 同时,如果我自己还有私人隐密的文件,仍然可以设置成让自己的团队成员也看不到我的文件数据。 很方便吧! 16 | 17 | 另外,如果teacher这个帐号是projecta与projectb这两个专题的老师, 他想要同时观察两者的进度,因此需要能够进入这两个群组的权限时,你可以设置teacher这个帐号, “同时支持projecta与projectb这两个群组!”,也就是说:每个帐号都可以有多个群组的支持呢! 18 | 19 | 这样说或许你还不容易理解这个使用者与群组的关系吧?没关系,我们可以使用目前“家庭”的观念来进行解说喔! 假设有一家人,家里只有三兄弟,分别是王大毛、王二毛与王三毛三个人, 而这个家庭是登记在王大毛的名下的!所以,“王大毛家有三个人,分别是王大毛、王二毛与王三毛”, 而且这三个人都有自己的房间,并且共同拥有一个客厅喔! 20 | 21 | - 使用者的意义:由于王家三人各自拥有自己的房间,所以, 王二毛虽然可以进入王三毛的房间,但是二毛不能翻三毛的抽屉喔!那样会被三毛K的! 因为抽屉里面可能有三毛自己私人的东西,例如情书啦,日记啦等等的,这是“私人的空间”,所以当然不能让二毛拿啰! 22 | 23 | - 群组的概念:由于共同拥有客厅,所以王家三兄弟可以在客厅打开电视机啦、 翻阅报纸啦、坐在沙发上面发呆啦等等的! 反正,只要是在客厅的玩意儿,三兄弟都可以使用喔! 因为大家都是一家人嘛! 24 | 25 | 这样说来应该有点晓得了喔!那个“王大毛家”就是所谓的“群组”啰, 至于三兄弟就是分别为三个“使用者”,而这三个使用者是在同一个群组里面的喔! 而三个使用者虽然在同一群组内,但是我们可以设置“权限”, 好让某些使用者个人的信息不被群组的拥有者查询,以保有个人“私人的空间”啦! 而设置群组共享,则可让大家共同分享喔! 26 | 27 | 3. 其他人的概念 28 | 29 | 好了,那么今天又有个人,叫做张小猪,他是张小猪家的人,与王家没有关系啦! 这个时候,除非王家认识张小猪,然后开门让张小猪进来王家,否则张小猪永远没有办法进入王家, 更不要说进到王三毛的房间啦!不过,如果张小猪通过关系认识了三毛,并且跟王三毛成为好朋友, 那么张小猪就可以通过三毛进入王家啦!呵呵!没错!那个张小猪就是所谓的“其他人,Others”啰! 30 | 31 | 因此,我们就可以知道啦,在Linux里面,任何一个文件都具有“User, Group及Others”三种身份的个别权限, 我们可以将上面的说明以下面的图示来解释: 32 | 33 | ![每个文件的拥有者、群组与 others 的示意图](/pic/0210filepermission_1.jpg) 34 | *图5.1.1、每个文件的拥有者、群组与 others 的示意图* 35 | 36 | 我们以王三毛为例,王三毛这个“文件”的拥有者为王三毛,他属于王大毛这个群组, 而张小猪相对于王三毛,则只是一个“其他人(others)”而已。 37 | 38 | 不过,这里有个特殊的人物要来介绍的,那就是“万能的天神”!这个天神具有无限的神力, 所以他可以到达任何他想要去的地方,呵呵!那个人在Linux系统中的身份代号是“ root ”啦!所以要小心喔!那个root可是“万能的天神”喔! 39 | 40 | 无论如何,“使用者身份”,与该使用者所支持的“群组”概念,在Linux的世界里面是相当的重要的, 他可以帮助你让你的多任务Linux环境变的更容易管理!更详细的 “身份与群组” 设置,我们将在[第十三章、帐号管理]再进行解说。 下面我们将针对文件系统与文件权限来进行说明。 41 | 42 | 43 | 44 | > [!TIP] 45 | > 现在 (2015年) 鸟哥常以台湾地区常见的社群网站 Facebook 或者是 Google+ 作为解释。(1)你在 FB 注册一个帐号,这个帐号可以叠代对比为 Linux 的帐号, (2)你可以新增一个社团,这个社团的隐私权是可以由您自己指定的!看是要公开还是要隐藏。这就可以叠代为 Linux 的群组概念,这个群组的权限可以自己设置。 (3)那么其他在 FB 注册的人,没有加入你的社团,他就是 Linux 上所谓的“其他人”!最后,在 FB 上面的每一条留言,就可以想成 Linux 下面的“文件”啰! 46 | 47 | 48 | 49 | > [!TIP] 50 | > 那么上面内文谈到的群组有啥帮助呢?想想看,你在 FB 上面,你的 StudyArea 社团是隐藏的,你想让 dmtsai 可以进来读取每一个留言 (想成是 file), 最简单的作法是什么?对!让 dmstai 加入这个社团即可!没错!只要让 Linux 某个帐号加入某个群组,该帐号就可以使用该群组能够存取的资源! 每个帐号可以加入的群组个数基本上是没有限制的! 51 | 52 | - Linux 使用者身份与群组记录的文件 53 | 54 | 在我们Linux系统当中,默认的情况下,所有的系统上的帐号与一般身份使用者,还有那个root的相关信息, 都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录在/etc/shadow这个文件下。 此外,Linux所有的群组名称都纪录在/etc/group内!这三个文件可以说是Linux系统里面帐号、密码、群组信息的集中地啰! 不要随便删除这三个文件啊! ^\_^ 55 | 56 | 至于更多的与帐号群组有关的设置,还有这三个文件的格式,不要急,我们在[第十三章的帐号管理]时,会再跟大家详细的介绍的!这里先有概念即可。 57 | -------------------------------------------------------------------------------- /chapter_13/13.9本章习题.md: -------------------------------------------------------------------------------- 1 | # 13.9 本章习题 2 | 3 | - 情境仿真题一:想将本服务器的帐号分开管理,分为单纯邮件使用,与可登陆系统帐号两种。其中若为纯邮件帐号时, 将该帐号加入 mail 为初始群组,且此帐号不可使用 bash 等 shell 登陆系统。若为可登陆帐号时, 将该帐号加入 youcan 这个次要群组。 4 | 5 | - 目标:了解 /sbin/nologin 的用途; 6 | 7 | - 前提:可自行观察使用者是否已经创建等问题; 8 | 9 | - 需求:需已了解 useradd, groupadd 等指令的用法; 解决方案如下: 10 | 11 | - 预先察看一下两个群组是否存在? 12 | 13 | ```shell 14 | [root@study ~]# grep mail /etc/group 15 | [root@study ~]# grep youcan /etc/group 16 | [root@study ~]# groupadd youcan 17 | ``` 18 | 19 | 可发现 youcan 尚未被创建,因此如上表所示,我们主动去创建这个群组啰。 20 | 21 | - 开始创建三个邮件帐号,此帐号名称为 pop1, pop2, pop3 ,且密码与帐号相同。可使用如下的程序来处理: 22 | 23 | ```shell 24 | [root@study ~]# vim popuser.sh 25 | #!/bin/bash 26 | for username in pop1 pop2 pop3 27 | do 28 | useradd -g mail -s /sbin/nologin -M $username 29 | echo $username | passwd --stdin $username 30 | done 31 | [root@study ~]# sh popuser.sh 32 | ``` 33 | 34 | - 开始创建一般帐号,只是这些一般帐号必须要能够登陆,并且需要使用次要群组的支持!所以: 35 | 36 | ```shell 37 | [root@study ~]# vim loginuser.sh 38 | #!/bin/bash 39 | for username in youlog1 youlog2 youlog3 40 | do 41 | useradd -G youcan -s /bin/bash -m $username 42 | echo $username | passwd --stdin $username 43 | done 44 | [root@study ~]# sh loginuser.sh 45 | ``` 46 | 47 | - 这样就将帐号分开管理了!非常简单吧! 48 | 49 | ------------------------------------------------------------------------ 50 | 51 | 简答题部分 52 | 53 | - root 的 UID 与 GID 是多少?而基于这个理由,我要让 test 这个帐号具有 root 的权限,应该怎么作?root 的 UID 与 GID 均为 0 ,所以要让 test 变成 root 的权限,那么就将 /etc/passwd 里面, test 的 UID 与 GID 字段变成 0 即可! 54 | 55 | - 假设我是一个系统管理员,我有一个用户最近不乖,所以我想暂时将他的帐号停掉, 让他近期无法进行任何动作,等到未来他乖一点之后,我再将他的帐号启用,请问:我可以怎么作比较好??由于这个帐号是暂时失效的,所以不能使用 userdel 来删除,否则很麻烦!那么应该如何设置呢?再回去瞧一瞧 /etc/shadow 的架构,可以知道有这几个可使用的方法: 56 | 57 | - 将 /etc/passwd 的 shell 字段写成 /sbin/nologin ,即可让该帐号暂时无法登陆主机; 58 | - 将 /etc/shadow 内的密码字段,增加一个 \* 号在最前面,这样该帐号亦无法登陆! 59 | - 将 /etc/shadow 的第八个字段关于帐号取消日期的那个,设置小于目前日期的数字,那么他就无法登陆系统了! 60 | 61 | - 我在使用 useradd 的时候,新增的帐号里面的 UID, GID 还有其他相关的密码控制,都是在哪几个文件里面设置的?在 /etc/login.defs 还有 /etc/default/useradd 里面规定好的! 62 | 63 | - 我希望我在设置每个帐号的时候( 使用 useradd ),默认情况中,他们的主文件夹就含有一个名称为 www 的子目录,我应该怎么作比较好?由于使用 useradd 的时候,会自动以 /etc/skel 做为默认的主文件夹,所以,我可以在 /etc/skel 里面新增加一个名称为 www 的目录即可! 64 | 65 | - 简单说明系统帐号与一般使用者帐号的差别?一般而言,为了让系统能够顺利以较小的权限运行,系统会有很多帐号, 例如 mail, bin, adm 等等。而为了确保这些帐号能够在系统上面具有独一无二的权限, 一般来说 Linux 都会保留一些 UID 给系统使用。在 CentOS 5.x 上面,小于 500 以下的帐号 (UID) 即是所谓的 System account。 66 | 67 | - 简单说明,为何 CentOS 创建使用者时,他会主动的帮使用者创建一个群组,而不是使用 /etc/default/useradd 的设置?不同的 linux distributions 对于使用者 group 的创建机制并不相同。主要的机制分为: 68 | 69 | - Public group schemes: 使用者将会直接给予一个系统指定的群组,一般来说即是 users , 可以 SuSE Server 9 为代表; 70 | - Private group schemes: 系统会创建一个与帐号一样的群组名称!以 CentOS 7.x 为例! 71 | 72 | - 如何创建一个使用者名称 alex, 他所属群组为 alexgroup, 预计使用 csh, 他的全名为 "Alex Tsai", 且他还得要加入 users 群组当中!groupadd alexgroup useradd -c "Alex Tsai" -g alexgroup -G users -m alex 务必先创建群组,才能够创建使用者喔! 73 | 74 | - 由于种种因素,导致你的使用者主文件夹以后都需要被放置到 /account 这个目录下。 请问,我该如何作,可以让使用 useradd 时,默认的主文件夹就指向 /account ?最简单的方法,编辑 /etc/default/useradd ,将里头的 HOME=/home 改成 HOME=/account 即可。 75 | 76 | - 我想要让 dmtsai 这个使用者,加入 vbird1, vbird2, vbird3 这三个群组,且不影响 dmtsai 原本已经支持的次要群组时,该如何动作?usermod -a -G vbird1,vbird2,vbird3 dmtsai -------------------------------------------------------------------------------- /chapter_0/0.7参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 0.7 参考资料与延伸阅读 2 | 3 | - [\[1\]](#9.html#ac1)名片型电脑,或单版电脑: 4 | - 香蕉派台湾官网: 5 | - Xapple pi 粉丝团: 6 | - [\[2\]](#9.html#ac2)可穿戴式电脑: 7 | - [\[3\]](#9.html#ac3)对于CPU的原理有兴趣的读者,可以参考维基百科的说明: 英文CPU() 中文CPU([http://zh.wikipedia.org/wiki/中央处理器](http://zh.wikipedia.org/w/index.php?title=%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8&variant=zh-hant))。 8 | - [\[4\]](#9.html#ac4)图片参考: Wiki book: 作者:陈锦辉,“计算机概论-探索未来2008”,金禾信息,2007出版 9 | - [\[5\]](#9.html#ac5)更详细的RISC架构可以参考维基百科: [http://zh.wikipedia.org/w/index.php?title=精简指令集&variant=zh-cn](http://zh.wikipedia.org/w/index.php?title=%E7%B2%BE%E7%AE%80%E6%8C%87%E4%BB%A4%E9%9B%86&variant=zh-cn) 相关的 CPU 种类可以参考: [Oracle SPARC: http://en.wikipedia.org/wiki/SPARC](http://en.wikipedia.org/wiki/SPARC) [IBM Power CPU: http://en.wikipedia.org/wiki/IBM_POWER_microprocessors](http://en.wikipedia.org/wiki/IBM_POWER_microprocessors) 10 | - [\[6\]](#9.html#ac6)关于ARM架构的说明,可以参考维基百科: [http://zh.wikipedia.org/w/index.php?title=ARM架构&variant=zh-cn](http://zh.wikipedia.org/w/index.php?title=ARM%E6%9E%B6%E6%A7%8B&variant=zh-cn) 11 | - [\[7\]](#9.html#ac7)更详细的CISC架构可参考维基百科: 12 | - [\[8\]](#9.html#ac8)更详细的x86架构发展史可以参考维基百科: 13 | - [\[9\]](#9.html#ac9)用来观察 CPU 相关信息的 CPU-Z 软件网站: 14 | - [\[10\]](#9.html#ac10)Intel i7 4790 CPU 的详细规格介绍 15 | - [\[11\]](#9.html#ac11)DDR 内存的详细规格介绍 16 | - [\[12\]](#9.html#ac12)相关的固件说明可参考维基百科: [http://zh.wikipedia.org/w/index.php?title=固件&variant=zh-hant](http://zh.wikipedia.org/w/index.php?title=%E9%9F%8C%E9%AB%94&variant=zh-hant) 17 | - [\[13\]](#9.html#ac13)相关 EEPROM 可以参考维基百科: 18 | - [\[14\]](#9.html#ac14)相关 BIOS 的说明可以参考维基百科: 19 | - [\[15\]](#9.html#ac15)相关 PCIe 的说明可以参考维基百科: 20 | - [\[16\]](#9.html#ac16)关于盘片数据的说明:Zone bit recording : 21 | - [\[17\]](#9.html#ac17)关于 SATA 磁盘接口的 wiki 说明 : 22 | - [\[18\]](#9.html#ac18)关于 SAS 磁盘接口的 wiki 说明 : 23 | - [\[19\]](#9.html#ac19)关于 USB 接口的 wiki 说明 : 24 | - [\[20\]](#9.html#ac20)关于 SSD 的 wiki 说明 : 25 | - 感谢:本章当中出现很多图示,很多是从Tom's Hardware()网站取得的,在此特别感谢! 26 | 27 | 2008/07/22:利用暑假期间足足写了快要两个星期这篇才写完!好多图示都不知道如何呈现比较漂亮~@\_@ 2008/07/29:又加入了SATA/IDE的连线排线,还有一些额外的图示。 2009/08/03:加入电源供应器是心脏一词的说明 2009/08/03:更正原本 BIOS 只放于 ROM 的数据,新的 BIOS 通常放于 EEPROM 或 Flash 内存中。 2010/10/19:感谢讨论区网友 186003415a 兄的回报,[发现 DDR II 的外频写错了!是 200MHz 才对](#9.html#20101019)喔! 2015/04/16:旧版针对 CentOS5 时所作的旧版文章:[旧的计概](http://linux.vbird.org/linux_basic/0105computers/0105computers-centos5.php)内容 2015/04/16:删除了一些较旧的数据,如 IDE,增加了不少新的东西!并[感谢讨论区 littlebat 兄的意见](http://phorum.vbird.org/viewtopic.php?f=10&t=33387&p=159191#p159191),修改了不少的磁盘数据 -------------------------------------------------------------------------------- /chapter_7/7.9参考资料与延伸阅读.md: -------------------------------------------------------------------------------- 1 | # 7.9 参考资料与延伸阅读 2 | 3 | - [\[1\]](#67.html#ac1)根据The Linux Document Project的文件所绘制的图示,详细的参考文献可以参考如下链接: Filesystem How-To: 4 | - [\[2\]](#67.html#ac2)参考维基百科所得数据,链接网址如下: 条目: Ext2 介绍 5 | - [\[3\]](#67.html#ac3)PAVE为一套秀图软件,常应用于数值模式的输出文件之再处理: PAVE 使用手册: 6 | - [\[4\]](#67.html#ac4)详细的 inode 表格所定义的旗标可以参考如下链接: John's spec of the second extended filesystem: 7 | - [\[5\]](#67.html#ac5)其他值得参考的 Ext2 相关文件系统文章之链接如下: 8 | - “Design and Implementation of the Second Extended Filesystem ” 9 | - Whitepaper: Red Hat's New Journaling File System: ext3: 10 | - The Second Extended File System - An introduction: 11 | - ext3 or ReiserFS? Hans Reiser Says Red Hat's Move Is Understandable 12 | - 文件系统的比较:维基百科: 13 | - [Ext2/Ext3 文件系统:http://linux.vbird.org/linux_basic/1010appendix_B.php](http://linux.vbird.org/linux_basic/1010appendix_B.php) 14 | - [\[6\]](#67.html#ac6)参考数据为: 15 | - man xfs 详细内容 16 | - xfs 官网: 17 | - [\[7\]](#67.html#ac7)计算 RAID 的 sunit 与 swidth 的方式: 18 | - 计算 sunit 与 swidth 的方法: 19 | - 计算 raid 与 sunit/swidth 部落客: 20 | - [\[8\]](#67.html#ac8) Linux 核心所支持的硬件之设备代号(Major, Minor)查询: 21 | - \[9\]与 Boot sector 及 Superblock 的探讨有关的讨论文章: The Second Extended File System: Rob's ext2 documentation: 22 | 23 | 2002/07/15:第一次完成 2003/02/07:重新编排与加入 FAQ 2004/03/15:修改 inode 的说明,并且将链接文件的说明移动至这个章节当中! 2005/07/20:将旧的文章移动到 [这里](http://linux.vbird.org/linux_basic/0230filesystem/0230filesystem.php) 。 2005/07/22:将原本的附录一与附录二移动成为[附录 B](http://linux.vbird.org/linux_basic/1010appendix_B.php) 啦! 2005/07/26:做了一个比较完整的修订,加入较完整的 ext3 的说明~ 2005/09/08:看到了一篇讨论,说明 FC4 在默认的环境中,使用 mkswap 会有问题。 2005/10/11:新增加了一个[目录的 link 数量](../Text/index.html#link_dir)说明! 2005/11/11:增加了一个 fsck 的 -f 参数在里头! 2006/03/02:参考:[这里](http://www.tldp.org/LDP/sag/html/sag.html#FILESYSTEMS)的说明,将 ext2/ext3 最大文件系统由 16TB 改为 32TB。 2006/03/31:增加了虚拟内存的相关说明. 2006/05/01:将磁盘扇区的图做个修正,感谢网友 LiaoLiang 兄提供的信息!并加入参考文献! 2006/06/09:增加 hard link 不能链接到目录的原因,详情参考: 2006/06/28:增加关于 [loop device](../Text/index.html#loop) 的相关说明呐! 2006/09/08:加入 [mknod 内的设备代号说明](../Text/index.html#mknod) ,以及列出 Linux 核心网站的设备代号查询。 2008/09/29:原本的FC4系列文章移动到[此处](http://linux.vbird.org/linux_basic/0230filesystem/0230filesystem-fc4.php) 2008/10/24:由于软盘的使用已经越来越少了,所以将 fdformat 及 mkbootdisk 拿掉了! 2008/10/31:这个月事情好多~花了一个月才将数据整理完毕!修改幅度非常的大喔! 2008/11/01:最后一节的[利用 GNU 的 parted 进行分区行为](../Text/index.html#parted)误植为 GUN !感谢网友阿贤的来信告知! 2008/12/05:感谢网友 ian_chen 的告知,之前将 flash 当成 flush 了!真抱歉!已更新! 2009/04/01:感谢讨论区网友[提供的说明](http://phorum.vbird.org/viewtopic.php?t=32583), 鸟哥之前 [superblock 这里写得不够好](../Text/index.html#20090401),有订正说明,请帮忙看看。 2009/08/19:加入两题情境仿真,重新修订一题简答题。 2009/08/30:加入 [du 的 -S](../Text/index.html#20090830) 说明中。 2015/06/17:将旧的基于 CentOS5 的版本移动到[这里](http://linux.vbird.org/linux_basic/0230filesystem/0230filesystem-centos5.php)。 2015/10/26:加上 noexec 的额外说明!感谢网友在讨论区的建议! -------------------------------------------------------------------------------- /chapter_7/7.8本章习题.md: -------------------------------------------------------------------------------- 1 | # 7.8 本章习题 - 第一题一定要做 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 4 | 5 | - 情境仿真题一:复原本章的各例题练习,本章新增非常多 partition ,请将这些 partition 删除,恢复到原本刚安装好时的状态。 6 | 7 | - 目标:了解到删除分区需要注意的各项信息; 8 | 9 | - 前提:本章的各项范例练习你都必须要做过,才会拥有 /dev/vda4 \~ /dev/vda7 出现; 10 | 11 | - 需求:熟悉 gdisk, parated, umount, swapoff 等指令。 由于本章处理完毕后,将会有许多新增的 partition ,所以请删除掉这两个 partition 。删除的过程需要注意的是: 12 | 13 | - 需先以 free / swapon -s / mount 等指令查阅,要被处理的文件系统不可以被使用! 如果有被使用,则你必须要使用 umount 卸载文件系统。如果是内存交换空间,则需使用 swapon -s 找出被使用的分区, 再以 swapoff 去卸载他! 14 | 15 | ```shell 16 | [root@study ~]# umount /data/ext4 /data/xfs /data/file /data/win 17 | [root@study ~]# swapoff /dev/vda6 /tmp/swap 18 | ``` 19 | 20 | - 观察 /etc/fstab ,该文件新增的行全部删除或注解! 21 | 22 | ```shell 23 | [root@study ~]# nano /etc/fstab 24 | .....(前面省略)..... 25 | /dev/mapper/centos-swap swap swap defaults 0 0 # 从这行之后全删除 26 | UUID="e0fa7252-b374-4a06-987a-3cb14f415488" /data/xfs xfs defaults 0 0 27 | /srv/loopdev /data/file xfs defaults,loop 0 0 28 | UUID="6b17e4ab-9bf9-43d6-88a0-73ab47855f9d" swap swap defaults 0 0 29 | /tmp/swap swap swap defaults 0 0 30 | UUID="6032-BF38" /data/win vfat defaults 0 0 31 | ``` 32 | 33 | - 使用“ gdisk /dev/vda ”删除,也可以使用“ parted /dev/vda rm 号码”删除喔! 34 | 35 | ```shell 36 | [root@study ~]# parted /dev/vda rm 7 37 | [root@study ~]# parted /dev/vda rm 6 38 | [root@study ~]# parted /dev/vda rm 5 39 | [root@study ~]# parted /dev/vda rm 4 40 | [root@study ~]# partprobe 41 | [root@study ~]# rm /tmp/swap /srv/loopdev 42 | ``` 43 | 44 | - 情境仿真题二:由于我的系统原本分区的不够好,我的用户希望能够独立一个 filesystem 附挂在 /srv/myproject 目录下。 那你该如何创建新的 filesystem ,并且让这个 filesystem 每次开机都能够自动的挂载到 /srv/myproject , 且该目录是给 project 这个群组共享的,其他人不可具有任何权限。且该 filesystem 具有 1GB 的容量。 45 | 46 | - 目标:理解文件系统的创建、自动挂载文件系统与专案开发必须要的权限; 47 | 48 | - 前提:你需要进行过第六章的情境仿真才可以继续本章; 49 | 50 | - 需求:本章的所有概念必须要清楚! 那就让我们开始来处理这个流程吧! 51 | 52 | - 首先,我们必须要使用 gdisk /dev/vda 来创建新的 partition。 然后按下“ n ”,按下“Enter”选择默认的分区号码,再按“Enter”选择默认的启始柱面, 按下“+1G”创建 1GB 的磁盘分区,再按下“Enter”选择默认的文件系统 ID。 可以多按一次“p ”看看是否正确,若无问题则按下“w”写入分区表; 53 | 54 | - 避免重新开机,因此使用“ partprobe ”强制核心更新分区表; 55 | 56 | - 创建完毕后,开始进行格式化的动作如下:“mkfs.xfs -f /dev/vda4”,这样就 OK 了! 57 | 58 | - 开始创建挂载点,利用:“ mkdir /srv/myproject ”来创建即可; 59 | 60 | - 编写自动挂载的配置文件:“ nano /etc/fstab ”,这个文件最下面新增一行,内容如下: /dev/vda4 /srv/myproject xfs defaults 0 0 61 | 62 | - 测试自动挂载:“ mount -a ”,然后使用“ df /srv/myproject ”观察看看有无挂载即可! 63 | 64 | - 设置最后的权限,使用:“ chgrp project /srv/myproject ”以及“ chmod 2770 /srv/myproject ”即可。 65 | 66 | ------------------------------------------------------------------------ 67 | 68 | 简答题部分: 69 | 70 | - 我们常常说,开机的时候,“发现磁盘有问题”,请问,这个问题的产生是“filesystem 的损毁”,还是“磁盘的损毁”? 特别需要注意的是,如果您某个 filesystem 里面,由于操作不当,可能会造成 Superblock 数据的损毁, 或者是 inode 的架构损毁,或者是 block area 的记录遗失等等,这些问题当中,其实您的“磁盘”还是好好的, 不过,在磁盘上面的“文件系统”则已经无法再利用!一般来说,我们的 Linux 很少会造成 filesystem 的损毁, 所以,发生问题时,很可能整个磁盘都损毁了。但是,如果您的主机常常不正常断电,那么, 很可能磁盘是没问题的,但是,文件系统则有损毁之虞。此时,重建文件系统 (reinstall) 即可! 不需要换掉磁盘啦! ^\_^ 71 | - 当我有两个文件,分别是 file1 与 file2 ,这两个文件互为 hard link 的文件,请问, 若我将 file1 删除,然后再以类似 vi 的方式重新创建一个名为 file1 的文件, 则 file2 的内容是否会被更动? 这是来自网友的疑问。当我删除 file1 之后, file2 则为一个正规文件,并不会与他人共同分享同一个 inode 与 block ,因此,当我重新创建一个文件名为 file1 时,他所利用的 inode 与 block 都是由我们的 filesystem 主动去搜寻 meta data ,找到空的 inode 与 block 来创建的, 与原本的 file1 并没有任何关连性喔!所以,新建的 file1 并不会影响 file2 呢! -------------------------------------------------------------------------------- /chapter_14/14.5本章习题.md: -------------------------------------------------------------------------------- 1 | # 14.5 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 4 | 5 | - 情境仿真题一:由于 LVM 可以弹性调整 filesystem 的大小,但是缺点是可能没有加速与硬件备份(与快照不同)的功能。 而磁盘阵列则具有性能与备份的功能,但是无法提供类似 LVM 的优点。在此情境中,我们想利用“在 RAID 上面创建 LVM”的功能,以达到两者兼顾的能力。 6 | 7 | - 目标:测试在 RAID 磁盘上面架构 LVM 系统; 8 | 9 | - 需求:需要具有磁盘管理的能力,包括 RAID 与 LVM; 10 | 11 | - 前提:会用到本章创建出来的 /dev/vda5, /dev/vda6, /dev/vda7 三个分区! 那要如何处理呢?如下的流程一个步骤一个步骤的实施看看吧: 12 | 13 | - 重新处理系统,我们在这个练习当中,需要 /dev/vda5, /dev/vda6, /dev/vda7 创建成一个 RAID5 的 /dev/md0 磁盘!详细的作法这里就不谈了! 你得要使用 gdisk 来处理成为如下的模样: 14 | 15 | ```shell 16 | [root@study ~]# gdisk -l /dev/vda 17 | Number Start (sector) End (sector) Size Code Name 18 | 1 2048 6143 2.0 MiB EF02 19 | 2 6144 2103295 1024.0 MiB 0700 20 | 3 2103296 65026047 30.0 GiB 8E00 21 | 4 65026048 67123199 1024.0 MiB 8300 Linux filesystem 22 | 5 67123200 69220351 1024.0 MiB FD00 Linux RAID 23 | 6 69220352 71317503 1024.0 MiB FD00 Linux RAID 24 | 7 71317504 73414655 1024.0 MiB FD00 Linux RAID 25 | ``` 26 | 27 | - 开始使用 mdadm 来创建一个简单的 RAID5 阵列!简易的流程如下: 28 | 29 | ```shell 30 | [root@study ~]# mdadm --create /dev/md0 --auto=yes --level=5 \ 31 | > --raid-devices=3 /dev/vda{5,6,7} 32 | [root@study ~]# mdadm --detail /dev/md0 | grep -i uuid 33 | UUID : efc7add0:d12ee9ca:e5cb0baa:fbdae4e6 34 | [root@study ~]# vim /etc/mdadm.conf 35 | ARRAY /dev/md0 UUID=efc7add0:d12ee9ca:e5cb0baa:fbdae4e6 36 | ``` 37 | 38 | 若无出现任何错误讯息,此时你已经具有 /dev/md0 这个磁盘阵列设备了!接下来让我们处理 LVM 吧! 39 | 40 | - 开始处理 LVM ,现在我们假设所有的参数都使用默认值,包括 PE ,然后 VG 名为 raidvg ,LV 名为 raidlv ,下面为基本的流程: 41 | 42 | ```shell 43 | [root@study ~]# pvcreate /dev/md0 <==创建 PV 44 | [root@study ~]# vgcreate raidvg /dev/md0 <==创建 VG 45 | [root@study ~]# lvcreate -L 1.5G -n raidlv raidvg <==创建 LM 46 | [root@study ~]# lvscan 47 | ACTIVE '/dev/raidvg/raidlv' [1.50 GiB] inherit 48 | ``` 49 | 50 | 这样就搞定了 LVM 了!而且这个 LVM 是架构在 /dev/md0 上面的喔!然后就是文件系统的创建与挂载了! 51 | 52 | - 尝试创建成为 XFS 文件系统,且挂载到 /srv/raidlvm 目录下: 53 | 54 | ```shell 55 | [root@study ~]# mkfs.xfs /dev/raidvg/raidlv 56 | [root@study ~]# blkid /dev/raidvg/raidlv 57 | /dev/raidvg/raidlv: UUID="4f6a587d-3257-4049-afca-7da1d405117d" TYPE="xfs" 58 | [root@study ~]# vim /etc/fstab 59 | UUID="4f6a587d-3257-4049-afca-7da1d405117d" /srv/raidlvm xfs defaults 0 0 60 | 61 | [root@study ~]# mkdir /srv/raidlvm 62 | [root@study ~]# mount -a 63 | [root@study ~]# df -Th /srv/raidlvm 64 | Filesystem Type Size Used Avail Use% Mounted on 65 | /dev/mapper/raidvg-raidlv xfs 1.5G 33M 1.5G 3% /srv/raidlvm 66 | ``` 67 | 68 | - 上述就是 LVM 架构在 RAID 上面的技巧,之后的动作都能够使用本章的其他管理方式来管理, 包括 RAID 热拔插机制、LVM 放大缩小机制等等。 69 | 70 | ------------------------------------------------------------------------ 71 | 72 | 简答题部分: 73 | 74 | - 在前一章的[第一个大量新增帐号范例]中, 如果我想要让每个用户均具有 soft/hard 各为 40MB/50MB 的容量时,应该如何修改这个 script ?你得先要依据本章的作法,先将 /home 制作好 quota 的环境然后, 你可以在 do...done 内的最后一行,新增一行内容为: xfs_quota -x -c "limit -u bsoft=40M bhard=50M \${username}" /home 这样就可以在制作用户时,指定更新密码且给予 quota 的限制! 75 | - 如果我想要让 RAID 具有保护数据的功能,防止因为硬件损毁而导致数据的遗失,那我应该要选择的 RAID 等级可能有哪些? (请以本章谈到的等级来思考即可)具有备份数据的有: RAID-1, RAID-5, RAID-6 76 | - 在默认的 LVM 设置中,请问 LVM 能否具有“备份”的功能?是有的,就是那个快照 (snopshot) 的功能,此功能即可进行数据的备份! 77 | - 如果你的计算机主机有提供 RAID 0 的功能,你将你的三颗硬盘全部在 BIOS 阶段使用 RAID 芯片整合成为一颗大磁盘, 则此磁盘在 Linux 系统当中的文件名为何?由于硬件磁盘阵列是在 BIOS 阶段完成的,因此 Linux 系统会捉到一个完整的大的 RAID 磁盘,此磁盘的文件名就会是“ /dev/sda ”! 但如果是 Intel 的芯片组,则还是可能会成为 /dev/md127 等相关的文件名! -------------------------------------------------------------------------------- /chapter_4/4.7本章习题.md: -------------------------------------------------------------------------------- 1 | # 4.7 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看) 4 | 5 | ------------------------------------------------------------------------ 6 | 7 | 情境仿真题一:我们在纯命令行,例如tty2里面看到的欢迎画面,就是在那个login:之前的画面(CentOS Linux 7 ...)是怎么来的? 8 | 9 | - 目标:了解到终端机接口的欢迎讯息是怎么来的? 10 | - 前提:欢迎讯息的内容,是记录到/etc/issue当中的 11 | - 需求:利用man找到该文件当中的变量内容 12 | 13 | 情境仿真题一的解决步骤: 14 | 15 | 1. 欢迎画面是在/etc/issue文件中,你可以使用“nano /etc/issue”看看该文件的内容(注意,不要修改这个文件内容,看完就离开),这个文件的内容有点像下面这样: 16 | 17 | ````shell 18 | \S 19 | Kernel \r on an \m 20 | ```` 21 | 22 | 2. 与tty3比较之下,发现到核心版本使用的是 \\r 而硬件等级则是 \\m 来取代,这两者代表的意义为何? 由于这个文件的文件名是issue,所以我们使用“man issue”来查阅这个文件的格式; 23 | 24 | 3. 通过上一步的查询我们会知道反斜线(\\)后面接的字符是与agetty(8)及mingetty(8)有关,故进行“man agetty”这个指令的查询。 25 | 26 | 4. 由于反斜线(\\)的英文为“escape”因此在上个步骤的man环境中,你可以使用“/escape”来搜寻各反斜线后面所接字符所代表的意义为何。 27 | 28 | 5. 请自行找出:如果我想要在/etc/issue文件内表示“时间(localtime)”与“tty号码(如tty1, tty2的号码)”的话, 应该要找到那个字符来表示(通过反斜线的功能)?(答案为:\\t 与 \\l) 29 | 30 | ------------------------------------------------------------------------ 31 | 32 | 简答题部分: 33 | 34 | - 简单的查询一下,Physical console / Virtual console / Terminal 的说明为何? 35 | console 有“控制台”的意思在里面,因此你可以这样看的: 36 | 37 | - 实体控制台:实体的屏幕、键盘、鼠标等界面,让你可以使用该配备来操作系统的环境,就称为实体控制台 (Physical console) 38 | - 虚拟控制台:由系统衍生出的虚拟控制台,你可以通过该虚拟控制台搭配你自己系统的实体配备,来操作远端系统的环境。每个虚拟控制台都是独立运行的。 39 | - 终端机:你可以用该界面来取得一个可以控制系统的 shell 环境。 40 | 41 | 由这些定义来看,一般来说,我们取得可以与系统互动的环境,大致上都称为 terminal 就是了。 42 | 43 | - 请问如果我以文字模式登陆Linux主机时,我有几个终端机接口可以使用?如何切换各个不同的终端机接口? 44 | 共有六个, tty1 \~ tty6 ,切换的方式为 Crtl + Alt + \[F1\]\~\[F6\] 45 | 46 | - 在Linux系统中,/VBird与/vbird是否为相同的文件? 47 | 两者为不同的文件,因为 Linux 系统中,大小写字母代表意义不一样! 48 | 49 | - 我想要知道 date 如何使用,应该如何查询? 50 | 最简单的方式就是使用 man date 或 info date 来查看,如果该套件有完整说明的话,那么应该也可以在 /usr/share/doc 里面找到说明文档! 51 | 52 | - 我想要在今天的 1:30 让系统自己关机,要怎么做? 53 | shutdown -h 1:30 54 | 55 | - 如果我 Linux 的 X Window 突然发生问题而挂掉,但 Linux 本身还是好好的,那么我可以按下哪三个按键来让 X window 重新启动? 56 | \[crtl\]+\[alt\]+\[backspace\] 57 | 58 | - 我想要知道 2010 年 5 月 2 日是星期几?该怎么做? 59 | 最简单的方式直接使用 cal 5 2010 即可找出 2010 年 5 月份的月历。 60 | 61 | - 使用 man date 然后找出显示目前的日期与时间的参数,成为类似:2015/10/16-20:03 62 | date +%Y/%m/%d-%H:%M 63 | 64 | - 若以 X-Window 为默认的登陆方式,那请问如何进入 Virtual console 呢? 65 | 可以按下 \[Ctrl\] + \[Alt\] + \[F2\] \~ \[F6\] 进入 Virtual console ( 共六个 ); 而按下 \[Ctrl\] + \[Alt\] + \[F1\] 可回到 X-Window 的 desktop 中! 66 | 67 | - 简单说明在 bash shell 的环境下, \[tab\] 按键的用途? 68 | \[Tab\] 按键可做为命令补齐或文件补齐的功能,与所接的指令位置有关。 接在一串指令的第一个单字后面,则为命令补齐,否则则为文件补齐! 目前尚有选项/参数补齐的功能。 69 | 70 | - 如何强制中断一个程序的进行?(利用按键,非利用 kill 指令) 71 | 可以利用 \[Ctrl\] + c 来中断! 72 | 73 | - Linux 提供相当多的线上查询,称为 man page,请问,我如何知道系统上有多少关于 passwd 的说明?又,可以使用其他的程序来取代 man 的这个功能吗? 74 | 可以利用 man -f passwd 来查询,另外,如果有提供 info 的文件数据时 (在 /usr/share/info/ 目录中) ,则能够利用 info passwd 来查询之! 75 | 76 | - 在 man 的时候, man page 显示的内容中,指令(或文件)后面会接一组数字,这个数字若为 1, 5, 8 ,表示该查询的指令(或文件)意义为何? 77 | 代表意义为 1) 一般使用者可以使用的指令或可可执行文件案 5)一些配置文件的文件内容格式 8)系统管理员能够使用的管理指令。 78 | 79 | - man page 显示的内容的文件是放置在哪些目录中? 80 | 放置在 /usr/share/man/ 与 /usr/local/man 等默认目录中。 81 | 82 | - 请问这一串指令“ foo1 -foo2 foo3 foo4 ”中,各代表什么意义? 83 | foo1 一定是指令, -foo2 则是 foo1 这个指令的选择项目参数, foo3 与 foo4 则不一定, 可能是 foo1 的参数设置值,也可能是额外加入的 parameters。 84 | 85 | - 当我输入 man date 时,在我的终端机却出现一些乱码,请问可能的原因为何?如何修正? 86 | 如果没有其他错误的发生,那么发生乱码可能是因为语系的问题所致。 可以利用 export LANG=en_US.utf8 或者是 export LC_ALL=en_US.utf8 等设置来修订这个问题。 87 | 88 | - 我输入这个指令“ls -al /vbird”,系统回复我这个结果:“ls: /vbird: No such file or directory” 请问发生了什么事?” 89 | 不要紧张,很简单的英文,因为系统根本没有 /vbird 这个文件的存在啊! ^\_^ 90 | 91 | - 我想知道目前系统有多少指令是以 bz 为开头的,可以怎么作? 92 | 直接输入 bz\[tab\]\[tab\] 就可以知道了! 93 | 94 | - 承上题,在出现的许多指令中,请问 bzip2 是干嘛用的? 95 | 在使用 man bzip2 之后,可以发现到,其实 bzip2 是用来作为压缩与解压缩文件用的! 96 | 97 | - 在终端机里面登陆后,看到的提示字符 \$ 与 # 有何不同?平时操作应该使用哪一个? 98 | #代表以 root 的身份登陆系统,而 \$ 则代表一般身份使用者。依据提示字符的不同, 我们可以约略判断登陆者身份。一般来说,建议日常操作使用一般身份使用者登陆,亦即是 \$ ! 99 | 100 | - 我使用dmtsai这个帐号登陆系统了,请问我能不能使用reboot来重新开机? 若不能,请说明原因,若可以,请说明指令如何下达? 101 | 理论上reboot仅能让root执行。不过,如果dmtsai是在主机前面以图形接口登陆时,则dmtsai还是可以通过图形接口功能来关机。 -------------------------------------------------------------------------------- /chapter_17/17.7本章习题.md: -------------------------------------------------------------------------------- 1 | # 17.7 本章习题 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 4 | 5 | - 情境仿真题:通过设置、启动、观察等机制,完整的了解一个服务的启动与观察现象。 6 | 7 | - 目标:了解 daemon 的控管机制,以 sshd daemon 为例; 8 | 9 | - 前提:需要对本章已经了解,尤其是 systemd 的管理 部分; 10 | 11 | - 需求:已经有 sshd 这个服务,但没有修改过端口! 在本情境中,我们使用 sshd 这个服务来观察,主要是假设 sshd 要开立第二个服务,这个第二个服务的 port 放行于 222 ,那该如何处理? 可以这样做看看: 12 | 13 | - 基本上 sshd 几乎是一定会安装的服务!只是我们还是来确认看看好了! 14 | 15 | ```shell 16 | [root@study ~]# systemctl status sshd.service 17 | sshd.service - OpenSSH server daemon 18 | Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled) 19 | Active: active (running) since Thu 2015-08-13 14:31:12 CST; 20h ago 20 | 21 | [root@study ~]# cat /usr/lib/systemd/system/sshd.service 22 | [Unit] 23 | Description=OpenSSH server daemon 24 | After=network.target sshd-keygen.service 25 | Wants=sshd-keygen.service 26 | 27 | [Service] 28 | EnvironmentFile=/etc/sysconfig/sshd 29 | ExecStart=/usr/sbin/sshd -D $OPTIONS 30 | ExecReload=/bin/kill -HUP $MAINPID 31 | KillMode=process 32 | Restart=on-failure 33 | RestartSec=42s 34 | 35 | [Install] 36 | WantedBy=multi-user.target 37 | ``` 38 | 39 | - 通过观察 man sshd,我们可以查询到 sshd 的配置文件位于 /etc/ssh/sshd_config 这个文件内!再 man sshd_config 也能知道原来端口是使用 Port 来规范的! 因此,我想要创建第二个配置文件,文件名假设为 /etc/ssh/sshd2_config 这样! 40 | 41 | ```shell 42 | [root@study ~]# cd /etc/ssh 43 | [root@study ssh]# cp sshd_config sshd2_config 44 | [root@study ssh]# vim sshd2_config 45 | Port 222 46 | # 随意找个地方加上这个设置值!你可以在文件的最下方加入这行也 OK 喔! 47 | ``` 48 | 49 | - 接下来开始修改启动脚本服务档! 50 | 51 | ```shell 52 | [root@study ~]# cd /etc/systemd/system 53 | [root@study system]# cp /usr/lib/systemd/system/sshd.service sshd2.service 54 | [root@study system]# vim sshd2.service 55 | [Unit] 56 | Description=OpenSSH server daemon 2 57 | After=network.target sshd-keygen.service 58 | Wants=sshd-keygen.service 59 | 60 | [Service] 61 | EnvironmentFile=/etc/sysconfig/sshd 62 | ExecStart=/usr/sbin/sshd -f /etc/ssh/sshd2_config -D $OPTIONS 63 | ExecReload=/bin/kill -HUP $MAINPID 64 | KillMode=process 65 | Restart=on-failure 66 | RestartSec=42s 67 | 68 | [Install] 69 | WantedBy=multi-user.target 70 | 71 | [root@study system]# systemctl daemon-reload 72 | [root@study system]# systemctl enable sshd2 73 | [root@study system]# systemctl start sshd2 74 | [root@study system]# tail -n 20 /var/log/messages 75 | # semanage port -a -t PORT_TYPE -p tcp 222 76 | where PORT_TYPE is one of the following: ssh_port_t, vnc_port_t, xserver_port_t. 77 | # 认真的看!你会看到上面这两句!也就是 SELinux 的端口问题!请解决! 78 | 79 | [root@study system]# semanage port -a -t ssh_port_t -p tcp 222 80 | [root@study system]# systemctl start sshd2 81 | [root@study system]# netstat -tlnp | grep ssh 82 | tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1300/sshd 83 | tcp 0 0 0.0.0.0:222 0.0.0.0:* LISTEN 15275/sshd 84 | tcp6 0 0 :::22 :::* LISTEN 1300/sshd 85 | tcp6 0 0 :::222 :::* LISTEN 15275/sshd 86 | ``` 87 | 88 | ------------------------------------------------------------------------ 89 | 90 | 简答题部分: 91 | 92 | - 使用 netstat -tul 与 netstat -tunl 有什么差异?为何会这样?使用 n 时, netstat 就不会使用主机名称与服务名称 (hostname & service*name) 来显示, 取而代之的则是以 IP 及 port number 来显示的。IP 的分析与 /etc/hosts 及 /etc/resolv.conf 有关, 这个在未来服务器篇才会提到。至于 port number 则与 /etc/services 有关,请自行参考喔! ^*^ 93 | - 你能否找出来,启动 port 3306 这个端口的服务为何?通过搜寻 /etc/services 内容,得到 port 3306 为 mysql 所启动的端口喔!查询 google, 可得到 mysql 为一种网络数据库系统软件。 94 | - 你可以通过哪些指令查询到目前系统默认开机会启动的服务?systemctl list-units 以及 systemctl list-unit-files 95 | - 承上,那么哪些服务“目前”是在启动的状态?结果同上!只是若要进一步的信息,应该使用 systemctl status \[unit.service\] 一项一项查询! -------------------------------------------------------------------------------- /chapter_6/6.8本章习题.md: -------------------------------------------------------------------------------- 1 | # 6.8 本章习题: 2 | 3 | ( 要看答案请将鼠标移动到“答:”下面的空白处,按下左键圈选空白处即可察看 ) 4 | 5 | ------------------------------------------------------------------------ 6 | 7 | 情境仿真题一:假设系统中有两个帐号,分别是 alex 与 arod ,这两个人除了自己群组之外还共同支持一个名为 project 的群组。假设这两个用户需要共同拥有 /srv/ahome/ 目录的开发权,且该目录不许其他人进入查阅。 请问该目录的权限设置应为何?请先以传统权限说明,再以 SGID 的功能解析。 8 | 9 | - 目标:了解到为何专案开发时,目录最好需要设置 SGID 的权限! 10 | - 前提:多个帐号支持同一群组,且共同拥有目录的使用权! 11 | - 需求:需要使用 root 的身份来进行 chmod, chgrp 等帮用户设置好他们的开发环境才行! 这也是管理员的重要任务之一! 12 | 13 | 首先我们得要先制作出这两个帐号的相关数据,帐号/群组的管理在后续我们会介绍, 您这里先照着下面的指令来制作即可: 14 | 15 | ```shell 16 | [root@study ~]# groupadd project <==增加新的群组 17 | [root@study ~]# useradd -G project alex <==创建 alex 帐号,且支持 project 18 | [root@study ~]# useradd -G project arod <==创建 arod 帐号,且支持 project 19 | [root@study ~]# id alex <==查阅 alex 帐号的属性 20 | uid=1001(alex) gid=1002(alex) groups=1002(alex),1001(project) <==确实有支持! 21 | [root@study ~]# id arod 22 | uid=1002(arod) gid=1003(arod) groups=1003(arod),1001(project) <==确实有支持! 23 | ``` 24 | 25 | 然后开始来解决我们所需要的环境吧! 26 | 27 | 1. 首先创建所需要开发的专案目录: 28 | 29 | ```shell 30 | [root@study ~]# mkdir /srv/ahome 31 | [root@study ~]# ll -d /srv/ahome 32 | drwxr-xr-x. 2 root root 6 Jun 17 00:22 /srv/ahome 33 | ``` 34 | 35 | 2. 从上面的输出结果可发现 alex 与 arod 都不能在该目录内创建文件,因此需要进行权限与属性的修改。 由于其他人均不可进入此目录,因此该目录的群组应为project,权限应为770才合理。 36 | 37 | ```shell 38 | [root@study ~]# chgrp project /srv/ahome 39 | [root@study ~]# chmod 770 /srv/ahome 40 | [root@study ~]# ll -d /srv/ahome 41 | drwxrwx---. 2 root project 6 Jun 17 00:22 /srv/ahome 42 | # 从上面的权限结果来看,由于 alex/arod 均支持 project,因此似乎没问题了! 43 | ``` 44 | 45 | 3. 实际分别以两个使用者来测试看看,情况会是如何?先用 alex 创建文件,然后用 arod 去处理看看。 46 | 47 | ```shell 48 | [root@study ~]# su - alex <==先切换身份成为 alex 来处理 49 | [alex@www ~]$ cd /srv/ahome <==切换到群组的工作目录去 50 | [alex@www ahome]$ touch abcd <==创建一个空的文件出来! 51 | [alex@www ahome]$ exit <==离开 alex 的身份 52 | 53 | [root@study ~]# su - arod 54 | [arod@www ~]$ cd /srv/ahome 55 | [arod@www ahome]$ ll abcd 56 | -rw-rw-r--. 1 alex alex 0 Jun 17 00:23 abcd 57 | # 仔细看一下上面的文件,由于群组是 alex ,arod并不支持! 58 | # 因此对于 abcd 这个文件来说, arod 应该只是其他人,只有 r 的权限而已啊! 59 | [arod@www ahome]$ exit 60 | ``` 61 | 62 | 由上面的结果我们可以知道,若单纯使用传统的 rwx 而已,则对刚刚 alex 创建的 abcd 这个文件来说, arod 可以删除他,但是却不能编辑他!这不是我们要的样子啊!赶紧来重新规划一下。 63 | 64 | 4. 加入 SGID 的权限在里面,并进行测试看看: 65 | 66 | ```shell 67 | [root@study ~]# chmod 2770 /srv/ahome 68 | [root@study ~]# ll -d /srv/ahome 69 | drwxrws---. 2 root project 17 Jun 17 00:23 /srv/ahome 70 | 71 | 测试:使用 alex 去创建一个文件,并且查阅文件权限看看: 72 | [root@study ~]# su - alex 73 | [alex@www ~]$ cd /srv/ahome 74 | [alex@www ahome]$ touch 1234 75 | [alex@www ahome]$ ll 1234 76 | -rw-rw-r--. 1 alex project 0 Jun 17 00:25 1234 77 | # 没错!这才是我们要的样子!现在 alex, arod 创建的新文件所属群组都是 project, 78 | # 由于两人均属于此群组,加上 umask 都是 002,这样两人才可以互相修改对方的文件! 79 | ``` 80 | 81 | 所以最终的结果显示,此目录的权限最好是“2770”,所属文件拥有者属于root即可,至于群组必须要为两人共同支持的project 这个群组才行! 82 | 83 | ------------------------------------------------------------------------ 84 | 85 | 简答题部分: 86 | 87 | - 什么是绝对路径与相对路径绝对路径的写法为由 / 开始写,至于相对路径则不由 / 开始写!此外,相对路径为相对于目前工作目录的路径! 88 | 89 | - 如何更改一个目录的名称?例如由 /home/test 变为 /home/test2mv /home/test /home/test2 90 | 91 | - PATH 这个环境变量的意义?这个是用来指定可执行文件执行的时候,指令搜寻的目录路径。 92 | 93 | - umask 有什么用处与优点?umask 可以拿掉一些权限,因此,适当的定义 umask 有助于系统的安全, 因为他可以用来创建默认的目录或文件的权限。 94 | 95 | - 当一个使用者的 umask 分别为 033 与 044 他所创建的文件与目录的权限为何?在 umask 为 033 时,则默认是拿掉 group 与 other 的 w(2)x(1) 权限,因此权限就成为“文件 -rw-r--r-- , 目录 drwxr--r-- ”而当 umask 044 时,则拿掉 r 的属性,因此就成为“文件 -rw--w--w-,目录 drwx-wx-wx” 96 | 97 | - 什么是 SUID ?当一个指令具有 SUID 的功能时,则: 98 | 99 | - SUID 权限仅对二进制程序(binary program)有效; 100 | - 执行者对于该程序需要具有 x 的可执行权限; 101 | - 本权限仅在执行该程序的过程中有效 (run-time); 102 | - 执行者将具有该程序拥有者 (owner) 的权限。 103 | 104 | - 当我要查询 /usr/bin/passwd 这个文件的一些属性时(1)传统权限;(2)文件类型与(3)文件的隐藏属性,可以使用什么指令来查询?ls -al file lsattr 105 | 106 | - 尝试用 find 找出目前 linux 系统中,所有具有 SUID 的文件有哪些?find / -perm +4000 -print 107 | 108 | - 找出 /etc 下面,文件大小介于 50K 到 60K 之间的文件,并且将权限完整的列出 (ls -l):find /etc -size +50k -a -size -60k -exec ls -l {} \\; 注意到 -a ,那个 -a 是 and 的意思,为符合两者才算成功 109 | 110 | - 找出 /etc 下面,文件大小大于 50K 且文件所属人不是 root 的文件名,且将权限完整的列出 (ls -l);find /etc -size +50k -a ! -user root -exec ls -ld {} \\; find /etc -size +50k -a ! -user root -type f -exec ls -l {} \\; 上面两式均可!注意到 ! ,那个 ! 代表的是反向选择,亦即“不是后面的项目”之意! 111 | 112 | - 找出 /etc 下面,容量大于 1500K 以及容量等于 0 的文件:find /etc -size +1500k -o -size 0 相对于 -a ,那个 -o 就是或 (or) 的意思啰! -------------------------------------------------------------------------------- /chapter_19/19.4开机过程的问题解决.md: -------------------------------------------------------------------------------- 1 | # 19.4 开机过程的问题解决 2 | 3 | 很多时候,我们可能因为做了某些设置,或者是因为不正常关机 (例如未经通知的停电等等) 而导致系统的 filesystem 错乱,此时,Linux 可能无法顺利开机成功,那怎么办呢?难道要重灌?当然不需要啦! 进入 rescue 模式去处理处理,应该就 OK 的啦!下面我们就来谈一谈如何处理几个常见的问题! 4 | 5 | ## 19.4.1 忘记 root 密码的解决之道 6 | 7 | 大家都知道鸟哥的记忆力不佳,容易忘东忘西的,那如果连 root 的密码都忘记了,怎么办? 其实在 Linux 环境中 root 密码忘记时还是可以救回来的!只要能够进入并且挂载 / , 然后重新设置一下 root 的密码,就救回来啦! 8 | 9 | 只是新版的 systemd 的管理机制中,默认的 rescue 模式是无法直接取得 root 权限的喔!还是得要使用 root 的密码才能够登陆 rescure 环境耶! 天哪!那怎办?没关系,还是有办法滴~通过一个名为“ rd.break ”的核心参数来处理即可喔!只是需要注意的是, rd.break 是在 Ram Disk 里面的操作系统状态,因此你不能直接取得原本的 linux 系统操作环境。所以,还需要 chroot 的支持! 更由于 SELinux 的问题,你可能还得要加上某些特殊的流程才能顺利的搞定 root 密码的救援喔! 10 | 11 | 现在就让我们来实作一下吧!(1)按下 systemctl reboot 来重新开机,(2)进入到开机画面,在可以开机的菜单上按下 e 来进入编辑模式, 然后就在 linux16 的那个核心项目上面使用这个参数来处理: 12 | 13 | ![通过 rd.break 尝试救援 root 密码](/pic/boot-1.jpg) 14 | *图19.4.1、通过 rd.break 尝试救援 root 密码* 15 | 16 | 改完之后按下 \[crtl\]+x 开始开机,开机完成后屏幕会出现如下的类似画面,此时请注意,你应该是在 RAM Disk 的环境,并不是原本的环境, 因此根目录下面的东西跟你原本的系统无关喔!而且,你的系统应该会被挂载到 /sysroot 目录下,因此,你得要这样作: 17 | 18 | ```shell 19 | Generating "/run/initramfs/rdsosreport.txt" 20 | 21 | Enter emergency mode. Exit the shell to continue. 22 | Type "journalctl" to view system logs. 23 | You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot 24 | after mounting them and attach it to a bug report. 25 | 26 | switch_root:/# # 无须输入密码即可取得 root 权限! 27 | switch_root:/# mount # 检查一下挂载点!一定会发现 /sysroot 才是对的! 28 | .....(前面省略)..... 29 | /dev/mapper/centos-root on /sysroot type xfs (ro,relatime,attr,inode64,noquota) 30 | 31 | switch_root:/# mount -o remount,rw /sysroot # 要先让它挂载成可读写! 32 | switch_root:/# chroot /sysroot # 实际切换了根目录的所在!取回你的环境了! 33 | 34 | sh-4.2# echo "your_root_new_pw" | passwd --stdin root 35 | sh-4.2# touch /.autorelabel # 很重要!变回 SELinux 的安全本文~ 36 | sh-4.2# exit 37 | 38 | switch_root:/# reboot 39 | ``` 40 | 41 | 上述的流程你应该没啥大问题才对~比较不懂的,应该是 (1)chroot 是啥? (2)为何需要 /.autorelabel 这个文件? 42 | 43 | - chroot 目录:代表将你的根目录“暂时”切换到 chroot 之后所接的目录。因此,以上表为例,那个 /sysroot 将会被暂时作为根目录, 而我们知道那个目录其实就是最原先的系统根目录,所以你当然就能够用来处理你的文件系统与相关的帐号管理啰! 44 | - 为何需要 /.autorelabel:在 rd.break 的 RAM Disk 环境下,系统是没有 SELinux 的,而你刚刚更改了 /etc/shadow (因为改密码啊!), 所以“这个文件的 SELinux 安全本文的特性将会被取消”喔!如果你没有让系统于开机时自动的回复 SELinux 的安全本文, 你的系统将产生“无法登陆”的问题 (在 SELinux 为 Enforcing 的模式下!)加上 /.autorelabel 就是要让系统在开机的时候自动的使用默认的 SELinux type 重新写入 SELinux 安全本文到每个文件去!。 45 | 46 | 不过加上 /.autorelabel 之后,系统在开机就会重新写入 SELinux 的 type 到每个文件,因此会花不少的时间喔!如果你不想要花太多时间, 还有个方法可以处理: 47 | 48 | - 在 rd.break 模式下,修改完 root 密码后,将 /etc/selinux/config 内的 SELinux 类型改为 permissive 49 | - 重新开机后,使用 root 的身份下达“ restorecon -Rv /etc ”仅修改 /etc 下面的文件; 50 | - 重新修改 /etc/selinux/config 改回 enforcing ,然后“ setenforce 1 ”即可! 51 | 52 | ## 19.4.2 直接开机就以 root 执行 bash 的方法 53 | 54 | 除了上述的 rd.break 之外,我们还可以直接开机取得系统根目录后,让系统直接丢一个 bash 给我们使用喔! 使用的方法很简单,就同样在开机的过程中,同在 linux16 的那一行,最后面不要使用 rd.break 而是使用“ init=/bin/bash ”即可! 最后开机完成就会丢一个 bash 给我们!同样不需要 root 密码而有 root 权限! 55 | 56 | 但是要完整的操作该系统是不可能的,因为我们将 PID 一号更改为 bash 啦!所以,最多还是用在救援方面就是了! 而且,同样的,要操作该系统你还是得要 remount 根目录才行啊!否则无法更改文件系统啦!基本上,这个系统的处理方法你应该是要这样作的: 57 | 58 | ![直接开机使用 bash 的方法](/pic/boot-3.jpg) 59 | *图19.4.2、直接开机使用 bash 的方法* 60 | 61 | 如上图的完整截图,你会发现由于是最默认的 bash 环境,所以连 PATH 都仅有 /bin 而已~所以你不能下达 reboot !同时, 由于没有 systemd 或者是 init 的存在,所以真的使用绝对路径来下达 reboot 时,系统也是无法协助你重新开机啦! 此时只能按下 reset 或者是强制关机后,才能再次开机!所以...感觉上还是 rd.break 比较保险... 62 | 63 | 同时请注意,鸟哥上面刻意忘记处理 /.autorelabel 的文件创建~你如果按照鸟哥上述的方法实作的话,嘿嘿!此时应该是无法登陆的喔! 请重新开机进入 rd.break 模式,然后使用 SELinux 改为 permissive 的方法来实验看看。等到可以顺利以 root 登陆系统后, 使用 restorecon -Rv /etc 来瞧一瞧,应该会像下面这样: 64 | 65 | ```shell 66 | [root@study ~]# getenforce 67 | Permissive 68 | 69 | [root@study ~]# restorecon -Rv /etc 70 | restorecon reset /etc/shadow context system_u:object_r:unlabeled_t:s0 71 | ->system_u:object_r:shadow_t:s0 72 | restorecon reset /etc/selinux/config context system_u:object_r:unlabeled_t:s0 73 | ->system_u:object_r:selinux_config_t:s0 74 | 75 | [root@study ~]# vim /etc/selinux/config 76 | SELINUX=enforcing 77 | 78 | [root@study ~]# setenforce 1 79 | ``` 80 | 81 | ## 19.4.3 因文件系统错误而无法开机 82 | 83 | 如果因为设置错误导致无法开机时,要怎么办啊?这就更简单了!最容易出错的设置而导致无法顺利开机的步骤,通常就是 /etc/fstab 这个文件了,尤其是使用者在[实作 Quota/LVM/RAID] 时,最容易写错参数, 又没有经过 mount -a 来测试挂载,就立刻直接重新开机,真要命!无法开机成功怎么办?这种情况的问题大多如下面的画面所示: 84 | 85 | ![文件系统错误的示意图](/pic/grub-06.jpg) 86 | *图19.4.3、文件系统错误的示意图* 87 | 88 | 看到最后两行,他说可以输入 root 的密码继续加以救援喔!那请输入 root 的密码来取得 bash 并以 mount -o remount,rw / 将根目录挂载成可读写后,继续处理吧!其实会造成上述画面可能的原因除了 /etc/fstab 编辑错误之外,如果你曾经不正常关机后,也可能导致文件系统不一致 (Inconsistent) 的情况, 也有可能会出现相同的问题啊!如果是扇区错乱的情况,请看到上图中的第二行处, fsck 告知其实是 /dev/md0 出错, 此时你就应该要利用 fsck.ext3 去检测 /dev/md0 才是!等到系统发现错误,并且出现“clear \[Y/N\]”时,输入“ y ”吧! 89 | 90 | 当然啦,如果是 XFS 文件系统的话,可能就得要使用 xfs_repair 这个指令来处理。这个 fsck/xfs_repair 的过程可能会很长,而且如果你的 partition 上面的 filesystem 有过多的数据损毁时,即使 fsck/xfs_repair 完成后,可能因为伤到系统盘,导致某些关键系统文件数据的损毁,那么依旧是无法进入 Linux 的。此时,就好就是将系统当中的重要数据复制出来,然后重新安装,并且检验一下,是否实体硬盘有损伤的现象才好!不过一般来说,不太可能会这样啦~ 通常都是文件系统处理完毕后,就能够顺利再次进入 Linux 了。 --------------------------------------------------------------------------------