1. Linux 常用基础命令
-
关闭系统(root 权限):halt;
-
重启系统(root 权限):reboot;
-
立即关机:poweroff ;
-
查看用户 id:id -u,root 用户的 id 是 0;
-
查看当前 Linux 主机名:hostname;
-
查看当前用户名:whoami;
-
查看当前日期和时间:date;
-
查看当前目录下所有文件:ls;
- 显示隐藏文件:ls -a;
- 显示文件详细信息:ls -l;
- 显示文件大小:ls -h;
- 显示文件最近修改时间:ls -t;
-
显示之前所有使用过的命令:history;
- 显示出所有之前的命令之后可以使用 !编号 的形式重新运行;
-
清空屏幕:clear,也可以使用快捷键 Ctrl+L;
-
显示当前所在路径:pwd;
-
显示某一命令的可执行文件所在路径:which 命令名;
-
进入某一路径:cd 路径,直接执行 cd 则会回到当前用户的家目录;
-
统计当前目录下文件大小:du;
- 只显示文件总大小:du -s;
-
显示文件内容:cat 文件名;
- 显示文件行号:cat -n;
- cat 命令也可以同时显示多个文件内容;
-
分页显示文件内容:less;
- 退出显示:q;
- 搜索当前页内容:/;
-
显示文件头部内容:head,默认显示 10 行;
- 指定显示行数:head -n 行数;
-
显示文件尾部内容:tail,默认显示 10 行;
- 指定显示行数:tail -n 行数;
- 显示文件新增内容:tail -f;
-
创建文件夹:mkdir 文件夹名;
- 递归层级创建文件夹:mkdir -p /第一层级/第二层级/第三层级;
-
创建文件:touch 文件名;
-
复制文件:cp 文件名 想要复制到的路径;
-
如果不知道文件名可以使用 * 号匹配文件:cp *.txt 路径,则会复制所有的 txt
文件去到目标路径,cp ha* 路径 则会复制所有以 ha 开头的文件去新的路径;
-
拷贝当前目录下所有的文件:cp -r/R,会复制目录下所有文件以及子目录;
-
-
剪切文件:mv 文件名 想要移动到的路径,mv 命令也可以使用 * ;
-
删除文件:rm 文件名;
- 询问是否删除 rm -i;
- 强制删除不询问:rm -f;
- 递归删除文件夹下所有文件:rm -r;
-
查找一个文件所在路径:locate 文件名;
- 查找一个关键字都有哪些文件包含:locate 关键字;
- 此命令有一个缺陷是一个新创建的命令 24 小时之内不会被查找到;
-
查找命令:find;
- 按照文件名查找:find -name 文件名;
- 查找特定路径下是否包含文件:find /路径/路径 -name 文件名;
- 按照文件大小查找文件:find -size 文件名 +/-文件大小;
- 打印查找结果:find -name 文件名 -print;
Tips:Linux 中所有文件的参数都可以组合使用:例如 ls -alht 会显示目录下所有的隐藏文件、文件详细信息、文件大小,最后一次修改时间。
2. 用户与用户组相关命令
-
创建一个新的用户:adduser;
-
修改用户密码:passwd 用户名;
-
删除用户:deluser 用户名;
- 删除用户家目录:deluser 用户名 --remove -home;
-
查看当前用户所在群组:groups;
- 查看某一用户所在群组:groups 用户名;
-
修改用户账户信息 usermod:
- 重命名用户:usermod -l,但是用户家目录名不会改变,需要手动修改;
- 修改用户群组:usermod -g;
-
创建一个新的群组:addgroup 群组名;
-
删除一个群组:delgroup 群组名;
-
修改一个文件的所有者和群组(需要 root 权限):
-
一个文件默认属于创建者和属于创建者所在群组;
-
变更一个文件所有者:chown 变更之后的用户名 文件名
但是改变文件所有者之后文件所属的群组是不变的,需要再次变动;
-
直接改变一个文件的所属用户和群组:chgrp 新群组 文件名
递归改变一个目录下所有文件的所属用户和群组:chgrp -R 目录名;
-
3. 文件权限相关操作
当我们查看一个文件夹下所有文件的详细信息的时候:
[图片上传中...(image-7aef5f-1608262242562-2)]
- d:英语 directory 的缩写,表示“目录”。就是说这是一个目录;
- l:英语 link 的缩写,表示“链接”。就是说这是一个链接;
- r:英语 read 的缩写,表示“读”。就是说可以读这个文件;
- w:英语 write 的缩写,表示“写”。就是说可以写这个文件,也就是可以修改;
- x:英语 execute 的缩写,表示“执行,运行”。就是说可以运行这个文件。
那为什么会有好多重复的 rwx 呢?rwx 代表的就是文件的读写和执行权限,某一个文件详细信息中每一组 rwx 就代表文件的所有者和群组用户或者群组之外的用户对本文件的读写和执行权限。
[图片上传中...(image-7ba3b-1608262242561-1)]
当我们使用 ls -l 查看一个文件详细信息的时候:
[图片上传中...(image-bfb13d-1608262242561-0)]
可以看到,renamed_file 这个文件的访问权限是:
-rw-r--r--
复制代码
- 第一个短横表示这是一个普通文件。如果此处是 d,那么表示目录;如果是 l,那么表示链接等等;
- rw- 表明文件的所有者(此处是 oscar)对文件有读、写的权限,但是没有运行的权限。也很好理解,因为这是一个普通文件,默认没有可执行的属性。记住:如果有 w 权限(写的权限),那么表明也有删除此文件的权限;
- r-- 表明文件所在的群组(此处是 oscar)的其他用户(除了 oscar 之外)只可以读此文件,但不能写也不能执行;
- r-- 表示其他用户(除去 oscar 这个群组的用户)可以读此文件,但不能写也不能执行。
root 是超级管家,它有所有权限,“只有它想不到的,没有它做不到的”。它可以读、写、运行任意文件。
当我们需要修改一个文件的读写执行权限需要使用 chmod 命令,Linux 为文件的读写和执行权限分别分配了一个数字:
权限 | 数字 |
---|---|
r | 4 |
w | 2 |
x | 1 |
可以用简单的加减法来分配一个用户的权限:
- 读写和执行权限:4+2+1=7;
- 只有读写权限:4+2=6;
- 只有写和执行权限:2+1=3;
- 任何权限都没有:0+0+0=0;
- 只读:4;
- 只写:2;
- 只执行:1,
当我们希望一个文件他的所属用户可以读写和执行,同一群组内用户可以读写,其他用户可以读的时候,可以用:chmod 文件名 764;
4. 数据处理相关命令
4.1 筛选数据
-
筛选数据命令:grep 关键词 要搜索的文件:
-
查找被空格隔开的关键词,需将关键词用双引号引住:grep "hello world" 文件;
-
grep 命令默认区分大小写,忽略大小写需要加上 -i 参数:grep -i 关键词 文件;
-
如果不知道要搜的是那个文件,可以递归搜索文件夹:grep -r 关键词 文件夹;
-
搜索结果显示行号:grep -n 关键词 文件;
-
显示搜索关键词不在的行:grep -v 关键词 文件;
-
扩展正则表达式:grep -E 正则表达式 文件;
grep -E [Dd]onghaojiang file.txt # 不论大小写都会被搜索出来 grep -E [0-4] file.txt # 包含 0-4 任意数字的行都会被搜索出来 复制代码
-
有这样一个文件 name.txt,里面有 10 个人的名字,我们需要将这 10 个人的名字按照字母顺序来排序,这个时候可以使用 sort 命令。
John
Paul
Luc
Matthew
Mark
jude
Daniel
Samuel
Job
复制代码
4.2 排序数据
-
对文件内容进行排序并将结果打印:sort 文件名;
- sort 命令不会修改原来的文件,排序结果写入新的文件:sort -o 新文件名 文件名;
- sort 默认正序排序,倒序排序加上 -r 参数:sort -r 文件名;
- 随机排序,不是正序也不是倒序,混乱排序:sort -R 文件名;
- 对数字排序,sort 命令默认会将数字以字符串进行排序,比如 138 会排在 25 后面,如果想要 sort 按照数字大小进行排序可以:sort -n 文件名;
- 如果文件是一列一列的,可以用 sort -k 列数 文件名 来指定是由那一列进行排序;
- 如果文件每一列的分隔符不明确,可以用 sort -t 分隔符 -k 列数 文件名 来指定分隔符并指定要排序的列数。
-
统计文件的行数、单词数、字节数:wc 文件名;
- 只统计行数:wc -l 文件名;
- 只统计单词数:wc -w 文件名;
- 只统计字节数:wc -c 文件名;
- 只统计字符数:wc -m 文件名;
-
文件中有时候有重复的行,去除重复的行:uniq 文件名;
Tips:uniq 命令只能去除连续重复的行,并且也不会改变原文件内容。
- 将去除结果输出到新的文件中去:uniq 新文件 文件名;
- 统计每一行重复的数量:uniq -c 文件名;
- 只显示重复的行:uniq -d 文件名;
-
对文件的每一行进行剪切:cut 文件名;
Tips:cut 命令同样不会修改原文件的内容,将剪切出来的内容打印到屏幕上去。
- 保留每一行第 x 到第 x 个字符:cut -c 2-4 文件名;
5. 流、管道符、重定向
流:在计算机科学中,流是时间上可用的一系列数据元素。我们可以把流比喻成传送带上的物件,每个时间点传输一个,而不是多个打包传输。
管道:在 Linux 中可以将两个命令使用管道符 | 进行链接起来使用,第一个命令的执行结果会成为第二个命令的参数,这种特性被称为管道。
重定向:在 Linux 中,我们使用键盘等设备向终端中输入命令被称为标准输入(stdin),执行命令的结果被打印在屏幕上被称为标准输出(stdout),如果命令执行错误,打印的错误信息被称为标准错误输出(stderr)。
5.1 > 和 >> 将输出重定向到文件
先来创建一个 CSV 文件 notes.csv:
Mark,95 / 100,很不错
Matthew,30 / 100,跟平时一样水
Maria,70 / 100,有进步
Luke,54 / 100,接近平均分了
John,68 / 100,不错,但还可以更好
Samuel,100 / 100,总是那么完美
David,40 / 100,退步挺大呀
复制代码
cut 命令的高级用法
notes.csv 文件中分为三列,每列用 ,隔开:
- 学生名字
- 成绩(满分是 100 分)
- 评语
如果用 cut 命令提取第一列,可以给 cut 命令加上两个参数:
- -d 参数:d 是 delimiter 的缩写,是英语“分隔符”的意思。用于指定用什么分隔符(比如逗号、分号、双引号等等);
- -f 参数:f 是 field 的缩写,是英语“区域”的意思。表示剪切下用分隔符分隔的哪一块或哪几块区域。
notes.csv 文件是用逗号来分隔三个部分的,我们要剪切下来的是名字那一列,也就是第一部分。
网友评论