Linux Shell命令行常用操作

shell是Linux系统中的一个程序,用于接收键盘的命令,可以算作是用户和操作系统之间的接口CLI。

Directories目录

pwd:Print Working Directory 的缩写,这个命令将显示你当前所在的目录。

cd: Change Directory 的缩写,这个命令让你可以切换到不同的目录。

~:根目录,

.:代表当前目录。

..:代表父目录,也就是当前目录的上一级目录。

/:代表根目录,这是文件系统的顶层目录,没有父目录。

以上这些命令和目录名称在 Unix-like 系统(如 Linux、macOS)的 shell 环境中都是适用的。

文件操作和移动

在本机范围内:

ls [path]:列出文件。如果没有指定 [path],那么就列出当前目录下的所有文件和目录。注意,在 Unix 和 Linux 系统中,文件名以点(.)开始的文件被视为隐藏文件。这些文件通常用于存储系统设置或应用程序配置。例如,用户的 bash shell 配置存储在名为 .bashrc 的隐藏文件中。 ls 命令中默认情况下不会显示这些隐藏文件,除非你使用 -a--all 选项,如: ls -a

tree [path]:递归列出文件。如果没有指定 [path],那么就列出当前目录下的所有文件和目录及其子目录的文件。

cp <source> <destination>:复制文件或目录。将 <source> 复制到 <destination>。

mv <source> <destination>:移动或重命名文件或目录。

rm <filename>:永久删除文件。

mkdir <directory>:创建目录。rmdir <directory>:永久删除空目录。

touch <file>:创建空文件。

不同主机之间传输:

不同主机直接传输方式蛮多的,这里就只写一个常用的scp命令,可以在不同系统之间安全地复制文件。

从远程机器复制文件到本地机器:

​​​​​​​$ scp username@from_host:file.txt /local/directory/ 

从本地机器复制文件到远程机器:

$ scp file.txt username@to_host:/remote/directory/


从一台远程机器复制文件到另一台远程机器:

​​​​​​​$ scp username@from_host:/remote/file.txt username@to_host:/remote/directory/

scp 命令还支持一些标志(Flags)来改变其行为:

  • -r:递归复制,用于复制目录及其下所有文件和子目录。

  • -v:详细模式,会显示出命令的详细执行过程,有助于调试。

  • -q:安静模式,不显示命令的执行过程和结果,只在发生错误时才会输出消息。

tar文件打包

tar 是 Unix 和 Linux 系统中常用的文件打包工具,常用来创建、解包归档文件。在许多情况下,它也用于数据的备份和分发。下面是一些常见的 tar 命令标志(flags)及其含义:

  • -c: 创建一个新的归档文件。这个标志用于将一些文件和目录打包成一个归档文件。

  • -x: 从归档文件中提取文件。这个标志用于解包一个归档文件。

  • -z: 使用 gzip 对归档文件进行压缩或解压缩。对于大的归档文件,这个标志可以大幅度地减少它们的大小。如果使用了 -z 选项,例如 tar -czf archive.tar.gz directory/tar 命令会先创建一个 tar 归档文件,然后使用 gzip 对这个归档文件进行压缩。生成的压缩文件扩展名通常是 .tar.gz.tgz,表示这是一个通过 gzip 压缩的 tar 归档文件。

  • -v: 显示命令的执行过程。这个标志在调试或查看 tar 命令的执行情况时很有用。

  • -f: 指定归档文件的名称。

 下面是一些例子:

tar -cf name-of-archive.tar /path/to/dir/:
这个命令创建一个包含指定目录中所有文件的归档文件。

tar -cf name-of-archive.tar /path/to/filename:
这个命令创建一个只包含指定文件的归档文件。

tar -cf name-of-archive.tar dir1 dir2 dir3:
这个命令创建一个包含多个目录的归档文件。

tar -xf name-of-archive.tar:
这个命令在当前目录中解包一个归档文件。

注意,对于-z这个参数,如果没有使用 -z 选项,例如 tar -cf archive.tar directory/tar 命令只会创建一个 tar 归档文件,但不会进行压缩,不要把tar和rar弄混了。生成的文件扩展名通常是 .tar,表示这是一个未经压缩的 tar 归档文件。解包时也很好理解:如果使用了-c,就用-x;如果使用了-cz,就用-xz。


文本处理

查看

一般在Linux系统中处理大型日志文件或数据文件时一些处理文件的命令非常有用。例如,可以使用sortuniq命令来找出文件中的重复行,或者使用headtail命令来快速查看文件的开头或结尾。

  • cat: 该命令用于连接并打印文件的内容到屏幕。一般常用是用来显示文件的全部内容,但也可以用来连接多个文件,比如:

cat file1.txt file2.txt file3.txt > combined.txt

cat首先将file1.txt、file2.txt和file3.txt的内容读取出来,然后将这三个文件的内容一起输出(即连接起来)。最后,>操作符将这个输出重定向到combined.txt文件中。关于>我们下面马上就会提到。

  • uniq: 该命令可以用来报告或者删除重复行。

  • head/tail: 这两个命令用于打印文件的首部(head)或尾部(tail)行。它们也有一些选项,如-bx可以打印出前x字节,-nx可以打印出前x行。如下面的命令会显示前10行:

head -n 10 file.txt
  • sort: 该命令会将输入行进行排序。它有很多选项,例如-d(按照字典顺序排序)、-f(忽略大小写)、-n(按数字排序),和-r(逆序排序)。

搜索

Grep (Global Regular Expression Print) 是 Unix 和类 Unix 系统(如 Linux)中的一个命令行工具,用于在文本中搜索特定的模式。

# -c:统计匹配行的数量。
# 这个命令会输出 file.txt 文件中包含字符串 "test" 的行的数量。
grep -c "test" file.txt

# -h:显示匹配项,但不显示文件名。
# 这个命令会从 file1.txt 和 file2.txt 中查找字符串 "test",但在输出结果中不会显示文件名。
grep -h "test" file1.txt file2.txt

# -i:忽略大小写。
# 这个命令会在 file.txt 文件中查找字符串 "test",不区分大小写。
grep -i "test" file.txt

# -l:只显示文件名列表。
# 这个命令会输出包含字符串 "test" 的文件名,不会输出匹配的行。
grep -l "test" file1.txt file2.txt

# -n:显示匹配项和行号。
# 这个命令会在 file.txt 文件中查找字符串 "test",并显示每个匹配行的行号。
grep -n "test" file.txt

# -e exp:使用此选项指定表达式。
# 这个命令会在 file.txt 文件中查找字符串 "test" 或 "example"。
grep -e "test" -e "example" file.txt

# -f file:从文件中获取模式。
# 这个命令会从 patterns.txt 文件中读取模式,然后在 file.txt 文件中查找这些模式。
grep -f patterns.txt file.txt

# -o:只打印匹配的行部分。
# 这个命令会在 file.txt 文件中查找字符串 "test",并只输出匹配的部分,而不是整行。
grep -o "test" file.txt

# -r:递归读取每个目录下的所有文件。
# 这个命令会递归地在 directory/ 目录及其所有子目录中的文件中查找字符串 "test"。
grep -r "test" directory/

重定向,标准输入/输出

标准输入 (stdin): 这是程序读取输入数据的主要方式。默认情况下,标准输入来自用户在终端中的键盘输入,但也可以通过文件重定向和管道从文件或其他程序获取。

标准输出 (stdout): 这是程序输出数据的主要方式。默认情况下,标准输出发送到终端屏幕。但是,它也可以通过文件重定向和管道发送到文件或其他程序。

文件重定向是 Linux shell 中的一种技术,用于改变命令的输入/输出流的方向。

  • command < file.txt :这表示将 file.txt 的内容作为 command 的标准输入。也就是说,command 会从 file.txt 读取数据,就像它从键盘读取数据一样。比如说我们有一个名为numbers.txt的文件,包含一些数字。我们可以使用:

sort < numbers.txt

此命令将 numbers.txt 文件的内容作为 sort 命令的输入。sort 命令按数字大小将输入排序,然后将排序后的结果打印到标准输出。这就是文件重定向 < 的一个实际用例。

  • command > file.txt :这表示将 command 的标准输出重定向到 file.txt。也就是说,command 的输出将不会显示在终端,而是写入 file.txt。如果 file.txt 已经存在,那么它的原有内容将被 command 的输出覆盖。

  • command >> file.txt :这也是将 command 的标准输出重定向到 file.txt,但与 command > file.txt 不同的是,如果 file.txt 已经存在,那么 command 的输出将被追加到 file.txt 的末尾,而不会覆盖 file.txt 的原有内容。

Pipes管道 (|)

"管道(pipe)"是Linux/Unix环境下的一种方法,它允许你将一个命令的输出用作另一个命令的输入。管道通常用‘|’符号表示,如果你运行 command1 | command2,那么 command1 的输出就会成为 command2 的输入。

grep "compute" /usr/share/dict/words | wc -l

在上面的例子中,我们首先使用 grep 命令在 /usr/share/dict/words 这个文件中查找包含字符串"compute"的行。然后,我们使用管道 |grep 的输出传递给 wc -l 命令,该命令会计算输入中的行数。简而言之,管道允许我们将多个命令链接在一起,这样我们就可以用一行代码来完成一些复杂的任务。

VIM

VIM 是一款非常流行的文本编辑器,可以在几乎任何终端上运行。在Linux中一般也用vim来编辑文本,你可以通过命令 $ vim ~/.vimrc 来编辑你的 Vim 配置文件。

当我们vim编辑某个文件时,有三个主要的模式:

  • Normal 模式:按下 "esc" 键进入。
  • Insert 模式:在 Normal 模式下按 "i" 键进入。这个模式下,你可以在文本缓冲区输入文本。
  • Visual 模式:在 Normal 模式下按 "v" 键进入。在这个模式下,你可以使用箭头键来选择一段文本。

编辑完成后,按esc键,输入:wq来保存并退出Vim。如果想放弃修改,可以使用q!来强制退出。

其他的一些Vim指令就先不写了,不太实用。

但值得一写的是,Vim 会在编辑文件时创建一个交换文件(.swp file),如果 Vim 意外关闭(比如电源断电),你可以用这个交换文件来恢复未保存的更改。但是,如果 Vim 发现一个文件已经有一个相关的交换文件存在,它会提示你选择一个行动。

  • "Open Read Only": 这个选项只是查看文件的内容,而不做任何修改。

  • "Edit anyway": 这个选项会忽略交换文件的存在,并尝试打开文件进行编辑。要小心,因为如果文件正在另一个 Vim 会话中编辑,你会最终保存两个版本的文件。

  • "Recover": 这个选项会尝试从交换文件中恢复内容,让你能够继续编辑。

  • "Delete it": 这个选项会删除交换文件。你可以重新开始编辑原文件。

  • "Quit": 这个选项会让你退出当前的 Vim 会话,但保持其他 Vim 会话开启。这在你想关闭当前文件,但不想关闭所有其他 Vim 会话时很有用。

  • "Abort": 这个选项会关闭所有打开的 Vim 会话,有可能还会损失未保存的信息。"Abort" 主要用于快速关闭当前的 Vim 会话,它并不会解决交换文件的问题。

通配符wildcards

我们可以用*来匹配所有字符,用?来匹配单个字符等。以下是使用通配符的一些示例:

# 删除所有以"g"开头的文件或目录
rm g*

# 列出所有以“b”开头并以“.txt”结尾的文件
ls b*.txt

# 显示名字为“Data”后面跟着正好三个任意字符的文件的内容
cat Data???

# 匹配所有以大写字母开头的文件和目录
ls [[:upper:]]*

# 匹配所有不以小写字母结尾的文件和目录
ls *[![:lower:]] 

# 递归地列出所有以字母"a"、"b"或"c"开头的文件和目录的结构
tree [abc]*

对于其他不同种通配符,可以参考:Wildcards

进程

# 列出所有当前正在运行的进程的信息
ps aux

# 显示实时的进程状态
top

进程可以被分类为前台作业和后台作业。前台作业(Foreground jobs)就是在终端运行的作业,直到完成后才会释放终端。在作业运行期间,你不能在同一终端中执行其他命令,除非你先将这个作业停止或者移动到后台。后台作业(Background jobs)是在后台运行,这就意味着你可以在同一终端中启动一个后台作业后,立即运行其他命令。

# 列出所有当前作业的状态
jobs

# 将当前作业或指定作业带到前台;其中 n 是作业ID(JID)
fg %n

# 将当前作业或指定作业置于后台;其中 n 是作业ID
bg %n

# 停止前台作业并将其放置在后台作为已停止的作业。这个作业稍后可以被重新启动
# 按 Ctrl + Z 实现

# 向前台作业发送SIGINT信号,通常会导致其退出。这个作业不能被重新启动
# 按 Ctrl + C 实现

一些其他补充:

echo

echo 是一个 Unix/Linux 命令,它用于在标准输出(通常是终端或屏幕)上打印其参数。

# echo 用于显示作为参数传递的文本/字符串行
echo "Hello, World!"

# 将 "echo ls -l" 的输出传递给 shell,结果与简单的 ls -l 相同
echo ls -l | sh

sed

sed 命令是一个流编辑器,可以用于执行文本转换。下面是一个用sed进行文本内容替换的例子:

# sed 可以进行插入、删除、搜索和替换(替换)
# 在 file.txt 中用 'new_word' 替换 'old_word'
sed 's/old_word/new_word/' file.txt

man

man 命令在 Unix 或 Unix-like 系统中非常重要,它用于访问系统的手册页。这些手册页包含了几乎所有命令和函数的详细描述和使用方法。要查看某个特定命令或程序的手册页,你只需要键入 man,后面跟上你想要查找的命令名,如 man ls。打开man手册页,你会发现内容被组织成了几个部分,包括命令的描述、选项列表、使用示例等等。

你可以用键盘上下键滚动查看,或者用 / 键搜索特定的文本。当你使用 / 命令搜索某个特定的词汇或表达式,系统会将光标移动到第一处匹配的位置。如果你想查看下一个匹配项,就可以按 n 键。这样,每按一次 n 键,光标就会向下移动到下一个匹配项。

另外,很多命令都有一个 -h--help 选项,这也可以显示出命令的基本信息和使用方法。例如,键入 ls --help 就会显示 ls 命令的基本用法和选项列表。

$ man <command>
$ <command> --help or -h

小结

这篇文章整理了Linux系统shell中一些常用的命令,大部分我列出的命令我基本上在实习中都有用到过,整理的时候自己也算是重新复习了一下,就先整理到这里吧。 

猜你喜欢

转载自blog.csdn.net/weixin_44492824/article/details/130859021