Linux 基础知识
不想看字,那就看看渣渣视频吧
点击链接,跳转观看: https://v.qq.com/x/page/m3022ziwe63.html
因为简书Markdown
编辑器不支持视频标签的样子。
基本文件和目录操作
日常文件操作
-
copy
cp
$ cp $ cp file1 file2 $ cp -r dir1 dir2
-
move and rename
mv
$ mv file ... $ mv file dir/ $ mv file1 file2 $ mv dir1 dir2
-
remove
rm
rm fileName rm -r dir
-
创建文件目录和文件
mkdir
&touch
$ mkdir dirName
-
查看文件内容
cat
&less
$ cat file # 适合比较短的文件 $ less file # 适合比较长的文件
-
查看文件类型及基本信息
file
$ file fileName $ file dirName
-
查看文件大小
du
$ du -k fileName $ du -m fileName
-
隐藏文件
.fileName
-
网络文件下载
wget
-
通配符
*
-
压缩与解压缩
tar
&unzip
$ unzip fileName.zip $ zip -r x.zip x/ $ tar zxvf xxx.tar.gz $ tar zcvf xxx.tar.gz xxx/ $ tar jxvf xxx.tar.bz $ tar jcvf xxx.tar.bz xxx/
重定向
Ref: http://happypeter.github.io/LGCB/book/05_redirection.html
三个重要的文件
Everything is a file.
文件描述符(file descriptor)
文件描述符为 0
的文件叫做 stdin
(标准输入文件),描述符为 1
的叫做 stdout
(标准输出文件),为2
的叫 stderr
(标准错误输出文件)。
系统默认情况下,我们的键盘输入都会写入 stdin 文件,而程序执行的正常输出写到 stdout 文件,报错信息写到 stderr 文件,同时这两个文件都是默认绑定显示器的,这也就是为啥我们可以在屏幕上看到程序输出和报错的信息了。
正常情况下,在一个程序执行的时候,会从键盘也就是 stdin 中读取输入,正常的输出导入到 stdout,要是执行发生了错误,报错信息流向 stdout 。但是我们也可以动手改变这三股数据流的流向,这个就是重定向。
各种重定向方法
-
标准输出重定向
>
&>>
$ cat file1 > file2 # cat输出内容重定向至file2(覆盖) $ cat file2 >> file1 # cat输出内容重定向至file1(不覆盖,叠加) $ cat file1 file2 > file3 # 两个弄成一个
-
标准错误重定向
2>
$ ls notExist 2> output.txt # 2是标准错误输出的文件描述符
-
重定向输入
$ cowsay < output.txt
-
管道
|
目的:我们希望把前一个程序的输出,直接作为后一个程序的输入来使用
Task: 把这个文件处理一下,去除里面的重复内容(使用 `uniq` 命令),只保留 txt 文件(使用 `grep` ),然后按文件名字母顺序来排序( `sort` 命令)
Ps: `tee`把数据流分成两股,一股到文件,一股还到 stdout.
权限
ref: http://happypeter.github.io/LGCB/book/06_bash_perm.html
三种权限 “读”, “写”, “执行”
Linux 是一个多用户的操作系统,也就是很多用户可能同时使用一台计算机. 对于一个特定文件,系统会为他指定一个特定的用户( user )作为它的所有者( owner )。 同时也一定会指定一个由一个或多个人组成的 group,作为这个文件的所有者组( owner group ), 严格的术语就叫组( group )。 这两类之外的其他用户归为第三类人,叫 world 。这三类人各自的权限多少是可以任意指定的, 不一定谁多谁少,当然一般来讲 owner 的权限会多一些。
```
$ ls -al .
drwxr-xr-x 4 edward edward 4096 Nov 17 22:01 ./
drwxr-xr-x 4 edward edward 4096 Nov 17 21:19 ../
-rw-r--r-- 1 edward edward 21 Nov 17 21:20 pyfile.py
drwxr-xr-x 2 edward edward 4096 Nov 17 21:09 subfiles1/
```
drwxr-xr-x
为例
第一个字符是关于“文件类型”:这一位常见的情况有,l
表示符号链接,如果我们查看的是一个目录,那这里就会显示 d
,-
表示普通文件。
接下来的九位每三位为一节,分别代表“所有者”“用户组”“其他人”的相关权限. 'r''w''x'分别代表拥有'read','write','execute'的权限,而'-'表示没有对应权限。
```
$ ls -ld dirName # 对指定文件夹查看权限
```
同样是读写执行三种权限,对于普通文件和目录代表的意义是有差异的。 用户对文件有读权限,意味着用户可以查看文件的具体内容。 对目录来说,就是可以看目录中所包含的文件名。
写权限对文件而言很好理解,就是我们可以修改里面的内容。那是不是也意味者我们可以对文件进行重命名或删除操作呢? 答案为否。这要看包含该文件的目录的权限。这就谈到了一个目录的写权限的意义,我们对于一个目录有写权限,意味着我们可以对其中包含的文件或子目录进行创建,重命名或删除(操作成功的前提是我们也同时拥有对该目录的执行权限)。
最后要谈的是执行权限(x), 我们对于一个二进制文件(例如程序的编译输出),或者是一些脚本文件,例如 shell 脚本,python ruby 等脚本,执行权限才有意义。 但是如果我们文件里存的是笔记或者是C程序的源代码,那执行权限是没有什么意义的。这就是为什么系统上的大部分普通文件,如果我们用ls -l查看一下的话,都是没有执行权限的。但是正好相对的,我们用ls -ld查看一下系统上的目录,发现基本上都是有执行权限的。 对于没有执行权限的目录,我们是不能跳转进去的,所以有没有执行权限,意味者我们能不能成功的 cd 到该目录里。
修改文件模式 chmod
```
chmod rw-rw-rw- a.txt # 错误写法
chmod 110110110 a.txt # 错误写法,用1代表“使能”,0代表“禁止”
chmod 666 a.txt # 正确写法,2进制
chmod a+x pyfile.py # all add executable attr
chmod g+x pyfile.py # group
chmod u+x pyfile.py # user(owner)
```
进程
获取进程号 ps
- 查看系统当前所有进程 `ps aux`
- `ps aux | less`
- grep 查找指定程序 `ps aux | grep vim`
杀死进程 kill
`$ kill PID`
```
$ kill PID
$ killal progName
$ kill -9 PID # 强制关闭
```
Ctrl+Alt+F2 等等可以进入其他console
后台执行 &
`$ progName &`
如果已经在前台启动,占据当前`shell`,使用`<C+z>`,可以把程序挂起,然后`bg`,`fg`可以使程序再回到前台。