命令基础
# 基础格式
无论是什么命令,用于什么,在 linux 中, 命令有其通用的格式:
command [option(s)] [argument(s)]
,
[]
, 是可选的,
[option(s)]
,选项,可选, 控制命令的细节
[argument(s)]
, 参数,可选, 控制命令的指向目标
# 以 ls 为例,
# -al 是 options, 多个参数可以简写在,等价于 -a -l
# /home/lv 是 参数
ls -al /home/lv
# total 136
# drwx------ 18 lv lv 4096 May 14 14:57 .
# drwxr-xr-x 3 root root 4096 Jan 19 21:53 ..
# -rw------- 1 lv lv 9490 Jan 27 00:11 .bash_history
# -rw-r--r-- 1 lv lv 220 Jan 19 21:53 .bash_logout
# -rw-r--r-- 1 lv lv 3525 Jan 20 15:02 .bashrc
# drwx------ 11 lv lv 4096 Jan 19 23:09 .cache
# drwx------ 11 lv lv 4096 Jan 19 23:53 .config
# drwxr-xr-x 2 lv lv 4096 Jan 19 21:56 Desktop
# drwx------ 3 lv lv 4096 Jan 24 00:13 .docker
# drwxr-xr-x 2 lv lv 4096 Jan 19 21:56 Documents
# drwxr-xr-x 2 lv lv 4096 Jan 19 21:56 Downloads
# -rw-r--r-- 1 lv lv 5290 Jan 19 21:53 .face
# lrwxrwxrwx 1 lv lv 5 Jan 19 21:53 .face.icon -> .face
# drwx------ 4 lv lv 4096 Jan 20 15:23 .gnupg
# -rw------- 1 lv lv 40 May 14 14:48 .lesshst
# drwx------ 4 lv lv 4096 Jan 19 21:56 .local
# drwx------ 4 lv lv 4096 Jan 19 23:09 .mozilla
# drwxr-xr-x 2 lv lv 4096 Jan 19 21:56 Music
# drwxr-xr-x 2 lv lv 4096 Jan 19 21:56 Pictures
# -rw-r--r-- 1 lv lv 807 Jan 19 21:53 .profile
# drwxr-xr-x 2 lv lv 4096 Jan 19 21:56 Public
# drwxr-xr-x 3 lv lv 4096 Jan 24 01:22 python
# -rw------- 1 lv lv 7 Jan 24 00:31 .python_history
# drwx------ 2 lv lv 4096 Jan 19 21:59 .ssh
# drwxr-xr-x 2 lv lv 4096 Jan 19 21:56 Templates
# -rw-r----- 1 lv lv 5 Jan 20 14:30 .vboxclient-clipboard-tty2-control.pid
# -rw-r----- 1 lv lv 5 Jan 20 14:30 .vboxclient-draganddrop-tty2-control.pid
# -rw-r----- 1 lv lv 5 Jan 20 14:30 .vboxclient-hostversion-tty2-control.pid
# -rw-r----- 1 lv lv 5 Jan 20 14:30 .vboxclient-seamless-tty2-control.pid
# -rw-r----- 1 lv lv 5 Jan 20 14:30 .vboxclient-vmsvga-session-tty2-control.pid
# drwxr-xr-x 2 lv lv 4096 Jan 19 21:56 Videos
# -rw-r--r-- 1 lv lv 168 Jan 20 15:50 .wget-hsts
# 常见命令记录
# ls
ls - list directory contents
, 展示目录内容
ls -a
, 显示隐藏文件, linux 中隐藏文件以 . 开头
# -a, 显示隐藏文件, linux 中隐藏文件以 . 开头
ls -a /
# . bin .cache etc initrd.img jenkins lib64 media opt root sbin sys usr vmlinuz
# .. boot dev home initrd.img.old lib lost+found mnt proc run srv tmp var vmlinuz.old
ls -l
, 列表形式展示
# -l 列表形式展示
ls -al
# total 136
# drwx------ 18 lv lv 4096 May 14 15:18 .
# drwxr-xr-x 3 root root 4096 Jan 19 21:53 ..
# -rw------- 1 lv lv 9490 Jan 27 00:11 .bash_history
# -rw-r--r-- 1 lv lv 220 Jan 19 21:53 .bash_logout
# -rw-r--r-- 1 lv lv 3525 Jan 20 15:02 .bashrc
# ....
ls -lh
, 人类友好方式展示目录
# -h, 以人类友好的形式展示数据,比如 4096 会写成 4.0k,total 136K
ls -alh
# total 136K
# ...
# drwx------ 11 lv lv 4.0K Jan 19 23:53 .config
# drwxr-xr-x 2 lv lv 4.0K Jan 19 21:56 Desktop
# drwx------ 3 lv lv 4.0K Jan 24 00:13 .docker
# drwxr-xr-x 2 lv lv 4.0K Jan 19 21:56 Documents
# drwxr-xr-x 2 lv lv 4.0K Jan 19 21:56 Downloads
# -rw-r--r-- 1 lv lv 5.2K Jan 19 21:53 .face
# drwxr-xr-x 2 lv lv 4.0K Jan 19 21:56 Videos
# ...
# mkdir
mkdir - make directories
, 创建目录
mkdir test/222 -p
, 如果 test
父目录不存在,创建父目录并不会报错
# -p, 如果 `test` 父目录不存在,创建父目录并不会报错
mkdir test/222 -p
# touch
创建文件, touch test.txt
# cat
查看文件, cat test.txt
# more
查看文件, more /etc/service
退出使用q
, 空格进一页,pageup, pagedown 翻页
# cp
cp - copy files and directories
, 复制文件和目录
cp test.txt ./test/222/
复制目录,不能像复制一样,需要用到 选型 -r
,表示递归复制目录
# -r, 复制目录需要使用递归复制
cp ./test ./test222 -r
ls
# Desktop Documents Downloads ... test test222 test.txt Videos
# mv
mv - move (rename) files
, 移动或者重命名文件
mv test.txt test1.txt
, 将文件 test.txt
重命名成 test1.txt
mv test1.txt ./test222
, 将文件 test1.txt
移动到文件夹 ./test222
mv ./test222/ ./test/
, 将文件夹 ./test222/
移动到文件夹 ./test/
# rm
rm - remove files or directories
, 删除文件或目录
删除询问,每次删除都会询问是否删除
# -i 删除询问,每次删除都会询问是否删除
rm -i test2.txt
# rm: remove regular file 'test2.txt'? n
强制删除,无需询问,忽略不存在的文件
# -f
rm -f test2.txt
递归删除目录
# -r
rm -rf ./test/
常见笑话,跑路时,时常会说起的 rm -rf
# 通配符删除
rm
支持 通配符 *
。用来模糊匹配
*
,可以匹配任何以 任意内容,实例
test*
, 匹配以 test
开头的内容
*test
, 匹配以 test
结尾的内容
*test*
, 匹配包含 test
的内容
# 创建测试文件
ll | grep .txt
# 如下
# -rw-r--r-- 1 lv lv 9 May 14 16:16 2te2st22.txt
# -rw-r--r-- 1 lv lv 0 May 14 16:18 2test22.txt
# -rw-r--r-- 1 lv lv 0 May 14 16:18 2test.txt
# -rw-r--r-- 1 lv lv 0 May 14 16:18 test1.txt
# -rw-r--r-- 1 lv lv 0 May 14 16:17 test.txt
# `test*`, 匹配以 `test` 开头的txt
rm -rf test*
# 删掉 test test1
ll | grep .txt
# -rw-r--r-- 1 lv lv 9 May 14 16:16 2te2st22.txt
# -rw-r--r-- 1 lv lv 0 May 14 16:18 2test22.txt
# -rw-r--r-- 1 lv lv 0 May 14 16:18 2test.txt
# `test*`, 匹配以 `test` 结尾的txt
rm -rf *test.txt
# 删掉 2test.txt
ll | grep .txt
# -rw-r--r-- 1 lv lv 9 May 14 16:16 2te2st22.txt
# -rw-r--r-- 1 lv lv 0 May 14 16:18 2test22.txt
# `test*`, 包含 `test`的txt
rm -rf *test*
# 删掉 2test.txt
ll | grep .txt
# -rw-r--r-- 1 lv lv 9 May 14 16:16 2te2st22.txt
# which
which - locate a command
, 用于定位命令的位置
# find
find
, 用于搜索文件
支持两种搜索,一种是根据名称进行搜索,一种是根据 文件size
进行搜索
# 根据名称进行搜索
# find 起始路径 -name "文件名"
# 查询 test 相关的文件
find / -name test
# 同样支持通配符
find / -name test*
find / -name *test*
find / -name *test
# 根据 文件size 进行搜索
# find 起始路径 -size +|-n[kMG]
# 查找小于10KB的文件:
find / -size -10k
# 查找大于100MB的文件:
find / -size +100M
# 查找大于1GB的文件:
find / -size +1G
# grep
grep - print lines that match patterns
, 输出符合规律的行
grep [-n] 关键字 文件路径
,通过关键字搜索文件行,n 是行数
cat test.txt
# itheima is a brand of itcast.
# itcast stock code is 003032.
grep "itheima" test.txt
# itheima is a brand of itcast.
# wc
wc - print newline, word, and byte counts for each file
, 输出文件的行数,单词数,字节数
wc test.txt
# 2 11 59 test.txt
# -l, 行数
wc -l test.txt
# 2 test.txt
# -c, byte 数
wc -c test.txt
# 59 test.txt
# -m
# 字符数
wc -m test.txt
# 59 test.txt
# -w, 单词数
wc -w test.txt
# 11 test.txt
# 管道符
管道符的含义是:将管道符左边命令的结果,作为右边命令的输入
# echo
echo - display a line of text
,输出一行文字
echo "xxx"
输出 xxx
建议使用 双引号""
避免歧义。
# 双引号符
被 ` 包围的内容,会被作为命令执行,而非普通字符
echo pwd
# pwd
echo `pwd`
# /home/lv
# 重定向符
重定向符:>
和 >>
>
,将左侧命令的结果,覆盖写入到符号右侧指定的文件中
>>
,将左侧命令的结果,追加写入到符号右侧指定的文件中
# 输出 "hello linux " 到 itheima.txt
echo "hello linux" > itheima.txt
cat itheima.txt
# 结果如下
# hello linux
# 输出 "hello linux222" 到 itheima.txt
echo "hello linux222" > itheima.txt
cat itheima.txt
# 结果如下 , 覆盖掉 hello linux
# hello linux222
# 输出 "hello linux333" 到 itheima.txt
echo "hello linux333" >> itheima.txt
cat itheima.txt
cat itheima.txt
# 结果如下,追加写入
# hello linux222
# hello linux333
# tail
# tail [-f -num] linux文件路径
# 默认输出10行, -5 表示输出 5行
tail -5 test.txt
# 跟踪文件更新变化
tail -5f test.txt