Linux 基础命令总结

一、基本操作

1)重要快捷键:

  [Tab]使用Tab键来进行命令补全,这个技巧给你带来的最大的好处就是当你忘记某个命令的全称时可以只输入它的开头的一部分,然后按下Tab键就可以得到提示或者帮助完成

  [Ctrl+c]当你在 Linux 命令行中无意输入了一个不知道的命令,或者错误地使用了一个命令,导致在终端里出现了你无法预料的情况,比如,屏幕上只有光标在闪烁却无法继续输入命令,或者不停地输出一大堆你不想要的结果。你想要立即停止并恢复到你可控的状态,那该怎么办呢?这时候你就可以使用Ctrl+c键来强行终止当前程序(你可以放心它并不会使终端退出),虽然这个按着很方便,但不要随便按,因为有时候,当你看到终端没有任何反应或提示,也不能接受你的输入时,可能只是运行的程序需要你耐心等一下,就不要急着按Ctrl+c

  [Ctrl+a]将光标移至输入行头,相当于Home键,a本来在字母中就处于开头,这样记忆

  [Ctrl+e]将光标移至输入行末,相当于End键,e可记忆成结束end

  [Ctrl+k]删除从光标所在位置到行末

  [Ctrl+d]键盘输入结束或退出终端

  [Ctrl+s]暂停当前程序,暂停后按下任意键恢复运行,s可记忆成结束stop

  [Ctrl+z]将当前程序放到后台运行,恢复到前台为命令fg

  [Shift+PgUp]将终端显示向上滚动

  [Shift+PgDn]将终端显示向下滚动

  [Alt+Backspace]向前删除一个单词

  []键盘上的方向上键,恢复你之前输入过的命令

2)重要通配符:

  通配符是一种特殊语句,主要有星号(*)和问号(?),用来对字符串进行模糊匹配(比如文件名、参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正字符。  

  [*]可以给文件随意命名,先使用 touch 命令创建 2 个文件,后缀都为 txt,假如过了很长时间,你已经忘了这两个文件的文件名,现在你想在一大堆文件中找到这两个文件,就可以使用通配符:

ls *.txt

     在创建文件的时候,如果需要一次性创建多个文件,比如:touch love_{1..10}_linux.txt

3)获取帮助:

  [man]:可以使用如下方式来获得某个命令的说明和使用方式的详细介绍:$man 1 ls

     [man]:如果你知道某个命令的作用,只是想快速查看一些它的某个具体参数的作用,那么你可以使用--help参数:$ ls --help

 

二、Linux 用户管理

1)查看用户:

  who am i或者who mom likes

  

2)创建用户:

  $ sudo adduser lilei   #我们新建一个叫 lilei 的用户

  sudo可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。我们一般登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里就要用到 sudo 这个命令了。不过使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo 用户组。shiyanlou 用户也属于 sudo 用户组。使用sudo命令创建用户后不但可以添加用户到系统,同时也会默认为新用户创建 home 目录:ls /home

  现在你已经创建好一个用户,并且你可以使用你创建的用户登录了,s可以理解为switch转换,u可以理解为user,使用如下命令切换登录用户: 

  $ su -l lilei      #su <user> 可以切换到用户 user,执行时需要输入目标用户的密码

3)用户组:

  1.查看自己属于哪些用户组:

    使用groups命令:groups lilei

       2.查看/etc/group 文件

    使用cat命令:cat /etc/group | sort   #这里 cat 命令用于读取指定文件的内容并打印到终端输出,| sort 表示将读取的文本进行一个字典排序再输出

4)将其它用户加入 sudo 用户组:

    $ su shiyanlou # 此处需要输入shiyanlou用户密码。

   $ groups lilei

   $ sudo usermod -G sudo lilei

   $ groups lilei

        解释:使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令,这里我用 shiyanlou 用户执行 sudo 命令将 lilei 添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限

5)删除用户:

    $ sudo deluser lilei --remove-home

三、Linux 文件权限

1)查看文件权限:

我们之前已经很多次用到 ls 命令了,如你所见,我们用它来列出并显示当前目录下的文件,当然这是在不带任何参数的情况下,它能做的当然不止这么多,现在我们就要用它来查看文件权限:

使用较长格式列出文件:$ ls -l

  1.文件类型

    你必需时刻牢记 Linux 里面一切皆文件

  2.文件权限

    一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。

  3.ls 命令的一些其它常用的用法:

  $ ls -A               #显示除了 .(当前目录)和 ..(上一级目录)之外的所有文件,包括隐藏文件(Linux 下以 . 开头的文件为隐藏文件)
    $ ls -dl <目录名>     #查看某一个目录的完整属性,而不是显示目录里面的文件属性
    $ ls -AsSh            #显示所有文件大小,并以普通人类能看懂的方式呈现


2)变更文件所有者:

假设目前是 lilei 用户登录,新建一个文件,命名为 “ iphone6 ”,可见文件所有者是 lilei:

现在,换回到 shiyanlou 用户身份,使用以下命令变更文件所有者为 shiyanlou

 

 

3)修改文件权限:

方式一:二进制数字表示

每个文件的三组权限(拥有者,所属用户组,其他用户,记住这个顺序是一定的)对应一个 " rwx ",也就是一个 “ 7 ” ,所以如果我要将文件“ iphone6 ”的权限改为只有我自己可以用那么就这样,为了演示,我先在文件里加点内容:

$ echo "echo \"hello shiyanlou\"" > iphone6

然后修改权限:

$ chmod go-rw iphone6

现在,其他用户已经不能读这个“ iphone6 ”文件了:

方式二:加减赋值操作

完成上述相同的效果,你可以:

$ chmod go-rw iphone6

go 还有 u 分别表示 group、others 和 user,+- 分别表示增加和去掉相应的权限。

四、Linux 目录结构

1. FHS 标准

  

  FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin/sbin 则应该放置可执行文件等等。第二层则是针对 /usr/var 这两个目录的子目录来定义。例如 /var/log 放置系统日志文件,/usr/share 放置共享数据等等

2. 目录路径

  使用 cd 命令可以切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录(注意,我们上一节介绍过的,以 . 开头的文件都是隐藏文件,所以这两个目录必然也是隐藏的,你可以使用 ls -a 命令查看隐藏文件), - 表示上一次所在目录, 通常表示当前用户的 home 目录。使用 pwd 命令可以获取当前所在路径(绝对路径)

  进入上一级目录:$ cd ..

  进入你的 home 目录:$ cd ~   # 或者 cd /home/<你的用户名>

    使用 pwd 获取当前路径:$ pwd 

 

  1)绝对路径:简单地说就是以根" / "目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录

  2)相对路径:相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如: usr/local/bin (这里假设你当前目录为根目录)

下面我们以你的 home目录为起点,分别以绝对路径和相对路径的方式进入 /usr/local/bin 目录:

 

 

五、Linux 文件的基本操作

1. 新建空白文件

创建名为 test 的空白文件,因为在其它目录没有权限,所以需要先 cd ~ 切换回用户的 /home/shiyanlou 目录:

$ cd ~
$ touch test

2. 新建目录

使用 mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性

创建名为“ mydir ”的空目录,另外使用 -p 参数,同时创建父目录(如果不存在该父目录),如下我们同时创建一个多级目录(这在安装软件、配置安装路径时非常有用):

$ mkdir mydir
$ mkdir -p father/son/grandson

3. 复制

1)复制文件:

使用 cp(copy)命令复制一个文件到指定目录,将之前创建的“ test ”文件复制到“ /home/shiyanlou/father/son/grandson ”目录中:

2)复制目录:

如果直接使用 cp 命令复制一个目录的话,会出现如下错误:

要成功复制目录需要加上 -r 或者 -R 参数,表示递归复制,就是说有点“株连九族”的意思:

4. 删除

1)删除文件:
使用 rm(remove files or directories)命令删除一个文件:

有时候你会遇到想要删除一些为只读权限的文件,直接使用 rm 删除会显示一个提示,如下:

如果想忽略这提示,直接删除文件,可以使用 -f 参数强制删除:

2)删除目录

跟复制目录一样,要删除一个目录,也需要加上 -r-R 参数:

5. 移动文件与文件重命名

1)移动文件:

使用 mv(move or rename files)命令移动文件(剪切)。将文件“ file1 ”移动到 Documents 目录:

2)重命名文件:

将文件“ file1 ”重命名为“ myfile ”(mv 旧的文件名 新的文件名):

3)批量重命名文件:

要实现批量重命名,mv 命令就有点力不从心了,我们可以使用一个看起来更专业的命令 rename 来实现。不过它要用 perl 正则表达式来作为参数

 

简单解释一下上面的命令,rename 是先使用第二个参数的通配符匹配所有后缀为 .txt 的文件,然后使用第一个参数提供的正则表达式将匹配的这些文件的 .txt 后缀替换为 .c,这一点在我们后面学习了 sed 命令后,相信你会更好地理解

6. 移动文件与文件重命名

 1)使用 cattacnl 命令查看文件

前两个命令都是用来打印文件内容到标准输出(终端),其中 cat 为正序显示,tac 为倒序显示

可以加上 -n 参数显示行号:

nl 命令,添加行号并打印,这是个比 cat -n 更专业的行号打印命令。

 2)使用more,less 命令分页查看文件

 如果说上面的 cat 是用来快速查看一个文件的内容的,那么这个 moreless 就是天生用来"阅读"一个文件的内容的,使用 more 命令打开 passwd 文件:

打开后默认只显示一屏内容,终端底部显示当前阅读的进度。可以使用 Enter 键向下滚动一行,使用 Space 键向下滚动一屏,按下 h 显示帮助,q 退出。

 3)使用head,tail 命令分页查看文件

性子比较急的人应该会喜欢,因为它们一个是只查看文件的头几行(默认为 10 行,不足 10 行则显示全部)和尾几行,系统新增加一个用户,会将用户的信息添加到 passwd 文件的最后,那么这时候我们就可以使用 tail 命令了:

 

更直接的只看一行, 加上 -n 参数,后面紧跟行数:

7. 查看文件类型

在 Linux 中文件的类型不是根据文件后缀来判断的,我们通常使用 file 命令查看文件的类型:

说明这是一个可执行文件,运行在 64 位平台,并使用了动态链接文件(共享库)

 

六、环境变量与文件查找

1. 变量

使用 declare 命令创建一个变量名为 tmp 的变量:

使用 = 号赋值运算符,将变量 tmp 赋值为 shiyanlou:

读取变量的值,使用 echo 命令和 $ 符号:

$ 符号用于表示引用一个变量的值,初学者经常忘记输入

 

注意:并不是任何形式的变量名都是可用的,变量名只能是英文字母、数字或者下划线,且不能以数字作为开头。

2. 环境变量

环境变量的作用域比自定义变量的要大,如 Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,除了创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。Shell 程序也作为一个进程运行在操作系统之上,而我们在 Shell 中运行的大部分命令都将以 Shell 的子进程的方式运行。

 

 

通常我们会涉及到的变量类型有三种:

  • 当前 Shell 进程私有用户自定义变量,如上面我们创建的 tmp 变量,只在当前 Shell 中有效。
  • Shell 本身内建的变量。
  • 从自定义变量导出的环境变量。

 也有三个与上述三种环境变量相关的命令:setenvexport。这三个命令很相似,都是用于打印环境变量信息,区别在于涉及的变量范围不同。详见下表:

哪些变量是环境变量,可以简单地理解成在当前进程的子进程有效则为环境变量,否则不是(有些人也将所有变量统称为环境变量,只是以全局环境变量和局部环境变量进行区分,我们只要理解它们的实质区别即可)我们这里用 export 命令来体会一下,先在 Shell 中设置一个变量 temp=shiyanlou,然后再新创建一个子 Shell 查看 temp 变量的值:

注意:为了与普通变量区分,通常我们习惯将环境变量名设为大写。

3. 永久生效

当你关机后,或者关闭当前的 shell 之后,环境变量就没了啊。怎么才能让环境变量永久生效呢

按变量的生存周期来划分,Linux 变量可分为两类:

  1. 永久的:需要修改配置文件,变量永久生效;

  2. 临时的:使用 export 命令行声明即可,变量在关闭 shell 时失效。

介绍两个重要文件 /etc/bashrc(有的 Linux 没有这个文件) 和 /etc/profile ,它们分别存放的是 shell 变量和环境变量。还有要注意区别的是每个用户目录下的一个隐藏文件:

4. 命令的查找路径与顺序

我们在 Shell 中输入一个命令,Shell 是怎么知道去哪找到这个命令然后执行的呢

这是通过环境变量 PATH 来进行搜索的,查看 PATH 环境变量的内容:

默认情况下你会看到如下输出:

5. 添加自定义路径到“ PATH ”环境变量

我们应该注意到 PATH 里面的路径是以 : 作为分割符的,所以我们可以这样添加自定义路径:

注意这里一定要使用绝对路径

 现在你就可以在任意目录执行那两个命令了(注意需要去掉前面的 ./

6. 添加自定义路径到“ PATH ”环境变量

比如要修改我们前面添加到 PATH 的环境变量。为了避免操作失误导致命令找不到,我们先将 PATH 赋值给一个新的自定义变量 path:

可以使用 unset 命令删除一个环境变量:

 

7. 让环境变量立即生效

 在 Shell 中修改了一个配置脚本文件之后,每次都要退出终端重新打开甚至重启主机才能生效,我们可以使用 source 命令来让其立即生效,如

 

source 命令还有一个别名就是 .,注意与表示当前路径的那个点区分开,虽然形式不一样,但作用和使用方式一样,上面的命令如果替换成 . 的方式就该是:

注意第一个点后面有一个空格,而且后面的文件必须指定完整的绝对或相对路径名,source 则不需要。

 

七、搜索文件

1)whereis 简单快速

它找到了三个路径,两个可执行文件路径和一个 man 在线帮助文件所在路径,这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。whereis 只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用 locate 命令

2)locate 快而全

 通过“ /var/lib/mlocate/mlocate.db ”数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb 命令更新一次,所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令(在我们的环境中必须先执行一次该命令)。它可以用来查找指定目录下的不同文件类型,如查找 /etc 下所有以 sh 开头的文件:

查找 /usr/share/ 下所有 jpg 文件:

3)which 小而精

 which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的软件,因为它只从 PATH 环境变量指定的路径中去搜索命令:

4)find 精而细

find 应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。find 命令强大到,要把它讲明白至少需要单独好几节课程才行,这条命令表示去 /etc/ 目录下面 ,搜索名字叫做 interfaces 的文件或者目录。这是 find 命令最常见的格式,千万记住 find 的第一个参数是要搜索的地方:

与时间相关的命令参数:

下面以 -mtime 参数举例:

  • -mtime n:n 为数字,表示为在 n 天之前的“一天之内”修改过的文件
  • -mtime +n:列出在 n 天之前(不包含 n 天本身)被修改过的文件
  • -mtime -n:列出在 n 天之内(包含 n 天本身)被修改过的文件
  • -newer file:file 为一个已存在的文件,列出比 file 还要新的文件名

列出 home 目录中,当天(24 小时之内)有改动的文件:

列出用户家目录下比 Code 文件夹新的文件:

 

 

八、文件打包与压缩

1)使用 zip 打包文件夹

上面命令将目录 /home/shiyanlou/Desktop 打包成一个文件,并查看了打包后文件的大小和类型。第一行命令中,-r 参数表示递归打包包含子目录的全部内容,-q 参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用 du 命令查看打包后文件的大小

 1.设置压缩级别为 9 和 1(9 最大,1 最小),重新打包:

这里添加了一个参数用于设置压缩级别 -[1-9],1 表示最快压缩但体积大,9 表示体积最小但耗时最久。最后那个 -x 是为了排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中,注意:这里只能使用绝对路径,否则不起作用

我们再用 du 命令分别查看默认压缩级别、最低、最高压缩级别及未压缩的文件的大小:

 

通过 man 手册可知:

  • h, --human-readable(顾名思义,你可以试试不加的情况)
  • d, --max-depth(所查看文件的深度)

这样一目了然,你可以看到默认压缩级别应该是最高的,效果很明显

2.创建加密 zip 包

使用 -e 参数可以创建加密压缩包:

2)使用 unzip 命令解压缩 zip 文件

shiyanlou.zip 解压到当前目录:

使用安静模式,将文件解压到指定目录:

使用 -O(英文字母,大写 o)参数指定编码类型(Linux 上面默认使用的是 UTF-8 编码,如果不加任何处理,直接解压的话可能会出现中文乱码的问题):

3)使用rar 打包压缩命令

1.安装 rarunrar 工具:

2.从指定文件或目录创建压缩包或添加文件到压缩包:

上面的命令使用 a 参数添加当前目录 . 到一个归档文件中,如果该文件不存在就会自动创建

 注意:rar 的命令参数没有 -,如果加上会报错

 3.从指定压缩包文件中删除某个文件:

4.查看不解压文件:

5.使用 unrar 解压 rar 文件

全路径解压:

去掉路径解压:

4)tar 打包工具

tar 的解压和压缩都是同一个命令,只需参数不同,使用比较方便

 1.创建一个 tar 包:

上面命令中,-c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后,比如不能写成 tar -fc shiyanlou.tar,可以写成 tar -f shiyanlou.tar -c ~。你还可以加上 -v 参数以可视的的方式输出打包的文件。上面会自动去掉表示绝对路径的 /,你也可以使用 -P 保留绝对路径符

 2.解包一个文件(-x 参数)到指定路径的已存在目录(-C 参数):

3.只查看不解包文件 -t 参数:

4.保留文件属性和跟随链接(符号链接或软链接),有时候我们使用 tar 备份文件当你在其他主机还原时希望保留文件的属性(-p 参数)和备份链接指向的源文件而不是链接本身(-h 参数):

5.解压 *.tar.gz 文件:

现在我们要使用其它的压缩工具创建或解压相应文件只需要更改一个参数即可:

 

5)总结

 

说了这么多,其实平常使用的参数并没有那么复杂,只需要记住常用的组合就可以了。 常用命令:

  • zip:
    • 打包 :zip something.zip something (目录请加 -r 参数)
    • 解包:unzip something.zip
    • 指定路径:-d 参数
  • tar:
    • 打包:tar -zcvf something.tar something
    • 解包:tar -zxvf something.tar
    • 指定路径:-C 参数

 

posted @ 2018-05-15 13:19  时代的稻草人  阅读(397)  评论(0编辑  收藏  举报