红联Linux门户
Linux帮助

Linux对于shell命令的补充说明

发布时间:2007-04-18 00:40:55来源:红联作者:exchanged
再次研究一下shell的问题,补充一些shell的命令和特殊的用法

我们真的需要知道我们正在运行那一种shell么?当然不,至少对我于我来说是不需要的,各种shell对于我来说都一样

快捷键应该记住一个ctrl+D 注销shell,相当于exit

还有一个东西要记住~的用法
普通的用法很简单
但是如果你有一个me的用户
那么~me相当于/home/me

ls的新用法
ls -R
你可以用用 他会列出目录下的所有子目录,不过小心一点,不要在超大的文件夹使用,700多行的滚屏不是很好玩,愚蠢的我曾经ls -R /usr
ls -d
显示本身目录的信息,你可以实验一下

重点:(便于理解文件的系统结构)
使用ls来显示递归和索引清单
语法 ls -i

首先我们来理解一下什么是索引节点
文件系统的每个对象都有独一无二的索引结点,注意要理解这里对象的含义,他指的并不是文件,而是指硬盘上的一个指定位置,需要明白的是可能有很多目录连接到一个索引节点上

所谓互相独立的文件,其实就是索引节点不相同的文件

mkdir新的用法
mkdir -p 路径
这个是可以用于创建父目录的mkdir用法,超级好用。

使用
ls -dl显示节点被引用了多少次
一个目录的节点被引用了多少次?这个问题实际上就是目录中非隐藏文件数+3>_<(你可以思考一下为什么,这个很有趣),另外还要注意,这里我说的是目录,不是文件。


touch命令
用来建立一个空文件
touch karon
试试看
ls -l karon
-rw-r--r-- 1 root root 0 1月 19 19:58 karon
看到没有是一个不可执行的文件,只有所在用户才能修改

echo命令
这个命令用于把数据添加到文件,它有自己的参数,并且把这些参数打印到标准输出
单独的echo命令为
echo "haha~"
haha~

代有重定向的echo命令
echo "haha~" > karon
这个命令的意思是把字符串haha~输入到karon中,如果karon不存在,那么创建他,如果他存在那么覆盖他
可以检查一下结果
ls -l karon
-rw-r--r-- 1 root root 6 1月 19 20:03 karon
看到结果变了吧

cat命令
这个命令用来提取文件中的内容到,终端上
cat karon
haha~
应该来点更复杂的比如一个比较长的文件
也可以有相同的效果,但是 要注意,终端对中文的支持不是很好,不能用来读小说>_<

cp命令新的内容

cp命令复制的文件会有不同的索引节点号,所以他们是互相独立的文件

mv新内容
mv无论是从新命名,或者是移动文件,只要是在同一文件系统下,索引节点号就不会改变

链接的概念
我们在说索引节点的时候,说过所谓的链接,这里要详细说一下
硬链接:一个索引节点可以任意数目的硬链接,这个索引节点一直存在文件系统中,直到他一个硬链接也灭有了
硬链接是工作在索引节点级别的,你可以给文件作个硬链接,但是目录不可以,包括“.”“..”“~”,还有不同的文件系统不可以建立硬链接
建立硬链接命令ln
来个例子
touch firstlink secondlink
ln firstlink secondlink
可以看一下
ls -i -d firstlink secondlink
3457416 firstlink 3457416 secondlink
看到没有 索引链接号是相同的


符号链接:(symbolic link)其实,这是一种特殊的文件类型,我们可以把他理解为window的快捷方式,他不会妨碍节点被删除,如果目标文件不存在了,那么符号连接文件仅仅是被破坏

ln命令可以带-s来建立符号连接
ln -s seconlink thirdlink
来看一下
ls -i -l *link
3457416 -rw-r--r-- 2 root root 0 1月 19 20:37 firstlink
3457416 -rw-r--r-- 2 root root 0 1月 19 20:37 secondlink
3457417 lrwxrwxrwx 1 root root 10 1月 19 20:46 thirdlink -> secondlink
注意,thirdlink -> secondlink表示,前者为后者的一个符号链接
并且符号连接文件的索引节点号不同,并且符号连接文件,可读可写可执行


再次详细解释一下符号链接
包括目录和文件都可以建立符号连接,又因为是基于路径的而不是文件节点的,所以他可以在不同的文件系统中使用,也正是这个原因,一定要用绝对路径建立符号链接,注意这里一定要用绝对路径,其实用相对路径也可以,不过我喜欢保险而且让人放心的方法,不会轻易的选择简洁,但是如果你居心叵测也同样可以把破坏,那就是把源文件换地方,不过如果你这么做的话,我建议把你拉出去人道毁灭。

删除命令的补充说明,包括rm和rmdir

rmdir 在使用的时候,如果dir中还有文件,那么是不可以的
但是你可以使用
rmdir -rf 他会把目录删掉,无论里面有任何东西
很好用的命令,但是.................也很危险(windows 条件下偶就有del+shift的不良习惯,我吃过苦头的)

现在我们来研究一下通配符。
linux内置的通配符支持叫做globbing,用这个词代表通配符支持纯粹是因为历史原因,这种因为历史原因的命名规则,很可恶。
这里来讨论一下shell对于globbing的工作模式,首先,shell会把所用的匹配的对象用空格隔开(这个过程被称为扩展),这和你手工输入全部的对象是一样的,但是如果shell找不到到的话,它会报错>_<

*和?我们就 不讨论了
[]这个其实和?的形式相同,代表一个字符,但是可以在[]内指定范围,如[1-9],[A-Za_z]很好用的东西
[!]这个和[]的用法相同,只是不一样的地方是他意思与[]正好相反
那么[,],*,?,.如何表示呢?,这里就要用到前面我们所说的扩展概念,记住这个问题的关键是,不要让shell进行扩展,shell在两种情况下不会扩展,第一是/后面的符号,第二是''里面的内容
你可以用/来表示 当然显示/的话就用//
还有一种方法是用''
当然""也可以,不过''比较保险。shell对于""还可以进行一些扩展的,而''是专门做这个的。
文章评论

共有 0 条评论