Linux 笔记_基础_1
Linux 笔记_基础_1
1 Linux 目录结构
-
/bin
- bin 是 Binaries(二进制文件)的缩写,这个目录存放着最经常使用的基本命令。
- 比如 ls 就是在 /bin/ls 目录
-
/boot
- 这里存放的是启动 Linux 时使用的一些核心文件、系统引导文件,包括一些连接文件以及镜像文件。
-
**/dev **
- dev 是 Device(设备)的缩写,该目录存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
-
/etc
- etc 是 Etcetera(等等)的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
-
/home
- 用户的主目录,在 Linux 中,每个用户都有一个自己的目录(称为用户目录),一般该目录名是以用户的账号命名的。
-
/lib
- lib 是 Library(库)的缩写这个目录里存放着系统最基本的共享库文件,类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
-
/lost+found
- 这个目录一般情况下是空的,当系统非法关机后,可能会产生一些丢失、需要寻回的文件。
-
/media
- 移动设备挂载点,linux 系统会自动识别一些设备,例如U盘、光盘等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
-
/mnt
- 临时文件系统挂载点,用于临时挂载别的文件系统,比如将光盘挂载在 /mnt/ 上,然后进入该目录就可以查看光盘里的内容了。
-
/opt
- 第三方应用程序,opt 是 optional(可选)的缩写,这是给主机额外安装软件所设置的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
-
/proc
-
内核与进程相关信息,proc 是 Processes(进程)的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
-
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的 ping 命令,使别人无法 ping 你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
-
-
/root
- 系统管理员 root 的用户目录。
-
/sbin
- s 就是 Super User 的意思,是 Superuser Binaries(超级用户的二进制文件)的缩写,这里存放的是系统管理员使用的系统管理程序,管理类的基本命令。
-
/selinux
- 这个目录是 Redhat/CentOS 所特有的目录,SELinux 是一套比较复杂的安全机制,这个目录存放 的是 SELinux 的相关文件。
-
/srv
- 该目录存放一些系统运行一些服务用到的数据
-
/sys
- 用于输出当前系统上硬件设备相关信息的虚拟文件系统
- 这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
- sysfs 文件系统集成了下面3种文件系统的信息:
- 针对进程信息的 proc 文件系统
- 针对设备的 devfs 文件系统
- 针对伪终端的 devpts 文件系统
- 该文件系统是内核设备树的一个直观反映。
- 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
- sysfs 文件系统集成了下面3种文件系统的信息:
-
/tmp
- tmp 是 temporary(临时)的缩写这个目录用来存放一些临时文件。
-
/usr
- 共享的只读数据,usr 是 unix shared resources(共享资源)的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
- /usr/bin
- 系统用户使用的应用程序。
- /usr/sbin
- 超级用户使用的比较高级的管理程序和系统守护程序。
- /usr/src
- 内核源代码默认的放置目录。
-
/var
- var 是 variable(变量)的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的文件放在这个目录下。包括各种日志文件。
- mail 的预设放置也是在这里。
-
/run
- 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
-
/bin,/sbin,/usr/bin,/usr/sbin,对比
- /bin,/usr/bin,是给系统用户使用的指令(除root外的通用户),
- 而 /sbin,/usr/sbin,则是给 root 使用的指令。
2 帮助命令
command --version或command -version- 查看命令的版本信息
command --help- 查看命令的帮助信息
man command- 查看命令的手册(manual)
- 使用 man 时的操作键:
空格键- 翻页
Enter键- 一次滚动一行
b- 向上滚动一屏
f- 向下滚动一屏
q- 退出
/word- 搜索word字符串
n- 搜索下一个
N- 搜索上一个
3 文件、目录基本操作
| 命令 | 英文 | 说明 |
|---|---|---|
| pwd | print working directory | 查看当前所在文件夹 |
| cd [目录名] | change directory | 切换文件夹 |
| ls | list | 查看当前目录下的内容 |
| touch [文件名] | touch | 如果文件不存在, 新建文件 |
| mkdir [目录名] | make directory | 创建目录 |
| rm [文件名] | remove | 删除指定的文件名 |
| cp | copy | 复制 |
| mv | move | 移动(剪切) |
3.1 pwd 命令
显示当前所在目录的路径
-P参数- 如果当前所在目录是一个 “链接” ,显示真实路径
- 缺省,相当于使用了
-L参数,显示逻辑路径
3.2 cd 命令
cd ..- 上一级目录
cd /- 根目录
cd ~- 用户目录
cd -- 后退至上一次所在目录
cd [目录名]cd /tmp/test- 切换到 /tmp/test 目录
cd test- 切换到当前路径下的 test 目录
cd /test- 切换到根目录下的 test 目录
cd ~/test- 切换到用户目录下的 test 目录
3.3 ls 命令
ls -a- 列出所有
ls -A- 列出除了
.,..以外的所有
- 列出除了
ls -lls -h- 搭配 -l 参数一起使用,单独使用无效
- 以对人类(human)友好的方式显示大小信息(使用 K,M,G,T … 等单位)
ls -p- 目录后面添加 “/”,以示区别
- 排序相关
ls -S- 按大小排序
ls -t- 按修改时间排序
ls -r- 反向排序
- 常用组合:
ls -AlphSls -Alphtls -AlphSrls -Alphtr- 助记:Alph
a,阿尔法
ls -R- 递归显示子目录
- 不可控制层数,不推荐使用,建议安装 tree 工具替代
ls -d */- 仅列举子目录
- 参考
3.4 touch [文件名] 命令
- 若文件已存在,则修改文件的最后访问时间
- 若文件不存在,则创建文件
- vi 或 nano ,也可以用于创建文件,区别在于:
- 使用 vi 或 nano,是在保存文件的时候才创建文件,如果不执行保存,文件并不会创建
- 使用 touch 命令,则立即创建文件
2.touch vi nano 创建文件)
3.5 mkdir 命令
mkdir test- 创建目录
mkdir -p test/test1- 递归方式,创建多级目录
3.6 rmdir 命令
rmdir 命令-
mkdir test- 删除目录
-p参数- 递归方式,删除多级目录
-v参数- 显示删除过程
-
只能删除空目录,基本不用,使用
rm命令替代
3.7 rm 命令
rm 1.txt- 删除文件
rm -r test- 删除目录
-r参数- 不管文件夹是否为空,删除文件夹时,必须使用
-r参数 - recursive(递归),递归方式删除目录,及目录下的所有内容
- 不管文件夹是否为空,删除文件夹时,必须使用
rm - rf *- 清空当前目录
-f参数- force(强制),强制删除,忽略不存在的文件,不提示用户进行确认(直接删除)
- 绝对要避雷的命令:
rm -rf /,这会删除整个系统
3.8 cp 命令
cp sourceFile targetFile或cp sourceDirectory/sourceFile targetDirectory/targetFile- 复制文件
cp -r sourceDirectory targetDirectory- 递归方式,复制整个文件夹
3.9 mv 命令
mv sourceFile targetFile- 重命名
mv sourceDirectory/sourceFile targetDirectory/targetFile- 移动文件
mv -r sourceDirectory targetDirectory- 递归方式,移动整个文件夹
4 打包解包、压缩解压缩
4.1 tar 包
- 打包
tar -cvf 打包名.tar 被打包的目录tar -cvf 打包名.tar 被打包的文件1 被打包的文件2 被打包的文件3-c参数- create,创建打包文件
-v参数- verbosely,详细地,输出过程
-f- 指定档案的文件名称,参数后面一定是 .tar 包名,所以必须放到最后
- 解包
tar -xvf 打包名.tar- 解包到当前目录
-x参数- extract,提取,解包
tar -xvf 打包名.tar -C 解包路径位置- 解包到指定目录
-C参数- directory,解压到指定目录,
- 注意:解压目录必须存在
4.2 gzip 压缩包
tar -zcvf 打包压缩文件名.tar.gz 被压缩的文件/目录- 压缩文件
-z参数- gz 包格式
tar -zxvf 打包文件.tar.gz- 解压缩文件
tar -zxvf 打包文件.tar.gz -C 目录- 解压缩到指定目录
4.3 bzip2 压缩包
由 bzip2 包提供的功能,安装:yum install bzip2 -y
tar -jcvf 打包压缩文件名.tar.bz2 被压缩的文件/目录- 压缩文件
-j参数- bz2 包格式
tar -jxvf 打包文件.tar.bz2- 解压缩文件
tar -jxvf 打包文件.tar.bz2 -C 目录- 解压缩到指定目录
5 文本编辑、查看
5.1 文本文件编辑
5.1.1 vi 编辑器
vi [文件]
老牌文本编辑器,基本上是所有 类Unix 系统的预设,(熟练使用的话)效率很高,但上手需要一定时间
这里只简单贴两张图,详细的请参考
3.vi vim 三种模式)
4.vi vim 键盘图)
5.1.2 vim 编辑器
vim [文件]
可以说是 vi 的升级版,很多程序员拿来 coding
5.1.3 nano 编辑器
nano [文件]
nano 是一个轻量级的文本编辑器,日常改改配置文件,简单修改文档之类的完全够用
快捷键都显示在屏幕下侧,学习成本几近于零
但基本上各发行版都没有预装,需要手动安装,在成功安装之前,很多时候还是要使用 vi 来修改配置文件之类的,所以还是要学一下 vi 的基本使用
5.2 文本文件查看
5.2.1 cat 命令
-b- 列出行号,空白行不标行号
-n- 列出行号,连同空白行也会有行号
-E- 在每行结尾显示 $
-T- 将 [tab] 以 ^I 显示出来
-v- 列出一些缺省状况不显示的特殊字符
-A- 相当于 -vET 的组合选项
5.2.2 more 命令
一页一页地显示内容
-s参数- 将多个空行压缩为一行
-NUM参数- 指定每次滚动的行数,NUM直接替换为数字
+NUM参数- 从文件第 NUM 行开始显示
+/STRING参数- 从匹配到搜索字符串 STRING 的那一行开始显示
- 使用中的快捷键
h- 查看帮助
- 使用 “翻页、滚动” 快捷键,回到文档查看的页面
- 空格 或
Ctrl+F- 向下翻一页
Ctrl+B- 后退一页
- Enter 键
- 向下滚动一行
=- 输出当前行的行号
q- 离开 more
5.2.3 less 命令
类似 more ,但提供更多功能(与名字相反),其他参数、快捷键请参考帮助
- [ pagedown ] 或 空格 或
f或Ctrl + F或Ctrl + V- 向下翻一页
- [ pageup ] 或
b或Ctrl + B- 后退一页
- /字符串
- 向下搜寻『字符串』的功能
- n
- 向下查找
- N
- 向上查找
5.2.4 head 命令
head [fileName]- 缺省查看前 10 行
head -n 3 [fileName]或tail -3 [fileName]- 查看文件的前 3 行
head -v [fileName]- 在第一行显示文件的全路径名
5.2.5 tail 命令
tail [fileName]- 查看文件的末尾几行,缺省 10 行
tail -n 20 [fileName]或tail -20 [fileName]- 查看文件末尾的指定行数
tail -f [fileName]或tail -20f [fileName]- 查看该文件的末尾几行,并随着文件的增长而自动追加,可以用来看日志文件
- 按
Ctrl + C退出
tail -v [fileName]- 在第一行显示文件的全路径名
6 查找文件、内容
6.1 find 命令
find path [options]
- 按文件名查找
find /etc -name yum.conf- 在 /etc 目录下查找 yum.conf 文件
find /etc -name 'yum'- 在 /etc 目录下查找文件名中含有字符串 “yum” 的文件
find . -name 'yum*'- 使用通配符*(0个或者任意多个),在当前目录下查找文件名以 “yum” 开头的文件
- 按其他特征查找
find / -atime -2- Access Time,文件读取访问时间,查找最后48小时访问过的文件
find / -empty- 查找空的文件或者文件夹
find / -group susan- 查找属组为 susan 的文件
find / -mtime -1- modify time,修改时间,查找最近 24 小时内修改过的文件
find / -user susan- 查找属主为 susan 的文件
find / -size +10000c- 查找出大于 10000 字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
find / -size -1000k- 查找出小于 1000 KB的文件
- 组合条件查找
find /tmp -size +10c -and -mtime +2- 查找 /tmp 目录下大于 10 字节并且最近修改时间超过 2 天的文件
find / -user root -or -user susan- 查找 /目录下 属于 root用户 或 susan用户 的文件
find /tmp ! -user susan- 查找 /tmp 目录中所有不属于 susan 用户的文件
6.2 grep 命令
grep 用于查找、过滤文件里符合条件的字符串
grep [options] 查找目标(一个文件或指定范围的文件)
-
输出相关参数
-B<显示行数>或--before-context=<显示行数>- : 除了显示匹配到的那一行之外,并显示该行之前,指定行数的内容。
-A<显示行数>或--after-context=<显示行数>- 除了显示匹配到的那一行之外,并显示该行之后,指定行数的内容。
-c或--count- 只输出匹配行的计数,不输出内容。
-n或--line-number- 标示行号
- 显示文件名与否
-h或--no-filename- 不标示该行所属的文件名
- 如果查找目标是一个文件,默认不显示
-H或--with-filename- 标示该行所属的文件名
- 如果查找目标是多个文件,默认显示
-
查找条件相关参数
-i- 忽略大小写
-w或--word-regexp- 整词匹配
-x或--line-regexp- 整行匹配
-r- 递归查询目录中所有文件、子目录
-v- “反选” ,显示除了匹配到条件的行以外,其他所有行
-E或--extended-regexp- 使用正则表达式进行查找
-f<规则文件>或--file=<规则文件>- 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容
- 规则样式可以是 “普通字符串” ,也可以是 “正则表达式”
- 格式为每行一个规则样式
-
示例
-
grep "192.168.0.1" *log- 从当前目录中所有文件名以 “log” 结尾的文件中,查找包含 “192.168.0.1” 字符串的行
-
grep -B3 -A5 "192.168.0.1" 2020-02-02.log- 在指定日志中查找包含 “192.168.0.1” 字符串的行,并显示其前面 3 行,后面 5 行
-
grep -n -E "[1][2-5]\:[0-5][0-9]\:[0-5][0-9]\s"Updated"" yum.log- 在 yum.log 文件中查找 12 点到 15 点之间 Updated 的记录
-
7 组合命令
7.1 重定向
>- 输出重定向,覆盖模式
>>- 输出重定向,追加模式
7.2 管道
7.2.1 | 管道符号
将前一个命令的输出作为后一个命令的输入
示例
ls --help | less- 将 ls 的帮助文档,用 less 打开(实现翻页、查找等功能)
ls /var/log | grep 'log'- 列出 /var/log 目录的内容,用 grep 筛选出其文件名/目录名包含 ’log’ 的项
7.2.2 xargs 过滤器
- eXtended ARGuments,是给命令传递参数的一个过滤器,也是组合多个命令的一个工具
- 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
- 可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
- xargs 默认的命令是 echo
- 这意味着通过管道传递给 xargs 的输入将允许包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
- 由于很多命令不支持 | 管道来传递参数,而 xargs 命令能解决此类需求
示例:
ls /var/log | xargs grep 'log'- 列出 /var/log 目录的内容,用 grep 筛选出其文件内容包含 ’log’ 行
- 对比上方示例
- 上方(没加 xargs )是将输出结果作为一个文本文件来对待,从结果中进行查找
- 这里(加了 xargs )是将输出结果的每一行作为一个参数传递给 grep 来执行,grep 将每一项作为一个目标文件来查找其中的内容
其他示例:
find / -type f -name "*.log" | xargs grep "ERROR"- 从根目录开始查找所有扩展名为 .log 的文件,找出其中包含 “ERROR” 的行:
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz- 查找所有的 jpg 文件,并且压缩它们:
cat url-list.txt | xargs wget -c- 从一个 url-list 文件(每个url一行)中,使用wget下载所有链接
- 将多个url作为wget的参数
7.3 多条命令的拼接
7.3.1 ; 简单拼接
先后执行
ping 223.6.6.6 -c 10 >> 2.txt; ping 223.5.5.5 -c 10 >>2.txt
查看 2.txt,可以看到:后一条命令,在等前一条命令执行结束之后,再开始执行
7.3.2 && 逻辑与拼接
- 先后执行
- 短路特性:
- 只有前一条命令执行成功,后一条命令才执行
- 只要有一条命令执行不成功,后面的命令都不执行
5. && 逻辑与拼接)
7.3.3 || 逻辑或拼接
- 先后执行
- 短路特性:
- 只有前一条命令执行不成功,后一条命令才执行
- 只要有一条命令执行成功,后面全部命令都不执行
6. || 逻辑或拼接)
8 软件安装
不同的 Linux 发行版采用不同的软件安装包
| 发行版系 | 包格式 | 包管理程序 |
|---|---|---|
| Debian系(Ubuntu,Linux Mint) | .deb | apt |
| RedHat系(CentOS,Fedora) | .rpm | yum |
| OpenSUSE系 | .rpm | zypp |
| Arch系 | .pacman | pacman |
8.1 yum 安装
Yellow dog Updater, Modified,方便的在线软件库,类似于苹果的 APPStore ,微软的 MicroSoft Store …
因为方便,入选的软件都经过安全性、稳定性、兼容性的评估,一般而言,是安装软件的首选方案
- 查找相关
yum list | grep [字符串]或yum search [字符串]- 根据字符串查找软件包(获得准确的包名)
yum info [软件包名]- 查看软件包信息(确认是否为所需的软件包)
yum deplist [软件包名]- 查看软件包的依赖关系
- 安装卸载
yum install -y [软件包名]- 安装指定的软件包
yum remove -y [软件包名]- 卸载指定的软件包
- 升级相关
yum clean all- 清除 yum 缓存信息
yum makecache- 创建元数据缓存
yum update -y- 升级所有软件包
yum upgrade -y- 较少用
- 升级所有软件包,并删除不再使用(依赖)的包
8.2 rpm 包安装
RPM 是 Red-Hat Package Manager(RPM软件包管理器)的缩写,现在已经被很多非红帽系的发行版采用
如果在官方 yum 库中没有提供该软件,或者提供的版本过低不能满足需求,那么,使用软件开发方提供的 rpm 包是另一个比较方便的安装软件的方法
- 查询相关
rpm -qa | grep [软件包名]- 查询/验证全部已安装的 rpm 包,并从中筛选
-q,query,查询-a,all,所有
rpm -qa | less- 查询/验证全部已安装的 rpm 包,并 less 查看结果
rpm -qi [软件包名]- 查询/验证指定的软件包
- 相当于
-q --info(与安装时使用的-i不一样),用来显示包的详细信息
rpm -ql [软件包名]- 查询指定软件包的安装路径
-l,list,列出
rpm -qf [软件包的完整路径]- 从一个 rpm 包文件(或 gz 文件),读取/验证其 rpm 包信息
-f,file,文件
- 安装卸载
rpm -ivh [软件包名]- 安装
-i,install,安装-v,verbose,详细信息-h,hash,配合-v一起使用,列出哈希标记
rpm -e [软件包名]- 卸载
-e,erase,擦除
rpm -ev --nodeps [软件包名]--nodeps,不检查依赖
示例:下载 rpm 包,安装 sysstat 工具
|
|
8.3 编译安装
- 有的时候,会遇到想用的软件, 官方 yum 库里没有,软件开发方也没有提供 rpm 包的情况。
- 因为不同发行版使用不同的包,其次,Linux 环境下,绝大多数软件都是开源的,于是很多软件开发方都是直接提供源码,由用户自行编译安装(用户编译的时候可以自定义所需要的组件)。这是最开放、透明的方式(当然也是对新手最不友好的方式)。
- 也有的时候,会遇到 yum 提供的版本太低,未能满足需求的情况。
- CentOS 的定位是对标 RedHat ,供服务器使用,对入选软件的安全性、稳定性、兼容性要求比较高,测试周期比较长,所以经常存在版本较低的情况。
这时候,就需要使用编译安装了
以 git 作为示例,进行编译安装:
CentOS7 的官方 yum 库中的 git 是 1.8 版
|
|
卸载 yum 库安装的 git
|
|
下载 git 最新发布版
|
|
进行编译安装
|
|
编译安装过程,可能会遇到很多依赖问题,需要逐个解决依赖,最后才能安装成功。