ITPub博客

首页 > > > Linux零基础:常见命令

Linux零基础:常见命令

作者:dapan 时间:2020-07-08 13:59:41 0 删除 编辑
  1. 为什么要学习Linux?

课程刚开始的时候,有同学反应Linux不好用,图形化不足;需要自己输入命令,用起来比较难而且麻烦。Linux的优缺点,在前面介绍操作系统的时候其实也有涉及:作为一个拥有庞大用户群体的开源软件,Linux足够稳定、安全,而且免费。Linux和它的用户相互成就,Linux的免费使得它获得了很多程序员的支持,而程序员基于Linux开发了大量好用和重要的软件,进一步推广了Linux。

Linux有多重要呢?Android和iOS的内核都是基于Linux(unix),Linux是最受欢迎的开发平台。学习Linux对之后的学习和工作至关重要。

2. 什么是shell?

我们使用的操作系统(Windows、Mac OS、Android、iOS 等)都是图形界面(GUI)的,简单直观,容易上手,对开发者和普通用户都适用;实际上,计算机的普及离不开图形界面【参考操作系统历史】。但是另一方面,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),由于安全性和复杂度等原因,用户不能直接接触内核,所以需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核了。图形化界面是这样的一个程序,shell也是这样的一个程序。

Shell 是一个命令行工具,本身并不是内核的一部分,它是在内核的基础上编写的一个应用程序,这样的程序连接了用户和内核。在Linux服务器或者远程登录的时候,shell的作用如下:

请注意,上课时使用的ubuntu,实际上是一个带有图形界面的Linux,不启动shell,虽然用起来有点别扭,但是也可以正常工作的。

3. shell的功能

Shell可以执行:

  • 内部命令:shell的内置命令,如cd
  • 应用程序:如/bin中的可执行程序
  • shell脚本

Shell不止一种:

当前默认使用的bash可以通过查看/etc/passwd来确认;也可以查看/bin文件夹,查看和使用其他shell。

4. Shell都有什么功能?

命令记忆与补全:

  敲一下Tab键可以补全命令或者文件目录的名称,当一个命令或文件目录的名称有一个以上时,按两下Tab键可以列出这些命令的名称和文件目录的名称。

别名设置与通配符:

  *:代表0到无穷多个任意字符。
  ?:代表一定有一个字符。
  `:反单引号,它里面的内容先执行。
  [ ]:一定有一个在括号中的字符。
  [-]:编码顺序内的所有字符。
  [^]:反向选择,非括号中的一个字符。

作业,前后台控制:

  &:将命令直接放入后台运行。
  ctrl+z:将目前的工作放入后台暂停。
  jobs:查看后台工作状况。
  fg:将后台工作拿到前台。
  bg:让后台工作运行起来。
  kill:管理后台工作。

Shell 的变量:

  Shell变量:用符号去代替一些设置或者是保留的数据。
  设置Shell变量:有自己的设置规则,其实和编写程序时设置变量的规则类似。
  重要的变量:PATH、PS1、HOME、LANG、SHELL、HISTSIZE。
  变量内容修改:删除:##,%;替换:${val/old/new}、${val//old/new}。

标准输入,输出:

  标准输入(stdin):代号“0”,使用<或者<<
  标准输出(stdout):代号“1”,使用>或者>>
  标准错误输出(stderr):代号“2”,使用>或者>>

5. shell命令基本格式

cmd [options] [arguments],options称为选项,arguments称为参数

选项和参数都作为Shell命令执行时的输入,它们之间用空格分隔开。

  • Linux是区分大小写的

一般来说,后面跟的选项如果单字符选项前使用一个减号-。单词选项前使用两个减号--

  • 这是一般的情况,有些命令还是不归属这种规律的(相对较少)~~~
  • 例子:ls -a和ls --all,a 单个字符使用一个-,一个单词all 使用两个--

在Linux中,可执行的文件也进行了分类:

  • 内置命令:出于效率的考虑,将一些常用命令的解释程序构造在Shell内部。
  • 外置命令:存放在/bin、/sbin目录下的命令
  • 实用程序:存放在/usr/bin、/usr/sbin、/usr/share、/usr/local/bin等目录下的实用程序
  • 用户程序:用户程序经过编译生成可执行文件后,可作为Shell命令运行
  • Shell脚本:由Shell语言编写的批处理文件,可作为Shell命令运行

举一些例子。

譬如,先使用一个脚本,创建一些文件。

#!/bin/bash

for i in {1..10}
do
        touch "$i.txt"
done

将这个代码保存为for.sh,或者任意的名字,然后使用命令

然后执行

此时可以看到,文件夹中已经有了10个文件。

此时使用 rm *,可以清空所有文件;或者rm *.txt。这就是通配符的作用。我们可以接着试试其他的通配符。譬如rm ?.txt;rm [^1].txt;rm [-45].txt。


接下来试一下后台命令。写一段C语言代码:

int main(){
        while(1);
}

以上代码会进入死循环,因此,一旦执行会使得当前的shell不能接受和运行其他的命令。

此时可以通过ctrl+C终止该程序。当遇到会长时间运行的程序的时候,可以选择使得该程序在后台运行,从而使当前的terminal可以继续接受其他命令。

可以通过使用Kill来杀死后台的进程。



试一下环境变量。环境变量的概念如果使用过JAVA应该都知道;可以再思考一个问题,当我们输入ls这个命令之后,为什么操作系统能够运行ls?

要知道所有的可执行程序都是二进制,我们每次执行自己写的代码的时候都得加上./或者指明可执行代码的具体位置。那么ls对应的可执行代码在哪里?这里可以使用which或者whereis来找一下。

可以使用man命令来查看which和whereis是做啥的。

那么shell怎么知道要去/bin当中找ls的可执行文件呢?这就是环境变量的作用了。要查看环境变量可以使用env命令;要查看具体的环境变量,可以使用printenv。环境变量有很多,跟可执行文件的路径相关的就是PATH。

查看PATH具体的值可以使用printenv或者echo。

每个具体的路径使用:隔开。我们可以修改环境变量。譬如,

这条命令什么意思呢?使用:隔开了原来的$PATH和.,.指代的就是当前目录。可以再查看一下

这样做的好处是什么呢?执行当前目录下的可执行文件也可以不用带路径了。譬如这样

另一个好玩的现象是,如果将whi拷贝为w,运行一下:

为什么会有这样的结果呢?

还可以继续拿PATH做实验。譬如我们把PATH清空。先将PATH保存到另一个变量中。这样待会儿可以恢复PATH的值。

现在把PATH清空。

然后我们来尝试一下常用的命令。

当然,如果加上完整的路径,还是可以使用的。

另外,我们对环境变量的修改,只在当前terminal中;如果希望全局修改,修改配置文件则是一个一劳永逸的方法,尽管一般不这么用。

  #vi /etc/profile (对系统下所有用户起作用)
  # vi /home/yan/.bashrc (对yan这个用户起作用)

6. Linux基本知识

Linux 文件系统是一个树结构,文件系统从根目录开始,根目录下可以有任意个文件和子目录,子目录中又可以有任意个文件和子目录

7. Linux常用命令

  • 可用 pwd命令查看用户的当前目录
  • 可用 cd 命令来切换目录
  • .表示当前目录
  • .. 表示当前目录的上一级目录(父目录)
  • -表示用 cd 命令切换目录前所在的目录
  • ~ 表示用户主目录的绝对路径名

绝对路径:

  • 以斜线(/)开头 ,描述到文件位置的完整说明 ,任何时候你想指定文件名的时候都可以使用

相对路径 :

  • 不以斜线(/)开头 ,指定相对于你的当前工作目录而言的位置 ,可以被用作指定文件名的简捷方式

tips:输入命令的时候要常用tab键来补全

  • ls:显示文件或目录信息
  • mkdir:当前目录下创建一个空目录
  • rmdir:要求目录为空
  • touch:生成一个空文件或更改文件的时间
  • cp:复制文件或目录
  • mv:移动文件或目录、文件或目录改名
  • rm:删除文件或目录
  • ln:建立链接文件
  • find:查找文件
  • file/stat:查看文件类型或文件属性信息
  • cat:查看文本文件内容
  • more:可以分页看
  • less:不仅可以分页,还可以方便地搜索,回翻等操作
  • tail -10: 查看文件的尾部的10行
  • head -20:查看文件的头部20行
  • echo:把内容重定向到指定的文件中 ,有则打开,无则创建
  • 管道命令 | :将前面的结果给后面的命令,例如:ls -la | wc,将ls的结果加油wc命令来统计字数
  • 重定向 > 是覆盖模式,>> 是追加模式,例如:echo "hello world" > qingshu.txt把左边的输出放到右边的文件里去

命令通过增加选项,获得更多的功能:

ls命令

ls的参数非常多,下面列出一些:

  • -l :列出长数据串,包含文件的属性与权限数据等
  • -a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
  • -d :仅列出目录本身,而不是列出目录的文件数据
  • -h :将文件容量以较易读的方式(GB,kB等)列出来
  • -R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来

mkdir命令用于创建空目录。常用的参数-p:在创建目录时,如果父目录不存在,则同时创建该父目录。rmdir用于删除空目录。-p可以用于删除父目录,但也必须是空目录。

cp的参数:

  • -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
  • -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
  • -f:覆盖已经存在的目标文件而不给出提示。
  • -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
  • -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
  • -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
  • -l:不复制文件,只是生成链接文件。

练习:

  1. 显示所有文件,包括以"."开头的隐藏文件
  2. 以长格式显示文件的详细信息
  3. 将两个文件合并为一个文件
  4. 将一个文件的内容附加到另一个文件
  5. 考虑一下 sudo rm / -rf的作用是什么?【不要尝试】

diff命令

diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c。diff是svn、cvs、git等版本控制工具不可或缺的一部分。

1.命令格式:

diff[参数][文件1或目录1][文件2或目录2]

2.命令功能:

diff命令能比较单个文件或者目录内容。如果指定比较的是文件,则只有当输入为文本文件时才有效。以逐行的方式,比较文本文件的异同处。如果指定比较的是目录的的时候,diff 命令会比较两个目录下名字相同的文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。

3. 命令参数很多,看两个例子

看一下用diff的结果

这个结果是什么意思呢?表示从第几行上,有几行不同。

还可以并排显示不同:


ln命令

Linux ln命令功能是为某一个文件在另外一个位置建立一个同步的链接。当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

语法

 ln [参数][源文件或目录][目标文件或目录]

链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

软链接:

  • 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  • 2.软链接可以 跨文件系统 ,硬链接不可以
  • 3.软链接可以对一个不存在的文件名进行链接
  • 4.软链接可以对目录进行链接

硬链接:

  • 1.硬链接,以文件副本的形式存在。但不占用实际空间。
  • 2.不允许给目录创建硬链接
  • 3.硬链接只有在同一个文件系统中才能创建

根目录下可以看到如下文件:


gzip命令

Linux gzip命令用于压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出".gz"的扩展名。

可以解压缩:



tar命令

tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。

linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩。

1.命令格式:

tar[必要参数][选择参数][文件]

2.命令功能:

用来压缩和解压文件。tar本身不具有压缩功能。它是调用压缩功能实现的。

可以调用gzip进行压缩:

比较一下两个文件的不同:

解压缩可以使用-zxvf。



find命令

find是一个基于查找的功能非常强大的命令,相对而言,它的使用也相对较为复杂,参数也比较多,所以在这里将给把它们分类列出,它的基本语法如下:

find [PATH] [option] [action]

# 与时间有关的参数:

  • -mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件;
  • -mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名;
  • -mtime -n : 列出在n天之内(含n天本身)被更改过的文件名;
  • -newer file : 列出比file还要新的文件名

# 例如:

  • find /root -mtime 0 # 在当前目录下查找今天之内有改动的文件

# 与用户或用户组名有关的参数:

  • -user name : 列出文件所有者为name的文件
  • -group name : 列出文件所属用户组为name的文件
  • -uid n : 列出文件所有者为用户ID为n的文件
  • -gid n : 列出文件所属用户组为用户组ID为n的文件

# 例如:

  • find /home/yan -user yan # 在目录/home/yan中找出所有者为yan的文件

# 与文件权限及名称有关的参数:

  • -name filename :找出文件名为filename的文件
  • -size [+-]SIZE :找出比SIZE还要大(+)或小(-)的文件
  • -tpye TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f)、设备文件(b、c)、目录(d)、连接文件(l)、socket(s)、FIFO管道文件(p);
  • -perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755;
  • -perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示
  • -perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示

# 例如:

  • find / -name passwd # 查找文件名为passwd的文件
  • find . -perm 0755 # 查找当前目录中文件权限的0755的文件
  • find . -size +12k # 查找当前目录中大于12KB的文件,注意c表示byte



grep命令

Linux系统中grep(global search regular expression(RE) and print out the line)命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

1.命令格式:

grep [option] pattern file

选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
--color=auto :可以将找到的关键词部分加上颜色的显示

2.命令功能:

用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。

上面的例子中,分别在当前文件夹中的所有后缀为.c的文件、自己所有文件中查找关键字"main"。

还可以使用管道,将前一个命令的输出作为后一个命令的输入,在ls的结果中查找所有包好whi的文件名:

还可以加入正则表达式的使用:

分别表示以whi开始的和以whi结束的文件名。

还可以加入选项,-n表示列出出现关键字的行数。

写一个文件regular.txt来尝试一下。

"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn't fit me.
However, this dress is about $ 3183 dollars.
GNU is free air not free beer.
Her hair is very beauty.
I can't finish the test.
Oh! The soup taste good.
motorcycle is cheap than car.
This window is clear.
the symbol '*' is represented as start.
Oh!     My god!
The gd software is a library for drafting programs.
You are the best is mean you are the no. 1.
The world <Happy> is the same with "glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am VBird

字符类的搜索:如果想要搜寻 test 或 taste 这两个单字时,可以发现到,其实它们有共同的 't?st' 。这个时候,可以这样:

字符类的反向选择 [^] :如果想要搜索到有 oo 的行,

但不想要 oo 前面有 g,如下:

oo前面没有小写字母:

另一种写法:

其中[:lower:]就是代表了小写字母a-z。

获取有数字的那一行:

想要句子的开头不是英文字母:

找出空白行:

下面两个符号在正则表达式的意义如下:

. (小数点):代表『一定有一个任意字节』; 
* (星号):代表『重复前一个字符, 0 到无穷多次』

假设需要找出 g??d 的字串,亦即共有四个字节, 起头是 g 而结束是 d ,可以这样做:

下面的例子是至少有两个o:

如果想要找到以b开头以及以t结尾的单词,

-w参数非常好用;因为通过正则表达式定义单词非常困难。

想要找出两个到五个 o 的连续字串,要使用到限定范围的字符 {} 。 但因为 { 与 } 的符号在 shell 是有特殊意义的,因此, 必须要使用字符 \ 来转义,也即使\失去特殊意义才行。 {} 的语法,如果要找到连续多个 o 的字串:


分别表示连续2个及以上个o;连续2个到3个o;以及连续3个o。

或操作

grep -E '123|abc' filename  // 找出文件(filename)中包含123或者包含abc的行

与操作

grep pattern1 files | grep pattern2 //显示既匹配 pattern1 又匹配 pattern2 的行。

其他操作

grep -i pattern files //不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files //只列出匹配的文件名,
grep -L pattern files //列出不匹配的文件名,
grep -w pattern files //只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files //匹配的上下文分别显示[number]行,



参考:

  1. xiyoulinux.org/events?
  2. zhuanlan.zhihu.com/p/36
  3. blog.csdn.net/Aguangg_6
  4. blog.csdn.net/ljianhui/

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/758/viewspace-3119667/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-08-07

  • 博文量
    4504
  • 访问量
    87346