学一下Linux

0x01 基本概念及操作

一、

终端本质上是对应着 Linux 上的 /dev/tty 设备,Linux 的多用户登陆就是通过不同的 /dev/tty 设备完成的,Linux 默认提供了 6 个纯命令行界面的 “terminal”(准确的说这里应该是 6 个 virtual consoles)来让用户登录,可以通过使用[Ctrl]+[Alt]+[F1]~[F6]进行切换.

二、常用快捷键

(1) [Tab]
使用Tab键来进行命令补全,Tab键一般是在字母Q旁边,这个技巧给你带来的最大的好处就是当你忘记某个命令的全称时可以只输入它的开头的一部分,然后按下Tab键就可以得到提示或者帮助完成。
不止补全命令,补全目录、补全命令参数都是没问题的。

(2)[Ctrl+c]
当你在 Linux 命令行中无意输入了一个不知道的命令,或者错误地使用了一个命令,导致在终端里出现了你无法预料的情况,比如,屏幕上只有光标在闪烁却无法继续输入命令,或者不停地输出一大堆你不想要的结果。这时候你就可以使用Ctrl+c键来强行终止当前程序。

(3)其他快捷键:
Ctrl+d 键盘输入结束或退出终端
Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行
Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a 将光标移至输入行头,相当于Home
Ctrl+e 将光标移至输入行末,相当于End
Ctrl+k 删除从光标所在位置到行末
Alt+Backspace 向前删除一个单词
Shift+PgUp 将终端显示向上滚动
Shift+PgDn 将终端显示向下滚动

(4)一些字符的含义
* 匹配 0 或多个字符
? 匹配任意一个字符
[list] 匹配 list 中的任意单一字符
[^list] 匹配 除list 中的任意单一字符以外的字符
[c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]
{string1,string2,...} 匹配 string1 或 string2 (或更多)其一字符串
{c1..c2} 匹配 c1-c2 中全部字符 如{1..10}



0x02 用户及文件权限管理

一、用户操作(以"lilei"为例)

$ sudo adduser lilei  创建用户
$ su -l lilei         切换用户
exit或Ctrl+d           注销用户
`$ sudo deluser lilei --remove-home` 删除用户

二、查看用户属于哪个用户组

方法一:groups
方法二:查看 /etc/group 文件

使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。

三、ls命令

$ls -l
使用较长格式列出文件
图片描述
图片描述
一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件

$ ls -A
显示除了 .(当前目录)和 …(上一级目录)之外的所有文件,包括隐藏文件(Linux 下以 . 开头的文件为隐藏文件)。

当然,你可以同时使用 -A 和 -l 参数:$ ls -Al

$ ls -dl <目录名>
查看某一个目录的完整属性,而不是显示目录里面的文件属性

$ ls -AsSh
显示所有文件大小,并以普通人类能看懂的方式呈现:
其中小 s 为显示文件大小,大 S 为按文件大小排序,若需要知道如何按其它方式排序,请使用“man”命令查询。

四、变更文件所有者(chown)

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

# 注意当前的用户必须是 lilei
# 如果是 shiyanlou 用户需要切换到 lilei(如果之前已经删除需要重新创建下)
$ su lilei
$ cd /home/lilei
$ touch iphone6

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

# 需要切换到 shiyanlou 用户执行以下操作
$ cd /home/lilei
$ ls iphone6
$ sudo chown shiyanlou iphone6

五、修改文件权限(chmod)

1、方式一:二进制方法:

图片描述

为了演示,我先在文件里加点内容:
$ echo "echo \"hello shiyanlou\"" > iphone6
然后修改权限:
$ chmod 600 iphone6

2、方式二:加减赋值操作
完成上述相同的效果,你可以:
$ chmod go-rw iphone6
go 还有 u 分别表示 group、others 和 user,+- 分别表示增加和去掉相应的权限。



0x03 Linux 目录结构及文件基本操作

一、目录路径

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

二、新建

1、新建空白文件
使用 touch 命令创建空白文件

2、新建目录
使用 mkdir(make directories)命令可以创建一个空目录,也可同时指定创建目录的权限属性。
创建名为“ mydir ”的空目录:

$mkdir mydir 

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

$ mkdir -p father/son/grandson

三、复制

使用 cp(copy)命令复制一个文件到指定目录。

将之前创建的“ test ”文件复制到“ /home/shiyanlou/father/son/grandson”目录中:

$ cp test father/son/grandson

要成功复制目录需要加上 -r 或者 -R 参数,表示递归复制

四、删除

1、删除文件:使用 rm(remove files or directories)命令删除一个文件。你如果想忽略只读文件权限提示,直接删除文件,可以使用 -f参数强制删除:

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

五、移动文件与文件重命名

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

mv 源目录文件 目的目录:

$ mkdir Documents
$ touch file1
$ mv file1 Documents

2、重命名文件
将文件“file1 ”重命名为“ myfile ”

mv 旧的文件名 新的文件名

$ mv file1 myfile

六、查看文件

使用 cattacnl 命令查看文件
前两个命令都是用来打印文件内容到标准输出(终端),其中 cat 为正序显示,tac 为倒序显示。
可以加上 -n参数显示行号

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

这里简单列举它的常用的几个参数:

-b : 指定添加行号的方式,主要有两种:
    -b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)
    -b t:只列出非空行的编号并列出(默认为这种方式)
-n : 设置行号的样式,主要有三种:
    -n ln:在行号字段最左端显示
    -n rn:在行号字段最右边显示,且不加 0
    -n rz:在行号字段最右边显示,且加 0
-w : 行号字段占用的位数(默认为 6 位)

moreless 就是用来"阅读"一个文件的内容的,比如说 man 手册内部就是使用的 less 来显示内容。

使用 more 命令打开 passwd 文件:

$ more passwd

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

使用 headtail 命令查看文件
这两个命令,那些性子比较急的人应该会喜欢,因为它们一个是只查看文件的头几行(默认为 10 行,不足 10 行则显示全部)和尾几行。还是拿 passwd 文件举例,比如当我们想要查看最近新增加的用户,那么我们可以查看这个 /etc/passwd 文件,不过我们前面也看到了,这个文件里面一大堆乱糟糟的东西,看起来实在费神啊。因为系统新增加一个用户,会将用户的信息添加到 passwd 文件的最后,那么这时候我们就可以使用 tail 命令了:

$ tail /etc/passwd

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

$ tail -n 1 /etc/passwd

六、查看文件类型

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

$ file /bin/ls

七、 搜索文件

与搜索相关的命令常用的有 whereiswhichfindlocate

1、 whereis 简单快速

$ whereis who
$ whereis find

会看到 whereis find 找到了三个路径,两个可执行文件路径和一个 man 在线帮助文件所在路径,这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。

whereis只能搜索二进制文件(-b)man 帮助文件(-m)源代码文件(-s)。如果想要获得更全面的搜索结果可以使用 locate 命令。


2、 locate 快而全

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

$ sudo apt-get update
$ sudo apt-get install locate
$ locate /etc/sh

注意,它不只是在 /bin 目录下查找,还会自动递归子目录进行查找。

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

$ locate /usr/share/\*.jpg

注意要添加* 号前面的反斜杠转义,否则会无法找到。

如果想只统计数目可以加上 -c 参数,-i 参数可以忽略大小写进行查找,whereis-b-m-s 同样可以使用。


3、 which小而精

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

$ which man

4、 find 精而细

find 应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。

这条命令表示去/etc/目录下面 ,搜索名字叫做 interfaces 的文件或者目录。这是 find 命令最常见的格式,千万记住 find 的第一个参数是要搜索的地方:

$ sudo find /etc/ -name interfaces

注意 find 命令的路径是作为第一个参数的, 基本命令格式为

find [path] [option] [action] 。



0x04 压缩与解压

1、Linux上的压缩

在讲 Linux 上的压缩工具之前,有必要先了解一下常见常用的压缩包文件格式。在 Windows 上最常见的不外乎这两种 *.zip*.7z 后缀的压缩文件。而在 Linux 上面常见的格式除了以上两种外,还有 .rar*.gz*.xz*.bz2*.tar*.tar.gz*.tar.xz*.tar.bz2,简单介绍如下:

*.zip zip 程序打包压缩的文件
*.rar rar 程序压缩的文件
*.7z 7zip 程序压缩的文件
*.tar tar 程序打包,未压缩的文件
*.gz gzip 程序(GNU zip)压缩的文件
*.xz xz 程序压缩的文件
*.bz2 bzip2 程序压缩的文件
*.tar.gz tar 打包,gzip 程序压缩的文件
*.tar.xz tar 打包,xz 程序压缩的文件
*tar.bz2 tar 打包,bzip2 程序压缩的文件
*.tar.7z tar 打包,7z 程序压缩的文件
讲了这么多种压缩文件,不过我们一般只需要掌握几个命令即可,包括 ziptar


2、使用zip命令

(1)使用 zip 打包文件夹:

$ cd /home/shiyanlou
$ zip -r -q -o shiyanlou.zip /home/shiyanlou/Desktop
$ du -h shiyanlou.zip
$ file shiyanlou.zip

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

du 命令查看打包后文件的大小

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

$ zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou/Desktop -x ~/*.zip
$ zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou/Desktop -x ~/*.zip

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

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

$ du -h -d 0 *.zip ~ | sort

通过 man手册可知:

h, --human-readable(顾名思义,增强可读性)
d, --max-depth(所查看文件的深度)

这样一目了然,你可以看到默认压缩级别应该是最高的,效果很明显,不过你在环境中操作之后看到的压缩文件大小可能跟图上的有些不同,因为系统在使用过程中,会随时生成一些缓存文件在当前用户的家目录中,这对于我们学习命令使用来说,是无关紧要的,可以忽略这些不同。

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

$ zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou/Desktop

注意: 关于 zip 命令,因为 Windows 系统与 Linux/Unix 在文本文件格式上的一些兼容问题,比如换行符(为不可见字符),在 Windows 为 CR+LF(Carriage-Return+Line-Feed:回车加换行),而在 Linux/Unix 上为 LF(换行),所以如果在不加处理的情况下,在 Linux 上编辑的文本,在 Windows 系统上打开可能看起来是没有换行的。如果你想让你在 Linux 创建的 zip 压缩文件在 Windows 上解压后没有任何问题,那么你还需要对命令做一些修改:

$ zip -r -l -o shiyanlou.zip /home/shiyanlou/Desktop

需要加上 -l 参数将 LF 转换为 CR+LF 来达到以上目的。


2、 使用tar命令

在 Linux 上面更常用的是 tar工具,tar 原本只是一个打包工具,只是同时还是实现了对 7zgzipxzbzip2 等工具的支持,这些压缩工具本身只能实现对文件或目录(单独压缩目录中的文件)的压缩,没有实现对文件的打包压缩,所以我们也无需再单独去学习其他几个工具,tar 的解压和压缩都是同一个命令,只需参数不同,使用比较方便

下面先掌握 tar 命令一些基本的使用方式,即不进行压缩只是进行打包(创建归档文件)和解包的操作。

(1)创建一个 tar包:

$ cd /home/shiyanlou
$ tar -cf shiyanlou.tar /home/shiyanlou/Desktop

上面命令中,
-c 表示创建一个 tar 包文件

-f 用于指定创建的文件名(注意文件名必须紧跟在 -f 参数之后,比如不能写成 tar -fc shiyanlou.tar,可以写成 tar -f shiyanlou.tar -c ~)

-v 参数以可视的方式输出打包的文件。

上面会自动去掉表示绝对路径的 /,你也可以使用 -P 保留绝对路径符。

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

$ mkdir tardir
$ tar -xf shiyanlou.tar -C tardir

(3)只查看,不解包文件 -t 参数:

$ tar -tf shiyanlou.tar

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

$ tar -cphf etc.tar /etc

(5)对于创建不同的压缩格式的文件,对于 tar来说是相当简单的,需要的只是换一个参数,这里我们就以使用 gzip 工具创建 *.tar.gz文件为例来说明。

我们只需要在创建 tar 文件的基础上添加 -z 参数,使用 gzip 来压缩文件:

$ tar -czf shiyanlou.tar.gz /home/shiyanlou/Desktop

解压 *.tar.gz 文件:

$ tar -xzf shiyanlou.tar.gz

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

压缩文件格式 参数
*.tar.gz -z
*.tar.xz -J
*tar.bz2 -j

tar 命令的参数很多,不过常用的就是上述这些,需要了解更多你可以查看 man 手册获取帮助。

发布了42 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42181428/article/details/89118492