文件系统和基本命令
一、文件系统
1.Linux目录树
根目录:/
当前目录(路径):.(通常可省略)
父目录:..
绝对目录(路径):以/开头
相对目录(路径):不以/开头
2.重要的路径
/bin:可执行文件,即通常所说的“命令”所在的路径
/sbin:可执行文件,与系统相关的命令
/etc:系统配置文件
/etc/skel:普通用户模板文件(如果手残弄坏了配置文件可从此处拷贝初始文件)
/home:普通用户的家目录
/usr/*:一般存放用户安装的文件
/var/log:日志文件
#文件和目录操作
tree -L 1/ #-L level限制目录或显示层级
二.基本命令
1.什么是shell?
Shell is an interface between user and kernel.
Shell interprets your input as commands and pass them to kernel.
2.不同shell的语法、变量和函数
参考 Unix Shells: Bash, Fish, Ksh, Tcsh, Zsh - Hyperpolyglot
真正能够控制计算机硬件(CPU、内存、显式器等)的只有操作系统内核,图形界面和命令行只是架设在用户和内核之间的⼀座桥梁。Shell 是⼀个应用程序,它连接了用户和Linux 内核,让用户能够更加高效、安全、低成本地使用Linux 内核,这就是Shell 的本质。Shell 本身并不是内核的⼀部分,它只是站在内核的基础上编写的⼀个应⽤程序,它和QQ、Office、Firefox 等其它软件没有什么区别。然用Shell 也有着它的特殊性,就是开机用马启动,并呈现在用户⾯前;用户通过Shell 来使用Linux,不启动Shell 的话,用户就没办法使用Linux。
echo $SHELL
#/bin/bash
cat /etc/shells
#/bin/sh
#/bin/bash
#/usr/bin/sh
#/usr/bin/bash
#/bin/tcsh
#/bin/csh
#/usr/bin/tmux
#/bin/zsh
3.Linux命令
一个命令可能是一个命令别名、环境变量中的函数或可执行文件。
当输入一个命令,Linux系统搜索顺序为:
- aliases (e.g. ll)
- exported functions
- built-in shell commands (e.g. export)
- scripts and binaries in your PATH (可执行文件)
- 如果搜索完毕均找不到,则报错(command not found)
#列出所有可用的命令
compgen -c
如何学习基本命令?
- 查看简单的帮助文档:cmd -help/-h
- 查看详细的手册文档:man cmd
- 显示工具手册,比man更详细:info cmd
- 如果该cmd是一个shell内建命令(type cmd查看),可以用通过help cmd查看帮助
4.目录管理
关于路径:
- 绝对路径
①一定由根目录/ 写起,例如: /usr/share/doc
②准确性高,建议写程序(shell scripts) 管理系统时,务必使用绝对路径的写法 - 相对路径
① 相对於目前工作目录的路径,以.或..写起,.可以省略
② 方便
对于一个目录(文件夹),我们一般需要以下操作:
- 打印当前目录(pwd)
pwd
goto=`pwd`
echo $goto
- 显示内容(ls)
主要选项:
-a, --all 列出所有
-l 长格式
-h 人类可阅读
--sort=WORD 默认是按名字排序,可自定义
-r, --reverse 逆序
#ls后面可为文件,若加通配符,则显示匹配关键词的所有文件
ls -l /bin/*sh
ls -l /usr/bin/*sh
ls -l /usr/bin/*sh*
- 进入目录(cd)
cd ..
cd ~
cd -
cd $HOME
cd -
cd ~stu20230101
- 创建新目录(mkdir)
#parent 依次创建目录,即使存在也不会报错
mkdir -p foo1/foo2/foo3
#创建目录
touch foo/hello
- 删除目录(rm)
#依次删除目录
mkdir -p foo1/foo2/foo3
#删除非空目录
rm -r foo/
5.文件管理
- 查看文件(cat/more/less/head/tail)
# cat 查看/连接文件
# 主要选项
# -n 所有行前标上行号
# -b 所有非空行前标上行号
# 合并文件-文件名合并
cat hg19.chrom.sizes hg38.chrom.sizes
# 合并文件-使用通配符
cat hg??.chrom.sizes
# more 查看文件
# 主要选项:
# +num 从第n行开始显示
# -num 每屏显示的行数
# less 查看文件
# 主要选项:
# -N 显示行号
# -i 忽略搜索时的大小写
-# f 强制打开特殊文件,如设备代号、目录和二进制文件
less -f /home/
more /home/
less -f /bin/bash
more /bin/bash
# ******** /bin/bash: Not a text file ********
# head 查看文件前面部分
# 主要选项:
# -n 设置显示行数[K:显示头K行;-K:除了后K行之外]
head -n 3 catn.hg38.chrom.sizes #简写为-3
head -n -3 catn.hg38.chrom.sizes
# tail 查看文件后面部分
# 主要选项:
# -n 设置显示行数[K:显示尾K行; +K:从第K行开始]
# -f 持续地读取文件
tail catn.hg38.chrom.sizes #查看最后10行
tail -n 3 catn.hg38.chrom.sizes #简写为-3 查看最后3行
tail -n +3 catn.hg38.chrom.sizes #从第3行开始显示
# 管道连接
#显示行号并输出倒数20行的前10行
cat -n hg38.chrom.full.sizes | tail -20 | head -10
- 创建新文件(touch)
touch:更改文件的时间标记,如果文件不存在,则创建文件
- 删除文件(rm)
rm 删除文件/目录
主要选项:
-i 交谈模式,询问是否删除
-r 递归处理,可删除目录
-f 强制删除
- 重命名(mv)
- 移动文件(mv)
# 第二个路径为已存在的目录,表现为移动
mv ../time.log ~/lab1/
# 第二个路径为不存在的文件,表现为重命名
mv time.log lastrun.log
- 复制文件(cp)
cp 复制文件/目录
主要选项:
-i 交谈模式,询问是否覆盖
-p 保留源文件的属性
-r 递归处理,可复制目录
-f 强制复制
- 建立链接(ln)
主要选项:
-i 交谈模式,询问是否覆盖
-s 符号链接,不复制文件
-f 强制覆盖
若不指定destination,则默认为链接到当前目录的同名文件
- 压缩&解压缩
gz命令(*.gz) 单文件
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
tar命令(*.tar)单文件
解包:tar -xvf FileName.tar
打包:tar -cvf FileName.tar FileName
tar+gz命令(*.tar.gz / *.tgz)多文件或目录
解压:tar -zxvf FileName.tar.gz
压缩:tar -zcvf FileName.tar.gz FileName
压缩多个文件:tar -zcvf FileName.tar.gz FileName1 FileName2 FileName3 ...
zip命令(*.zip)多文件或目录
解压:unzip FileName.zip
压缩:zip FileName.zip FileName
- 小练习
# INSTALL文件第51-68行文件内容是什么?[cat -n; |; head; tail]
cat -n INSTALL | head -68 | tail -18
6.权限管理
chmod文件权限
用法:chmod [who] operator [permission] filename
who:u 属主;g 属组;o 其他用户;a 所有用户
operator:+增加权限;- 取消权限;=设定权限
permission: r=可读(4);w=可写(2);x=可执行(1)
示例:
chmod u+x file #rwxrw-r-- 赋予文件属主执行权限
chmod a=rwx file,chmod 777 file #rwxrwxrwx赋予所有用户所有权限
chown改变属主(一般是root用户操作)
chown user[:group] file
chown –R user[:group] file
chgrp改变属组(一般是root用户操作)
chown group file