Linux 基本的bash shell命令

文件和目录列表

  1. ls -F 区分文件和目录,目录名称后面带了(/) ,会在可执行文件后面带上(*),类似.publish.sh的文件。
  2. ls -a 显示所有文件目录,包括隐藏。
  3. ls -R 递归选项。列出了当前目录下包含的子目录中的文件。
    ls -F -R ----> ls -FR
  1. ls -l 显示附加信息。

屏幕快照

显示下述信息:

  • 文件类型:(d)开头表示目录,(-)开头表示文件,字符型文件(c),块设备(b)
  • 文件权限:r:read w:write x:execute 可执行
  • 文件的硬链接总数
  • 文件属主的用户名 zhanglinyu
  • 文件属组的组名 stafff
  • 文件大小 以字节为单位
  • 文件的上次修改时间
  • 文件名或者目录名
  1. man ls
    能看到可用来修改ls命令输出的参数。 对于其他的一些命令同样可以查看,不只是ls。
  2. 过滤输出列表
  ls src
  ls -l src //指定文件名作为过滤器

  //如果不知道确切的文件名,在过滤器中使用星号和问号被称为扩展匹配,指的是通配符进行模式匹配过程。
  ls -l sr*
  ls -l s?
  //(?)代表一个字符
  //(*)代表0个或者多个字符

  ls -l rout[er] //匹配出 routr/route  
//中括号表示一个字符位置并给出多个可能的选择。也可以指定字符范围 [a-i]/ [!a]
 

处理文件

  1. 创建文件
  touch test_one
  1. 文件复制
  cp 源对象 目标对象
  cp test_one test_two
  cp -i test_one test_two  // -i 如果后者已经存在会提示是否覆盖
  man cp可以查看cp命令的所有可用参数
  cp -R 可以用它在一条命令中递归地复制整个目录的内容
  1. 制表键自动补全 mac上的tab键同等功能。
  2. 链接文件
    链接文件是Linux文件系统的一个优势,如果需要在系统上维护同一份文件的两个或者多个副本,除了保存多份单独的物理副本之外,还可以采用保存一份物理副本和多个虚拟副本的方法。
    这种虚拟的副本就称为链接。链接是目录中指向真实位置的占位符。在Linux中有两种不同的文件链接:
  • 符号链接
    符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中的某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此内容并不相同。要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用ln命令以及-s选项来创建符号链接。
ln -s test_one s1_test_one

屏幕快照

注意:符号链接的文件大小与源文件大小不一样。因为链接文件只是指向源文件而已。内容并不同。

另一种证明链接文件是独立文件的方法是查看inode编号。文件或者目录的inode编号是用于唯一标识的数字,这个数字由内核分配给文件系统中每一个对象。查看inode编号,可以使用ls的-i参数。

   ls -i *test_one //

屏幕快照

  • 硬链接

硬件链接会创建独立的虚拟文件。其中包含了源文件的信息和位置。但它们从根本上而已是同一个文件。引用硬件链接文件等同于引用了源文件。要为一个文件创建硬件链接,原始文件必须事先存在。只不过使用ln的时候不需要加额外的参数。

ln test_one s2_test_one

屏幕快照

可以看见 硬件链接的inode编码和源文件的一样 所以其实是通一个文件。

说明:只能对处于同一个存储媒体的文件创建硬链接。要想在不同存储媒体的文件之间的文件之间创建链接,只能使用符号链接。

  1. 重命名文件(移动)
    在Linux中,重命名文件称为移动,mv命令可以将文件和目录移动到另外一个位置或重新命名。
    mv 重命名
  mv test_onea test_oneb  //重命名

只影响文件名,其他都不变。

mv 可以用来移动文件:
创建test文件,将test_oneb移动下面

  mv test_oneb ./test/  移动到当前目录下的test文件中
  mv test_oneb ./test/test_oneb_1  //移动并修改名称  改变的只是位置和名称


如上图 文件信息也不会改变
6. 删除文件

  rm -i test_one  //-i参数就是一个提示操作 bash shell没有回收站或者垃圾箱,一旦删除,就无法再找回。
  rm -f test_one //强制删除文件
  rm -rf test //递归强制删除目录

处理目录
在Linux中,有些命令(比如cp命令)对文件和目录都有效,而有些只对目录有效。

  1. 创建目录 mkdir
mkdir New_dir
ls -ld New_dir // 查看目录用 -ld 
目录长列表是以d开头,表示不是一个文件而是一个目录

批量创建目录需要加参数-p

mkdir -p New_dir/Sub_dir/Under_dir
ls -R New_dir //查看整个目录

打包文件中应用shell实例

  1. 删除目录 rmdir
  mkdir one_file
  rmdir one_file //如果one_file目录下面没有东西则可以直接删除成功。如果有东西则需要先将目录下面的文件删除,然后才能使用rmdir命令。

rmdir 没有 -i选项来询问是否删除目录。还有一种方式删除非空目录。使用rm,删除其中的文件,再删除目录本身。

rm -r New_dir 直接删除
rm -ri New_dir 询问删除
注意:对于rm命令而言,-r和-R参数的效果是一样的,-R参数同样可以递归删除目录中的文件。shell命令很少会就相同功能采用不同大小写的参数。

查看文件内容

  1. 查看文件类型

当我们在test文件里面写入 '1222ww22',执行
file test : ASCII text, with no line terminators
当我们在test文件里面写入 '我的',执行
file test : UTF-8 Unicode text, with no line terminators

  1. 查看整个文件,在Linux上有3个不同的命令可以完成这个任务
  cat test.txt //会显示里面的内容
  cat -n test.txt //会把行号也带上
  cat -b test.txt//只给有文本

cat命令

  1. more 命令
    cat 命令的主要缺陷是:一旦运行,你就无法控制后面的操作。为了解决这个问题,才有了more命令。more命令会显示文本文件的内容,但会在显示每页的数据之后停下来。

简单来说就是cat会将内容一次性显示出来,而more会进行分页。

  1. less命令
    more 命令只支持文本文件中的基本移动,如果要更多高级的功能,可以试试less命令。具体执行man less看看相关。
  2. 查看部分文件
tail test.txt //默认显示最后10行
tail -n 2 test.txt //使用-n修改 显示最后两行
tail -2 text.txt//同上

-f 参数是tail命令一个突出的特征,它允许你在其他进程使用该文件的时候查看文件的内容,tail命令会保持活跃状态,并不断显示添加到文件中的内容,这是实时监控系统日志的绝妙方式

  1. head 显示前面
head test.txt //默认显示前面10行
head -n 2 test.txt //使用-n修改 显示前面两行
head -2 text.txt//同上

文件的开头部分一般不会改的,所以不支持**-f** 特性。