ls
”列出”文件的基本命令.
-R 选项, 递归选项, ls将会以目录树的形式列出所有文件.
-S , 将会按照文件尺寸列出所有文件,
-i 选项会显示文件的inode
cat, tac
cat,是单词concatenate的缩写,把文件的内容输出到stdout.当与重定向操作符(>或>>), 一般都是用来将多个文件连接起来.
# Uses of 'cat'
cat filename # 打印出文件内容.
cat file.1 file.2 file.3 > file.123 # 把三个文件连接到一个文件中.
cat命令的 -n 选项是为了在目标文件中的所有行前边插入行号.
-b 也是用来加行号的, 但是不对空行进行编号.
-v 选项可以使用^标记法来echo出不可打印字符.
-s 选项可以把多个空行压缩成一个空行.
在一个管道中, 有一种把 stdin 重定向到一个文件中更有效的方法, 这种方法比使用cat文件的方法更高效.
cat filename | tr a-z A-Z
tr a-z A-Z < filename # 效果相同,但是处理更少,并且连管道都省略掉了.
tac命令,就是cat命令的反转,这个命令将会从文件结尾部分列出文件的内容.
rev
把每一行中的内容反转, 并且输出到 stdout 上. 这个命令与tac命令的效果是不同的, 因为它并不反转行序, 而是把每行的内容反转.
bash$ cat file1.txt
This is line 1.
This is line 2.
bash$ tac file1.txt
This is line 2.
This is line 1.
bash$ rev file1.txt
.1 enil si sihT
.2 enil si sihT
cp
文件拷贝命令. cp file1 file2 把文件 file1 拷贝到 file2 , 如果 file2 存在的话, 那么 file2 将被覆盖
-a 选项,是归档标志(目的是为了copy一个完整的目录树).
-u 是更新选项.
-r和-R选项是递归标志.
cp -u source dir/* dest dir
# 把源目录"同步"到目标目录上,
#+ 也就是拷贝所有更新的文件和之前不存在的文件.
mv
文件移动命令. 它等价于cp和rm命令的组合. 它可以把多个文件移动到目录中,甚至将目录重命名.
*当使用非交互脚本时,可以使用mv的-f(强制)选项来避免用户的输入.
bash$ mv source_directory target_directory
bash$ ls -lF target_directory
total 1
drwxrwxr-x 2 liudezhi liudezhi 1024 Aug 17 16:40 source_directory/
rm
删除(清除)一个或多个文件. -f 选项将强制删除文件, 即使这个文件是只读的. 并且可以用来避免用户输入(在非交互脚本中使用).
* rm将无法删除以破折号开头的文件.
bash$ rm -badname
rm: invalid option -- b
Try `rm --help` for more information.
* 解决这个问题的一个方法就是在要删除的文件前加上./
bash$ rm ./-badname
另一种解决的方法是在文件名前加上”–”.
bash$ rm -- -badname
当使用递归参数-r时,这个命令将会删除整个目录树. 如果不慎的使用rm -rf 的话,那么整个目录树就真的完了.
rmdir
删除目录. 但是只有这个目录中没有文件的时候 – 当然会包含”不可见的”点文件 – 这个命令才会成功.
mkdir
生成目录, 创建一个空目录.
比如, mkdir -p project/programs/December 将会创建指定的目录,即使project目录和programs目录都不存在. -p 选项将会自动产生必要的父目录, 这样也就同时创建了多个目录.
chmod
修改一个现存文件的属性.
chmod +x filename
# 使得文件"filename"对所有用户都可执行.
chmod u+s filename
# 设置"filename"文件的"suid"位.
# 这样一般用户就可以在执行"filename"的时候,拥有和文件宿主相同的权限.
# (这并不适用于shell脚本).
chmod 644 filename
# 对文件"filename"的宿主设置r/w权限.
# 对一般用户设置权限.
# (8进制模式).
chmod 1777 directory-name
# 对这个目录设置r/w和可执行权限,并开发给所有人.
# 同时设置"粘贴位".
# 这意味着,只有目录宿主,文件宿主,当然还有root可以删除这个目录中的任何特定的文件.
chattr
修改文件属性. 这个命令与上边的chmod命令项类似, 但是有不同的选项和不同的调用语法, 并且这个命令只能工作在ext2文件系统中.
chattr +i filename 将使得这个文件被标记为永远不变.这个文件将不能被修改, 连接, 或删除, 即使是root也不行. 这个文件属性只能被root设置和删除. 类似的, a 选项将会把文件标记为只能追加数据
root# chattr +i file1.txt
root# rm file1.txt
rm: remove write-protected regular file `file1.txt`?y
rm: cannot remove `file1.txt`:Operation not permitted
如果文件设置了 s (安全)属性, 那么当这个文件被删除时, 这个文件所在磁盘的块将全部被0填充.
如果文件设置了 u (不可删除)属性, 那么当这个文件被删除后, 这个文件的内容还可以被恢复(不可删除).
如果文件设置了 c (压缩)属性, 那么当这个文件在进行写操作时, 它将自动被压缩, 并且在读的时候, 自动解压.
* 使用chattr命令设置过属性的文件将不会显示在文件列表中(ls -l).
ln
创建文件链接, 前提是这个文件是存在的. “链接”就是一个文件的引用, 也就是这个文件的另一个名字. ln命令允许对同一个文件引用多个链接, 并且是避免混淆的一个很好的方法.
ln对于文件来说只不过是创建了一个引用, 一个指针而已, 因为创建出来的连接文件只有几个字节.(和windows下的快捷方式想像).
绝大多数使用ln命令时, 使用的是 -s 选项, 可以称为符号链接, 或“软”链接. 使用 -s 标志的一个优点是它可以穿越文件系统来链接目录.
例:ln -s oldfile newfile,将对之前存在的oldfile产生一个新的连接,newfile.
*如果之前newfile已经存在的话,将会产生一个错误消息.
man,info
这两个命令用来查看系统命令或安装工具的手册和信息. 当两者都可用时, info页一般会比man 页包含更多的细节描述.