引言

图形用户界面(GUI)让简单的任务更容易完成,命令行界面(CLI)使完成复杂的任务成为可能。

第一部分:Shell

本部分包括命令行基本语言,命令组成结构,文件系统浏览、编写命令行、查找命令帮助文档。

基础知识

基础操作方式

在Linux中,在图形界面中打开Terminal的快捷键是Ctrl+Alt+t。

在Terminal中,按键盘的上下箭头,可以出现曾经输入过的命令,默认500行。关闭Terminal后会保存。

按键盘的左右箭头可以实现输入字符时光标的切换,可以移动到用户正在编辑部分的任意位置。

在Terminal中,鼠标不可以制定光标位置,鼠标左键可以用于选中文本,右键可以进行复制黏贴(有的系统是显示选项卡,有的是直接复制黏贴操作)。

命令行中,会出现一行短文字,格式类似于ebd@ubuntu:~$[me@linuxbox ~]$。解释一下,基本格式是"用户名@主机名 当前工作目录 权限符"。~代表用户的家目录。普通用户的权限符是$,如果变成超级用户,用户名变成root,权限符变成#

Linux基础知识

在Linux中,一切皆文件,文件没有后缀名,文件名和命令名对大小写敏感,文件名以.开头的文件是隐藏文件。

番外1:Ubuntu使用root登录GUI系统

安装Ubuntu后设定root密码及开机使用root用户登录:

CentOS,openSUSE等系统在安装系统过程中会有设置root密码的步骤,而Ubuntu没有此步骤。

在Ubuntu安装完毕后,在Terminal中输入sudo passwd -u root,按提示设置密码后,切换为root用户,输入命令su,输入密码,用户权限符由$变为#。

再安装vim文本编辑器,输入命令apt install vim,按提示安装成功后,用vim打开vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf,按键盘INSERT键进行编辑,在下方加入代码

greeter-show-manual-login=true
all-guest=false

按Esc解除编辑,按":wq"保存并退出。

接着用vim /etc/pam.d/gdm-autologin,用vim编辑,在auth required pam_succeed_if.so user != root quiet_success前加上#,备注起来;同理再用vim对vim /etc/pam.d/gdm-passwordauth required pam_succeed_if.so user != root quiet_success前加上#,备注起来。

最后输入reboot进行重启,重启后就可以使用root进行开机图形用户界面登录了,开机用户名处选择未列出,用户名输出root,再输入密码即可。

番外2:Ubuntu搭建c++开发环境和vscode编辑器

教程链接

从零开始学命令

体验命令行之使用date和cal,df和free

输入date命令可以显示系统当前的时间和日期;

输入cal命令可以显示当前月份的日历。

输入df命令可以查看磁盘剩余的数量;

输入free命令可以查看当前内存空闲的情况。

exit

输入exit命令,可以结束并关闭当前终端会话。

清屏

输入clear命令进行向下翻页;

输入reset命令进行历史内容清空;

输入printf '\033c'命令进行历史内容清空。

用户操作概要
reboot 用于重启机器
poweroff 用于关闭系统
useradd    xxxx 用于添加用户
su  xxx 用户将用户切换为xxx
whoami 查看当前用户

在Linux系统中,普通用户可以在没有其他用户时使用reboot进行重启,使用poweroff可以关机,有其他用户时可以按照提示操作。useradd命令可以进行新用户的创建。需要切换用户时,使用命令su NAME切换到NAME用户,可以使用whoami命令来查看当前操作的用户名(其实每行前面的提示符就有)。



Q&A

Q:shutdown和poweroff和reboot的区别?

A:shutdown是poweroff和reboot的结合,参数-r表示reboot,-h表示poweroff

在root用户下,使用shutdown -r +10表示在10分钟后重新启动系统,shutdown -h now表示立即关机。

网络入门之ifconfig和ping
  • ifconfig —— 列出网络相关信息
  • ping IP/DNS —— 连接某个ip或网址

在Ubuntu系统中,如果提示没有此命令,首先通过sudo apt install net-tools安装网络工具。安装完成后,可以使用ifconfig命令来查看网络相关信息。可以使用ping命令了解网络之间的连接情况。



除了网络设备和状态外,如果正确启动了can驱动和can卡,can设备状态也会列出。

虚拟机使用桥接网络后,利用Windows下的ipconfig和Linux下的ifconfig得到主机和虚拟机的ip地址,可以相互ping通。

文件系统中跳转
  • ls —— 列出目录中的内容
  • cd —— 更改当前目录
  • pwd —— 打印出当前工作的目录位置

Linux的文件系统是一个树形结构,树根是根盘符(根节点),结点按照用户的需求,具有不同的深度。任何时候,用户都像置身迷宫之中。当用户打开一个Terminal时,默认位置在用户的家目录(~)中。使用普通用户登录Linux系统时,家目录及其子目录是唯一允许普通用户进行写操作的地方。

可以键入pwd命令来显示当前的工作目录(绝对路径);

可以用ls命令来列出当前目录下的所有文件和子目录(相对路径);

可以使用cd命令进行当前工作目录的更改(可输入绝对路径或相对路径)。

在Linux中,可以在输入命令后接上选项。一个相对完整的命令应该是这样的:command -options arguments

ls命令的选项如下表:

ls常用选项一览
选项 长选项 描述
-a --all 展示包括隐藏文件和隐藏目录在内的所有文件和目录
-d --directory  
-l   以列表形式详细显示
-h --human-readable 人性化展示
-r --reverse 以相反的顺序进行显示
-S   按照文件大小排序
-t   按照修改时间排序
-F    
-i   列出文件或目录的索引号
ls长输出时的各字段含义



drwxr-xr-x,d表示此文件名是一个目录(d表示目录,-表示文件,l表示硬链接),后面9个字母是三组rwx,分别表示文件属主自己、文件属主所在用户组、其他用户是否能对此文件或目录进行读(r)、写(w)、运行(x),有字母表示有此权利,-表示没有此权利。

路径问题

路径可以分为绝对路径和相对路径。绝对路径始于根目录,紧跟着一个一个的子目录,直到达到所期望的目录或文件。 相对路径始于当前工作目录,表示目标文件或目标目录相对于当前工作目录的路径。

在相对路径中,./表示当前目录,../表示回到当前目录的上一级(父)目录。绝对路径默认从根目录开始,即第一个/表示根目录。

研究操作系统
  • ls —— 列出目录中的内容
  • file —— 确定文件类型
  • less —— 浏览文件中文本内容

在Linux中,文件是没有扩展名的,很难通过一个名字知道这个文件是个什么文件。在windows中,.png文件是一张图片,.dll文件是一个动态链接库,那怎么知道在Linux下,一个文件是什么类型的呢?

使用file命令,可以很清楚的知道文件的类型。不论文件名是否有后缀,都可以将文件的类型正确的识别。





输入命令less可以查看文本型文件的内容。可以看出,上图中的File_Rename是一段代码,是文本格式的文件,其他的一个是mp3文件,一个是png矢量图文件。使用命令less File_Rename对此文本文件进行查看。在显示文本文件内容后,使用b进行向上翻页,使用空格进行向下翻页,使用上下箭头进行向上或向下一行的移动,使用q键进行退出,使用/键进行索引,使用n键进行/之后的下一次索引,使用G跳到最后一行,用g跳到第一行。

系统目录一览
/ 根目录,根盘符。
/boot 系统启动相关文件。 包含内核,RMA磁盘映像和启动加载程序。
/etc 配置文件,包含一系列Shell脚本,系统启动时脚本会运行每个系统服务,是可读文本文件。
/dev 包含设备结点的目录。内核维护着它支持的设备。
/home 用户的家目录,用户家目录在/home/Username,普通用户只能在自己的目录下创建文件。
/root 管理员的家目录。
/lib 静态库文件和动态库文件,/lib/modules是内核模块文件。
/lost+found 当部分恢复了一个损坏的文件才会用到的目录。
/media 移动设备的自动挂载点目录,如光驱和USB驱动。
/mnt 挂载点目录,是一个额外的临时文件系统。
/opt 可选目录,第三方程序和软件产品的安装目录。
/proc 内核映射文件,是一个伪文件系统,是内核的窥视孔,是只读的。
/sys 跟硬件设备相关的属性映射文件,是一个伪文件系统。
/tmp 临时文件,每次重新启动都会自动清空。还有/usr/tmp。
/var 经常变化的文件,如数据库 假脱机文件 邮件等,/var/log是日志文件目录。
/bin 用户命令,可执行文件;用到的库文件可能在/lib,配置文件在/etc
/sbin 管理命令,可执行文件;用到的库文件可能在/lib,配置文件在/etc
/usr 只读文件,其中/usr/local是第三方软件。
/usr/bin 系统安装的可执行程序。
/usr/lib 是/usr/bin目录中程序所用的库文件。
/usr/local 让系统使用的程序的安装目录,默认为空。由源码编译的程序会在./bin下。
/usr/sbin 包含系统管理程序。
/usr/share 是很多由/usr/bin目录中程序使用的共享数据。
/usr/share/doc 大多数系统中软件的文档所在地。
操作文件和目录
  • cp —— 复制文件和目录
  • mv —— 移动/重命名文件和目录
  • mkdir —— 创建目录
  • rm —— 删除文件和目录
  • ln —— 创建硬链接和符号链接

在图形文件管理器中对上面列出的任务会更容易些,而命令行的程序优点在于对复杂文件任务的操作。

可以输入mkdir dir1在当前路径下创建一个名为dir1的目录,也可以在当前路径下一次创建多个目录,如mkdir dir1 dir2 dir3

可以输入 cp item1 item2将item1复制到item2,item要求是一个可以识别的路径,可以使文件或者目录;

可以输入 mv item1 item2将item1移动到item2,具体要求和cp命令类似;

可以输入rm item,将当前目录下的item进行删除;

(请注意:务必先用ls item将需要的item列出,正确后使用rm进行删除,以免错删造成麻烦!)

通配符

在Terminal中,可以按照名字,使用通配符进行匹配。通配符可以理解为另一个维度的正则表达式。利用通配符的规则,可以在指定的文件范围内正确匹配出满足通配条件的文件和目录。

通配符 含义 示例
* 匹配任意长度的字符,包括0 1或多个 a*.cpp     以a开头的以.cpp结尾的文件或目录
? 匹配任意的单个字符 RT?123456     RT和123456中间有一个字母的文件或目录
[ ] 匹配括号中出现的单个字符  
[:upper:]
[A-Z]
匹配一个大写字母 [:upper:]*[:digit:]     大写字母开头,数字结尾的文件活目录
[:lower:]
[a-z]
匹配一个小写字母  
[:alpha:]
[a-Z]
匹配一个字母,大小写均可  
[:digit:]
[0-9]
匹配一个数字字符  
[:alnum:]
[A-Z,a-z,0-9]
匹配一个数字或字母  
[^…] 匹配…之外的一个字符  
[:blank:] 匹配一个水平空白字符  
[:space:] 匹配一个水平或垂直空白字符  
[:punct:] 匹配一个标点  
[:print:] 匹配一个可打印字符  
[:cntrl:] 匹配一个不可打印字符  

使用通配符,可以匹配出满足用户条件的文件和目录。

小技巧:多个命令顺序执行

用户可以通过;将多条命令放在一起一同执行。

使用命令
  • type —— 说明怎样解释一个命令
  • which —— 显示会执行哪个可执行程序
  • man —— 显示命令手册页
  • apropos —— 显示一系列适合的命令
  • info —— 显示命令info
  • whatis —— 显示一个命令的简洁描述
  • alias —— 创建命令别名

一共可以分成4种命令:

  • 可执行程序(file)
  • shell的内建命令(builtin)
  • shell函数(keyword)
  • 命令别名(alias)

利用type command来显示命令的类型,参数-t可以说明命令类型,-p可以知道可执行文件的路径,-P可以知道可执行文件和别名命令的路径。



利用命令help可以显示shell内建命令的帮助文档。对于内部命令,使用help command;对于外部命令,使用command --help。一般来说,builtin和keyword类型的命令使用help command,如help kill和help if; file和alias类型的命令使用 command --help,如vi --help和grep --help。

利用man命令可以查看所有文件(命令)的相关帮助。man一共有9个章节的内容,如man 7 man就可以查看第七章中的man命令的相关解释。一般使用man commandman加命令名就可以查看帮助了。另外,如果使用man加命令名找到了用户不想要的东西(也就是发生重名),可以更改章节号进行进一步查看。 第一章是可以从Shell运行的命令(man命令的默认参数);第二章是必须由内核完成的功能(系统调用);第三章是库调用;第四章是dev中的文件;第五章是配置文件的格式;第六章是游戏;第七章是宏;第八章是管理命令;第九章是废弃章节。另外,如果不知道这命令是什么类型或属于哪个章节,可以使用man -a command进行章节一览,看看哪些章节中有这个命令,按照指示执行即可。

利用info命令可以得到比help更为详细的帮助文档。

利用alias命令可以创建别名。如alias fooo='cd ~ ; ls'就是把等号后面的命令创建一个新的别名,以后每次使用fooo,就会回到用户家目录并列出所有项。当然,在用户不想使用自定义别名后可以使用unalias命令将之前定义的别名命令进行取消,如unalias fooo之后就不再能使用fooo命令了。

利用whatis命令可以得到一个简洁的命令介绍。

重定向
  • cat —— 连接文件
  • sort —— 排序文本行
  • uniq —— 报道或省略重复行
  • grep —— 打印匹配行
  • wc —— 打印文件的行数、单词数和字节个数
  • head —— 输出文件第一部分
  • tail —— 输出文件的最后一部分

在默认情况下的Terminal中,标准输入是键盘,标准输出和标准错误会直接显示在屏幕上。根据Linux一切皆文件的思想, 实际上的输入输出是在叫做STDIN、STDOUT或STDERR的特殊文件中。所谓的重定向,就是更改输出走向和输入来向,将输入输出和磁盘文件进行挂钩,而不仅仅是使用STDIN、STDOUT或STDERR这些特殊文件。

文件种类 英文简称 标示符
标准输入设备 STDIN 0
标准输出设备 STDOUT 1
标准错误输出 STDERR 2
重定向标准输出

I/O重定向允许我们重新定义标准输出送到哪里。使用">"或">>"进行输出重定向,>表示覆盖输出,>>表示追加输出。ls -l /usr/bin > ls_output.txt表示将bin中的文件列出,保存在当前工作目录的ls_output.txt文件中。如果只用覆盖输出">"重定向符号,会导致文件被覆盖,只能保留最新的一次重定向指令的结果;如果要保留多次的重定向结果,建议使用">>"符号。

重定向标准错误输出

如果命令输入错误,进行重定向标准输出符">"或">>",就会得到一个空文件。因为像ls之类的指令,错误的位置不会得到任何标准输出。这可以作为清空文件的一个命令,但是如果你想在文件中得到这个错误信息,就必须进行重定向,使用"2>"和"2>>"来进行标准错误重定向。

注:">"和">>"默认为重定向标准输出,如果需要重定向标准错误输出,应使用"2>"和"2>>"。

重定向STDOUT和STDERR到同一文件

上文注释到,STDOUT和STDERR的重定向符是不同的,那如何通过一条命令,可以同时重定向STDOUT和STDERR两种输出,到同一个文件中呢?

可以在原命令最后添加2>&1在STDOUT重定向(1)的功能上增加STDSTDERR(2)功能。

将不需要的输出重定向到/dev/null

可以将不需要的数据进行重定向,位置是/dev/null,这个操作相当于没有存储、没有显示任何数据。

连接命令cat

cat命令读取一个或多个文件,然后复制他们到标准输出。换而言之,cat file.txt可以把文本类型的文档直接输出在命令行中。

利用cat命令和>重定向符也可以对简单文本进行输入。使用cat > file可以进行文档输入工作。

要记得,使用cat命令输入完毕后,是使用键盘的Ctrl+D键进行结束操作的。

管道线 |

如果在命令行中,有command1 | command2形式出现,则表示先执行command1再执行command2,且command2的输入是command1的输出,|表示管道线。利用管道线,可以运行多个命令,最终输出一个结果。例如:ls -l / | less就是将根目录中的详细项利用less文本查看器进行输出。

将若干跟管道线结合在一起使用,形成一个复杂的操作,就被称作过滤器。在过滤器中常见的命令有sort、uniq等。sort命令可以进行排序,uniq命令可以进行去重,wc命令可以查看文本大小。例如,使用ls /usr/bin /bin会将两个文件分别排序后输出,使用ls /usr/bin /bin | sort | less会将两个文件合并排序后输出,使用ls /usr/bin /bin | sort | uniq | less会将两个文件合并排序并去重后输出。wc命令输出的三个数字分别是文档总行数,总单词数,总字节数。

Q&A

Q:Linux中的";"和"|"都可以进行执行,区别是什么?

A:";"是依次执行,不论成功失败,都会执行每一条语句,而"|"是管道,需要符合后一个参数的输入是前一个参数的输出,相当于执行一条复杂的语句。

打印匹配行grep

使用grep pattern file可以将文本文件中和通配符pattern的匹配行进行打印。例如:ls /usr/bin /bin | sort | uniq | grep zip可以将名字中含有zip的行进行打印。 grep的常用参数主要有-i(忽略大小写)和-v(打印不包含字符)。

打印并保存tee

在Linux中,结果要么被显示出来,要么被打印出来。将tee命令安装在管道上可以在打印的同时保存文件。例如ls /bin | tee file1.txt | grep zip,这个命令将/bin中的文件名都保存在file1.txt中,并在这些文件名中找出带有zip的进行输出。

 

Linux Command Line_1_Shell基础的更多相关文章

  1. Linux系统优化及基础命令

    1.Linux系统优化及基础命令 2. vim编辑器 vim 操作命令 在命令模式下操作 pageup 往上翻页(重要指数****)pagedown 往下翻页(重要指数****)H 移动到屏幕首行gg ...

  2. 鸟哥Linux私房菜基础学习篇学习笔记2

    鸟哥Linux私房菜基础学习篇学习笔记2 第九章 文件与文件系统的压缩打包: Linux下的扩展名没有什么特殊的意义,仅为了方便记忆. 压缩文件的扩展名一般为: *.tar, *.tar.gz, *. ...

  3. Linux shell脚本基础学习详细介绍(完整版)二

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  4. Linux应急响应基础

    文件排查 敏感目录文件分析 tmp目录 命令目录 /usr/bin /usr/sbin 开机启动项 /etc/init.d /etc/init.d是/etc/rc.d/init.d的软链接 文件时间 ...

  5. Linux 脚本编写基础

    txt去重    http://man.linuxde.net/sort Linux 脚本编写基础 http://www.cnblogs.com/linn/archive/2007/03/05/664 ...

  6. linux发行版基础目录

    linux发行版基础目录 linux 基础目录 linux基础目录 目录 作用 / 根目录,起源 /boot linux引导启动目录 /lib 库目录 /bin 常用内部命令 /sbin 常用内部管理 ...

  7. LINUX二十个基础命令

    LINUX二十个基础命令 一. useradd命令 1.命令格式: useradd 选项 用户名 2.命令功能: 添加新的用户账号 3.常用参数: -c comment 指定一段注释性描述.-d 目录 ...

  8. 《The Linux Command Line》 读书笔记04 Linux用户以及权限相关命令

    Linux用户以及权限相关命令 查看身份 id:Display user identity. 这个命令的输出会显示uid,gid和用户所属的组. uid即user ID,这是账户创建时被赋予的. gi ...

  9. 《The Linux Command Line》 读书笔记02 关于命令的命令

    <The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ...

随机推荐

  1. tp5伪静态--宝塔

    location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; break; } }

  2. Abductive Commonsense Reasoning —— 溯因推理

    Abductive Commonsense Reasoning(溯因推理) 介绍 溯因推理是对不完全观察情境的最合理解释或假设的推论. 上图给出的是一个简明扼要的例子: 给定不同时间节点上的情境观测值 ...

  3. B. Kay and Snowflake 解析(思維、DFS、DP、重心)

    Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...

  4. Kubernetes 使用 Ingress 实现灰度发布功能

    使用 Ingress 实现灰度发布 一.Canary 规则说明 Ingress-Nginx 是一个K8S ingress工具,支持配置 Ingress Annotations 来实现不同场景下的灰度发 ...

  5. 深入探究ASP.NET Core Startup初始化

    前言 Startup类相信大家都比较熟悉,在我们使用ASP.NET Core开发过程中经常用到的类,我们通常使用它进行IOC服务注册,配置中间件信息等.虽然它不是必须的,但是将这些操作统一在Start ...

  6. 史上最全的Kuberenetes 常用命令手册

    1.0 k8s 集群状态检查 # 查看集群信息 kubectl cluster-info systemctl status kube-apiserver systemctl status kubele ...

  7. CF1017G——The Tree

    传送门:QAQQAQ 题意:给你一棵树,有三种操作,设所有点本来未感染 1:感染节点i,若i被二次感染,则感染i的儿子(若儿子也被感染,则感染孙子,直到到底或者感染了健康点) 2:使i子树全部健康 3 ...

  8. JS--遍历对象属性的五种方式

    ES6 一共有 5 种方法可以遍历对象的属性. (1)for...in for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性). (2)Object.keys(obj) Ob ...

  9. div 内元素的垂直居中

    小主今天偷点懒利用上班时间整理一下 div 内元素的居中(不论垂直还是水平通用)问题的解决方法: 本文的中心是利用 css 中的 display属性:通常的方便的是使用 Flex/Grid 属性,今天 ...

  10. 针对DEV XtraReport中没有radiobuttonlist的替代方法

     private void PrintingSystem_EditingFieldChanged(object sender, DevExpress.XtraPrinting.EditingField ...