本文目标:
- 开始在Linux环境中工作。
- 开始使用Bash shell。
- 显示并了解一些简单的Shell命令的手册。
Linux操作系统为用户提供了访问硬件的接口。如何协调硬件组件的操作以执行诸如复制文件之类的任务就是操作系统的角色。
Linux的三个优点:
- Linux是开源软件,我们可以针对新的或特殊的硬件系统对其进行自定义,公司可以检查它的源代码。
- Linux提供了许多软件开发工具,极大地简化了软件开发。
- Linux及其提供的大多数软件都可以免费使用。
开始前,需要安装好Linux操作系统。(我用的是Ubuntu Linux服务器)
使用Linux Shell
在Linux中有一种非常方便的工作方式,即在壳层 (shell) 中输入命令。 壳层是基于文本的程序,它接受用户命令并执行相应的任务。有一些不同的壳层:Korn Shell, Bourne Shell, C Shell, Bash Shell;命令在不同类型的壳层之间并没有统一,例如Korn Shell使用"print"来打印字符串,而Bash Shell使用"echo"。
启动bash shell:点击"Applications">"Terminal Emulator";或者直接用SSH Client (Command Prompt).
列出目录和文件:
Linux中的所有数据都组织成文件 (Files),所有文件都组织成目录 (Directories)(称为文件夹)。Linux中的文件系统是由这些目录组织的树形结构。
- ls命令能列出当前目录中的所有文件和目录。
- cd命令用于将当前目录导航到另一个目录。要导航到上级目录,请键入"cd .."。
- pwd命令用于打印当前工作目录。 这是一个有用的命令,可帮助你了解你现在在Linux文件系统层次结构中所处的位置。
显示命令手册:
"man x"命令返回命令x的手册页。
目录和文件管理
Linux的文件结构以根目录 (Root directory) 开始,表示为“ /”,其中包含所有其他文件和目录。
完整路径始终以“ /”开头,并将所有目录名称从根目录到特定文件依次连接。
相对路径是相对于当前工作目录的,不以“ /”开头。
如果目录A包含另一个目录B,则A称为B的上级目录 (parent directory),而B称为A的子目录 (subdirectory)。
Shell启动后,其当前的工作目录就是主目录 (home directory)。 我们总是可以通过命令pwd获取当前的工作目录。"〜"表示用户的主目录,你可以键入"cd ~"转到主目录。
- mkdir命令用于创建目录。可以使用双引号 (" ") 来命名带有空格字符的目录。
- rmdir命令用于删除空目录。对于非空目录,我们可以使用 rm -rf 或 rm -r -f 命令删除整个目录。其中 -r 标志定义递归地向下访问任何子目录并删除所有文件和目录,-f 确保不提示您进行确认(这在目标目录中有很多文件和目录时非常方便)。
- mv (move) 命令用于重命名目录。
"-l"和"-a"为命令的标志 (flag),它会更改命令的行为。dir为命令的参数 (argument),它指定命令的目标。
如果文件具有相同的前缀,则可以使用星号(*)一次指定所有文件。
vi editor使用:
- vi file.txt 打开文档
- "I"切至insert模式,"delete"删除字母
- Esc > :wq > Enter,保存并退出
- 更多vi用法参考Basic vi Commands
文件权限
- ls -l 查看文件信息
- chmod [who][operator][permissions] filename 修改权限
- who:u, g, o, a 四种
- operator:+, -, = 三种
- permissions:r, w, x 三种
其他有用的命令
- grep 'abc' file
- cut -d, -f2 file
- diff file1 file2
- wc file
- sort file
- uniq file
- spell file
- su
- yum install prog 或 apt-get install prog
- man cmd
标准I/O,文件重定向和管道
在shell中使用命令时,shell将每个进程与一些打开的文件相关联,并通过使用被称作文件描述符的数字来引用这些打开的文件。有时命令可能会返回错误消息,错误消息存储在标准错误文件(带有文件描述符2的文件)中。
通常,当我们执行命令时,输出将打印到屏幕上。 我们可以使用文件重定向操作符>将输出重定向到文件。例如,以下命令将目录的内容存储到文件files.txt中。
$ ls -l 1> files.txt
或缩写
$ ls -l> files.txt
上述命令的结果未显示在屏幕上,而是重定向到文件files.txt。 这是创建存储Shell命令输出文件的一种非常有用的技术。如果以上命令执行了多次,则系统可能会提示“无法覆盖现有文件”。 解决此问题可以先手动删除现有文件,或使用> | 强制覆盖文件。
其他重定向运算符还有>>,<和<<。
- 运算符>>与>相同,不同之处在于它会将内容附加到文件中而不是替换内容。
- 同样,如果我们有一个接受用户输入的程序或命令,则可以由重定向操作符<将文件作为输入重定向到该程序或命令。
有时,我们想将一个程序的输出重定向为另一个程序的输入。使用管道(即“ |”符号)是一种更方便的方法(不需要中间文件),该管道将一个程序的输出直接重定向到另一个程序的输入。
$ ls -l | grep "Jan 26"
在上面的命令中,"|"符号表示管道,它将命令ls -l的输出直接重定向到grep命令的输入中。
搜寻
有时,您需要查找具有某些特征的文件或目录,例如文件名,大小,权限等。 find命令是一个非常强大的工具,可以直接在系统中或您要查找的目录中进行追溯。
find [path] [-name] [-type]
- path是你想让find开始查找的实际路径或目录
- name是要搜索的文件或目录的名称
- type(可选),-type f表示仅搜索文件,-type d表示仅搜索目录。
grep(全局正则表达式打印)用于搜索文件并返回与正则表达式中指定的模式匹配的行。
grep -E 'regular expression' filename
使用grep的最常见方法是搜索由给定单词组成的行,在这种情况下,我们不需要标志-E。在grep中使用正则表达式时,请使用-E标志。
完。