Bootstrap

Linux指令总结

学习《鸟哥linux私房菜》记录 的一些重要指令,本文只包括了书中的部分章节的指令总结,并在实验结果是在ubuntu下进行。

目录

1.系统实用工具使用命令

2.目录相关指令

3.文件相关指令

4.打包压缩和备份

5.shell操作指令


1.系统实用工具使用命令

(1)查看日期date

(2)查看日历cal

(3)使用计算器bc

scale指定小数精度,quit退出(退出方式:quit,exit,ctrl-c,ctrl-d)

(4)查看命令信息

man 命令名
命令名 --help

 

 

2.目录相关指令

(1)切换目录cd

cd ~ 切换到home文件夹

cd .. 切换到上一级目录

(2)显示当前目录pwd

(3)新建目录mkdir

创建多级目录时,如父目录不存在,子目录创建失败,解决方法是加上 -p参数,自动创建不存在的父目录

mkdir -p test1/test2/test3

创建带权限的目录

mkdir -m 777 test

(4)删除目录

删除目录同样需要一层一层的删除,分为两种情况,

一种是删除空目录,使用rmdir,可以加入-p连同上层空目录一起删除

rmdir -p test1/test2/test3

如果删除非空的目录,使用rm -r,r表示递归删除所有目录。

(5)查看当前目录的内容ls

ls -a查看所有目录下所有文件,包括隐藏文件,.开头

ls -l显示文件的权限等信息

ls -d 列出目录本身,而不是目录内的文件

(6)环境变量path

ls,cd等指令可以在任意目录下执行,是因为这些指令的可执行文件(sbin,bin)目录被加入到path变量中,当执行一个指令时,系统根据path的内容到每个目录下搜索相应的可执行文件(脚本文件),然后执行,也就是说,一个命令能不能被执行取决于它的可执行文件目录是否被添加到path中,如果添加了,在任何路径下都能执行,如果没有添加,即使在可执行文件目录该命令也不能被执行。

echo $PATH查看PATH的信息。echo具有打印的意思。

3.文件相关指令

(1)复制文件或目录cp

cp 源文件路径及文件名 目标文件路径及目标文件名(源和目标都要指定文件名,将一个文件复制到另一个路径下并命令为)

cp -a,复制目录时使用,保留连接和文件属性

cp -p,与连通文件权限一起复制,否则默认权限

cp -r,递归复制,就是复制目录

cp -i,如果目标文件存在,询问是否覆盖

cp -f,force强制的意思,把目标文件删除再复制

cp -s,创建快捷方式,软连接

cp -l,硬链接

(2)删除文件和目录

rm 文件名/目录名

常用的参数和cp类似

rm -r,删除目录

rm -f,强制删除

rm -i,删除前询问

(3)移动文件或目录mv(剪切)或者重命名

mv 源文件/目录 目标目录

注意mv和cp、rm的区别在于,mv目标只能是目录(将一个文件/目录移动到另一个目录),源文件会在原路径下消失(剪切),

此外,mv没有-r,不区分文件和目录的操作

mv -f,强制移动,无询问

mv -i,目标已存在,询问是否覆盖

mv -u,目标已存在,source比较新时才更新

(4)文件内容查看

正序查看cat+文件名(第1行到最后一行打印)

cat -A,列出特殊字符

cat -b,仅对非空白行进行行号显示

cat -n,所有行进行行号显示

倒序查看tac+文件名(命令刚好和cat相反,最后一行到第一行的顺序打印)

打印行号的查看,nl+文件名

可翻页查看

more+文件名,只能向下翻页

less+文件名,可以向上或者向下翻页

在翻页查看过程中,可以按如下键

enter、pagedown向下翻页

pageup向上翻页

/字符串:当前内容查询这个字符串

q退出

部分查看

head -n 行数 文件名,查看前n行

tail -n 行数 文件名,查看后n行

二进制文本查看od +文件名(关键是怎么显示)

od -a,默认字符输出

od -c,ascii码输出

od -d,10进制输出数据

od -f,浮点数输出数据

文件类型查看,file+文件名

(6)脚本文件的搜索

which -a command,将PATH目录中所有可以找到的指令列出

which +command,列出脚本文件所在位置

文件档名搜索

whereis+文件名,只能在sbin/bin等特定文件夹搜索,速度快

locate+keyword/updatedb,locate在系统文件数据库中查询,不用完整的文件名,仅需要关键字即可,速度快,但前提是文件被加入数据库中,可以使用updatedb手动更新数据库再查找。

find +目录名,查询目录下的文件,主要参数是时间参数

find 目录名 -mtime +/-n,+n表示n天前,-n表示n天之内

(7)linux文件共享之软连接和硬连接

一个文件在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata),用户数据就是文件中保存的数据,元数据则是辅助信息,文件名,创建时间,inode等,linux中inode号是文件的唯一标识,而不是文件名。

硬连接:一个inode号对应多个文件,有点像c++中的引用,其实同一个文件起了不同的别名,它们共有一个inode号。

  • 只能对已存在的文件进行创建;
  • 不能交叉文件系统进行硬链接的创建(不同的文件胸痛inode重复或者inode不同的意义);
  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件
  • 只能对文件,不能对目录(对目录进行硬连接,则对整个目录下所有文件进行硬链接,过于复杂)

软连接:重新创建了一个新的文件,有独立的inode,只是这个文件用户数据部分是连接的文件路径;

  • 软链接有自己的文件属性及权限等;
  • 可对不存在的文件或目录创建软链接;
  • 软链接可交叉文件系统;
  • 软链接可对文件或目录创建;
  • 创建软链接时,链接计数 i_nlink 不会增加;
  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html

4.打包压缩和备份

(1)压缩指令

xz,是压缩包最高的软件,

xz [-dtlkc] 文档名

-d,解压缩

-t,测试文件完整性,看是否有错误

-l,列出压缩文件的相关信息

-k,保留原文件不删除

(2)打包指令tar

将多个文件或目录打包成一个文件,再进行压缩

tar -c,创建打包文件,结合-v查看创建过程中被打包的文件名

tar -t,在创建打包文件后,配合-v查看打包文件有哪些文档名

tar -x,解压缩或解包,结合-C在特定目录解开

tar -J,通过xz进行压缩和解压缩

tar -f 后面加上要处理的文档名

tar三种操作

压缩tar -Jcv -f filename(压缩后的文件名)filename

查询 tar -Jtv -f filename(已有的压缩打包文件)

解压缩 tar -Jxv -f filename(已有的压缩文件) -C 目录

5.shell操作指令

(1)命令删除和光标移动

ctrl+u,从光标处向前删除命令

ctrl+k,从光标处向后删除命令

ctrl+a,光标移动到命令最前面

ctrl+e,光标移动到命令最后面

(2) shell中变量设置

变量名,变量赋值

myname=wzy

如果变量赋值内容中有特殊字符(空格,回车等),一种方法是使用“”,另一种方法是使用跳脱符号(反斜杠,类似于转义字符)。对于引号,分为“”和’',’‘会使一个变量失去变量内容,成为一个字符串,其内容是变量名。

例如

扩充变量内容

myname=$myname:xxx

取消变量unset

unset myname

查看变量内容echo

echo $myname

当该变量需要在其他子程序(自定义变量可以在当前shell中使用,但不能在其他shell中使用,而子程序会继承父进程的环境变量,所以环境变量可以在子进程中使用)中执行时,export指令将当前变量加入PATH中

export 变量名(export将自定义变量转换为环境变量)

env查看环境变量

set查看环境变量和自定义的变量 

 (3)变量的读取、数组和宣告

读取键盘输入read

read -p "提升文本" -t 等待时间 变量名

更改变量类型

bash默认情况下,数据类型是字符串,所以以下加法运算无法得到想要的结果,因此当我们需要非字符串的的变量操作时,使用declare声明变量类型

declare -x 变为环境变量

declare -i 变为整形

declare -a,变为数组

declare -r ,只读变量

将-改为+,取消设置

 (4)查看历史指令history

查看history后,使用!选择历史指令执行

!number执行第几条指令

!command 执行以commad开头的指令

!!执行上一条指令(等效于上翻页键+回车)

(5)数据流重定向

一般命令执行结果无论成功与否,都会打印在屏幕上,如果想把这些信息保存到不同的文件中,可以使用数据流重定向。

> 以覆盖的方式将正确的数据输出到指定的文件或者装置上

>> 以累加的方式将正确的数据输出到指定的文件或装置上

2>以覆盖的方式将错误的信息输出到指定的文件或者装置上

2>> 以累加的方式将错误的信息输出到指定的文件或装置上

(6)一次执行多条指令的方法

一种方法是通过shell脚本执行,另一种方法就是在指令和指令之间添加相应的符号实现

;指令之间用;分隔,按顺序执行各指令。但这种方法仅适用于指令之间无依赖性的情况,如果后面指令的执行依赖前面指令执行的结果,需要对指令回传的结果进行判断。

cmd1 && cmd2:cmd1正确执行则执行cmd2,否则不执行

cmd1 || cmd2: cmd1正确执行,则cmd2不执行,否则执行cmd2

(7)管线命令

管线命令用来指定bash输出数据的格式,使用"|"界限符号。

管线命令仅处理正确信息的数据,对执行错误信息不处理。

撷取指令cut和grep

cut 从一行信息中取出我们想要的部分;

cut -c 字符区间(12-一行中从第12字符开始到结束的字符)

cut -d 分隔符 -f 字段数(以分隔符分隔信息,提取指定的分段信息)

grep从信息中选择一整行信息

排序命令sort,uniq,wc

sort -r反向排序

uniq,重复内容仅显示一次,uniq -c对重复内容进行计数

wc,查看文件中有多少行,英文单字和多少个字符-l,-w,-m

双向重导向指令tee

让标准信息既输出到屏幕又输出到指定文件

字符转换命令

tr删除一段信息中的文字或者进行替换

tr -d str,删除信息中的str字符串

join -t ‘空格符’file1 file2 ,将两个文件中具有相同字符串的行的数据合并成一行,有点类似于mysql的外部联结

paste file1 file2 直接将两个文件中的行粘贴在一起

分区命令

当文件过大,无法复制时,使用split根据文件大小或者行数分为若干小文件

split [-bl] file prefix

b按字节数分隔

l按行数分隔

prefix是划分后文件的前缀

 

 

 

;