Linux 初探索
如果你是第一次接触 linux,请一边仔细阅读,一边尝试敲命令在终端内。
有一点非常重要,这章节的内容到后面会略为困难,并且 linux 知识繁杂多样。
希望你可以参考这个链接! 一些基本常识
当然,你也可以从蓝桥云课开始,不过学会 linux 的最好办法是删掉你的 windows 换一个 linux 系统当开发环境,比任何临时的训练都有效!
探索命令行
Linux 命令行中的命令使用格式都是相同的:
命令名称 参数1 参数2 参数3 ...
参数之间用任意数量的空白字符分开。关于命令行,可以先阅读一些基本常识。然后我们介绍最常用的一些命令:
- (重要)首先教一个命令
sudo su
进入 root 账户(敲完之后会让你敲当前登录账户的密码 密码敲得过程中没有 ***** 这种传统敲密码的提示 为 linux 传统艺能 其实是敲进去了),因为本身普通账户没什么权限,会出现处处的权限提示,建议直接使用 root 账户。
这里有一个彩蛋(如果你用的是 centos 的话)
当用户第一次使用 sudo 权限时 CentOS 的系统提示:
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑 (后果和风险)。
#3) 权力越大,责任越大。
2
3
4
5
6
7
ls
用于列出当前目录 (即 "文件夹") 下的所有文件 (或目录). 目录会用蓝色显示。ls -l
可以显示详细信息。pwd
能够列出当前所在的目录。cd DIR
可以切换到DIR
目录。在 Linux 中,每个目录中都至少包含两个目录:.
指向该目录自身,..
指向它的上级目录。文件系统的根是/
.touch NEWFILE
可以创建一个内容为空的新文件NEWFILE
, 若NEWFILE
已存在,其内容不会丢失。cp SOURCE DEST
可以将SOURCE
文件复制为DEST
文件;如果DEST
是一个目录,则将SOURCE
文件复制到该目录下。mv SOURCE DEST
可以将SOURCE
文件重命名为DEST
文件;如果DEST
是一个目录,则将SOURCE
文件移动到该目录下。mkdir DIR
能够创建一个DIR
目录。rm FILE
能够删除FILE
文件;如果使用-r
选项则可以递归删除一个目录。删除后的文件无法恢复,使用时请谨慎!man
可以查看命令的帮助。例如man ls
可以查看ls
命令的使用方法。灵活应用man
和互联网搜索,可以快速学习新的命令。
man
的功能不仅限于此。 man
后可以跟两个参数,可以查看不同类型的帮助 (请在互联网上搜索). 例如当你不知道 C 标准库函数 freopen
如何使用时,可以键入命令
man 3 freopen
统计代码行数
第一个例子是统计一个目录中 (包含子目录) 中的代码行数。如果想知道当前目录下究竟有多少行的代码,就可以在命令行中键入如下命令:
find . | grep '\.c$\|\.h$' | xargs wc -l
如果用 man find
查看 find
操作的功能,可以看到 find
是搜索目录中的文件。Linux 中一个点 .
始终表示 Shell 当前所在的目录,因此 find .
实际能够列出当前目录下的所有文件。如果在文件很多的地方键入 find .
, 将会看到过多的文件,此时可以按 CTRL + c
退出。
同样,用 man
查看 grep
的功能 ——"print lines matching a pattern". grep
实现了输入的过滤,我们的 grep
有一个参数,它能够匹配以 .c
或 .h
结束的文件。正则表达式是处理字符串非常强大的工具之一,每一个程序员都应该掌握其相关的知识。? 上述的 grep
命令能够提取所有 .c
和 .h
结尾的文件。
刚才的 find
和 grep
命令,都从标准输入中读取数据,并输出到标准输出。关于什么是标准输入输出,请参考这里。连接起这两个命令的关键就是管道符号 |
. 这一符号的左右都是 Shell 命令, A | B
的含义是创建两个进程 A
和 B
, 并将 A
进程的标准输出连接到 B
进程的标准输入。这样,将 find
和 grep
连接起来就能够筛选出当前目录 ( .
) 下所有以 .c
或 .h
结尾的文件。
我们最后的任务是统计这些文件所占用的总行数,此时可以用 man
查看 wc
命令。 wc
命令的 -l
选项能够计算代码的行数。 xargs
命令十分特殊,它能够将标准输入转换为参数,传送给第一个参数所指定的程序。所以,代码中的 xargs wc -l
就等价于执行 wc -l aaa.c bbb.c include/ccc.h ...
, 最终完成代码行数统计。
统计磁盘使用情况
以下命令统计 /usr/share
目录下各个目录所占用的磁盘空间:
du -sc /usr/share/* | sort -nr
du
是磁盘空间分析工具, du -sc
将目录的大小顺次输出到标准输出,继而通过管道传送给 sort
. sort
是数据排序工具,其中的选项 -n
表示按照数值进行排序,而 -r
则表示从大到小输出。 sort
可以将这些参数连写在一起。
然而我们发现, /usr/share
中的目录过多,无法在一个屏幕内显示。此时,我们可以再使用一个命令: more
或 less
.
du -sc /usr/share/* | sort -nr | more
此时将会看到输出的前几行结果。 more
工具使用空格翻页,并可以用 q
键在中途退出。 less
工具则更为强大,不仅可以向下翻页,还可以向上翻页,同样使用 q
键退出。这里还有一个关于 less 的小故事.
在 Linux 下编写 Hello World 程序
Linux 中用户的主目录是 /home/用户名称
,如果你的用户名是 user
, 你的主目录就是 /home/user
. 用户的 home
目录可以用波浪符号 ~
替代,例如临时文件目录 /home/user/Templates
可以简写为 ~/Templates
. 现在我们就可以进入主目录并编辑文件了。如果 Templates
目录不存在,可以通过 mkdir
命令创建它:
cd ~
mkdir Templates
2
创建成功后,键入
cd Templates
可以完成目录的切换。注意在输入目录名时, tab
键可以提供联想。
你感到键入困难吗?
💡 你可能会经常要在终端里输入类似于
cd AVeryVeryLongFileName
的命令,你一定觉得非常烦躁。回顾上面所说的原则之一:如果你感到有什么地方不对,就一定有什么好办法来解决。试试 tab
键吧。
Shell 中有很多这样的小技巧,你也可以使用其他的 Shell 例如 zsh, 提供更丰富好用的功能。总之,尝试和改变是最重要的。
进入正确的目录后就可以编辑文件了,开源世界中主流的两大编辑器是 vi(m)
和 emacs
, 你可以使用其中的任何一种。如果你打算使用 emacs
, 你还需要安装它
apt-get install emacs
vi
和 emacs
这两款编辑器都需要一定的时间才能上手,它们共同的特点是需要花较多的时间才能适应基本操作方式 (命令或快捷键), 但一旦熟练运用,编辑效率就比传统的编辑器快很多。
进入了正确的目录后,输入相应的命令就能够开始编辑文件。例如输入
vi hello.c
或emacs hello.c
2
就能开启一个文件编辑。例如可以键入如下代码 (对于首次使用 vi
或 emacs
的同学,键入代码可能会花去一些时间,在编辑的同时要大量查看网络上的资料):
#include <stdio.h>
int main(void) {
printf("Hello, Linux World!\n");
return 0;
}
2
3
4
5
相信你在写完代码之后苦于不知道怎么保存并退出,不用担心,这个是正常的,毕竟上面提到的两个文本编辑器都是以入门时的学习曲线极其陡峭而著称。 对于 vi (m) 风格的编辑器,你需要先按
ESC
返回 NORMAL 模式(具体处于那个模式可以观察窗口左下角,NORMAL 模式是空白的),再输入:wq
来保存并退出(注意:
是输入的一部分)(:q 仅退出
:q! 不保存退出
)
保存后就能够看到 hello.c
的内容了。终端中可以用 cat hello.c
查看代码的内容。如果要将它编译,可以使用 gcc
命令:
gcc hello.c -o hello
gcc
的 -o
选项指定了输出文件的名称,如果将 -o hello
改为 -o hi
, 将会生成名为 hi
的可执行文件。如果不使用 -o
选项,则会默认生成名为 a.out
的文件,它的含义是 assembler output. 在命令行输入
./hello
就能够运行该程序。命令中的 ./
是不能少的,点代表了当前目录,而 ./hello
则表示当前目录下的 hello
文件。与 Windows 不同,Linux 系统默认情况下并不查找当前目录,这是因为 Linux 下有大量的标准工具 (如 test
等), 很容易与用户自己编写的程序重名,不搜索当前目录消除了命令访问的歧义。