基本命令与认识Linux

ZaynPei Lv6

Linux命令基础习惯

date 显示系统当前时间, 本质是通过shell解释器调用 /bin/date.exe cat /etc/shells 查看当前可使用的shell echo $SHELL 查看当前使用的shell, echo是回声命令, 用于将参数输出到标准输出

键盘快捷键: Ctrl+A 将光标移动到行首 Ctrl+E 将光标移动到行尾 Ctrl+L 清屏 Ctrl+U 删除整行 方向键 移动光标 注意BACKSPACE删除的是光标前一个字符, 而DELETE删除的是光标后一个字符

类Unix系统目录

pwd 查看当前所在目录, 同时当前目录也会显示在当前系统环境和$符号之间 Linux系统目录常见项: - bin:存放二进制可执行文件 - boot:存放开机启动程序 - dev:存放设备文件, 字符设备如键盘、块设备如磁盘(注意WSL没有, 它并不直接访问物理硬件设备) - home:存放普通用户 - etc:用户信息和系统配置文件 passwd、group - lib:库文件:libc.so.6 - root:管理员宿主目录(家目录) - usr:(unix software resource)用户资源管理目录, 可以是第三方软件

目录和文件操作

pwd 查看当前所在目录 cd – 返回上一个目录 cd ~ 返回用户家目录 cd / 返回根目录

相对路径: - . 当前目录 - .. 上一级目录 绝对路径: / 根目录

ls 列出当前文件夹下目录项(ls dirname显示dirname下目录项) ls -R 递归列出所有子目录下的文件 ls -Rl 递归列出并展示详细信息 ls -a 显示所有文件, 包括隐藏文件 ls -l 显示目录项详细信息 如上图所示, 详细信息依次代表文件权限, 硬链接计数, 所有者 所属组, 大小(单位字节), 时间, 文件名/文件夹名

其中文件权限字符串如上述图所示共有十位, 如-rw-r–r–(序号1234567890), 其中: 1代表文件类型, 如-代表普通文件, d代表目录 234代表所有者读-写-执行权限, 如rw-代表所有者有读写权限, 无执行权限 567代表同组用户读写执行权限 890代表其他人读写执行权限

Linux系统文件类型: 7种 - 普通文件:- - 目录文件:d - 字符设备文件:c - 块设备文件:b - 软连接:l - 管道文件:p - 套接字:s

which instruct 查看instruct命令所在系统 $PATH 环境变量中的位置 mkdir dirname 新建目录 touch filename 创建名为filename的空文件 rm filename 删除文件 rm dirname -r 递归删除目录 mv filename dirname 移动文件filename到dirname目录下 mv dirname1 dirname2 移动目录dirname1到dirname2目录下 cp filename dirname 复制文件到目录dirname下 cp dirname1 dirname2 复制目录dirname1到dirname2目录下 cp -r dirname1 dirname2 递归复制目录dirname1到dirname2目录下 cp -a dirname1 dirname2 递归完全复制目录dirname1到dirname2目录下, 保留相同的文件属性, 包括时间, 权限, 软硬链接等

cat filename 查看文件内容 tac filename 逆转查看文件内容 cat 读取终端,就是回显echo vim filename 编辑文件filename(使用vim编辑器)

more filename 分页查看文件内容(空格翻页,回车一行, q退出) less filename 和上面more类似

head -n filename 查看文件前n行 tail -n filename 查看文件后n行

tree 查看当前目录结构树 tree dirname 查看dirname目录结构树

软链接和硬链接

ln -s file file.s 创建一个软链接(软链接就像windows下的快捷方式, 在相同的目录下创建另一个可以访问到file的文件) - 如果是用相对路径创建软连接, 则软连接指向的是file文件的相对路径, 这意味着如果file文件移动了, 软连接就会失效 - 如果是用绝对路径创建软连接, 则软连接指向的是file文件的绝对路径, 这意味着无论file文件移动到哪里, 软连接都不会失效

ln file file.h 创建一个硬链接(硬链接就像windows下的复制, 在相同的目录下创建另一个可以访问到file的文件) - 创建硬链接后,文件的硬链接计数+1 - 硬链接特点是修改文件内容, 硬链接文件的内容也会改变, 因为它们指向的是同一个 inode - 删除一个硬链接时,文件的硬链接计数-1,当这个计数减为0时,才会删除这个文件

文件名与 inode

在 Linux 文件系统中,一个文件由两部分组成:

文件名 (Filename):我们用来识别和访问文件的名称。

inode (索引节点):一个存储文件元数据(metadata)的数据结构,包括文件大小、所有者、权限、创建时间以及最重要的——指向磁盘上存储文件真实数据的块的指针。

可以这样理解:文件名是给人看的标签,而 inode 才是文件的“身份证”。一个文件名必定指向一个 inode,通过 inode 才能找到文件的实际内容。

硬链接的本质是给一个已存在的 inode 分配一个新的文件名。换句话说,它创建了一个指向同一个 inode 的新指针。

当你创建一个硬链接时,你并没有复制文件的内容,只是增加了一个引用该文件内容的方式。硬链接和源文件拥有完全相同的 inode 号

而软链接(也叫符号链接)则完全不同。它是一个独立的新文件,拥有自己的 inode。这个文件的内容很特殊,它存储的是另一个文件或目录的路径。它就像 Windows 系统中的“快捷方式”。

用户和用户组

whoami 查看当前用户

chmod 修改权限操作, 主要有两种方法: 第一种,文字设定法 chmod [who] [+|-|=] [mode] filename 操作对象who可以是下述字母中的任一个或者它们的组合 u 表示”用户(user)”,即文件或目录的所有者 g 表示”同组(group)用户”,即与文件所有者有相同组ID的所有用户 o 表示”其他(others)用户” a 表示”所有(all)用户”,它是系统默认值

操作符号可以是: + 添加某个权限 - 取消某个权限 = 赋予给定权限并取消其他所有权限(如果有的话) 例如, chmod u+rwx filename 给文件filename的所有者添加读写执行权限

第二种,数字设定法 chmod 操作码 filename (直接用操作码修改文件权限)

例如, 对于file的权限 -rw- rw- r– 421 421 421 三个组的权限都用二进制编号,比如要设置当前用户对文件的读写和执行权限,则当前用户的操作权限为4(读)+ 2(写)+ 1(执行) = 7. 用户组和其他用户的权限设置也是一样的

对于file的当前权限-rw-rw-r–, 我们设置如下: 所有者 rwx = 7 所有者所在组 rw = 6 其他用户 r = 4 操作码就是764, 即chmod 764 filename

sudo adduser newusername 添加新用户 sudo chown username filename 修改文件所有者 su username 切换当前用户为username sudo addgroup groupname 添加新的用户组 sudo chgrp groupname filename 修改文件所属用户组 sudo chown username:groupname filename 同时修改文件所属用户和用户组 sudo deluser username 删除用户 sudo delgroup groupname 删除用户组

sudo su 切换root用户 sudo passwd username 设置用户密码

find 命令

find命令:找文件, 表达式为find [path] [option] action - -maxdepth 指定搜索深度。应作为第一个参数出现。 - 例如, find ./ -maxdepth 1 -name “file.jpg”, 查找当前目录下的所有后缀为.jpg且文件名包含file的文件 - -type 按文件类型搜索 d/p/s/c/b/l/ f:普通文件 - 例如, find / -type f 查找根目录下的所有普通文件 - -name 按文件名搜索 - 例如, find / -name “*.jpg” 查找根目录下的所有后缀为.jpg的文件 - -size 按文件大小搜索, 单位:k、M、G - 例如, find /home/ziyipei -size +20M -size -50M - 这里要注意,两个size一个都不能少,还有就是文件大小单位对大小写敏感 - -user 按文件所有者搜索 - -group 按文件所属用户组搜索 - -perm 按文件权限搜索 - -mtime 按文件修改时间搜索, 指的是文件内容最后一次修改的时间(modification), 单位:天(-n 表示n天内修改的文件, +n 表示n天前修改的文件) - 例如, find /home/ziyipei -mtime -10 查找/home/ziyipei目录下最近10天内修改的文件 - -atime 按文件访问时间搜索, 指的是文件最后一次被访问的时间, 单位:天 - 如果使用-amin则单位为分钟, -amin -10 表示最近10分钟内访问的文件 - -ctime 按文件状态改变时间搜索, 指的是文件元数据最后一次改变的时间(change), 单位:天 - -exec 将find搜索的结果集执行某一指定命令。 - find /usr/ -name ‘tmp’ -exec ls -ld {} ; - 这里的{}表示find搜索到的结果, ;表示命令结束, 一般修改的地方就是-exec和;之间的命令, 其余的不变 - -ok: 以交互式的方式 将find搜索的结果集执行某一指定命令

-grep和xargs

grep命令:在文件中搜索指定的字符串, 默认是在当前目录下搜索, 也可以指定目录或者文件搜索 - -r 递归搜索 - -i 忽略大小写 - -n 显示匹配行的行号 例如, grep -r ‘copy’ ./ -n, 递归查找当前目录下的所有文件中包含copy的行, 并显示行号 grep -r ‘copy’ ./README.md -n, 查找README.md文件中包含copy的行, 并显示行号

ps监控后台进程工作情况,默认只显示当前可以和用户交互的进程 ps aux, 显示所有进程的详细信息, 包括进程ID、用户、CPU占用率、内存占用率、启动时间、命令等(其中a表示所有进程, u表示用户, x表示显示所有进程) ps aux | grep ‘root’ 将进程结果集通过管道传递给grep命令, 查找包含root的进程(注意使用grep搜索进程,有一条结果是搜索进程本身)

xargs:用于将前一个命令的输出作为后一个命令的参数(不加-) 可以和find结合, 将find搜索的结果集执行某一指定命令: find /usr/ -name ‘tmp’ | xargs ls -ld , 这里的ls -l 表示对find搜索到的每个文件执行ls -l命令 可以等价于find … -exec ls -l {} ; 不同点在于当结果集合很大的时候,xargs会对结果进行分段处理, 所以性能好些. 但xargs也有缺陷,xargs默认用空格来分割结果集,当文件名有空格的时候,会因为文件名被切割失效 所以当文件名中包含空格时,我们可以使用以下方法来避免这个问题: - 使用 -0 选项来使得xargs指定文件名的结束符为 null 字符 - 使用 find 命令的 -print0 选项来输出 null 字符结尾的文件名 - 例如, find /usr/ -name ‘tmp’ -print0 | xargs -0 ls -l - 第一个-print0指定结果集分隔为null,第二个-0指定xargs分隔为null

创建名字带空格的文件方法: 第一个方法,文件名加引号 第二个方法,转义空格为’ ’

软件包安装

下面只介绍利用互联网安装软件包的方法, 使用安装包进行软件安装先略过 sudo apt install softname 一般的安装软件, 也可以使用别的包管理工具, 如yum, dnf等 sudo apt update 更新软件列表 sudo apt remove softname 卸载软件

压缩和打包

压缩命令有两个: gzip和bzip2. 两者都需要配合tar打包命令使用, 而且这两个压缩的缺陷都是只能对单个文件进行压缩,一来不能压目录,二来不能打包

第一种压缩方式:gzip tar zcvf 要生成的压缩包名 压缩材料 (这里压缩包名一般以.tar.gz结尾) - 例如, tar zcvf test.tar.gz test.txt, 压缩test.txt文件, 生成test.tar.gz压缩包 上述命令实际上执行了两步,一个是gzip进行压缩: gzip filename (解压是gunzip zipfilename) 另一个是使用tar打包, 一般我们直接使用tar zcvf 来打包压缩, 不需要先压缩再打包

所以tar zcvf 是两条指令的结合版本. 对zcvf进行解释: z:zip,压缩 c:create,创建 v:vision,显示压缩过程,可以去掉,直接用zcf,但这样不显示压缩过程 f:file,文件

file filename 查看文件来源

第二种压缩方式:bzip2 tar jcvf 要生成的压缩包名 压缩材料 (这里压缩包名一般以.tar.bz2结尾) - 例如, tar jcvf test.tar.bz2 test.txt, 压缩test.txt文件, 生成test.tar.bz2压缩包 上述命令实际上执行了两步,一个是bzip2进行压缩: bzip2 filename (解压是bunzip2 zipfilename) 另一个是使用tar打包

可以看出两者的区别只在于压缩命令不同, gzip用的是z, bzip2用的是j, 其余的包括生成文件的后缀也一样

解压: 将压缩命令中的c –> x tar zxvf 压缩材料 使用gzip解压 tar jxvf 压缩材料 使用bzip2解压

此外, 还可以通过Linux和Windows通用的rar和zip压缩, 但需要先安装: sudo apt install rar zip

rar a -r newdir.rar dir, 压缩dir目录, 生成newdir.rar压缩包(a表示添加, -r表示递归压缩子目录) unrar x newdir.rar 解压rar文件 zip -r newdir.zip dir, 压缩dir目录, 生成newdir.zip压缩包(-r表示递归压缩子目录) unzip newdir.zip 解压zip文件

sudo aptitude show softname 查看软件安装信息

其他命令

env 查看环境变量 env | grep ‘PATH’ 和管道, grep结合查看环境变量中PATH的值 jobs 查看操作系统当前运行了哪些用户作业 kill 杀死进程, 例如 kill -9 1234, 这里的-9表示强制杀死进程, 1234表示进程ID

top 文字版任务管理器 ifconfig 查看网卡信息 man 系统参考手册 man n name 在系统手册第n章查看name, 主要是以下几章: - 第一章是基本命令 - 第二章是系统调用 - 第三章是库函数 - 第五章是文件格式和约定

alias 给命令起别名, 例如 alias ll=‘ls -l’, 这样就可以使用ll命令来代替ls -l