学习《鸟哥linux私房菜》记录 的一些重要指令,本文只包括了书中的部分章节的指令总结,并在实验结果是在ubuntu下进行。
目录
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是划分后文件的前缀