GNU/LinuxGNU / Linux入门


有用的快捷方式

使用终端

本文档中的示例假定您使用的是POSIX兼容(如bashshzshksh )shell。

使用终端实现了大部分GNU / Linux功能。大多数Linux发行版都包含终端模拟器,允许用户从桌面环境中与shell进行交互。 shell是一个执行用户输入命令的命令行解释器。 Bash (Bourne Again SHell)是许多Linux发行版中的常见默认shell,是macOS的默认shell。

如果您使用带有emacs键绑定的Bash (默认设置),这些快捷方式将起作用:

打开终端

  • Ctrl + Alt + TSuper + T.

光标移动

  • Ctrl + A转到当前正在键入的行的开头。
  • Ctrl + E转到当前正在键入的行的末尾。
  • Ctrl + XX在行的开头和光标的当前位置之间移动。
  • Alt + F将光标向前移动当前行上的一个字。
  • Alt + B将光标向后移动当前行上的一个字。
  • Ctrl + F将光标向前移动当前行上的一个字符。
  • Ctrl + B将光标向后移动当前行上的一个字符。

文字操作

  • Ctrl + U剪切从当前位置到行首的行,将其添加到剪贴板。如果您在线的末端,请切断整条线。
  • Ctrl + K剪切从当前位置到行尾的行,将其添加到剪贴板。如果您位于生产线的开头,请切割整条生产线。
  • Ctrl + W删除光标前的单词,将其添加到剪贴板。
  • Ctrl + Y粘贴最近剪切的剪贴板中的最后一个东西(撤消当前光标位置的最后一个删除)。
  • Alt + T交换光标前的最后两个单词。
  • Alt + L从光标到单词结尾使小写。
  • Alt + U从光标到单词结尾使大写。
  • Alt + C大写到从光标开始的单词结束(如果光标位于单词的开头,则为整个单词)。
  • Alt + D删除从光标开始的单词结束(如果光标位于单词的开头,则为整个单词)。
  • Alt +。打印上一个命令中写入的最后一个单词。
  • Ctrl + T交换光标前的最后两个字符。

历史访问

  • Ctrl + R允许您搜索以前使用的命令。
  • Ctrl + G离开历史搜索模式而不运行命令。
  • Ctrl + J允许您将当前匹配的命令复制到命令行而不运行它,允许您在运行命令之前进行修改。
  • Alt + R如果您已对其进行了编辑,则还原对您从历史记录中提取的命令所做的任何更改。
  • Ctrl + P显示上次执行的命令,即返回命令历史记录(类似于向上箭头)。
  • Ctrl + N显示下一个执行的命令,即向前走过命令历史(类似于向下箭头)。

终端控制

  • Ctrl + L清除屏幕,类似于clear命令。
  • Ctrl + S停止所有输出到屏幕。这在运行具有大量长输出的命令时很有用。但这并没有停止运行命令。
  • Ctrl + Q使用Ctrl + S停止后,将输出恢复到屏幕。
  • Ctrl + C结束当前正在运行的进程并返回提示。
  • Ctrl + D退出当前shell会话,类似于exit或logout命令。在某些命令中,充当文件结束信号以指示已到达文件结尾。
  • Ctrl + Z暂停(暂停)当前正在运行的前台进程,返回shell提示符。然后,您可以使用bg 命令允许该进程在后台运行。要再次将该进程置于前台,请使用fg 命令。要查看所有后台进程,请使用jobs 命令。
  • 选项卡自动完成文件和目录名称。
  • 选项 选项 显示当键入的字符与文件或目录名称不唯一匹配时的所有可能性。

特殊字符

  • Ctrl + H与Backspace相同。
  • Ctrl + J与Return相同(历史换行)。
  • Ctrl + M与Return相同(历史回车)。
  • Ctrl + I与Tab相同。
  • Ctrl + G铃声角色。
  • Ctrl + @Null Character。
  • Esc Deadkey相当于Alt修饰符。

关闭终端

  • Ctrl + Shift + W关闭终端选项卡。
  • Ctrl + Shift + Q关闭整个终端。

或者,您可以使用set -o vi 切换到bash中vi键绑定。使用set -o emacs 切换回emacs键绑定。

基本的Linux实用程序

Linux几乎可以执行任何任务,大多数任务都是直观且易于解释的。

在Linux中获得帮助

命令可用性
man <name> 阅读<name>的手册页。
man <section> <name> 阅读与给定部分相关的<name>手册页。
man -k <editor> 输出其手册页包含<editor>关键字的所有软件。
man -K <keyword> 输出包含<keyword>的所有手册页。
apropos <editor> 输出一行描述与单词编辑器匹配的所有应用程序。如果无法调用应用程序的名称,请使用此命令。
help 在Bash shell中,这将显示所有可用bash命令的列表。
help <name> 在Bash shell中,这将显示有关<name> bash命令的信息。
info <name> 查看有关<name>的所有信息。
dpkg -l 在基于Debian的系统上输出所有已安装软件包的列表。
dpkg -L packageName 将在Debian上列出已安装的文件和给定包的路径详细信息。
dpkg -l | grep -i <edit> 无论何种情况,都使用<edit>返回所有.deb已安装的软件包。
less /var/lib/dpkg/available 返回所有可用包的说明。
whatis vim 列出vim的单行描述。
<command-name> --help 显示有关<tool-name>的使用信息。有时command -h 也可以,但不适用于所有命令。

用户识别以及谁是Linux世界中的谁

命令可用性
hostname 显示系统的主机名。
hostname -f 显示系统的完全限定域名(FQDN)。
passwd 更改当前用户的密码。
whoami 在终端登录的用户的用户名。
who 当前以用户身份登录的所有用户的列表。
w 显示当前系统状态,时间,持续时间,当前登录系统的用户列表以及其他用户信息。
last 谁最近使用过该系统。
last root root用户最后一次登录的时间是什么时候。
lastb 显示进入系统的所有错误登录尝试。
chmod 更改权限 - 读取,写入,执行文件或目录。

处理相关信息

命令可用性
top 列出按当前系统资源使用情况排序的所有进程。显示持续更新的进程显示(默认为3秒)。使用q 键退出顶部。
ps 列出当前在当前shell会话上运行的进程
ps -u root 列出root正在运行的所有进程和命令
ps aux 列出当前系统上所有用户的所有进程

文件管理命令

Linux对present和parent目录使用一些约定。这对于初学者来说可能有点混乱。

每当您在Linux中的终端中时,您将处于所谓的当前工作目录中 。通常,您的命令提示符将显示完整的工作目录,或者只显示该目录的最后一部分。您的提示可能如下所示:

user@host ~/somedir $
user@host somedir $
user@host /home/user/somedir $
 

这表示您当前的工作目录是/home/user/somedir

在Linux .. 代表父目录和. 代表当前目录。

因此,如果当前目录是/home/user/somedir ,则cd ../somedir 将不会更改工作目录。

下表列出了一些最常用的文件管理命令

目录导航

命令效用
pwd 获取当前工作目录的完整路径。
cd - 导航到您正在使用的最后一个目录。
cd ~ 或只是cd 导航到当前用户的主目录。
cd .. 转到当前目录的父目录(请注意cd.. 之间的空格)

列出目录中的文件

命令效用
ls -l 以long(表)格式列出当前目录中的文件和目录(为了更好的可读性,建议使用-l和ls)。
ls -ld dir-name 列出有关目录dir-name 而不是其内容的信息。
ls -a 列出所有文件,包括隐藏文件(以. 开头的文件名是Linux中的隐藏文件)。
ls -F 在文件名的末尾附加一个符号以表示其类型( * 表示可执行文件, / 表示目录, @ 表示符号链接, = 表示套接字,|表示命名管道, > 表示门)。
ls -lt 列出按上次修改时间排序的文件,最近修改的文件显示在顶部(记住-l选项提供具有更好可读性的长格式)。
ls -lh 以人类可读的格式列出文件大小。
ls -lR 以递归方式显示所有子目录。
tree 将从当前目录开始生成文件系统的树表示。

文件/目录创建,复制和删除

命令效用
cp -p source destination 将文件从source 复制到目标 。 -p代表保存。它在复制文件所有者,时间戳,组,权限等时保留文件的原始属性。
cp -R source_dir destination_dir 将源目录递归复制到指定的目标。
mv file1 file2 在Linux中没有这样的重命名命令。因此mv 将file1移动/重命名为file2。
rm -i filename 在每次删除文件之前询问您是否确认。 如果你是LINUX命令行的新用户,你应该总是使用rm -i您可以指定多个文件。
rm -R dir-name 将递归删除目录dir-name
rm -rf dir-name 将以递归方式删除目录dir ,忽略不存在的文件,并且永远不会提示任何内容。 小心使用这个命令!您可以指定多个目录。
rmdir dir-name 将删除目录dir-name ,如果它为空。此命令只能删除空目录。
mkdir dir-name 创建目录dir-name
mkdir -p dir-name/dir-name 创建目录层次结构。根据需要创建父目录(如果它们不存在)。您可以指定多个目录。
touch filename 创建文件文件filename (如果不存在),否则将文件的时间戳更改为当前时间。

文件/目录权限和组

命令效用
chmod <specification> filename 更改文件权限。规格= u user, g group, o other, + add permission, - remove, r read, w write, x execute。
chmod -R <specification> dir-name 递归更改目录的权限。要更改目录的权限以及该目录中的所有内容,请使用此命令。
chmod go=+r myfile 为所有者和组添加读取权限。
chmod a +rwx myfile 允许所有用户读取,写入或执行myfile
chmod go -r myfile 删除组和其他人的读取权限。
chown owner1 filename 将文件的所有权更改为用户owner1
chgrp grp_owner filename 将文件filename 主组所有权更改为group grp_owner
chgrp -R grp_owner dir-name 将目录dir-name 主组所有权更改为递归组grp_owner 。要更改目录的组所有权以及该目录中的所有内容,请使用此命令。

文件操作

文件和目录(文件夹的另一个名称)是Linux的核心,因此能够从命令行创建,查看,移动和删除它们非常重要且非常强大。这些文件操作命令允许您执行图形文件资源管理器将执行的相同任务。

创建一个名为myFile 的空文本文件:

touch myFile
 

myFile 重命名为myFirstFile

mv myFile myFirstFile 
 

查看文件的内容:

cat myFirstFile
 

使用寻呼机查看文件的内容(一次屏蔽一次):

less myFirstFile
 

查看文件的前几行:

head myFirstFile
 

查看文件的最后几行:

tail myFirstFile
 

编辑文件:

vi myFirstFile
 

查看当前工作目录中的文件:

ls
 

创建一个名为myFirstDirectory 的空目录:

mkdir myFirstDirectory
 

创建多路径目录:(创建两个目录,src和myFirstDirectory)

mkdir -p src/myFirstDirectory
 

将文件移动到目录中:

mv myFirstFile myFirstDirectory/
 

您还可以重命名该文件:

user@linux-computer:~$ mv myFirstFile secondFileName
 

将当前工作目录更改为myFirstDirectory

cd myFirstDirectory
 

删除文件:

rm myFirstFile
 

进入父目录(表示为.. ):

cd ..
 

删除一个空目录:

rmdir myFirstDirectory
 

删除非空目录(即包含文件和/或其他目录):

rm -rf myFirstDirectory
 

请注意,删除目录时,删除./ not / 将擦除整个文件系统。

文件/目录详细信息

ls 命令有几个选项,可以一起使用以显示更多信息。

详细信息/权利

l 选项显示文件权限,大小和上次修改日期。因此,如果根目录包含名为test 的文件和文件someFile 命令:

user@linux-computer:~$ ls -l
 

会输出类似的东西

-rw-r--r-- 1 user users   70 Jul 22 13:36 someFile.txt
drwxrwxrwx 2 user users 4096 Jul 21 07:18 test
 

权限的格式为drwxrwxrwx 。第一个字符表示文件类型d 如果它是目录- 否则。接下来的三个rwx 是用户对文件的权限,接下来的三个是组对文件的权限,后三个是其他人对文件的权限。

rwxr 代表是否可以读取文件, w 代表文件是否可以修改, x 代表文件是否可以执行。如果未授予任何许可- 将代替rwx

因此,从上面user 可以读取和修改someFile.txt 但该组只具有只读权限。

要更改权限,如果您拥有sudo权限,则可以使用chmod ### fileName 命令。 r 由值4表示, w 由2表示, x 由1表示。因此,如果只想要能够将内容修改为test 目录

Owner rwx = 4+2+1 = 7
Group r-x = 4+0+1 = 5
Other r-x = 4+0+1 = 5
 

所以整个命令是

chmod 755 test
 

现在做一个ls -l 会显示类似的东西

drwxr-xr-x 2 user users 4096 Jul 21 07:20 test
 

可读尺寸

l 选项一起使用时, h 选项显示人类可读的文件大小。运行

user@linux-computer:~$ ls -lh
 

输出:

total 4166
-rw-r--r-- 1 user users   70 Jul 22 13:36 someFile.txt
drwxrwxrwx 2 user users 4.0K Jul 21 07:18 test
 

要查看隐藏文件,请使用a 选项。例如

user@linux-computer:~$ ls -a
 

可能列表

.profile
someFile.txt
test
 

目录总大小

要查看当前目录的大小,请使用s 选项( h 选项也可用于使大小更易读)。

user@linux-computer:~$ ls -s
 

输出

total 4166
someFile.txt      test
 

递归视图

让我们说test 目录有一个文件anotherFile ,你想从根文件夹中看到它,你可以使用R 选项列出递归树。

user@linux-computer:~$ ls -R
 

输出

.:
someFile.txt    test

./test:
anotherFile
 

你好,世界

在终端中键入以下代码,然后按Enter键

echo "Hello World"
 

这将产生以下输出:

Hello World
 

按名称/内容中的模式搜索文件

使用Linux命令行(shell)的人的常见任务是搜索具有特定名称或包含特定文本的文件/目录。为了实现这个目的,您应该熟悉2个命令:


按名称查找文件

find /var/www -name '*.css'
 

这将打印出/var/www 下以.css 结尾的所有文件的完整路径/文件名。输出示例:

/var/www/html/text-cursor.css
/var/www/html/style.css
 

欲了解更多信息:

man find
 

查找包含文本的文件

grep font /var/www/html/style.css 
 

这将打印包含指定文件中的图案font 所有行。输出示例:

font-weight: bold;
font-family: monospace;
 

另一个例子:

grep font /var/www/html/
 

这不像你希望的那样有效。你得到:

grep: /var/www/html/: Is a directory
 

您需要使用-R 选项递归grep 以使其工作:

grep -R font /var/www/html/
 

嘿好!看看这个的输出:

/var/www/html/admin/index.php:  echo '<font color=red><b>Error: no dice</b></font><br/>';
/var/www/html/admin/index.php:  echo '<font color=red><b>Error: try again</b></font><br/>';
/var/www/html/style.css:  font-weight: bold;
/var/www/html/style.css:  font-family: monospace;
 

请注意,当grep 匹配多个文件时,它会在匹配的行前面加上文件名。如果需要,可以使用-h 选项来摆脱它。

欲了解更多信息:

man grep