目录
回顾:Linux 常见命令
一、创建目录 make directory (mkdir)
二、创建一个空白的文本文件 (touch)
练习
三、查看文本文件内容相关的指令(cat head tile...)
3.1 cat
3.2 head & tail
3.3 wc -l
3.4 grep
3.5 less & more
小结
四、查找文件 (find)
五、移动文件(mv)
六、复制文件(cp)
七、echo 命令
八、输入/输出重定向(redirect)
九、帮助文档 (man)
十、查看进程列表 (ps/top)
十一、查看内存 (free)
安装MySQL
我们先来回顾一下上一篇博客的主要内容,主要是以下几点:
回顾:Linux 常见命令
-
命令 + 参数列表
-
参数中常见内容:选项、带参数的选项、文件路径、其他
-
Linux 上文件系统组织
-
Linux 只有一棵树,"/" 就是根
-
任意文件对应树上的一个结点
-
文件的路径 等价于 树的路径(从根到当前结点的路径)
-
使用 "/" 作为路径分隔符
-
相对路径 vs 绝对路径
-
绝对路径:从根开始的路径,从 / 开始的路径
-
相对路径:从当前位置(working directory)出发到结点的路径
-
-
"." 代表在当前结点不动
-
".." 代表回到父结点
-
根的父结点还是根
-
接下来复习一下相关的命令及其含义:
$ clear # 清空屏幕 也可以使用快捷键 Ctrl + L
$ who
$ whoami
$ pwd # print working directory 打印当前工作目录
$ cd 某个路径 # cd change directory 前往指定目录
$ cd # 一键回家 /home/ubuntu
$ cd - # 回到刚才的工作目录
$ ls # 列出当前工作目录下的文件
$ ls 某个路径 # 列出对应路径下的文件
$ ls -al # -a 显示所有文件(包含 . 开头的文件)
# -l 列出详细信息
$ rm -rf 路径 # -r 可以删除目录 -f 不询问直接删除
# Windows 的删除只是移动到“回收站”目录下
# Linux 的删除是直接删除
接下来开始今天的学习,同样是关于 命令的认识。
一、创建目录 make directory (mkdir)
通过命令 mkdir 创建目录,更常见的用法是使用 mkdir -p 路径,二者有什么区别呢?
假设我们要创建 a/b/c/d 这样一个路径下的 d 目录:
使用命令: mkdir a/b/c/d 如果 a/b/c 存在,则创建成功;
如果 a/b/c 不存在,则创建失败。
使用命令: mkdir -p a/b/c/d 如果 a/b/c 存在,则创建成功;
如果 a/b/c 不存在,则创建 a/b/c ,同样可以创建成功。
可以在文件管理器中看到,通过 mkdir -p a/b/c/d 命令成功创建了目录:
二、创建一个空白的文本文件 (touch)
在 Linux 中 没有文件后缀名的概念,通过 touch 命令来创建文本文件:
可以看到通过 list -l 命令查看创建了一个 0 个字节名为 hello.txt 的文件,且创建时间为 17:38,呢么如果是在 hello.txt 文件已经存在的情况下继续使用 touch 命令来创建 hello.txt 文件,会是什么结果呢?
通过上图可以看到当再次创建相同文件时,会直接修改文件的最后修改时间。
如果需要在 Linux 上创建文件,可以在 Windows 上创建好,然后拖动至文件管理器中。
练习
1) 在 /home/ubuntu 先手动创建如下目录结构:
test/
├── a/
│ ├── a1/
│ │ ├── 1.txt
│ │ └── 2.txt
│ └── a2/
├── b/
│ ├── b1/
│ │ ├── 1.txt
│ │ └── 2.txt
│ └── b2/
└── c/
# -i --interactive 交互式地(每次删除之前需要输入 y 确认)
2) 使用 rm -ri 命令删除 test, 观察删除的顺序. 深度优先还是广度优先
我们先通过 mkdir - p 命令创建目录,然后通过 touch 命令 创建空白文件。
mkdir -p test/a/a1 test/a/a2 test/b/b1 test/b/b2/ test/c
touch test/a/a1/1.txt
touch test/a/a1/2.txt
touch test/b/b1/1.txt
touch test/b/b1/2.txt
注意:
1.mkdir 和 touch,都可以一次传入多个路径
2.输入命令,可以使用键盘上的 Tab 键,要求 shell 自动补全(auto completion),可以补全命令 或者 路径
3.通过键盘的 上 / 下 键翻阅历史输入
4.通过键盘的 左 / 右 键改变光标(cursor)位置,进而修改历史命令
输入 tree 命令可以查看树的结构,但是可能存在没有下载插件的情况,可以通过提示根据命令:sudo apt install tree 来下载,下载完毕后,输入命令 tree 查看。
在删除文件时,跟我们了解的树的结构相似,都是先删除树的叶子结点而不能直接删除整个树。当叶子结点删除完毕才可以删除上一层的结点。通过命令 rm -ri 来删除文件。
执行以上命令后,我们再来看一下树的结构:
可以看到整个 a 目录已经被删除。
三、查看文本文件内容相关的指令(cat head tile...)
3.1 cat
Ctrl + C 为当前正在执行程序发送一个中断信号(Interrupt Signal sigint) 意思是让这个进程赶紧中断。
cat 路径(必须一个有读权限的普通文件,最好是文本文件),当 cat 命令后跟的不是文本文件时会出现以下提示:
说明 test 是一个目录,不是所需要的文本文件。
通过 cat 命令可以查看文本文件的内容。
通过 cat -n 命令可以显示文本文件的行号。
关于 cat 命令还有一个比较有趣的点,当我们将 cat 命令倒过来输入,即输入 tac 命令时:
此时文本文件的内容也是倒着的。
cat 回车,什么路径都不跟着,实际上是标准输入中读取内容,然后输出标准输出。
那么,什么是标准输入和标准输出呢?我们举个例子看一下:
public class Cat {
public static void main(String[] args) {
if (args.length == 0) {
// System.in 系统提供的标准输入(stdin)
Scanner sca = new Scanner(System.in);
while (sca.hasNextLine()) { // Ctrl + D
String line = sca.nextLine();
// System.out 系统提供的标准输出(stdout)
System.out.println(line);
}
}
}
以上结果即表明,当我们输入 hello 时就会返回 hello ,当输入 hi 时同样返回 hi 。此时,如何推出呢?
- Ctrl + C 不让代码执行结束了,执行到哪行算哪行
- Ctrl + D 说明输入结束了,正常退出【优先】
3.2 head & tail
head(头) 和 tail (尾)1)普通文件 2)文本文件 3)有读权限
- head:只显示头几行(默认是 10 行)
- tail:只显示尾几行(默认是 10 行)
- head -n 100 路径 显示文件的前 100 行
- tail -n 20 路径 显示文件的后 20 行
- head 不带路径,读取的是标准输入
- tail 不带路径,读取的是标准输入
- head -n 读取的是标准输入,当输入两次后直接退出
- tail -n 读取的是标准输入,将后 n 行的内容输出
3.3 wc -l
wc -l 命令 可以直接查看文本文件一共有多少行。
3.4 grep
grep gnu(开源组织) rep
进行匹配输出的
1. grep 'hello world' Hello.java
读取 Hello.java 的内容,只把包含 "hello world" 的行输出到标准输出上
2. grep -i Linux Hello.java
-i --in case sensitive
读取 Hello.java 的内容,把包含 "Linux" 、 "linuX "等 内容输出到标准输出上
case 大小写
sensitive 敏感
case-sensitive 大小不敏感
in-case-sensitive 大小写不敏感
3. grep -v Linux Hello.java 输出不含 "Linux" 的内容
-v, --invert-match select non-matching lines
grep 如果不跟路径,从标准输入读取。以下示例就表示将含有 hello 的输入进行输出。
在 Ubuntu 中通过 apt 命令来打印可以安装的软件,通过 apt -list 列出。
3.5 less & more
- less 只显示一页,按 q 退出。less 往前/往后,通过 上下键控制。
- more 只显示一页,按 q 退出。more 往前,通过 上下键控制,通过空格。
- less/more 不带路径,就是标准输入
小结
cat / head / tail / grep / less / more
-
要有读权限
-
必须文本文件
四、查找文件 (find)
从 /home 开始找,找文件名中含有 .c 的文件:
find /home/ -name '*.c'
五、移动文件(mv)
mv /home/ubuntu/print-args.c /home/ubuntu/test
可以看到是将 /home/ubuntu/ 下的文件 print-args.c 移动到了 /home/ubuntu/test/ 目录下。
mv /home/ubuntu/hello.txt /home/ubuntu/word.txt
以上命令是将 /home/ubuntu/ 目录下的 hello.txt 文件 重新命名为:/home/ubuntu/ 下的 word.txt。
上图表示了将 b 目录 直接剪切在 a 目录下。
六、复制文件(cp)
cp hello.c word.c
可以看到两个文件的内容完全相同。通过 diff 命令 可以直接比较两个文件是否相同,当两个文件完全相同时不输出任何内容:
七、echo 命令
类似于 printf 。
单独使用 echo 命令时,无法识别 转义字符,因此 使用 echo -e 命令即可。还有另一种使用方法:
注意:这里只能使用双引号,不能使用单引号。
八、输入/输出重定向(redirect)
输入重定向:进程的标准输入不再是键盘,而是从一个路径对应的文件中读取内容。
$ cat -n < test/Hello.java
cat -n 还是从标准输入读取
< 文件路径 完成标准输入的重定向
cat -n 的标准输入变成了 文件 中的内容了
标准输出重定向:进程的标准输出不再是屏幕,而是一个文件路径,所有的输出都会写到该文件。
uecho "Hello" > xxx.txt
cat xxx.txt
Hello
文件如果不存在,则会创建该文件并且写入(要求是有权限)
如果文件存在
'> 路径': 覆盖原来的内容(删除文件中的原有内容,把新的内容写入)
'>> 路径': 追加模式,在原有的内容后边接着跟新内容
九、帮助文档 (man)
man 是 manual(说明手册) 的缩写,比 --help 更全的文档。
十、查看进程列表 (ps/top)
当 Linux 较为卡顿时,可以执行命令 ps 来进行定位。
十一、查看内存 (free)
安装MySQL
通过以上命令进行查找:
然后,通过以下命令进行安装:
sudo apt install mysql-server-8.0
输入命令:
ps aux | grep -i mysql
查看是否下载完毕,当显示如下图所示即安装成功。
还可以通过查看端口:
sudo netstat -nltp | grep 3306
通过命令:
sudo cat /etc/mysql/debian.cnf
查看用户名和密码。通过以下命令,输入密码后即可进行连接。
mysql -udebian-sys-maint -p
当最终显示为下图所示,表明已经成功安装了MySQL。