< 独立项目 - 文本挖掘 >
项目立项的相关背景介绍,TODO方向。
一、Ubuntu环境配置
主机系统:Windows 7 SP1 64位操作系统 | i5-4210 CPU | 16GB RAM
VirtualBox虚拟环境:GUN VitrualBox
Linux系统:Ubuntu 15.10(ubuntu-15.10-desktop-i386)
二、Linux Ubuntu 基础知识
使用Ctrl+Alt+[F1~F6],可以切换到1~6号控制台。使用Ctrl+Alt+F7返回图形界面。Ctrl+Alt+BackSpace将图形界面关闭。
命令提示符
user@ubuntu:~$为命令提示符。@之前的部分为当前用户ID,@与:之间的部分,为主机名称,:与$之间的部分,为当前的路径。
退出系统
可在中断或控制台中输入命令:sudo halt,系统会提示输入正确密码,便可以退出系统。
分区概念
硬盘分区的存在,是由硬盘的物理特性决定的,并不会因为不同的操作系统而有所改变。请把硬盘想象为一本书,所有的书都是相同的结构,通常包括 书名、索引和正文。如果需要Linux,首先需要找到一本名为《Linux》的书,书名相当于硬盘中的MBR,也就是主引导记录。MBR可以使几个书名合在一起,类似于《XX合订本》。而正文,就是硬盘中记录的数据。索引相当于硬盘中的分区表,书中的每一个章节,相当于硬盘中的一个分区,它起始和结束的页次,都可以再索引中找到。如果没有分区表,操作系统也不能够在硬盘上定位数据的位置。在Linux中,分区是这样表示的:
/dev/hda /dev/hda1 /dev/hda2 /dev/hda5/ /dev/sdb1
以/dev/hda5为例:因为在linux中,每一个设备都是用/dev/文件夹下的一个文件来表示,所以/dev/hda5中,/dev/表示的是根目录下的dev目录,来看剩下的部分hda5.前两位的字母hd表示这是一块IDE硬盘,如果是sd,则代表SATA硬盘,或闪存等外设。第三位的字母a表示这是该类型接口上的第一个设备。同理,b、c、d......分别代表该类型接口上的第二三四个...设备。例如hdc表示第二个IDE接口上的主硬盘(每个IDE接口上允许一个主设备和一个从设备)。第四位的数字5,并不表示这是该硬盘中的第5个分区,而是第一个逻辑分区。因为在Linux中,为了避免不必要的混乱,分区的顺序是不能改变的,分区标识则由它们在硬盘中的位置决定,系统又要为所有可能的主分区预留标识,所以1-4一定不会是逻辑分区,5则是第一个逻辑分区,以此类推。
Shell
在Linux下,所有的程序都可以通过命令运行。虽然Linux也有GUI,但并不比Windows的GUI更优秀!使用CLI还有更多的好处,之后慢慢体会。
命令
Linux命令行具有补全功能,非常实用。例如command path/file命令,如果只有一个以c起始的命令,键入c,再按一次tab键,系统将自动补全命令余下的部分。如果不只一个c起始的命令,可以按两次tab键,系统会列出所有符合条件的选项。路径和文件名也可以通过tab键来补全。还有一种遍历补全的方式。
接下来了解命令的语法结构,这一部分相当重要!以我们的中文为例:
我们郑重地推荐您Ubuntu/Linux!
这个句子的语法尽管简单,却是大部分的命令行采用的句型,看下句子里的结构都有些什么?
我们:主语,Linux命令的执行者只有一个,所以主语一概省略。
推荐:动词,作为谓语存在。Linux命令中,谓语是必须的。这这是不同命令之间最根本的区别方式。所以通常作为命令名,写在最前面。例如,键入date命令,可以查看当前的时间日期。
郑重地:状语,用来修饰谓语。Linux命令可以使用参数来精细调节程序的行为。为了与命令的操作对象相区别,参数前通常要加-或--符号。建议在命令行后直接跟参数。
您Ubuntu/Linux:这两个部分都是宾语。它们是命令的操作对象。大部分的命令只有一个操作对象,也有一些命令是双宾语结构。具有一个直接宾语和一个间接宾语,比如拷贝这个命令cp(copy)
分隔符:Linux命令中使用空格作为分隔符。cp a /home表示把当前目录下的a文件,拷贝到/home目录下。(命令的不同部分使用空格分隔,连续的空格视为一个空格)。
上面的中文例子,翻译成Linux命令,应该是这个样子的:
推荐 --郑重地 您 Ubuntu/Linux(按照传统,“-”后跟简写为单个字母的参数,“--”后跟完整单词的参数,但是也有例外)。
Linux程序、进程
其实Linux的命令,运行的是Linux系统中的程序。只要已安装了程序,就可以通过命令来运行它,并且可以使用参数来精细的调整它的运行状态。举一个例子:mplayer -shuffle -loop 3 -playlist mymp3.list
上面命令汇总,mplayer调用mplayer播放器程序。参数-shuffle表示随机播放,-loop表示循环播放,后面的3为循环的次数,如果为0,则一直播放。-playlist表示播放列表中的曲目。可以把mp3的路径放到mymp3.list文件中,让mplayer来播放它们。
进程:为运行中的程序,是程序在内存中的镜像。
路径
路径分为绝对路径和相对路径。绝对路径的起始点为根目录 / ,例如/usr/local/bin就是绝对路径,指向系统中一个绝对的位置,不受其他因素影响。
相对路径的起始点为当前目录,如果现在位于/usr目录,那么相对路径 local/bin所指示的位置为/usr/local/bin。相对路径所指示的位置,除了相对路径本身,还受到当前位置的影响。
例如Linux系统中常见的目录/bin、/usr/bin、/usr/local/bin,如果只有一个相对路径 bin,anemia它所指示的位置可能是以上三个目录中的任意一个,也可能是其他目录。只有当前位置确定,相对路径所指示的位置才能够确定。
在相对路径中 . 表示当前目录, .. 表示当前目录的上一级目录。例如安装了一个程序,它的主程序没有被放置到上面三个bin目录中的任何一个,或者其他系统能够找到的地方,就得告诉系统,它的可执行文件在哪里。可以使用绝对路径,例如 /home/usr/bin/可执行文件。或者定位到/home/usr/bin目录,使用相对目录来定位它 ./可执行文件。如果定位到了它的子目录,比如 /home/usr/bin/gui,可以使用 .. 来表示它的上级目录, ../可执行文件。
路径相关命令
cd(change directory)更改目录。
pwd(print working directory)显示当前路径。
ls(list)显示当前目录中的文件列表。
cd /etc 进入/etc目录,这里使用的是绝对路径。
pwd 显示当前路径,这个命令返回结果/etc。
cd .. 进入上一级目录/etc
cd ../home /etc目录的上一级目录为/,它的子目录home为/home。
cd - 回到上一次的目录,在/etc目录跳转到/home目录,所以这次是回到/etc目录。
cd ~ ~代表当前用户的$HOME目录,也就是/home/{用户名}目录。
ls 在任何时候,都可以使用ls命令,来了解当前目录下都有哪些文件。
远程路径:
远程路径的表示方法为 协议://用户名:密码@位置/路径:端口
大多数的远程路径可以使用默认端口匿名访问,由此用户名、密码、端口通常不需要写。
软件
Linux中没有注册表这个概念。安装软件,理论上讲,只要拷贝所有相关文件,并运行它的主程序就可以。
Bin 可执行文件,程序的可执行文件通常在这个目录下。在环境变量中设定搜索路径,就可以直接执行,而不需要定位其路径。
Etc 配置文件,大部分系统程序的配置文件保存在/etc目录,便于集中修改。
Lib 库文件,集中在一起,方便共享给不同程序。
Share 程序运行所需的其他资源。例如图标、文本。这部分文件是专有的,不需要共享。
配置方式
Linux下没有类似注册表的系统,系统和软件都可以通过纯文本的配置文件进行设置。例如,修改主机IP地址,可以使用ifconfig这个程序,执行下面的命令:ifconfig eth0 192.168.0.1
隐藏文件
Linux下,名称中第一个字符为 . 的文件或文件夹,系统默认情况下将它们隐藏起来。
cd ~ 进入用户目录;
ls 查看当前目录下的文件列表;
ls -a 查看所有文件的文件列表(包括隐藏文件)。
只查看隐藏文件,而不包括这两个特殊目录,可以使用ls命令的参数 -A。
每个目录下都包含两个特殊目录 . 和 .. 。 . 代表当前目录, .. 代表上一级目录。目录是一种特殊类型的文件!
文件类型
Linux主要根据文件头信息来判断文件类型,扩展名并非决定因素。使用ls -l命令,查看详细信息格式的文件列表:
共显示了七列信息,从左至右依次为:权限、文件数、归属用户、归属群组、文件大小、创建日期、文件名称。其中特别留意第一列:drwxr-xr-x,一共有10个位置,可以分为4组:d rwx r-x r-x。
第一组只有一个字符:a 文件夹 - 普通文件 l 链接 b 块设备文件 c 字符设备文件。
剩下的3组分别为归属用户、归属群组、其他用户或群组对于该文件的权限。格式为:rwx rwx rwx,r 可读,w 可写, x 可执行。它们的顺序不能颠倒,某一位置为空(-),则表示不具有相应的权限。
Linux下的可执行文件并不是由扩展名决定的,而是由其可执行权限位决定。
权限
文件的权限分为r、w、x三种类型,而一个文件可以针对归属用户,归属群组,其他用户或群组分别设定权限。使用chmod梦里更改文件的权限,使用chown更改文件的归属。例如:
chmod 755 xxx
chmod a+x xxx
chown user:group xxx 用来更改文件的归属用户,也可以同时更改其归属群组。
chgrp group xxx 用来更改文件的归属群组。
上面命令中的755和a+x是两种类型的表达方式。后面详细介绍权限管理、用户管理。
执行命令的权限
有一些命令,普通用户也可以执行,但是只有root用户才能执行成功。
执行命令的身份
默认情况下,命令提示符末位为$,这表示将以普通用户的身份执行命令。可使用su(switch user)命令来切换其他用户。
例如 su root,切换到root用户。如果su命令后面没有切换的目标,那么这个命令默认切换到root用户。在执行su命令时,系统会提示输入管理员的密码。之后会发现命令提示符末位变成了#,将以root用户的身份执行命令。
Ubuntu系统默认会随机设定系统的root密码,这样更安全一些。这时候可以执行sudo命令,输入当前用户密码后,暂时以root用户的身份执行命令。(前提是sudoer列表中要包含你的ID。在安装Ubuntu系统时创建的用户,默认具有sudo权限)。如果能够执行sudo命令,那么你也就拥有了root权限。
Shell、Console、Terminal
Linux系统中,图形界面和控制台的分辨率通常不一致,所以切换时要有一个延时。对于中文用户来讲,控制台下中文的显示也比较麻烦。而且控制台显示内容通常不如终端显示的全面。推荐使用终端来执行命令。
rxvt-unicode
可以使用 sudo apt-get install rxvt-unicode 命令来安装 urxvt 终端。urxvt启动它。
rxvt-unicode 还支持“服务器/客户端”的运营模式:
urxvtd 启动一个守护进程daemon(支持控制台),urxvtc 启动客户端client。多个客户端可以同时连接到一个urxvtd,以达到节省系统资源的目的。
在线帮助系统
使用命令 man 或 info 来阅读Linux命令的在线文档。命令的格式:man xxx。说明:在使用“man”浏览器的时候,一些快捷键可能会用到:
Ctrl+f(orward)向下翻一页 Ctrl+d(own)向下翻半页
Ctrl+b(ackward)向上翻一页 Ctrl+u(p)向上翻半页
bash
使用wget这个程序,首先找到一个可下载地址,复制链接,在终端窗口内点击鼠标中键,把它粘贴进去。按下Ctrl+a组合键,光标移动到了行首,输入wget 和 空格。回车后,终端出现一些信息,下载便完成。
使用 Ctrl+a 组合键就不需要使用方向键来移动光标,方向键每次只能移动一个字符,没有效率。还可以使用 Ctrl+f 向前移动光标,Ctrl+b 向后移动光标,Ctrl+e 将光标移动到末行。
在Linux图形界面中,鼠标中键通常执行“粘贴”的操作,如果没有中键,可以左右键同时按下。
中止正在运行的程序
若一个命令持续时间很长,以至于不能够进行其他操作,可以使用 Ctrl+c 来强行中止它。
Ctrl+s
出于意外,有时会按下 Ctrl+s 组合键,Shell便被冻结,尝试使用 Ctrl+q 组合键,看能否恢复正常。
通配符
使用 ? 代表任意单个字符。使用 * 代表随意几个任意字符。可以将遍历补全和通配合结合使用,以提高效率。
例如:cd */ 则遍历补全只补全文件夹。 chmview *.chm 则遍历补全只补全chm文件。
任务管理
& 在命令的末尾加上一个 & 符号,表示背景任务。
; 使用 ; 将多个命令连接起来,则表示任务按顺序执行。
&& 使用 && 将多个命令连结起来,则表示只有前面的命令执行成功,后面的命令才能得以执行。
`` `<命令>`,如果一个命令中包含以``(Esc键下方的按键)括起来的子命令,那么子命令将被优先执行,执行结果被代入上一级命令继续执行。例如创建一个以当前时间命名的文件:touch `date+%m%d_%H:%M%S`。touch命令能够创建一个文件,它的操作对象为,date+%m%d_%H:%M%S命令的输出。我们创建了一个名为时间格式的文件。
ctrl+z
将当前Shell中的任务挂起。
管道、重定向
> 重定向符号,它的作用是将命令的输出重定向到一个文件中,比如想把命令ls的结果保存为FileList文件,作为一个清单,可以使用重定向符号来完成它:ls -l >FileList
>> 作用于>基本相同,不同点在于,>>以追加的方式,将命令的输出写入文件的末尾。
< 是从文件到命令的重定向,将文件的内容作为命令的输入。
| 为管道符号,它的作用是将前一个命令的输出,作为下一个命令的输入。假设一个目录下的文件太多,使用ls命令不能够在屏幕中完全显示,这个时候可以将ls命令的输出,通过管道符号,作为浏览器less的输入。就可以使用浏览器的功能翻页、查找: ls -al | less
脱字符
Shell中的一些功能是通过特殊符号作为控制符来实现的。这产生一个问题,如果一个文件名中,刚好包含了这些字符,就很难对它进行操作 。这是因为Shell将文件名中的 ; 解析为按顺序执行命令。或者文件名以空白起始,而在shell中,无论多少个空格,都将被解析为一个分隔符。这个时候就需要使用脱字符 \ 了。它能够将一个具有特殊涵义的字符转换为普通字符。上面的两个任务,可以再文件夹名中每个特殊符号前加一个 \ ,像这样:
less \;xxx
less \\xxx
less \;\\&\xxx
说明:也可以使用 " 将文件名括起来,例如 less ";&xxx"。很多情况下,这样甚至更方便。
脱字符在shell中也可以作为换行符,在一个命令的末尾添加一个 \ ,然后回车,在下一行继续输入命令剩余的部分,将一个命令拆分为多行且不影响它的执行。事实上换行符也符合脱字符的定义。回车键有两个涵义。一个是 执行 Enter,另一个 换行(折线箭头)。在shell中它作为控制字符 执行,使用脱字符后,它便代表排版字符 换行 了。
Fish
the firendly interactive shell。Fish是一款非常友好的shell。大力推荐!使用命令sudo apt-get install fish安装。完成后,运行命令fish,exit返回bash。
设置默认的Shell
如果拥有root权限,可以直接修改 /etc/passwd 文件,Tip:可以使用 whereis xxx 命令,来查看xxx程序的安装位置。
设定命令的搜索路径
使用echo $PATH,可以显示$PATH变量,它是一个环境变量,代表执行命令时,shell的搜索路径。执行一个命令时,shell会到$PATH变量定义的路径去搜索,并运行与命令同名的可执行文件。如果程序、脚本等可执行文件并不在上面的路径中,就必须使用绝对路径或者相对路径定位可执行文件。
可以修改 /etc/environment文件来设定你的命令搜索路径,找到PATH起始的行 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin",在双引号中添加你的自定义路径,并以 : 分隔。
三、Ubuntu系统简介
Ubuntu系统目录结构
以下为Ubuntu目录的主要目录结构,稍微了解它们包含哪些文件即可。
/ 根目录
|
|-boot/ 启动文件。所有与系统启动有关的文件都保存在这里。
| grub/Grub 引导器相关的文件
|
|-dev/ 设备文件
|-proc/ 内核与进程镜像
|
|-mnt/ 临时挂载
|-media/ 挂载媒体设备
|
|-root/ root用户的$HOME目录
|-home/
| |-user/ 普通用户的$HOME目录
|
|-bin/ 系统程序
|-sbin/ 管理员系统程序
|-lib/ 系统程序库文件
|-etc/ 系统程序和大部分应用程序的全局配置文件
| |-init.d/ SystemV 风格的启动脚本
| |-rcX.d/ 启动脚本的连接,定义运行级别
| |-network/ 网络配置文件
| |-X1/ 图形界面配置文件
|-usr/
| |-bin/ 应用程序
| |-sbin/ 管理员应用程序
| |-lib/ 应用程序库文件
| |-share/ 应用程序资源文件
| |-src/ 应用程序源代码
| |-local/
| | |-soft/ 用户程序
|
|-var/ 动态数据
|
|-temp/ 临时文件
|-lost+found/ 磁盘修复文件
启动流程
Linux系统主要通过以下步骤启动:
1、读取MBR的信息,启动 Boot Manager Windows使用NTLDR作为Boot Manager。如果系统中安装多个版本的Windows,需要在NTLDR中选择你要进入的系统。Linux通常使用功能强大,配置灵活的GRUB作为Boot Manager。
2、加载系统内核,启动init进程 init进程是Linux的根进程,所有的系统进程都是它的子进程。
3、init进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别,按顺序运行该运行级别对应文件下的脚本。脚本通常以start参数其中,并指向一个系统中的程序。
4、根据 /etc/rcS.d/ 文件夹中对应的脚本启动Xwindows服务器.xorg。Xwindow为Linux下的图形用户界面系统。
5、启动登录管理器,等待用户登录。
更改运行级别
在 /etc/inittab 文件中找到如下内容:
#The default runlevel.
id:2:initdefault:
这一行中的数字 2,为系统的运行级别。默认的运行级别含义如下:6 关机,1 单用户维护模式 , 2~5 多用户模式 ,6 重启。
常用系统服务
acpi-support 高级电源管理支持。acpid acpi 守护程序。这两个用于电源管理,非常重要。
alsa 声音子系统 alsa-utils
......
重要配置文件
!无论任何情况下,修改配置文件之前,先备份它!
建议使用这个命令:sudo cp xxx xxx_`date+%y%m%d_%H:%M`。可以新建一个名为bak的文件,内容如下:
#!/bin/bash
sudo cp $1$1_`date+%y%m%d_%H:%M`
把它放在你能够记住的目录下,比如/home,执行命令 sh /home/bak xxx,就可以将当前文件夹下的文件xxx另存为xxx_yymmdd_HH:MM的格式。
全局配置文件
系统初始化
/etc/inittab 运行级别、控制台数量
/etc/timezone 时区
/etc/inetd.conf 超级进程
文件系统
/etc/fstab 开机时挂载的文件系统
/etc/mtab 当前挂载的文件系统
用户系统
/etc/passwd 用户信息
/etc/shadow 用户密码
/etc/group 群组信息
/etc/gshadow 群组密码
/etc/sudoers Sudoer 列表
Shell
/etc/shell 可用Shell列表
/etc/inputrc ReadLine 空间设定
/etc/profile 用户首选项
/etc/bash.bashrc bash 配置文件
系统环境
/etc/environment 环境变量
/etc/updatedb.conf 文件检索数据库配置信息
/etc/issue 发行信息
/etc/issue.net
/etc/screenrc 屏幕设定
网络
/etc/iftab 网卡MAC地址绑定
/etc/hosts 主机列表
/etc/hostname 主机名
/etc/resolv.conf 域名解析服务器地址
/etc/network/interfaces 网卡配置文件
用户配置文件
/etc/目录下的文件,只有root用户才有权修改。应用软件的全局配置文件,通常普通用户也不能修改。
四、软件安装
DPKG
Linux系统中,软件通常以源代码或者预编译包的形式提供。Ubuntu系统中,软件常以deb格式的包文件发布,是一种预编译软件包。deb包含已编译的软件,还包括软件的拷贝路径、对其他软件包的依赖关系、通用的配置文件以及软件的描述、版本、作者、类别、占用空间等信息。
APT
APT软件包管理系统。APT可以自动的检查依赖关系,通过预设的方式来获得相关软件包,并自动安装配置它。推荐使用APT软件包管理系统。APT系统主要包括 apt-get 和 apt-cache 等命令。通常是复合命令,包含若干个子命令。
apt-get install xxx 安装xxx
apt-get remove xxx 卸载xxx
apt-get update 更新软件信息数据库
apt-get upgrade 进行系统升级
apt-cache search 搜索软件包
说明:建议经常使用 sudo apt-get update 命令来更新你的软件信息数据库。
APT系统修复
由于各种意外,APT系统可能会出现问题,使用如下命令,尝试进行修复:apt-get -f install
源码包
对于大多数软件建议使用APT系统安装它。也可以通过编译源代码的方式安装它。
首先需要下载软件的源码包,并且将它解包为一些源代码文件。建议将下载的源码包移动到 /usr/local/src/ 目录下,并在这里解包。
sudo mv xxx.tar.gz /usr/local/src 移动源码包
cd /usr/local/src 进入/usr/local/src/ 目录
sudo tar -xzvf xxx.tar.gz 解包源码
cd xxx_ver/ 进行接报后的源码目录
源码目录中通常有一个configure脚本,用来配置即将开始的编译过程。可以执行它
sudo ./configure [-prefix=/usr/local/xxx....]
现在执行make命令,系统会根据Makefile文件中的设定,通过make工具调用编译器和所需资源文件,将源代码编译成目标文件。
sudo make
执行 make install 命令,make工具会自动连接目标文件和库文件,将最终生成的文件拷贝到Makefile文件设定的路径中,并且完成更改文件的属性,删除残留文件等活动。
sudo make install
现在,编译安装已经完成,为了更方便的使用它,需要给程序的可执行文件作一个符号链接。
sudo ln -sf /usr/local/xxx/可执行文件 /usr/local/bin/可执行文件
注意:为了顺利进行编译,至少需要安装build-essential软件包。
sudo apt-get install build-essential
Xwindow简介
Xserver
Xclient
Xprotocol
五、系统管理
一些细节
Linux是大小写敏感的系统,所有命令、路径、参数、变量都区分大小写。
使用TAB键补全命令。
Shell的功能键能协助更高效的编辑命令,尽量使用它。
命令由 命令名、分隔符、参数、操作对象构成。
需要对多个对象进行操作时,可以使用空格分隔符将它们隔开。
使用空格分隔的多个对象,视为一个整体,作为命令的一个操作对象。
递归,表示在子层次中重复相同操作。例如递归复制某目录,不但赋值当前目录及其下的所有文件,而且对当前目录的子目录,也进行递归复制的操作。
格式约定
使用[]表示可选项。
ls [-al] ls是必须项,参数不需要以方括号括起来。
使用<>表示必须项,实际输入为尖括号中的内容。
使用 | 表示 或,以 | 分隔的项目不能同时使用。
六、系统信息
uptime
联机信息-时间:当前系统时间 系统运行时间 当前在线用户数 系统负荷 1分钟前 5分钟前 15分钟前。
w
联机信息-已登录用户
uptime 信息
用户名 登录方式 来源地址 登录时间 发呆时间 资源占用 当前任务。
who
联机信息,常用参数
whoami
显示当前用户名
last
最近用户登录信息,-<数字>使用数字作为参数,控制显示条目。例如 last -10 显示10条记录。
uname
系统信息。-s 内核名称(默认参数);-a 全部;-p CPU信息;-h 主机名;-r 内核发型信息;-v 内核版本信息
date
显示、设定系统时间。-u 显示格林尼洛时间UTC。MMDDhhmm 设定时间,需要管理员权限。+[%X] 设定显示格式,以下为date默认输出格式:
date+%Y年%m月%d日%A%H:%M:%S%Z
cal
显示日历
七、文件管理
一些细节
/ 目录为文件系统根目录,所有目录都是它的子目录。
绝对路径以 / 起始,相对路径以当前所在的目录起始。
目录是一种特殊类型的文件,如果没有特别指明,文件包括文件和目录。
.. 表示上一级目录,. 表示当前目录,它们是两个特殊的目录。
链接
为当前文件建立在其他路径中的访问方法。
ls [路径]
显示当前目录文件列表。
--color 不同属性以不同颜色显示(默认参数)。
-a 全部显示 -i 显示inode值 -l 详细信息。
-F 显示文件类型后缀 目录/链接@ 可执行文件 * 端口文件=管道文件。
-A 显示隐藏文件 -R 递归显示子目录文件列表 -S 按文件大小排序。
-t 按修改时间排序 -u 按访问时间排序 -d 只显示目录,不递归显示目录下的文件。
cd[目录路径]|[特殊路径]
切换目录。目录路径可以使用绝对路径或者相对路径特殊路径:
~$HOME 目录(默认值) - 上一次目录 .. 上一级目录 . 当前目录
pwd
显示当前路径。
file <文件名>
显示文件类型。-i 显示mime类型。
du [路径]
计算文件或目录空间占用。-h 人性化显示,自动以G、M、K为单位显示占用空间大小。-l 重复计算硬连接文件大小。-L 计算符号连接文件大小。-a 显示当前目录子目录中的文件。-c 显示文件数。
less <文件名>
浏览文件,使用VI和Emacs两种风格的键绑定。
touch <目标文件>
触碰,在不修改文件的前提下,更改其时间属性。通常用来创建一个空文件。
make<文件夹>
创建文件夹
-p <多级目录>按路径创建多级目录 -m<数字权限值> 设定权限
cp<源文件><目标目录|文件>
将源文件复制为目录文件,或者将源文件复制到目标目录,多个源文件使用空格分隔。
cp<源目录><目标目录>
将源目录复制到目标目录中,如果复制多个源目录,需要使用 -R 参数。
-a 相当于 -dpr参数 -d 保留链接 -f 强制复制,覆盖目标文件 -i 覆盖时询问用户 -p 保留修改时间和访问权限 -r-R 递归赋值 -l 创建链接 -v 显示过程
rm<目标目录|文件>
删除
-r -R 递归删除 -f 强制删除(无需确认,直接删除,慎用!) -i 交互式删除(询问yoghurt)
rmdir<目标目录>
删除目录时,建议使用“rm -f”命令。
mv<源文件><目标目录|文件>
相当于cp后删除源文件,也可以作为“重命名”使用。
mv<源目录><目标目录>
-r -R 递归
ln<源文件><链接>
链接
-s 符号链接 -f 强制链接,覆盖目标文件 -i 覆盖前询问用户
八、文件操作
nano
轻便文本编辑器,类似Emacs风格的键绑定。
split<源文件>[目标文件名前缀]
将源文件按一定规则分割成若干个目标文件。默认文件名前缀为x。
-<行数> 按行数分割文件 -l<行数>同上 -b<字节>按大小分割文件。可使用b、k、m做单位,默认单位为b。 -C<字节> 按大小分割文件,并尽量保持每行的完整。
cat<文件名>
输出文件内容。用空格分隔多个文件名。可以将多个文件内容链接到一起输出。使用重定向合并为一个文件。
-n 在输出中添加行号 -b 在输出中添加行号,空行不编号 -s 将两行或以上的空行,合并为一个空行
sort[-o<输出文件>][-t<分隔字符>][+<起始字段>-<结束字段>][文件]
对文本内容排序
-m 合并文件 -c 检查文件是否已按规则排序 -b 忽略行首空格字符 -u 忽略内容重复行 -f 忽略大小写 -l 忽略非打印字符 -M 作为月份比较
-d 按字典顺序排序,按照字母、数字、空格、制表符排序 -r 逆序输出
more
查看文件内容,建议使用less。
diff<文件名>
比较文件
九、权限管理
一些细节
一个文件主要包含下列属性,ls -l
- rwx rwx rwx user group date filename
其中,第一组为归属用户的权限,第二组为归属群组的权限,第三组为其他用户群组的权限。user为文件的归属用户,group 为文件的归属群组,date为日期信息,filename为文件名。
对于文件夹,必须拥有它的可执行权限,才能够使用cd命令进入该文件夹;拥有可读权限,才能够使用ls命令查看该文件夹的文件列表。root用户拥有最高权限。
可以使用3位的二进制数字来描述一组权限,某一权限对应的数字为1,则表示具有该种权限,为0,则不具有该种权限。使用二进制数字来描述一组权限,虽然非常直观,但是3组权限需要用9位数来表示,使用不够方便。因此将三组权限使用3位8进制数字来表示。他们的对应关系为:
r 100 4
w 010 2
x 001 1
将这三位8进制数字相加的结果,就可以表示改组权值的具体内容,例如:
7=4+2+1=rwx
5=4+1=rx
755=4+2+1 4+1 4+1=rwx r-x r-x
还可以使用a、u、g、o表示归属关系,使用=、+、-表示权限变化,使用r、w、x表示权限内容。
a 所有用户 u 归属用户 g 归属群组 o 其他用户
= 具有权限 + 增加权限 - 去除权限
r 可读权限 w 可写权限 x 可还行权限
例如:a+x 给所有用户增加可执行权限;go-wx 将归属群组和其他用户的可写、可执行权限去掉; u=rwx 归属用户具有可读、可写、可执行权限。
chmod<权限表达式><文件|目录>
更改文件的权限。权限的表达式可以使用三位8进制数字表示,或使用augo+-=rxw-s来表示。
-R 递归 -v 显示过程 -c 仅显示更改部分
示例:chmod -R a+x path chmod -Rv 755 path
chown<归属用户>[:归属群组]<文件|目录>
更改文件的归属用户。可以使用用户名或者UID
-R 递归 -v 显示过程 -c 仅显示更改部分
示例:chown user:admin path chwon -R user:admin path chown user path
chgrp<归属群组><文件|目录>
更改文件的归属群组,可以使用群组名或者GID
lsattr[路径]
查看文件的特殊属性。
-a 全部显示 -d 只显示目录 -R 递归
chattr+|-|=<属性><路径>
更改文件特殊属性。-R 递归 -V 显示过程。
十、压缩解压
tar -c|x|u|r|t[z|j][v] -f <归档文件>[未打包文件]
将多个文件打包为一个归档文件,可以再打包的同时进行压缩。支持的格式为tar(归档)、gz(压缩)、bz2(压缩率更高,比较耗时)。
-c 创建 -x 解包 -u 更新 -r 添加 -t 查看 -d 比较压缩包内文件和文件 -A 将tar文件添加到归档文件中
-z 使用gz压缩格式 -j 使用bz2压缩格式 -v 显示过程 -f<文件名> 归档文件的文件名 -C<解压路径>将压缩包中的文件解压到制定目录。
[未打包文件] 创建、更新时必须填写
示例: tar -zcvf xxx.tar.gz xxx/xxx1 xxx2 xxx3 多个代打包文件以空格分隔
tar -zcvf xxx.tar.gz /home/user/xxx/ 使用绝对路径打包,解包也使用绝对路径
tar -zcvf xxx.tar.gz 按相对路径解包当当前目录,或按绝对路径解包
tar -zcvf xxx.tar.gz xxx | split -b 1m 打包后,使用split分割为1m大小的多个文件
其他参数:-P 使用绝对滤镜压缩时,保留根目录 -W 校验 -p 还原文件权限 -w 询问用户 --totals 统计
-T<表达式> 处理符合条件的文件 -X<表达式> 排除符合条件的文件
zip[参数]<压缩包><源文件>
使用zip格式打包文件
-r 递归,将指定目录下的所有文件和子目录一并处理 -S 包含系统和隐藏文件 -y 直接保存符号连接,而非该连接所指向的文件
-X 不保存额外的文件属性 -m 将文件压缩并加入压缩文件后,删除源文件 -<压缩级别>1~9,数字越大,压缩率越高
-F 尝试修复已损坏的压缩文件 -T 检查备份文件内的每个文件是否正确无误 -q 不显示指令执行过程
-g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件 -u 更新压缩包内的文件 -f 更新压缩包内文件
-$ 保存第一个被压缩文件所在磁盘的卷标 -j 只保存文件名称及其内容 -D 压缩文件内不建立目录名称 ......
unzip[参数]<压缩文件>[压缩包中将被释放的文件]
解压zip压缩包文件。
7z|7za<子命令>[参数]<压缩包>[文件]
子命令:a 添加 d 删除 e 解压 x 带路径解压 l 列表查看 t 测试 u 更新
rar<子命令>[参数]<压缩包>[文件|文件列表|路径]
十一、搜索
whereis<程序名称>
查找软件的安装路径。-b 只查找二进制文件 -m 只查找帮助文件 -s 只查找源代码 -u 排除制定类型文件 -f 只显示文件名 -B<目录>在制定目录下查找二进制文件 -M<目录>在指定目录下查找帮助文件 -S<目录>在制定目录下查找源代码
locate<文件名称>
在文件索引数据库中搜索文件。-d<数据库路径> 搜索制定数据库
updatedb 更新文件索引数据库
find[路径]<表达式>
查找文件。
-name 根据文件名查找文件 -iname 根据文件名查找文件,忽略大小写 -path 根据路径查找文件 -ipath 根据路径查找文件,忽略大小写 ....
grep<字符串>|"<正则表达式>"[文件名]
十二、其他
echo<字符串>
回显。较复杂的字符串,可以使用''括起来。-n 输出内容不换行 -E 不解析脱字符 -e 解析脱字符
控制字符
| 反斜线 a 警告 b 退格 n 换行 r 回车 t 水平制表符
clear
消除屏幕
alias<输入内容><实际内容>
别名,为命令制定一个别名,以简化输入。
export<变量名称>
将变量导出为环境变量,常写变量赋值一同使用,例如:
export PATH="$PATH:xxx"
其中,$PATH表示变量PATH原值。
shutdown
关闭计算机,向跟进程init发送信号,更改runlevel为0(halt)
-h 关闭电源 -r 重启 -n 强行关机,不向init进程发送信号 -k 模拟关机,向登陆者发送关机警告 -t<秒>N秒后关机
time<时间> 定时关机 -c[说明信息] 取消关机 -f 重启时忽略检测文件系统 -F 重启时强制检测文件系统
halt
关闭计算机。调用shutdown -h,结束系统京城,同步文件系统,停止内核。
-n 不同步文件系统 -w 模拟关机,写/var/log/wtmp记录 -f 不调用shutdown,强行关机 -p 默认选项,关机时调用poweroff -i 关机前断开网络
reboot
重新启动计算机,参数与halt类似。
chroot<路径>
Change Root更改根目录,重新定义会话的运行环境。
十三、用户管理
一些细节
root用户为根用户,也就是系统管理员拥有的全部权限。一个用户只能拥有一个GID,但是还可以归属于其他附加群组。
用户管理的重要配置文件:
/etc/passwd 用户名 密码位 UID 归属 GID 姓名 $HOME 目录 登录 shell
/etc/shadwo 用户名 已加密密码 密码改动信息 密码策略
/etc/group 群组名 密码位 GID 组内用户
/etc/gshadow 群组密码相关文件,不重要
/etc/sudoers 用户名 权限定义 权限
su [用户名]
切换到其他用户,默认切换到root用户。提示密码为将切换用户密码
-f 快速切换,忽略配置文件 -l 重新登录 -m,-p 不更改环境变量
-c<命令> 切换后执行命令,并退出切换
sudo [命令]
以其它用户的身份执行命令,默认以root的身份执行。提示密码为当前用户密码
-s 切换为root shell -i 切换为 root shell ,并初始化 -u<用户名|UID> 执行命令的身份 -l 显示自己的权限
passwd [用户名]
设定用户密码
-d 清楚密码 -l 锁定用户 -e 使密码过期,在下次登录时更改密码 -S 显示密码认证信息 -x<天数> 密码过期,最大使用时间 -n<天数> 冻结密码,最小使用时间 -s 更改登录Shell -f 更改用户信息
usermod <用户名>
修改用户账号。-d<目录> 设定$HOME目录 -m 设定$HOME目录时自动建立 -s<Shell> 修改用户登录Shell -l<新用户名> 修改为新用户名 -u<UID>修改用户UID -g<群组名>修改用户归属群组
useradd<用户名>
新建用户。新建用户规则保存于 /etc/login.defs文件中。
userdel<用户名>
删除用户。-r 删除用户相关文件和目录。
finger[用户名]
显示用户信息。
十四、进程管理
进程一般分为交互进程、批处理进程和守护进程三类。守护进程总是活跃,在系统启动时通过脚本自动启动,或由root启动,通常在后台运行。一个进行可以拥有子进程。当父进程终止时,它的子进程也随之终止;而子进程终止时,父进程通常可以继续运行。
init 进程为根进程,所有进程都是它的子进程。
ps
显示进程信息,参数可省略。aux 以BSD风格显示进程 -efH 以System V风格显示进程 -e,-A 显示所有进程
a 显示终端上所有用户的进程 x 显示无终端进程 u 显示向下进程 f 树状显示 w 完整显示信息 l 显示长列表
示例:
ps alx 另一种常用输出格式
ps aux |less 将输出通过管道,使用less查看
ps aux | grep<关键字> 通过关键字查找进程
输出字段:
USER 进程所有者 PID 进程ID PPID 父进程 %CPU CPU占用率 %MEM 内存占用率 NI 进程优先级。数值越大,占用CPU时间越少 VSZ 进程虚拟大小 RSS 页面文件占用 TTY 终端ID STAT 进程状态 D 不可终端 R 正在运行,或在队列中的进程 S 处于休眠状态 T 停止或被追踪 Z 僵尸进程 ......
pstree
树状显示进程信息。-a 显示完整命令及参数 -c 重复进程分别显示 -c 显示进程ID PID -n 按PID排列进程
pgrep<进程名>
显示进程的PID。
xkill
在图形界面中点杀进程。在窗口中点击左键杀死进程,右键取消。
pkill<进程名>
结束进程族。如果结束单个进程,请用kill。
kill[信号代码]<进程PID>
根据PID向进程发信号,常用来结束进程,默认信号为-9。
top
动态、交互式进程管理器。
jobs
显示背景任务。
bg[任务编号]
将挂起的任务背景执行。
fg[任务编号]
将背景任务调到前台执行。
十五、磁盘和内存管理
Linux中,设备用/dev/目录下的文件表示。例如:/dev/hda1 第一块硬盘的第一主分区。/dev/hdb5 第二块硬盘的第一逻辑分区。
/dev/sda4 第一块SATA硬盘的第四主分区,或者扩展分区。/dev/null 黑洞设备。
free
查看内存、缓冲区、交换空间的占用。-b 以字节为单位显示数值 -k 以千字节为单位显示数值 -m 以兆字节为单位显示数值
-g 以吉字节为单位显示数值 -l 显示内存占用峰值 -o 不现实缓冲区占用 -t 统计结果
......
十六、网络和硬件管理
ifconfig
配置网路接口。-a 显示所有网路接口。ifconfig<网卡>up|down 激活|禁用网卡。
ip
配置网络。
ping<IP地址>
向目标地址发送ICMP封包,常用来测试网路。-b<广播地址>ping整个网段 -c 发送封包次数 -s<封包大小>默认为64字节。
netstat
网络连接状态。
十七、简明VIM教程
命令
使用vim编辑文件:
vi [文件名]
vim [文件名]
教学模式:vimtutor [语言]
vimtutor en。
使用Vim比较文件区别:vimdiff [文件1] [文件2] [其它文件]......
配置文件
Vim的全局配置文件为/etc/vim/vimrc,用户配置文件为~/.vimrc,“起始的行为注释行。我们提供的配置项,直接加入配置文件就可以。
可以先对Vim进行一些简单配置:
"设定文件编码
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
"开启语法加亮
syntax on
"配置风格
colorscheme pablo
"设定行距 GUI界面中生效
set linespace=4
"设定Tab键缩进的空格数
set tabstop=4
"设定编辑器将多少空格视为一个缩进
set shiftwidth=4
。。。。。。
模式介绍
Vim常见的模式有:普通模式、插入模式、命令模式以及可视模式。
Vim启动时进入普通模式,或者在其他模式下,按下Esc键,便可以回到普通模式。
按下i键,编辑器底部出现了 --插入 -- 或者 -- insert --。进入了插入模式。在普通模式下,按下:,在编辑器底部出现了一个:,进入了命令模式。
:q 这个命令是退出编辑器。