linux命令行简单总结

2018-10-29  本文已影响0人  啦啦哇哈哈

你好命令行

学习命令行的意义

graphical user interfaces make easy tasks easy, while command line interfaces make difficult tasks possible.

进入命令行

打开终端,终端terminal软件就是一个窗口,窗口里面看到什么是不一定的,默认情况下执行的是命令解析器,linux术语叫做shell程序。
shell就是一个程序,它接受从键盘输入的命令,然后把命令传递给操作系统去执行。我们后面要学习的各种ls\cd等等。
而终端窗口也可以执行其他程序,比如输入python,就进入了python语言的命令解析环境。control+D可以回到shell环境,control+L可以清屏。

Shell Prompt 命令提示符

shell中一直有的这段我们称为命令提示符。它由下面几个部分组成:

其它符号$啊#啊之类的意义后面会一一介绍。

Command命令

我们以删除一个目录的命令简单解析一下命令的组成部分:

man 命令可以打开一个命令的手册查看详细介绍,比如:


看到了rm命令的详细使用方法:

要查找具体某个参数的用法,就输入/参数+回车

就能定位到文档中-r第一次出现的准确的位置,查找下一处敲n即可,退出用户手册q

在文件系统跳转

文件系统树结构

Window是这样的,硬盘分区CDE,每个分区下面有文件夹,层级嵌套,每个分区下面都是类似的,有几个分区,就有几个文件系统树:


而linux也有硬盘分区,不叫CDE叫sda1,sda2......虽然是这么多分区,但是对应的文件系统树只有一棵树,那这个分区怎么对应文件系统?linux中有个挂载点的概念,比如把sda1挂载到/上,那在/目录下存放的数据,就会放在sda1这个分区,其他同理:

一棵树

上面已经说过,Linux只有一个文件系统树,我们下面明确几个概念。

绝对路径和相对路径
cd(change directory)命令的使用

操作文件和目录

常用操作:

cp的dir2如果已经存在,那就是在dir2下面复制了个dir1

补充的其他的:
1.创建隐藏文件或者隐藏目录,只要文件名以.开头即可。隐藏文件是ls看不到的,只能用ls -a
2.Linux对文件后缀不敏感;
3.查看文件用cat会比较乱,用less则是分页的,j向下滚屏,k向上滚屏。/进行字符查找,n下一处查找位置,两次小写g可以到文件头,两次大写G可以到文件尾,q退出。man的分页就用的less;
4.vim更常用;
5.通配符*

6.打包压缩,三种压缩文件。

重定向

说白了就是拐弯。先举个简单的例子,date可以查看现在的时间,在控制台输出,如果使用重定向,可以把它的输出打印到某个文件中,不会被打印在屏幕上。


下面这个是重定向了ls的信息
三个重要的文件

linux下面"everything is file",所有东西都是文件,file是file,dir也是特殊的file,我们的硬件设备,比如鼠标,光驱等等,也是被抽象成了一个个文件,放在/dev下面。可以用一个文件名打开一个文件,但是系统每打开一个文件也会给这个文件分配一个叫文件描述符的东西(file decriptor),系统中有三个文件是比较特殊的,他们是一直打开的,系统就为这三个文件分配了固定的文件描述符。

重定向的方式
管道线——|

直接把前面一个程序的输出作为后面一个程序的输入。


linux-用户和文件权限

home is writable,当前用户只在自己的主目录之下有写权限,在其他目录则没有写权限。


这里zhanglala在自己的主目录下就可以创建一个test文件:


而跳到根目录,再去执行这样的操作就是Permission Denied了:


而要创建,则需要sudo命令,要用超级用户权限:


常见的场景就是用apt-get安装程序时候,肯定不是写在用户目录下面的,这时候就要用超级用户权限了。

例如安装vim就把最后那个pakage写上vim就好了。

三种权限——rwx

对文件权限的讨论,就是讨论这三组用户对这个文件有没有rwx的权限。

文件模式——file mode

对文件权限的讨论要落脚到文件模式上。
ls加上-l参数,查看一个文件的信息会是这样的:

查看目录的这些信息ls后面要用-ld参数,那九位代表的意义有所差别。

这里做了对比:

进入vim之后,小写i进入插入模式,我们插入一段文字:


然后esc,并且大写Z两次,保存退出vim。
我们现在执行一下,发现跪了,没有权限:

查看一下:


果然没有,可以changemode一下:


现在再执行,就这样了:


所以对文件来讲,有没有x,就意味着能不能执行这个文件,而对目录来讲,则是能不能cd进去。

chmod

这个我们上面用过很多次了,不过我们是chmod +这样用的,还可以这样用(用八进制形式,图中还举出了两种错误用例):


除了直接去动那九位,还可以动ownergroup去改变权限情况,通过chown命令。

进程

获取进程号PID

linux中有个ps命令,我们用man查看一下:


报告系统上当前进程的状况。

我们这里就用一下。首先打开个vim,vim就会占据当前的shell,可以用ctrl+shift+t打开另一个新的shell,可以在上面的edit,里面的keyboard shortcuts里面设置快捷键。


查看所有进程是使用ps -aux,在新的shell里面我们查看一下(这里管道重定向到less,因为输出内容有些多,所以分页一下):
表头是这样的:

我们重点关注USER和PID。

有大量的进程,我们用/vim查找一下:

也可以直接用grep指令来查一下在shell里面输出:


补充
我们在终端中拷贝粘贴的方法是双击选中内容,ctlr + shift + cctlr + shift + vctlr + a可以光标移动到行首

这里我们看到PID之后,用kill pid的命令结束指定的进程。

然后我们切到上一个打开vim的终端去(快捷键是shift + pageup键),发现vim被终止了:

命令行还可以启动图形化的程序,比如直接输入firefox
火狐浏览器就运行了,我们可以用Alt + Tab来切换回命令行,我们回到命令行后发现,这个

shell貌似处在了阻塞状态。。被firefox给占住了。为了避免这种情况,就涉及到了下面的后台执行

后台执行

1.使用firefox之后不要立刻回车,而是空格后,再敲一个&


这样程序就自动在后台执行了,切换回终端,shell并没有被firefox占据。

2.如果说已经像刚才那样没有用&,firefox运行起来了,shell被占据了,那么就进行下面的操作:


ctrl + z,切到firefox时候,已经停止了,不能进行界面操作了。这时候再使用bg

这样就和上面使用&效果一样了,它会在后台执行。而再使用fg,就又可以让firefox占据shell,回到前台,就可以使用Ctrl + c来终止它了。
kill命令结束进程

kill指令可以用来结束进程,结束进程有不同方式,kill命令的不同形式,相当于给进程发送不同形式的信号。
ctrl + c实际上就是kill向终端发送INT中断信号,终止了一个正在运行的程序。
kill后面不加任何参数,就是kill向终端发送中执行好,如果进程还"活着",就会被终止。
上面这两个例子都是在程序正常运行时候是有效的终止手段。
而程序出现了异常(假设vim出现了异常,已经无法接受输入),不能这样去终止。就要使用其他手段,杀死进程。就是我们一开始演示打开另一个新的shell,终止vim的kill pid

而更加糟糕的一种情况是,异常程序占用了大量内存导致桌面系统直接死掉了(比如firefox卡死了,桌面动不了),无法在shell进行任何输入。此时的解决问题的方法是,linux同时运行了
7个工作台。使用Ctrl +Alt + F1就可以到达第一个工作台。 在那个工作台杀死进程,然后Ctrl + Alt + F7就可以回到那个图形化工作台。在里面登入用户名密码:


然后按照上面的方法区杀死目标进程,


需要注意的一个坑是。。这个工作台下貌似不读取右边小键盘的数字的输入,导致我在login时候密码输入都是错的,提示Unbuntu login incorrect,但是linux又不显示密码位数....卡了很久,才发现。使用字母键盘上方的数字可以解决问题。

除了kill之外,很多程序也定义了自己的退出方式,比如shell,就可以使用exit来退出,或者使用Ctrl + D快捷键。

Linux-查找

这节学习在命令行环境下如何进行搜查的操作。

locate——全局范围内定位文件

比如这里查一下fuck,发现linux里面竟然有brainfuck命名的文件夹....


locate也是支持正则表达式定位的。
locate + --regexp + 正则表达式

我们做下面的实验,有些意外:


发现定位不到我们自己创建的777.txt。为什么?就要谈到locate的底层运行原理。
locate并不是直接在File System里面去查找文件,而是在数据库里面去找匹配的文件,这也就能解释为什么Locate为什么会这么快,新的文件touch之后会隔一段时间updatedb更新数据库的数据,不过遗憾的是,updatedb往往是一天执行一次,所以才出现我们刚刚的情况。补救的办法就是手动运行一下 updatedb,不过需要sudo`,超级用户权限

这时候再locate,发现找到了~
find——目录范围内定位文件

find就是给一个目录,就把目录翻个底朝天。
find .就直接列出了当前目录的所有结构:

还可以用grep来过滤,如使用'find .|grep .txt`

还有-type参数,来筛选类型,fd分别表示文件和目录:

我们找到一个文件的目的还是要对它进行一番操作,find命令提供了一个十分强大的参数-exec,用';'做结束符。在两者之间就可以输入任意的系统命令,'{}'可以表示查找到的文件名。


这里就给查找到的所有文件执行了ls -l命令。

下面还有一个示例,我们使用grep,对查找到的文件进行字符串查找。
创建一个含有"fuck"的fuck.txt,和"FUCK"的fuck2.txt。


然后grep来找:

依次用的参数就是-print,把所在文件打出来,-n把在哪一行打出来,-i忽略大小写去查。

这样就可以在任何一个目录里面去查找字符串。

grep——字符串查找利器

上面的grep指令有一些复杂,视频教程的老师提供了自己的项目happygrep,这个看视频吧。

上一篇 下一篇

猜你喜欢

热点阅读