由于我用的是 windows,可以安装一个 WSL 安装 Ubuntu 18.04 LTS.
date
获得当前时间
echo hello
打印自己的参数 ‘hello’。
但注意到完整的一个参数间不能有空格,所以输出 ‘hello world’ 可以用
echo 'hello world'
echo "hello world"
echo hello\ world
echo 是一个程序,shell 借助环境变量来找到这个程序所在的位置。
echo $PATH
输出所有要搜素的环境变量。
which echo
输出 echo 程序的位置。
windows路径:用反斜杠,分盘
Linux路径:用斜杠,文件系统全部起源于/
路径分为相对路径、绝对路径
相对路径:方便相对调用;绝对路径:方便全局调用。
pwd
输出当前路径
cd
改变当前目录
(后面参数可以是相对路径,也可以是绝对路径。特殊地,
.
表示当前目录,..
表示父目录)
ls
列出所有文件(目录)
特殊地,~
表示用户目录文件夹
cd -
返回上一次的目录
参数
一般用 -
或 --
开头
只带一个形式,后面不接值的叫 flag
后面接=xxx
的值的叫 option
大部分程序有参数 --help
获得帮助
`ls -l`
列出详细信息
drwxrwxrwt 1 root root 512 Jul 2 16:01 tmp
第一个字母:d
表示目录,-
表示文件,l
表示链接
后面 3 * 3 的符号,每三个分别表示文件主、用户组、其他人的权限。
r
表示读。文件:看内容;目录:看目录里有哪些文件
w
表示写。文件:编辑;目录:(整个地)重命名、新建、删除文件
x
表示执行。文件:执行;目录:进入一个目录。(要进入一个目录,要求所有父目录都有x
权限)
-
表示这个权限没有
mv [old path] [new path]
移动、重命名文件
cp [old] [new]
复制
rm [path]
删除文件,不删除目录。
需要加 -r
参数进行递归删除。
rmdir [dir]
删除空目录
mkdir [dir]
创造目录
man [program]
显示文档(按 q
退出)
Ctrl + L
清空终端
< input_file > output_file
输入、输出流,默认是终端
cat [file]
输出文件内容
cat < a.txt > b.txt
“复制”文件
>>
添加
cat < a.txt >> b.txt
添加
|
管道。将左边程序的输出变成右边程序的输入。
tail -n1 [content]
输出content
的最后一行(1可以变成其他)
root 用户:用户代号0,可以干任何事。
sudo
以 root 执行命令
sys
包含计算机核心部分的一个“目录”
echo 500 > brightness
返回 Permission denied
:没有root 权限
sudo echo 500 > brightness
仍然如此。
原因是重定向的设定 echo 并不知道,这些重定向、管道是 shell 提供的,而 shell 并没有 root。
像 # echo 1 > /sys/net/ipv4_forward
可以运行的原因是它前面是 #
开头,表示当前shell已经root。
shell root 的方法是 sudo su
。但这样做比较危险
不 root shell也可以:
echo 500 1060 | sudo tee brightness
tee 把输入同时输出到文件和终端
xdg-open [file]
用相应格式打开文件
echo $SHELL
,确实输出 /bin/bash
。cd /tmp
mkdir missing
man touch
,阅读手册,大概知道它是个更新时间的东西,相当于“摸”一下这个文件但不修改。cd missing
touch semester
echo '#!/bin/sh' > semester
echo 'curl --head --silent https://missing.csail.mit.edu` >> semester
./semester
,失败。再用 ls -l semester
,发现它根本没有 x
权限man chmod
,了解它是给文件/目录加减权限的。chmod u+x semester
,即可。然后 ./semester
输出一堆信息。./semester | tail -n2 > last-modified.txt
cat last-modified.txt
cat /sys/class/power_supply/battery
capacity
就是容量吧