【Linux系统】常用命令:基础操作、文件目录

现如今各种场合都有使用各种 Linux 发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,对于一个开发人员来说,Linux的学习是必不可少的,对于简单操作Linux系统更是必备的技能,对于Linux系统的重要性在这里不多赘述。于是我在学习过程中,整理了一系列Linux常用命令,文章内容收集整理于网络,相关代码都是经过自己实现验证的,众所周知,Linux系统的相关命令是数不胜数的,学完以至于完全记住是很难的,在这里只是整理一部分常用、实用、后端开发人员必备的命令,当然,个人感觉这些命令不需要刻意去记忆,而是在反复的使用过程中达到孰能生巧的,所以本系列文章目的主要用于方便自己后期的查阅与复习,希望可以帮助到你!

学习Linux系统,那么常用的命令则是重中之重,尤其是对于后端开发人员来说,是必备技能之一,当然对于运维人员来说只会基本命令是不够的。在学习使用常用命令之前首先了解一下预备知识。

0.预备知识

Shell

Shell 这个单词的原意是“外壳”,跟 kernel(内核)相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。

  • Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境( command line interface ,简写为 CLI )。 Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。
  • Shell 是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用 Shell 命令写出各种小程序,又称为 Shell 脚本。这些脚本都通过 Shell 的解释执行,而不通过编译。
  • Shell 是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能。

 

Shell 有很多种,只要能给用户提供命令行环境的程序,都可以看作是 Shell

历史上,主要的 Shell 有下面这些:

  • Bourne Shell(sh)
  • Bourne Again shell(bash)
  • C Shell(csh)
  • TENEX C Shell(tcsh)
  • Korn shell(ksh)
  • Z Shell(zsh)
  • Friendly Interactive Shell(fish)

其中 Bash 是目前最常用的 ShellMacOS 中的默认 Shell 就是 Bash

通过执行 echo $SHELL 命令可以查看到当前正在使用的 Shell 。还可以通过 cat /etc/shells 查看当前系统安装的所有 Shell 种类。

注意:在Linux中命令严格区分大小写!!!

 

命令行提示符

进入命令行环境以后,用户会看到 Shell 的提示符。提示符往往是一串前缀,最后以一个美元符号 $# 结尾,用户可以在这个符号后面输入各种命令。

执行一个简单的命令 pwd

[root@localhost ~]# pwd
/root

命令解析:

  • root:表示用户名;
  • localhost:表示主机名;
  • ~:表示目前所在目录为家目录,其中 root 用户的家目录是 /root 普通用户的家目录在 /home 下;
  • #:指示你所具有的权限( root 用户为 # ,普通用户为 $ )。
  • 执行 whoami 命令可以查看当前用户名;
  • 执行 hostname 命令可以查看当前主机名;

关于如何创建、切换、删除用户,在后面的用户与权限会具体讲解,这里先使用 root 用户进行演示。

[备注] root 是超级用户,具备操作系统的一切权限。

命令格式

command parameters(命令 参数)
命令  -选项  参数    如:  ls -l /usr

长短参数

  • 单个参数:ls -a(a 是英文 all 的缩写,表示“全部”)
  • 多个参数:ls -al(全部文件 + 列表形式展示)
  • 单个长参数:ls --all
  • 多个长参数:ls --reverse --all
  • 长短混合参数:ls --all -l

参数值

  • 短参数:command -p 10(例如:ssh root@121.42.11.34 -p 22)
  • 长参数:command --paramters=10(例如:ssh root@121.42.11.34 --port=22)

通配符

shell的内置功能

通配符通常用于匹配文件名。

符号

意义

*

代表0 个到无穷多个任意字符

?

代表一定有一任意字符

[]

同样代表一定有一个在括号内的字符(非任意字符)。例如 abcd 代表一定有一个字符,可能是 a, b, c, d 这四个任何一个

[-]​

若有减号在中括号内时,代表在编码顺序内的所有字符。例如 0-9 代表0到9 之间的所有数字,因为数字是连续的!

^

若中括号内的第一个字符为指数符号(^),那表示取反,例如^abc表示除了a,b,c之外一定有一个字符

{str1,str2,…}

匹配sr1或str2(或更多)其一字符串

 

快捷方式

在开始学习 Linux 命令之前,有这么一些快捷方式,是必须要提前掌握的,它将贯穿整个 Linux 使用生涯。

  • 通过上下方向键 ↑ ↓ 来调取过往执行过的 Linux 命令;
  • 命令或参数仅需输入前几位就可以用 Tab 键补全;
  • Ctrl + R :用于查找使用过的命令(history 命令用于列出之前使用过的所有命令,然后输入 ! 命令加上编号( !2 )就可以直接执行该历史命令);
  • Ctrl + L:清除屏幕并将当前行移到页面顶部;
  • Ctrl + C:中止当前正在执行的命令;
  • Ctrl + U:从光标位置剪切到行首;
  • Ctrl + K:从光标位置剪切到行尾;
  • Ctrl + W:剪切光标左侧的一个单词;
  • Ctrl + Y:粘贴 Ctrl + U | K | Y 剪切的命令;
  • Ctrl + A:光标跳到命令行的开头;
  • Ctrl + E:光标跳到命令行的结尾;
  • Ctrl + D:关闭 Shell 会话;

1.查看路径命令

pwd

显示当前工作目录的路径。

which

查看命令的可执行文件所在路径, Linux 下,每一条命令其实都对应一个可执行程序,在终端中输入命令,按回车的时候,就是执行了对应的那个程序, which 命令本身对应的程序也存在于 Linux 中。

总的来说一个命令就是一个可执行程序。

[root@localhost ~]# pwd
/root
[root@localhost ~]# which python
/usr/bin/python

 

2.浏览和切换目录

ls

列出文件和目录,它是 Linux 最常用的命令之一。

命令格式: ls [OPTION]... [FILE]...

【常用参数】

  • -a 显示所有文件和目录包括隐藏的:linux '.'(点)开头的文件默认是隐藏的,-a可以查询所有的文件
  • -l 显示详细列表:它展示了权限,属主,属组,大小,时间,文件名称
  • -h 适合人类阅读的
  • -t 按文件最近一次修改时间排序
  • -i 显示文件的 inodeinode 是文件内容的标识)
  • -F 以"/"结尾的方式展示文件夹
  • -r 倒叙展示,默认的顺序是(a,b,c,d)正序这样展示
  • -R ()递归展示子目录
  • -lS 按照文件大小降序显示
  • -g 不输出所有者(属主)信息
  • -lG 隐藏所有组(属组)信息
  • -li 显示文件的索引号
  • -lt 按照修改时间排序(倒序)
  • --version
    [root@localhost ~]# ls --version
    ls (GNU coreutils) 8.22
    Copyright (C) 2013 Free Software Foundation, Inc.
    许可证:GPLv3+:GNU 通用公共许可证第3 版或更新版本<http://gnu.org/licenses/gpl.html>。
    本软件是自由软件:您可以自由修改和重新发布它。
    在法律范围内没有其他保证。
    
    由Richard M. Stallman 和David MacKenzie 编写。
    

cd

cd 是英语 change directory 的缩写,表示切换目录。

cd / --> 跳转到根目录
cd ~ --> 跳转到家目录
cd .. --> 跳转到上级目录
cd ./home --> 跳转到当前目录的home目录下
cd /home/lion --> 跳转到根目录下的home目录下的lion目录
cd --> 不添加任何参数,也是回到家目录

[注意] 输入cd /ho + 单次 tab 键会自动补全路径 + 两次 tab 键会列出所有可能的目录列表。

du

列举目录大小信息。

【常用参数】

  • -h 适合人类阅读的;
  • -a 同时列举出目录下文件的大小信息;
  • -s 只显示总计大小,不显示具体信息。

3.浏览和创建文件

cat

比较官方的说法是该命令用于链接文件并打印到标准输出设备上。这个文本输出命令可以用来查看文件内容,创建内容等

命令格式 : cat [选项]... [文件]...

一次性显示文件所有内容,更适合查看小的文件。

【常用参数】

  • -n 查看并显示行号
  • cat 创建一个空文件 b
    [root@localhost ~]# ls
    anaconda-ks.cfg
    [root@localhost ~]# cat >b <<EOF
    > EOF
    [root@localhost ~]# ls
    anaconda-ks.cfg  b
    [root@localhost ~]# 
    
  • cat 清空文件内容
    [root@localhost ~]# ls
    a  anaconda-ks.cfg  a.txt  b
    [root@localhost ~]# cat a.txt
    asfdasdfsfsfs
    [root@localhost ~]# cat >a.txt<<EOF
    > EOF
    [root@localhost ~]# cat a.txt 
    [root@localhost ~]# 
    
  • cat 写入内容(如果原来有内容将被覆盖)
    [root@localhost ~]# cat >a<<EOF
    > THIS IS MY WEBSITE
    > WWW.IMYJS.CN
    > HELLO!
    > EOF
    [root@localhost ~]# cat a
    THIS IS MY WEBSITE
    WWW.IMYJS.CN
    HELLO!
    [root@localhost ~]# 
    
  • cat 同时显示多个文件内容
    [root@localhost ~]# ls
    a  anaconda-ks.cfg  a.txt  b
    [root@localhost ~]# cat a
    THIS IS MY WEBSITE
    [root@localhost ~]# cat b
    WWW.IMYJS.CN
    [root@localhost ~]# cat a b
    THIS IS MY WEBSITE
    WWW.IMYJS.CN
    [root@localhost ~]# 
    
  • 覆盖内容
    [root@localhost ~]# ls
    a  anaconda-ks.cfg  a.txt  b
    [root@localhost ~]# cat a
    THIS IS MY WEBSITE
    [root@localhost ~]# cat b
    WWW.IMYJS.CN
    [root@localhost ~]# cat a > b
    [root@localhost ~]# cat b
    THIS IS MY WEBSITE
    
  • 追加内容 可以看到用了连个>以后内容是追加的
  • cat --help
    [root@localhost ~]# cat --help
    用法:cat [选项]... [文件]...
    将[文件]或标准输入组合输出到标准输出。
    
      -A, --show-all           等于-vET
      -b, --number-nonblank    对非空输出行编号
      -e                       等于-vE
      -E, --show-ends          在每行结束处显示"$"
      -n, --number             对输出的所有行编号
      -s, --squeeze-blank      不输出多行空行
      -t                       与-vT 等价
      -T, --show-tabs          将跳格字符显示为^I
      -u                       (被忽略)
      -v, --show-nonprinting   使用^ 和M- 引用,除了LFD和 TAB 之外
          --help            显示此帮助信息并退出
          --version         显示版本信息并退出
    
    如果没有指定文件,或者文件为"-",则从标准输入读取。
    
    示例:
      cat f - g  先输出f 的内容,然后输出标准输入的内容,最后输出g 的内容。
      cat        将标准输入的内容复制到标准输出。
    
    GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
    请向<http://translationproject.org/team/zh_CN.html> 报告cat 的翻译错误
    要获取完整文档,请运行:info coreutils 'cat invocation'
    [root@localhost ~]# 
    

less

分页显示文件内容,更适合查看大的文件。

less cloud-init.log

【快捷操作】

  • 空格键:前进一页(一个屏幕);
  • b 键:后退一页;
  • 回车键:前进一行;
  • y 键:后退一行;
  • 上下键:回退或前进一行;
  • d 键:前进半页;
  • u 键:后退半页;
  • q 键:停止读取文件,中止 less 命令;
  • = 键:显示当前页面的内容是文件中的第几行到第几行以及一些其它关于本页内容的详细信息;
  • h 键:显示帮助文档;
  • / 键:进入搜索模式后,按 n 键跳到一个符合项目,按 N 键跳到上一个符合项目,同时也可以输入正则表达式匹配。

显示文件的开头几行(默认是10行)

head cloud-init.log

【参数】

  • -n 指定行数 head cloud-init.log -n 2

tail

显示文件的结尾几行(默认是10行)

tail cloud-init.log

【参数】

  • -n 指定行数 tail cloud-init.log -n 2
  • -f 会每过1秒检查下文件是否有更新内容,也可以用 -s 参数指定间隔时间 tail -f -s 4 xxx.log

touch

创建一个文件

touch new_file

mkdir

创建一个目录

mkdir new_folder

【常用参数】

  • -p 递归的创建目录结构 mkdir -p one/two/three

4.文件的复制和移动

cp

拷贝文件和目录

cp file file_copy --> file 是目标文件,file_copy 是拷贝出来的文件
cp file one --> 把 file 文件拷贝到 one 目录下,并且文件名依然为 file
cp file one/file_copy --> 把 file 文件拷贝到 one 目录下,文件名为file_copy
cp *.txt folder --> 把当前目录下所有 txt 文件拷贝到 folder 目录下

【常用参数】

  • -r 递归的拷贝,常用来拷贝一整个目录

mv

移动(重命名)文件或目录,与cp命令用法相似。

mv file one --> 将 file 文件移动到 one 目录下
mv new_folder one --> 将 new_folder 文件夹移动到one目录下
mv *.txt folder --> 把当前目录下所有 txt 文件移动到 folder 目录下
mv file new_file --> file 文件重命名为 new_file

5.文件的删除和链接

rm

删除文件和目录,由于 Linux 下没有回收站,一旦删除非常难恢复,因此需要谨慎操作!

rm new_file  --> 删除 new_file 文件
rm f1 f2 f3  --> 同时删除 f1 f2 f3 3个文件

【常用参数】

  • -i 向用户确认是否删除;
  • -f 文件强制删除;
  • -r 递归删除文件夹,著名的删除操作 rm -rf

ln

英文 Link 的缩写,表示创建链接。

学习创建链接之前,首先要理解链接是什么,我们先来看看 Linux 的文件是如何存储的:

Linux 文件的存储方式分为3个部分,文件名、文件内容以及权限,其中文件名的列表是存储在硬盘的其它地方和文件内容是分开存放的,每个文件名通过 inode 标识绑定到文件内容。

Linux 下有两种链接类型:硬链接和软链接。

硬链接

使链接的两个文件共享同样文件内容,就是同样的 inode ,一旦文件1和文件2之间有了硬链接,那么修改任何一个文件,修改的都是同一块内容。

硬链接的缺点是,只能创建指向文件的硬链接,不能创建指向目录的(其实也可以,但比较复杂)而软链接都可以,因此软链接使用更加广泛。

ln file1 file2  --> 创建 file2 为 file1 的硬链接

示例:

[root@localhost ~]# ls
a  a_copy  anaconda-ks.cfg  a.txt  b  c  web.xml  zz
[root@localhost ~]# cat zz/t.txt 
this is a T.txt
[root@localhost ~]# ln T zz/t.txt 
ln: failed to access "T": 没有那个文件或目录
[root@localhost ~]# touch T
[root@localhost ~]# ls
a  a_copy  anaconda-ks.cfg  a.txt  b  c  T  web.xml  zz
[root@localhost ~]# ln T zz/t.txt 
ln: 无法创建硬链接"zz/t.txt": 文件已存在
[root@localhost ~]# ln zz/t.txt TT
[root@localhost ~]# ls
a  a_copy  anaconda-ks.cfg  a.txt  b  c  T  TT  web.xml  zz
[root@localhost ~]# cat TT
this is a T.txt
[root@localhost ~]# 

注意:

  • 第一个参数文件file1为需要被创建链接的文件,必须保证其存在。
  • 第二个参数文件file2为新建的链接文件可视为快捷方式,必须保证其不存在,会自动创建。

如果我们用 rm file1 来删除 file1 ,对 file2 没有什么影响,对于硬链接来说,删除任意一方的文件,共同指向的文件内容并不会从硬盘上删除。只有同时删除了 file1file2 后,它们共同指向的文件内容才会消失。

[root@localhost ~]# rm zz/t.txt 
rm:是否删除普通文件 "zz/t.txt"?Y
[root@localhost ~]# ls
a  a_copy  anaconda-ks.cfg  a.txt  b  c  T  TT  web.xml  zz
[root@localhost ~]# cat TT
this is a T.txt

 

软链接

命令格式 : ln -s

软链接就类似 windows 下快捷方式。

ln -s file1 file2

 

执行 ls -l 命名查看当前目录下文件的具体信息

[root@localhost ~]# ls
a  a_copy  anaconda-ks.cfg  a.txt  b  c  T  TT  web.xml  zz
[root@localhost ~]# ln -s zz/web.xml WEB
[root@localhost ~]# ls -l
总用量 24
-rw-r--r--. 1 root root   39 5月  11 18:22 a
..... 省略其他文件信息
lrwxrwxrwx. 1 root root   10 5月  11 21:20 WEB -> zz/web.xml  # 表示file2 指向 file1

 

其实 file2 只是 file1 的一个快捷方式,它指向的是 file1 ,所以显示的是 file1 的内容,但其实 file2inodefile1 并不相同。

如果我们删除了 file2 的话, file1 是不会受影响的,但如果删除 file1 的话, file2 就会变成死链接,因为指向的文件不见了。

[root@localhost ~]# ls
a       anaconda-ks.cfg  b  T   WEB      zz
a_copy  a.txt            c  TT  web.xml
[root@localhost ~]# rm -rf zz/web.xml 
[root@localhost ~]# ls
a       anaconda-ks.cfg  b  T   WEB      zz
a_copy  a.txt            c  TT  web.xml
[root@localhost ~]# cat WEB 
cat: WEB: 没有那个文件或目录

 

微信关注

本站为非盈利性站点,所有资源、文章等仅供学习参考,并不贩卖软件且不存在任何商业目的及用途,如果您访问和下载某文件,表示您同意只将此文件用于参考、学习而非其他用途。
本站所发布的一切软件资源、文章内容、页面内容可能整理来自于互联网,在此郑重声明本站仅限用于学习和研究目的;并告知用户不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
如果本站相关内容有侵犯到您的合法权益,请仔细阅读本站公布的投诉指引页相关内容联系我,依法依规进行处理!
作者:理想
链接:https://www.imyjs.cn/archives/827
THE END
二维码
【Linux系统】常用命令:基础操作、文件目录
现如今各种场合都有使用各种 Linux 发行版,从嵌入……
<<上一篇
下一篇>>
文章目录
关闭
目 录