一点建议,学习的时候把命令行工具开着,随时敲,验证,别光看,没用
涉及到得命令:
命令 | 作用 |
---|---|
cd |
目录 |
pwd |
显示当前所在文件的绝对路径 |
ls |
显示当前目录下的文件和目录 |
touch |
创建一个文件 |
cp |
复制文件 |
ln |
符号链接 |
mv |
从命名文件或将文件移动到另外一个位置 |
rm |
删除文件 |
mkdir |
创建目录 |
rmdir |
删除一个目录 |
file |
查看文件类型 |
cat |
查看文件内容 |
1.遍历目录
cd
进入某一目录
其后跟的参数有两种形式,绝对文件路径和相对文件路径
绝对和相对的区别就是看是否以/
开头
.
表示当前目录
..
表示当前目录的父目录
cd ..
就会返回当前目录的父目录
pwd
显示当前所在文件的绝对路径
2.文件和目录列表
ls
显示当前目录下的文件和目录
ls
后面可以跟多个参数,分别代表不同的操作
参数 | 作用 |
---|---|
-F |
可以区分文件和目录 |
-a |
显示隐藏文件 |
-R |
递归显示当前目录下的子目录中的文件 |
-l |
以列表的形式显示子文件(会附带一些文件的信息) |
*注意:ls
后跟的参数不一定是一个,可以同时跟多个参数
例如:ls -a -l
和ls -al
表示的是一样的意思,以列表形式显示文件,并同时显示隐藏文件
ls -l
后面还可以跟参数,用于过滤输出列表
代码 | 作用 |
---|---|
ls -l my_dir |
匹配名字是my_dir的文件 |
ls -l my_?ir |
? 替代任意位置的单个字符 |
ls -l my_* |
* 匹配零个或多个字符(* 也可以放在中间,例如ls -l my_*r ) |
ls -l my_[abcd]ir |
[] 匹配固定位置中出现的字符([] 中可以用范围标示,例如ls -l my_[a-z]ir ) |
ls -l my_[!a]ir |
! 去除给位置不需要的内容 |
列出的只是简单常用的,还有很多参数没有列出
3.处理文件
touch
创建一个文件,该文件是一个空文件,大小是0
例: touch test_one
cp
复制文件 后面会跟两个参数——源对象和目标对象
例:cp test_one test_two
复制后的文件名字是test_two
如果单纯写cp test_one test_two
可能会覆盖原来的test_two文件,这时候可以加参数-i
例:cp -i test_one test_two
这样就会弹出选项,询问你是否覆盖已有的test_two文件
第二个参数还可以跟一个路径名
例:cp -i test_one ~/Desktop/shell学习/
会在指定的文件下复制一个名字为test_one的文件
注意路径最后的/
表示shell学习是一个目录,缺失/
会产生不必要的错误
另外这个路径也可以使用相对路径,不是一定要绝对路径
将指定路径的文件复制到当前目录下,这时候就用到了前面提到的.
例:cp -i ~/Desktop/shell学习/test_one .
将test_one复制到当前目录下
递归复制整个目录下的所有内容
例:cp -R ~/Desktop/shell学习/ ~/Desktop/shell学习2
将shell学习中的所有文件都复制到了shell学习2目录下
*注意 cp
命令也支持通配符? *
等
*注意 使用命令行工具的时候使用tab键进行自动补全
*注意 使用命令行工具的时候使用上下键进行查找已经输入过得命令语句
文件链接,方便在系统上维护同一个文件的多个副本,有两种方式:
符号链接 ln -s test_one sl_test_one
下面是操作结果
➜ shell学习 ls
test_one test_two
➜ shell学习 ln -s test_one sl_test_one
➜ shell学习 ls -l
total 8
lrwxr-xr-x 1 musong staff 8 8 8 14:55 sl_test_one -> test_one
-rw-r--r-- 1 musong staff 0 8 8 11:59 test_one
-rw-r--r-- 1 musong staff 0 8 8 11:59 test_two
产生的是一个实实在在的文件sl_test_one,当你打开sl_test_one文件的时候,实际打开的是test_one文件,但是sl_test_one和test_one是两个不同的文件
使用命令ls -i *test*
可以查看文件在inode编号,不同的文件编号是不同的
➜ shell学习 ls -i *test*
11296164 sl_test_one 11292136 test_one 11292173 test_two
硬链接 ln test_one sl_test_one1
查看生成的sl_test_one1文件的inode编号
➜ shell学习 ls -i *test*
11296164 sl_test_one 11292136 sl_test_one1 11292136 test_one 11292173 test_two
发现sl_test_one1和test_one的编号是相同的,这说明硬链接其实是同一个文件
*注意 我们一般不要cp
连接
mv
从命名文件或将文件移动到另外一个位置
例: mv test_two test_three
将文件test_two改名为test_three
mv test_three ~/Desktop/shell学习2
将文件test_three移到shell学习2目录下
承接上面的例子
mv test_three ~/Desktop/shell学习/test_two
(注意:该操作是在shell学习2目录下)将shell学习2目录下的test_three文件移回shell学习目录同时将文件名字改为test_two
*注意 在mv
命令中也可插入-i
参数,用来判断相同名字文件是否存在
*注意 mv
的第一个参数也可以是路径
rm
删除文件
例:rm test_two
删除test_two文件
*注意 rm
命令中也可插入-i
参数,用来提出是否删除的警告
*注意 rm
命令中也可使用通配符? *
等同时删除多个数据
*注意 bash shell不存在回收站之类的东西,删除则彻底删除
4.处理目录
创建目录 mkdir
例:mkdir dir1
创建一个目录dir1
同时创建多个目录层级要用参数 -p
例:mkdir -p dir2/sub_dir1/sub_sub_dir1
*注意 可以用ls -R
查看目录层级关系
删除目录 rmdir
例:rmdir dir1
删除一个目录dir1
*注意 rmdir
只能删除空目录,当目录中有文件的时候,上面的命令是不会起作用的
rmdir -rf dir1
删除一个目录以及目录中的所有文件
*注意 该条命令是很危险的,该删除没有任何提示
rmdir -ir dir1
删除一个目录以及目录中的所有文件
*注意 -ir
和-fr
命令的不同是-ir
会逐条提示你是否删除目录下的子文件,但是这样带来的问题就是,当目录下有很多文件的时候,要逐条同意删除
*注意 这两个命令中的r
和R
效果是一样的,都是递归的意思
5.查看文件内容
查看文件类型 file
例:file dir2
查看dir2的文件类型(该命令适用于文件和目录)
查看文件内容 cat
例:cat 文本文件.rtf
查看名字为文本文件.rtf文本的内容
例:cat -n 文本文件.rtf
查看名字为文本文件.rtf文本的内容,并为所有行加上行号
例:cat -d 文本文件.rtf
查看名字为文本文件.rtf文本的内容,并为所有文本行加上行号
more 命令 查看大型文件
和cat
命令比的好处就是more
命令支持通过回车键或者空格键逐行查看,而cat
命令不支持该功能
*注意 退出按q
键
less 命令 查看大型文件
less
命令是more
的升级版,提供更多的命令集,具体的命令集自行了解
*注意 可以用man less
命令查看具体命令集
*注意 man
命令查看各种shell命令的详细说明
查看部分文件 tail
(查看文件尾)
例:tail 文本文件.rtf
查看最后10行文件内容
*注意 可以通过参数-n
修改显示的行数,tail -n 2 文本文件.rtf
显示最后两行内容
*注意 可以在-
之后直接接数字,省略n
,上面的语句等同于tail -2 文本文件.rtf
查看部分文件 head
(查看文件头)
head
同tail
这里介绍的知识一些常用的基本命令,还有很多功能没有具体介绍