UP | HOME

Linux简单教程

Table of Contents

本wiki写于本科,主要目的是为了培训工作室里的同学学linux,对linux的基本命令做了些介绍。

1 GNU/Linux 教程之新人入坑记

1.1 Linux简介

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。

Linux也是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。通常情况下,Linux被打包成供个人计算机和服务器使用的Linux发行版,一些流行的主流Linux发布版,包括Debian(及其派生版本Ubuntu,Linux Mint),Fedora(及其相关版本Red Hat Enterprise Linux,CentOS)和openSUSE等。Linux发行版包含Linux内核和支撑内核的实用程序和库,通常还带有大量可以满足各类需求的应用程序。个人计算机使用的Linux发行版通常包X Window和一个相应的桌面环境,如GNOME或KDE。桌面Linux操作系统常用的应用程序,包括Firefox网页浏览器,LibreOffice办公软件,GIMP图像处理工具等。由于Linux是自由软件,任何人都可以创建一个符合自己需求的Linux发行版。

1.2 安装Linux

一般安装方法可分为实体机安装和虚拟机安装,实体机安装使用起来比较方便,但是有风险,对于新手来说,操作不当,会导致整个电脑要重新安装系统,而使用虚拟机安装的话,是随便你怎么折腾的,但是对于数据交互和体验方便不是那么理想,所以,怎么安装是看个人需求啦,我个人推荐是实体机安装的,一般都是安装双系统的,毕竟天朝大环境下完全放弃window还是有点艰难的。

对于新手来说,Ubuntu这个发行版是个非常不错选择,比较容易适应和入门,但是某种意义上来说,Ubuntu对于用户友好这上面花的时间越多,在其他方面的性能就没那么好了,毕竟Linux的强大之处不是在于用户友好的图形界面。

所以,我的建议是先用Ubuntu适应一段时间,当你感觉对Linux基本操作都了解后,可以换到其他可定制性强的发行版,比如Arch Linux, Gentoo等,定制一个属于自己的Linux。

1.3 系统结构简介

/:根目录,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。

/bin:bin 就是二进制(binary)英文缩写。在一般的系统当中,都可以在这个目录下找到linux常用的命令。系统所需要的那些命令位于此目录。

/boot:Linux的内核及引导系统程序所需要的文件目录,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录。

/cdrom:这个目录在刚刚安装系统的时候是空的。可以将光驱文件系统挂在这个目录下。例如:mount /dev/cdrom /cdrom

/dev:dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。这一点和常用的windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。

/etc:etc这个目录是linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下。

/home:如果建立一个用户,用户名是"xx”,那么在/home目录下就有一个对应的/home/xx路径,用来存放用户的主目录。

/lib:lib是库(library)英文缩写。这个目录是用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。因此,千万不要轻易对这个目录进行什么操作,一旦发生问题,系统就不能工作了。

/lost+found:在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。

/mnt:这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom等目录。可以参看/etc/fstab的定义。

/media:有些linux的发行版使用这个目录来挂载那些usb接口的移动硬盘(包括U盘)、CD/DVD驱动器等等。

/opt:这里主要存放那些可选的程序。

/proc:可以在这个目录下获取系统信息。这些信息是在内存中,由系统自己产生的。

/root:Linux超级权限用户root的家目录。

/sbin:这个目录是用来存放系统管理员的系统管理程序。大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin目录是相似的,凡是目录sbin中包含的都是root权限才能执行的。

/selinux :对SElinux的一些配置文件目录,SElinux可以让linux更加安全。

/tmp:临时文件目录,用来存放不同程序执行时产生的临时文件。有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。

/usr 这是linux系统中占用硬盘空间最大的目录。用户的很多应用程序和文件都存放在这个目录下。在这个目录下,可以找到那些不适合放在/bin或/etc目录下的额外的工具

/usr/local:这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面、。

/usr/share :系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,/usr/share/doc和/usr/share/man帮助文件。

var:这个目录的内容是经常变动的,看名字就知道,可以理解为vary的缩写,/var下有/var/log 这是用来存放系统日志的目录。/var www目录是定义Apache服务器站点存放目录;/var/lib 用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地.

1.4 目录操作

1.4.1 目录移动:cd

cd命令的基本语法为: cd [-LP] [directory | -]

directory为希望切换到的目录的名称,如果输入该命令时没有指定目录名称,那么cd默认会切换到home目录.如果用`-`代替目录名称,则会跳转到前一目录。 当然,常见的cd参数还有`..`,可跳转到父级目录。

有时在终端下疑惑当前在哪个目录时,可以使用`pwd`来显示当前目录的路径。

1.4.2 创建目录:mkdir

mkdir的语法为: mkdir [-p] directory…

1.4.3 移除目录:rmdir

rmdir的语法为: rmdir [-p] directory… 当然这个命令只能用来删除空目录,当目录里面有文件时,想要删除该目录的话,就要是`rm -r`命令了。

1.4.4 移动或重命名目录:mv

mv的语法为: mv directory target

1.4.5 显示目录内容:ls

ls的语法: ls [-参数] [目录] ls命令是linux中最重要的命令之一了,你可以`man ls`看一下它的帮助文档,你会发现居然有59个选项,当然一般人不可能用那么多的啦,下面我就将最常用的选项列出来。

  1. `ls -r`:以字母表相反的顺序显示文件名,ls默认情况下是字母表正序显示文件名的。
  2. `ls -R`: R代表recursive,递归。该选项告诉ls程序列举指定目录中的所有直接or间接的子目录和文件的信息。一句话说,即显示整个目录数的信息。
  3. `ls -F`:该命令可显示目录中所包含文件的类型。文件名称后会有一个标志来区别各种不同的文件类型。
    • 末尾显示`*`的文件为可执行普通文件
    • 末尾显示`/`的文件为目录
    • 末尾为空的文件为非执行普通文件
    • 末尾显示`@`的文件为符号链接

1.4.6 磁盘空间使用情况:df,du

du可查看文件的大小,语法为: du -h [文件]

加-h参数会使输出结果更符合人的阅读习惯,当然你也可以不加XD,如果你数字感够强的话。

df可查看磁盘存储空间统计情况,`df -h`即可。

1.5 文件操作

1.5.1 文件权限

  1. 什么是文件权限

    文件权限是Linux里面一个非常重要的概念了,对于文件操作来说,必须要对权限非常熟悉。

    首先,什么是权限呢: 文件权限就是控制哪些用户标识可以访问文件,以及以何种方式访问文件。

    文件权限分为3种,包括 读权限, 写权限, 和 执行权限. 3种权限之间彼此独立 。

    使用文件权限的主要原因有两点:

    1. 限制其他用户的访问
    2. 避免自己错误使用

      对于普通文件来说:

    3. 读权限=读取文件
    4. 写权限=写入文件
    5. 执行权限=执行文件

      对于目录来说:

    6. 读权限=读取目录
    7. 写权限=创建,移动,复制或删除目录条目
    8. 执行权限=搜索目录
    9. 显示文件权限: ls -l

      查看工作目录中的文件:`ls -l`

      输出为:

      total 64892
      drwxr-xr-x 2 li users     4096 Aug  3 05:28 minecraft
      drwxr-xr-x 4 li users     4096 Aug 22 01:57 nikki
      drwxr-xr-x 5 li users     4096 Jul 24 19:06 Shank
      drwxr-xr-x 7 li lin        4096 Jun 28  2009 WorldOfGoo
      -rw-r----- 1 li lin    66428181 Sep  4 13:14 WorldOfGooSetup.1.41.tar.gz
      drwxr-xr-x 2 li users     4096 Jul 24 19:01 仙剑奇侠传1
      

      输出结果中关于文件权限的信息即最左边的10个字符,含义如下:

      第一个字符表示文件类型:

      1. d=目录
      2. -=普通文件
      3. l=链接

        后面9个字符表示含义:

      4. r=读权限
      5. w=写权限
      6. x=运行权限
      7. -=没有权限

        在分析文件权限时,将9个字符分为3组,从左到右分别表示文件属主,该组用户,其他用户标识的权限。比如上面的那个输出的WorldOfGooSetup文件为例,该文件的权限为-rw-r–—,分成3组即为:(表明为普通文件)- (Owner)-rw (Group)r– (Other)—, 该文件的属主为li,li用户在用户组lin里面,所以li用户对该普通文件有读取和写入权限,不可以运行,在lin用户组里的其他用户对该文件只有读取权限,其他用户对该文件即无读取权也无写入权,即无法访问该文件。

        所以,通过文件权限的设定,可以很好的保证系统的安全性。

    10. 修改文件权限:chmod

      该命令的语法为: chmod mode file…

      其中mode为新的文件模式,file为文件或目录的名称。

      只有属主和超级用户才能改变文件权限。

      对于文件模式,Linux使用紧凑的3位数字来表示一个文件的权限。正如上一小节所说,一个权限集有3个字符,分别为rwx,如果对应位置有权限,则置为1, 比如上小节的那个WorldOfGooSetup的例子,该文件属主对其有读取和写入权,无运行权,所以属主对其的权限为110,该二进制化为10进制即为6, 同理剩下两组对应的文件模式为100和000即4和0, 所以该文件的文件模式为640.

      使用chmod改变文件权限即通过改变文件模式即可。

      练习:使一个普通文件对于属主来说,可运行,可读取,可写入,对于组中用户来说,可读取,可运行,不可写入,对于其他用户来说,可读取,不可写入,不可运行,则该文件的文件模式为多少?

1.5.2 创建文件:touch

该命令的语法为: touch [*-acm*] [*-t* time] file…

其中time是时间,格式为 [[YY]YY]MMDDhhmm[.ss].

默认情况下, touch 生成的文件的访问时间和修改时间为当前时间和日期,如果用`-t`参数,即可以修改文件的创建和修改时间。 touch 生成的文件默认的文件模式为644.

  1. 文件复制:cp

    该命令的语法为: cp [*-ip*] file1 file2

    file1为要复制的文件名称,file2为复制后的文件名称。

    cp 的参数也比较多,下面列举常用的:

    1. cp -i:当目标文件名称已存在时,询问是否覆盖,cp默认是直接覆盖。
    2. cp -p: 保留源文件的修改时间,访问时间和权限。
    3. cp -r: 复制目录
  2. 删除文件:rm

    该命令的语法为: rm [-fir] file…

    file为要删除文件的名称。

    常见参数的含义:

    1. -i:该选项会在删除每个文件时进行提醒,防止误删除。
    2. -f: 不考虑文件权限,强制删除,需谨慎使用。
    3. -r:删除目录

1.6 进程操作

1.6.1 学会使用ps程序

ps是Linux系统管理员必须要掌握的命令了,它能帮助查找特定进程,查看当前系统中发生的情况。

然而ps的选项也是非常复杂的,分为Unix版和BSD版,由于我经常使用BSD版本的ps,所以下面就讲讲BSD版的ps的参数及使用吧。

基本语法: ps [*ajluvx*] [*p* pid] [*U* userid]

下面介绍下主要的参数及其意义:

  1. ps :无参数时显示与当前用户和终端有关的进程
  2. ps a :显示与任何用户标识和终端有关的进程
  3. ps e :所有进程(包括守护进程)
  4. ps p pid:与指定进程有关的进程
  5. ps U userid:与指定用户标识有关的进程

    有用的特殊组合:

  6. ps: 显示自己的进程
  7. ps ax : 显示所有进程
  8. ps aux : 显示所有进程,完整输出
  9. 学会使用kill程序

    kill程序有两种应用:终止进程以及向进程发送信号。此处只讨论终止进程,对于新手来说用的比较多,特别是在终端模式下。

    程序的基本语法为:

    kill [*-9*] pid… | jobid…

    一般我们都是通过使用`ps`or`jobs`来查看进程,当然如果进程数比较多,找起来非常麻烦的时候,可以使用`ps aux | grep 关键词`的方式来查找进程,这样比较快捷,当得到pid or jobid的时候,就可以直接`kill p(job)id`直接杀死啦。

    for example:

    1. kill 5505 //pid
    2. kill %2 //jobid

      有时,即使是kill也不起作用,这时如果你对这个进程深恶痛绝的话,你可以使出最后的杀手锏`-9`参数,使用`kill -9 p(job)id`的话,永远是起作用的,但记住,该命令不要经常使用,因为这样杀死进程时,系统不允许进程释放正在使用的资源,这会导致好多问题的,所以,杀手锏只有到必要的时候才能使用XD

  10. 监视系统进程:top

    如果希望查看系统的整体运行动态情况,可以用 top 命令啦,该命令基本语法如下: top [*-d* delay] [*-n* count] [*-p* pid[,pid]…] delay是刷新间隔(s), count是刷新的总时间量,pid是进程id,表示只需要显示该进程的信息。

1.7 编辑器Vim

俗话说,宝马侍英雄,宝剑配良将,你说咱Linuxer总得有个拿得出手的编辑器嘛,所以,Vim,你值得拥有。(ps:Emacs也是非常不错的哦,只可惜我先用了vim,不想换了)

关于vim神器,短短的教程也讲不了那么多,推荐先看一个陈皓的博文呢,写的非常不错,简明vim攻略

2 小测试

1.创建一个权限为755的文件,文件内容为anything you want to say。

2.创建2个目录,一个为Video/,一个为Music/,在Music/目录里面建一个Pop/文件夹

3.使用top,ps查看系统进程

4.在用户主目录下使用pstree命令,并将结果重定向到result文件。

3 实战篇:安装PT网站环境

3.1 安装 nexusphp 环境

Author: Jonathan

Created: 2017-02-22 周三 10:37

Emacs 24.3.50.3 (Org mode 8.0.3)

Validate