环境变量与文件查找
通常我们会涉及到的变量类型有三种:
当前 Shell 进程私有用户自定义变量,只在当前 Shell 中有效。
Shell 本身内建的变量。
从自定义变量导出的环境变量。
文件打包与解压缩
-
zip:
打包 :zip something.zip something (目录请加 -r 参数)
解包:unzip something.zip
指定路径:-d 参数
-
tar:
打包:tar -cf something.tar something
解包:tar -xf something.tar
指定路径:-C 参数
命 令 | 说 明 |
---|---|
set | 显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。 |
env | 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。 |
export | 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。 |
两个重要文件 /etc/bashrc(有的 Linux 没有这个文件) 和 /etc/profile ,它们分别存放的是 shell 变量和环境变量。还有要注意区别的是每个用户目录下的一个隐藏文件:.profile
这个 .profile 只对当前用户永久生效。而写在 /etc/profile 里面的是对所有用户永久生效,所以如果想要添加一个永久生效的环境变量,只需要打开 /etc/profile,在最后加上你想添加的环境变量就好啦。
如何让环境变量立即生效?
可以使用source
命令来让其立即生效,也可以用.
来代替source
搜索文件
whereis 简单快速
locate 快而全
which 小而精
find 精而细
注意 find 命令的路径是作为第一个参数的, 基本命令格式为 find [path] [option] [action] 。
查看磁盘和目录的容量
- 使用 df 命令查看磁盘的容量
- 使用 du 命令查看目录的容量
# 只查看1级目录的信息
$ du -h -d 0 ~
# 查看2级
$ du -h -d 1 ~
du -h #同--human-readable 以K,M,G为单位,提高信息的可读性。
du -a #同--all 显示目录中所有文件的大小。
du -s #同--summarize 仅显示总计,只列出最后加总的值。
创建虚拟磁盘
使用dd
命令创建虚拟镜像文件
dd if=/dev/zero of=virtual.img bs=1M count=256
使用 mkfs 命令格式化磁盘(我们这里是自己创建的虚拟磁盘镜像)
sudo mkfs.ext4 virtual.img
使用 mount 命令挂载磁盘到目录树
使用mount来查看下主机已经挂载的文件系统:
sudo mount
mount [options] [source] [directory]
mount -o loop -t ext4 virtual.img /mnt
# 也可以省略挂载类型,很多时候 mount 会自动识别
# 以只读方式挂载
mount -o loop --ro virtual.img /mnt
# 或者mount -o loop,ro virtual.img /mnt
使用 umount 命令卸载已挂载磁盘
# 命令格式 sudo umount 已挂载设备名或者挂载点,如:
$ sudo umount /mnt
使用 fdisk 为磁盘分区
# 查看硬盘分区表信息
$ sudo fdisk -l
使用 losetup 命令建立镜像与回环设备的关联
$ sudo losetup /dev/loop0 virtual.img
# 如果提示设备忙你也可以使用其它的回环设备,"ls /dev/loop*"参看所有回环设备
# 解除设备关联
$ sudo losetup -d /dev/loop0
内建命令与外部命令
一个是天生自带的天赋技能,一个是后天得来的附加技能。
#得到这样的结果说明是内建命令,正如上文所说内建命令都是在 bash 源码中的 builtins 的.def中
xxx is a shell builtin
#得到这样的结果说明是外部命令,正如上文所说,外部命令在/usr/bin or /usr/sbin等等中
xxx is /usr/bin/xxx
#若是得到alias的结果,说明该指令为命令别名所设定的名称;
xxx is an alias for xx --xxx
-
help 命令
ls --help
不管是内建还是外部命令都可以
-
man 命令
man ls
man没有内建与外部命令的区分,因为 man 工具是显示系统手册页中的内容,也就是一本电子版的字典,这些内容大多数都是对命令的解释信息,还有一些相关的描述。通过查看系统文档中的 man 也可以得到程序的更多相关信息和 Linux 的更多特性。
在这里,“ LS ”表示手册名称,而“(1)”表示该手册位于第一章节。这个章节又是什么?在 man 手册中一共有这么几个章节
章节数 说明 1 Standard commands (标准命令) 2 System calls (系统调用) 3 Library functions (库函数) 4 Special devices (设备说明) 5 File formats (文件格式) 6 Games and toys (游戏和娱乐) 7 Miscellaneous (杂项) 8 Administrative Commands (管理员命令) 9 其他(Linux特定的), 用来存放内核例行程序的文档。
-
info 命令
info ls
Linux任务计划crontab
crontab 的使用
#启动它
sudo cron -f &
#添加一个计划任务
crontab -e
#确定我们的 cron 是否成功的在后台启动
ps aux | grep cron
#查看到执行任务命令之后在日志中的信息反馈
sudo tail -f /var/log/syslog
#去删除任务
crontab -r
#查看我们添加了哪些任务
crontab -l
挑战:备份日志
小明是一个服务器管理员,他需要每天备份论坛数据(这里我们用 alternatives.log 日志替代),备份当天的日志并删除之前的日志。而且备份之后文件名是 年-月-日 的格式。alternatives.log 在 /var/log/ 下面。
目标
为 shiyanlou 用户添加计划任务
每天凌晨 3 点的时候定时备份 alternatives.log 到 /home/shiyanlou/tmp/ 目录
命名格式为 年-月-日,比如今天是2017年4月1日,那么文件名为 2017-04-01
方法
sudo cron -f &
crontab -e
#添加内容
0 3 * * * sudo rm /home/shiyanlou/tmp/*
0 3 * * * sudo cp /var/log/alternatives.log /home/shiyanlou/tmp/$(date +\%Y-\%m-\%d)
顺序执行多条命令
sudo apt-get update;sudo apt-get install some-tool;some-tool
有选择的执行命令
which cowsay>/dev/null && echo "exist" || echo "not exist"