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 -l
- 显示详细信息,每个文件一行
- 可简写为
ll
ls -h
- 搭配 -l 参数一起使用,单独使用无效
- 以对人类(human)友好的方式显示大小信息(使用 K,M,G,T … 等单位)
ls -p
- 目录后面添加 “/”,以示区别
- 排序相关
ls -S
- 按大小排序
ls -t
- 按修改时间排序
ls -r
- 反向排序
- 常用组合:
ls -AlphS
ls -Alpht
ls -AlphSr
ls -Alphtr
- 助记:Alph
a,阿尔法
ls -R
- 递归显示子目录
- 不可控制层数,不推荐使用,建议安装 tree 工具替代
ls -d */
- 仅列举子目录
- 参考
3.4 touch [文件名]
命令
- 若文件已存在,则修改文件的最后访问时间
- 若文件不存在,则创建文件
- vi 或 nano ,也可以用于创建文件,区别在于:
- 使用 vi 或 nano,是在保存文件的时候才创建文件,如果不执行保存,文件并不会创建
- 使用 touch 命令,则立即创建文件
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 系统的预设,(熟练使用的话)效率很高,但上手需要一定时间
这里只简单贴两张图,详细的请参考
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 &&
逻辑与拼接
- 先后执行
- 短路特性:
- 只有前一条命令执行成功,后一条命令才执行
- 只要有一条命令执行不成功,后面的命令都不执行
7.3.3 ||
逻辑或拼接
- 先后执行
- 短路特性:
- 只有前一条命令执行不成功,后一条命令才执行
- 只要有一条命令执行成功,后面全部命令都不执行
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 最新发布版
|
|
进行编译安装
|
|
编译安装过程,可能会遇到很多依赖问题,需要逐个解决依赖,最后才能安装成功。