Skip to content

命令行界面

Linux中的命令提示符

  • itcast: 当前登录的用户

  • @:英文at,在的意思

  • itcast-virtual-machine: 主机名

    • 主机名在/etc/hosts这个文件中
  • ~/test/course/day1:当前工作目录,~表示宿主目录(家目录或者主目录) > 可通过:echo ~或者echo $HOME查看当前用户的宿主目录

  • $:表示当前用户为普通用户,#表示当前用户为root用户

基础命令

tree命令

  • 以树状形式查看,使用该命令需要安装软件tree
shell
sudo apt-get update
sudo apt-get install tree
  • 命令使用方法

tree -- 树形结构显示当前目录下的文件信息

tree 目录 -- 树形结构显示指定目录下的文件信息

ls命令

查看指定目录下的文件信息

使用方法:

ls --显示当前目录下文件信息

ls 目录或文件名 --显示指定目录下文件信息

相关参数

  • -l:以长格式(long)显示文件和目录的列表,包括权限、大小、最后更新的时间等详细信息;
  • -a:显示所有(All)子目录和文件的信息,包括以“.”号开头的隐藏目录和隐藏文件。
  • -A:与“-a”效果差不多,只是不包括“.”和“…”这两个目录。
  • -f:直接列出结果、而不进行排序(ls默认以文件名排序),同时显示以“.”开头的隐藏文件。
  • -F:根据文件、目录等信息,给予附加数据结构,如:*:代表可执行文件;/:代表目录;=:代表socket文件;|:代表FIFO文件。
  • -i:将列出inode号码,关于inode会在以后的博文介绍。
  • -n:列出UID与GID而非使用者与群组的名称。
  • d:显示目录(directory)本身的属性,而不是显示目录中的内容。
  • -h:结合-l选项一起使用,可以以人性化的方式显示文件或目录的大小,默认的大小单位为字节(b),使用-h选项后,将显示为KB、MB等单位。
  • -R:以递归(Recursive)的方式显示指定的目录和它子目录中所有的内容。
  • -r:将排序结果反向输出,例如:原本文件名由小到大,反向则会由大到小。
  • -S:以文件大小排序,而不是用文件名排序。
  • -t:依时间排序,而不是用文件名。
  • –color=never:不要依据文件特性给予颜色显示;
  • –color=always:显示颜色
  • –color=auto:让系统自行依据设置来判断是否给予颜色(该选项为默认选项)。
  • –full-time:以完整时间模式(包含年、月、日、时、分)输出
  • –time={atime,ctime}:输出access时间或改变权限属性时间(ctime)而不是内容变更时间(mtime)
  • -a:列出当前目录下的所有文件
    • . 当前目录
    • .. 当前目录的上一级目录
    • 隐藏文件,以 . 开头的文件名,如.bashrc
    • 普通文件
  • -R:递归方式列出所有目录中的内容
  • -l:列出文件的详细信息,7部分内容
    • 文件类型 (第1个字符)
      • - : 普通文件
      • d : 目录
      • l : 符号链接,相当于windows中的快捷方式
      • s: 套接字
      • p : 管道
      • b : 块设备
      • c : 字符设备
  • 用户的操作权限 (2~10个字符)
    • 文件所有者对文件的操作权限 (2~4个字符)
    • 文件所属组用户对文件的操作权限(5~7个字符)
    • 其他人对文件的操作权限(8~10个字符)
  • 硬链接计数:
    • 对于目录来说,链接计数等于该目录下所有的目录总数(含...),但是不包含该目录的子目录下的目录文件数量,执行ls -la命令可以进行查看
    • 对于文件来说,指的是该文件所有的硬链接文件数量
  • 文件所有者: itcast
  • 文件所属组: itcast
  • 文件大小: 36
    • 如果是目录: 只表示目录大小,不包含目录中的内容,目录大小为4k
    • 如果是文件:表示文件大小
  • 文件的创建日期或最后修改时间:10月 13 11:41
  • 文件名:test.log
  • 参数之间可以结合使用:
    • ls -la : 列出当前目录下所有文件的相信信息,包括隐藏文件
    • ls -ltr: 列出当前目录下的文件,按照时间逆向排序

下图是ls -l命令截图

文件所有者,所属组,其他人的概念

cd 命令

切换目录(change directory),命令使用方式:cd + 路径

路径可以使用相对路径或者绝对路径

cd /home/itcast 绝对路径(从根目录开始) cd ./itcast/test 相对路径(从当前工作目录开始)

  • 切换到家目录(例如: /home/itcast)

    • cd

    • cd \~

    • cd /home/itcast

    • cd \$HOME

  • 临近两个目录直接切换

    • cd -
      • 如开始在: /home/itcast/test/course/day1/test目录下,执行了cd命令切换到家目录下,然后在执行cd -又回到了/home/itcast/test/course/day1/test

pwd命令

查看用户当前所处的工作目录,printf working directory

which命令

显示命令所在的目录,如which lswhich cp

touch命令

如果文件不存在,创建新文件,如果文件存在,更新文件的最后修改时间。

命令使用方式:touch 文件名

mkdir命令

创建新目录,make directory

创建方式:mkdir 目录名

如果创建多级目录需要添加参数 -p

例 在当前目录下创建目录: mkdir mydir

在宿主目录下创建多级目录: mkdir -p ~/test/hello/world/aa

rmdir命令

删除空目录,,使用方式:rmdir 目录名

rm命令

删除文件: rm 文件名

删除目录: rm -r 目录名

参数:

  • -r

  • -i:提示用户是否删除文件或目录

  • -f:强制删除

cp 命令

命令使用方式:cp 源目录或文件 目标目录或文件

  • cp 要拷贝的文件(file1) file(不存在)

    • 创建file,将file1中的内容拷贝到file
  • cp file1 file(存在)

    • file1覆盖file
  • cp file dir(存在)

    • 拷贝file到dir目录
  • cp -r dir(存在) dir1(存在)

    • 将dir目录拷贝到dir1目录中

    • 包括dir目录

  • cp -r dir(存在) dir1(不存在)

    • 创建dir1

    • 将dir中的内容拷贝到dir1中,不包括dir目录

  • cp 拷贝目录也可以用-a参数,这样可以保留被拷贝的文件的一些属性信息

mv命令

改名或者移动文件 mv file1 file2

改名

  • mv file(存在) file1(不存在)

  • mv dir(存在) dir1(不存在)

  • mv file(存在) file2(存在)

    • file文件覆盖file2文件,file改名为file2

移动()

  • mv file(文件) dir(存在目录)

    • 将file文件移动到dir中
  • mv dir(目录存在) dir1(目录存在)

    • 将dir移动到dir1中,dir就会作为dir1的子目录而存在

cat命令

将文件内容一次性输出到终端。

使用方式: cat 文件名

缺点:终端显示的内容有限,

可用于文件重定向: cat file1>file2,相当于cp file1 file2

more命令

文件内容分页显示到终端,但是只能一直向下浏览,不能回退。

使用方式:more + 文件名

相关操作:

  • 显示下一行:回车

  • 显示下一页:空格

  • 退出:q(ctrl + c)

less命令

文件内容分页显示到终端,可以自由上下浏览。

使用方式:less 文件名

相关操作:

  • 显示下一行:回车、ctrl + p、键盘向下键

  • 显示上一行:ctrl + n、键盘向上键

  • 显示下一页:空格、PageDown

  • 显示上一页:PageUp

  • 退出:q

head命令

从文件头部开始查看前n行的内容

使用方式:head -n[行数] 文件名

  • head -20 hello.txt

  • 如果没有指定行数,默认显示前10行内容

tail命令

从文件尾部向上查看最后n行的内容

使用方式:tail -n[行数] 文件名

如果没有指定行数,默认显示最后10行内容

  • 一个比较重要的应用:显示日志 : tail -f test.log
    • 一个终端tail -f test.log ,另一个终端: echo “hello world” >>test.log

软链接

软连接类似于windows下的快捷方式

如何创建软连接

  • ln -s 文件名 快捷方式的名字

    • 例如:ln -s aa aa.soft
  • 目录也可以创建软连接

    • 例如:ln -s tmp tmp.link

创建软链接应注意事项

  • ln创建软连接要用绝对路径,因为如果不使用绝对路径,一旦这个连接文件发生位置变动,就不能找到那个文件了。

  • 软连接文件的大小是: 路径+文件名的总字节数

硬链接

ln 文件名 硬链接的名字
ln test.log test.log.hard

使用硬链接应注意事项

  • 硬链接不能建在目录上

  • 硬连接对绝对路径没有要求

  • 硬连接不能跨文件系统

    • 硬链接文件和源文件的inode是相同的,文件系统的inode要求唯一,跨文件系统可能会使inode不同,所以硬链接不能跨文件系统

硬链接的本质

硬连接的本质是不同的文件名所在的inode节点是相同的,相同的inode节点指向了相同的数据块,所以他们的文件内容是一样的,文件内容会同步。

  • ls -i 文件名 ------可以查看文件的i节点

  • stat 文件名 ---可以查看i节点信息

  • 如下图,file.hard是file的硬链接,这个两个文件指向了同一个inode,同一个inode指向了相同的数据块(文件内容)。

    • 当新创建了一个文件,硬链接计数为1

    • 给文件创建了一个硬链接后,硬链接计数加1

    • 删除一个硬链接后,硬链接计数减1

    • 如果删除硬链接后,硬链接计数为0,则该文件会删除

硬链接应用场合

  • 可以起到同步文件的作用

    修改file的内容,会在其余三个硬链接文件上同步.

  • 可以起到保护文件的作用

    删除文件的时候,只要硬链接计数不为0,不会真正删除,起到保护文件的作用.

wc

显示文件行数,字节数,单词数

  • wc -l file显示文件的总行数

  • wc -c file显示文件的总字节数

  • wc -w file显示文件的总单词数

  • wc file显示文件的总行数,单词数和总字节数

whoami

显示当前登陆的用户名

find命令

按文件名查询:使用参数 -name

  • 命令:find 路径 -name "文件名"

  • 示例:find /home -name "\*.c"

按文件类型查询:使用参数 -type

  • 命令:find 路径 -type 类型

    • 类型

      • 普通文件类型用f表示而不是 -

      • d -> 目录

      • l -> 符号链接

      • b -> 块设备文件

      • c -> 字符设备文件

      • s -> socket文件

      • p -> 管道文件

  • 查找指定目录下的普通文件: find 路径 -type f

按文件大小查询:使用参数 -size

  • 命令:find 路径 -size 范围

    • 范围

      • 大于:+表示 -- +100k

      • 小于:-表示 -- -100k

      • 等于: 不需要添加符号 -- 100k

    • 大小

      • M 必须大写(10M)

      • k 必须小写(20k)

      • c 表示字节数

  • 例子: 查询目录为家目录

    • 等于100k的文件: find ~/ -size 100k

    • 大于100k的文件: find ~/ -size +100k

    • 大于50k,小于100k的文件: find ~/ -size +50k -size -100k

按文件日期

  • 创建日期:-ctime -n/+ n

    • -n: n天以内

    • +n: n天以外

  • 修改日期:-mtime -n/+n

  • 访问日期:-atime -n/+n

按深度

  • -maxdepth n(层数)

    • 搜索n层以下的目录,搜索的层数不超过n层
  • -mindepth n(层数)

    • 搜搜n层以上的目录,搜索的层数不能小于n层

高级查找

  • 例:查找指定目录下所有目录,并列出目录中文件详细信息
    • find ./ -type d -exec shell命令 {} \;
      • find ./ -type d -exec ls -l {} \;
    • find ./ -type d -ok shell命令 {} \;
      • find ./ -type d -ok ls -l {} \;
      • 注意: {}中间不能有空格
      • ok比较安全,特别是在执行rm删除文件的时候
    • find ./ -type d | xargs shell命令
      • find ./ -type d | xargs ls -l

grep命令

grep -r(有目录) “查找的内容” 搜索的路径

  • -r参数,若是目录,则可以递归搜索

  • -n参数可以显示该查找内容所在的行号

  • -i参数可以忽略大小写进行查找

  • -v参数不显示含有某字符串

  • 搜索当前目录下包含hello world字符串的文件

    • grep -r -n "hello world" ./ ------显示行号
    • grep -r -i -n "HELLO world" ./ -------忽略大小小查找

find和grep命令结合使用

先使用find命令查找文件,然后使用grep命令查找哪些文件包含某个字符串

find . -name "*.c" | xargs grep -n "main"