一、基本的bash shell命令

一点建议,学习的时候把命令行工具开着,随时敲,验证,别光看,没用
涉及到得命令:

命令 作用
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 -lls -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会逐条提示你是否删除目录下的子文件,但是这样带来的问题就是,当目录下有很多文件的时候,要逐条同意删除
*注意 这两个命令中的rR效果是一样的,都是递归的意思

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 (查看文件头)
headtail

这里介绍的知识一些常用的基本命令,还有很多功能没有具体介绍

推荐阅读更多精彩内容