linux基础知识1

时间:2022-12-04 08:12:07
1. 硬盘分区
分区类型:主分区,扩展分区,逻辑分区;
分区规则:
一个硬盘只能有1到4个主分区;
一个硬盘只能有1个扩展分区;
一个硬盘的主分区和扩展分区最多只能有4个;
扩展分区只能用来包含逻辑分区;
一个硬盘主分区和扩展分区的分区号为1~4,逻辑分区的分区号从5开始;
必须分区:
/ (根分区)
swap (交换分区,此分区没有挂载点,其作用相当于虚拟内存,供操作系统进行使用)
推荐分区:
/boot (启动分区,当此分区空间不足时,系统将无法启动,推荐200M)
相关链接:
https://code.csdn.net/snippets/592005/master/linux-挂载新硬盘及分区设置/raw
https://code.csdn.net/snippets/593828/master/linux-将多个硬盘合并到一个挂载点下/raw

2. 常用目录
/bin, /usr/bin 普通用户可以执行的系统命令
/sbin, /usr/sbin 只有root才能执行的系统命令
/boot 存放启动文件
/dev 存放设备文件
/etc 存放配置文件
/home 普通用户家目录
/lib 存放系统库文件
/mnt 挂载目录(U盘, 文件服务器等)
/media 挂载目录(光盘)
/proc, /sys 系统内存信息
/tmp 临时目录
/var 系统文档

3. 常用命令
3.1 目录和文件
3.1.1 查询当前目录
pwd
3.1.2 切换当前目录
cd [目录]
# cd 进入当前用户的家目录
# cd ~ 进入当前用户的家目录
# cd - 进入上次切换前的目录
# cd .. 进入上级目录
3.1.3 查询目录中的内容
ls [选项] [文件或目录]
# -a 显示所有文件,包括隐藏文件
# -l 显示详细信息
# -h 人性化显示文件大小
# -i 显示文件索引号
# -d 查看目录属性
# ls -l 等价于 ll
示例:
my_suse:/disk1 # ll -ih
total 12K
137014 -rw-r--r-- 1 root users 5.8K Feb 5 00:54 a.txt
137018 drwxr-xr-x 2 root users 4.0K Feb 5 00:40 logs
# 137014, 137018 表示文件的索引号
# -rw-r--r-- 里面的第一个 '-' 表示文件
# -rw-r--r-- 里面的前面三个 rw- 表示所属用户可读、可写、可执行
# -rw-r--r-- 里面的中间三个 r-- 表示同组用户可读
# -rw-r--r-- 里面的后面三个 r-- 表示其他用户可读
# drwxr-xr-x 里面的第一个 'd' 表示目录
# 1, 2 表示文件被引用的次数(文件默认是1,目录默认是2)
# root 表示所属用户
# users 表示所属组
# 5.8K 表示文件大小
3.1.4 创建目录
mkdir [-p] 目录名
# -p 递归创建
3.1.5 创建文件
touch 文件名称 # 文件大小为0
echo "" > 文件名称 # 文件大小不为0
3.1.6 创建链接文件
ln [-s] 原文件 链接文件
# 默认硬链接,只能用于链接文件
# -s 软链接,用于链接文件或目录
示例:
# /disk2 需要已存在,否则执行失败
# /disk2/logs_link 存在时, 会创建一个链接文件 /disk2/logs_link/logs,并指向 /disk1/logs
# /disk2/logs_link 不存在时,会创建一个链接文件 /disk2/logs_link,并指向 /disk1/logs
ln -s /disk1/logs /disk2/logs_link
3.1.7 复制文件或目录
cp [选项] [原文件或目录] [目标文件或目录]
# -r 递归复制目录及其内容
# -p 连带文件属性复制
# -d 若原文件是链接文件,则复制链接属性
# -a 相当于 -pdr
# -n 目标文件已存在时,保留源文件,不进行覆盖
示例:
# /disk2 需要已存在,否则执行失败
# /disk2/a.txt 存在时,复制时会直接覆盖此文件
cp -r /disk1/a.txt /disk2/a.txt
# /disk2 需要已存在,否则执行失败
# /disk2/logs 存在时, 会将/disk1/logs 复制为 /disk2/logs/logs
# /disk2/logs 不存在时,会将/disk1/logs 复制为 /disk2/logs
cp -r /disk1/logs /disk2/logs
# 目标文件已存在时,保留源文件,不进行覆盖
cp -n /disk1/a.txt /disk2/a.txt
cp -nr /disk1/logs/* /disk2/logs
3.1.8 移动文件或目录
mv [原文件或目录] [目标文件或目录]
示例:
# /disk2 需要已存在,否则执行失败
# /disk2/logs 存在时, 会将 /disk1/logs 移动为 /disk2/logs/logs
# /disk2/logs 不存在时,会将 /disk1/logs 移动为 /disk2/logs
mv /disk1/logs /disk2/logs
3.1.9 删除文件或目录
rm [选项] [文件或目录]
# -r 删除目录
# -f 强制删除
# rmdir 这个命令只能删除空白目录
rmdir [目录名]
3.2 搜索命令
3.2.1 搜索命令所在路径及帮助文档所在位置
whereis [选项] 命令名
# -b 只查找可执行文件
# -m 只查找帮助文件
示例:
whereis ls # 查找 ls 命令所在路径及帮助文档所在位置
whereis -b ls # 查找 ls 命令所在路径
whereis -m ls # 查询 ls 命令帮助文档所在位置
3.2.2 搜索命令所在路径
which 命令名
3.2.3 在系统中搜索文件
find [搜索范围] [搜索条件]
# 缺点:避免大范围搜索,会非常耗费系统资源
# 通配符
* # 匹配0个或多个任意字符
? # 匹配1个任意字符
[] # 匹配1个中括号内的任意字符
# 逻辑关系
! expr # 逻辑非,True if expr is false.
expr1 -a expr2 # 逻辑与,等价于 expr1 expr2
expr1 -o expr2 # 逻辑或
# 搜索条件
# -type 按文件类型进行搜索(-type d 表示目录, -type f 表示文件)
# -name 按文件名搜索,大小写敏感
# -iname 按文件名搜索,大小写不敏感
# -user 按文件所有者搜索
# -size 按文件大小搜索
-10M 表示小于10M的文件
10M 表示等于10M的文件
+10M 表示大于10M的文件
# -mtime [+-]n 查找最后一次被修改时的时间在 n 天前的文件
-10 表示10天以内被修改的文件
10 表示10天当天被修改的文件
+10 表示10天之前被修改的文件
# -inum 按文件索引号进行搜索
# -exec command '{}' \; 对搜索结果执行 command 命令
示例:
# 搜索 /disk1 目录中以 test 开头的日志文件
find /disk1 -name "test*.log"

# 搜索 /disk1 目录中除 test3.log 之外的所有文件
find /disk1 -type f -a ! -name test3.log

# 使用正则表达式进行搜索
find /disk1 -regextype posix-egrep -regex '.*\.(xml|log)'

# 搜索 /disk1 下的目录,同时排除 work, logs 目录本身
find /disk1 -mindepth 1 -type d -a ! \( -path /disk1/work -o -path /disk1/logs \)

# 搜索 /disk1 下的目录,同时排除 work, logs 目录本身及子文件
find /disk1 -mindepth 1 \( -path /disk1/work -o -path /disk1/logs \) -prune -o \( -type d -print \)

# 搜索 /disk1 下的文件,同时排除 work, logs 目录本身及子文件
find /disk1 \( -path /disk1/work -o -path /disk1/logs \) -prune -o \( -type f -print \)

# 搜索 /disk1 下的目录和文件,同时排除 work, logs 目录本身及子文件
find /disk1 -mindepth 1 \( -path /disk1/work -o -path /disk1/logs \) -prune -o -print
3.2.4 在文件中搜索字符串
grep [选项] 字符串 文件名
# -i 忽略大小写
# -v 排除指定字符串
3.3 帮助命令
man 命令 # 查看命令的帮助文档
命令 --help # 查看命令选项的帮助
help shell内部命令 # 查看 shell 内部命令的帮助(例如:help cd)
3.4 压缩与解压缩
3.4.1 .zip 格式
zip 压缩文件名 源文件 # 压缩文件
zip -r 压缩文件名 源目录 # 压缩目录
unzip 压缩文件名 [-d exdir] # 解压缩
3.4.2 .gz 格式
# 不能压缩目录本身,只能压缩目录中的子文件
gzip 源文件 # 压缩为.gz格式,不保留源文件
gzip -c 源文件 > 压缩文件 # 压缩为.gz格式,保留源文件
gzip -r 目录 # 压缩目录下的所有子文件,不压缩目录
gzip -d 压缩文件 # 解压缩文件,不保留压缩文件
gunzip 压缩文件 # 解压缩文件,不保留压缩文件
gzip -c -d 压缩文件 > 源文件 # 解压缩文件,保留压缩文件
gunzip -c 压缩文件 > 源文件 # 解压缩文件,保留压缩文件
gunzip -d 目录 # 解压缩目录中的所有压缩文件
3.4.3 .bz2 格式
# 不能压缩目录
bzip2 源文件 # 压缩为.bz2格式,不保留源文件
bzip2 -k 源文件 # 压缩为.bz2格式,保留源文件
bzip2 -d 压缩文件 # 解压缩文件,不保留压缩文件
bunzip2 压缩文件 # 解压缩文件,不保留压缩文件
bzip2 -k -d 压缩文件 # 解压缩文件,保留压缩文件
bunzip2 -k 压缩文件 # 解压缩文件,保留压缩文件
3.4.4 tar打包
tar -cvf 打包文件名 源文件1 源文件2 ...
# -c 打包
# -v 显示过程
# -f 指定打包后的文件名
tar -tvf 打包文件名 # -t表示查看tar包中内容,但不解包
tar -xvf 打包文件名 # -x表示解开tar包
tar -xvf 打包文件名 -C /tmp/ # -C 表示解包到指定目录
3.4.5 .tar.gz 格式
tar -zcvf 压缩包名.tar.gz 源文件 # 压缩, -z 表示压缩为.tar.gz格式
tar -zxvf 压缩包名.tar.gz # 解压缩,-x 表示解压缩
3.4.6 .tar.bz2 格式
tar -jcvf 压缩包名.tar.bz2 源文件 # 压缩, -j 表示压缩为.tar.bz2格式
tar -jxvf 压缩包名.tar.bz2 # 解压缩,-x 表示解压缩
3.5 关机和重启
3.5.1 shutdown命令
shutdown [选项] 时间
# -h 关机,同时关闭电源
# -r 重启
# -c 取消前一个关机/重启命令
shutdown -r +10 # 10分钟后重启
shutdown -c # 取消前一个关机/重启命令
3.5.2 其他命令
logout # 注销当前用户
reboot # 立即重启
init 6 # 立即重启,不安全(不会保存正在运行的程序)
poweroff # 立即关机,同时关闭电源,不安全(不会保存正在运行的程序)
init 0 # 立即关机,同时关闭电源,不安全(不会保存正在运行的程序)
halt -p # 立即关机,同时关闭电源,不安全(不会保存正在运行的程序)
# init n 表示调用系统级别,linux有以下7个系统级别
0 关机
1 单用户
2 不完全多用户,不含NFS服务
3 完全多用户
4 未分配
5 图形界面
6 重启
# runlevel 查看当前系统级别
3.6 挂载命令
3.6.1 查询与自动挂载
mount # 查询系统中已挂载的设备
mount -a # 根据/etc/fstab文件中的内容,自动挂载
3.6.2 mount 命令
mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
特殊选项有如下几种:
rw/ro # 读写/只读,默认rw
suid/nosuid # 是否具有suid权限,默认suid
dev/nodev # 可读/不可读文件系统上的字符或块设备
exec/noexec # 是否允许执行文件系统中的可执行文件,默认exec
auto/noauto # 执行mount -a命令时,是否按照/etc/fstab文件内容自动挂载,默认auto
user/nouser # 是否允许普通用户挂载,默认nouser
async/sync # 异步/同步,默认async
default # 相当于rw,suid,dev,exec,auto,nouser,async
atime/noatime # 访问分区文件时,是否更新文件的访问时间,默认atime
remount # 重新挂载已经挂载的设备
3.6.3 挂载光盘
# 创建挂载点
mkdir /mnt/cdrom
# 挂载光盘(/dev/cdrom是/dev/sr0的软链接)
mount /dev/sr0 /mnt/cdrom 或者 mount /dev/cdrom /mnt/cdrom
# 查看光盘中的内容
ll /mnt/cdrom
# 卸载光盘
umount /dev/sr0 或者 umount /mnt/cdrom
3.7 查看登录用户信息
3.7.1 w命令,查看当前登录用户信息
w [用户名]
# 命令输出:
USER 登录用户名
TTY 登录终端
FROM 登录ip
LOGIN@ 登录时间
IDLE 闲置时间
JCPU 和该终端连接的所有进程占用的时间
PCPU 当前进程所占用的时间
WHAT 当前正在执行的命令
3.7.2 who命令,查看当前登录用户信息
who
# 命令输出:用户名,登录终端,登录时间(登录ip)
3.7.3 last命令,查看当前登录和过去登录的用户信息
last
# 命令输出:用户名,登录终端,登录ip,登录时间,退出时间(在线时长)
last | tac # 将last命令的输出倒序显示
3.7.4 lastlog命令,查看所有用户的最后一次登录信息
lastlog

4. Shell 基础
cat /etc/shells # 查看系统支持的shell类型
echo $SHELL # 查看当前用户的shell类型
4.1 echo 命令
echo "Hello world" # 输出字符串
echo -e "Hello\nworld" # -e 表示支持控制字符(例如:\r\n\t\b\v)
echo -e "\e[1;31m Hello world \e[0m" # 带颜色的输出
# 有如下几种常用颜色
30m = 黑色, 31m = 红色, 32m = 绿色, 33m = 黄色
34m = 蓝色, 35m = 粉红, 36m = 青色, 37m = 白色
4.2 编写并执行脚本
my_suse:~ # vi hello.sh
---------- 文件内容如下 ------------
#!/bin/bash
#This is the first comment.
echo "Hello world."
------------------------------------
my_suse:~ # chmod 700 hello.sh
my_suse:~ # ./hello.sh
Hello world.
my_suse:~ # /root/hello.sh
Hello world.
my_suse:~ # sh hello.sh
Hello world.
my_suse:~ #
备注:
1. shell脚本中#表示注释;
2. 但第一行的 #!/bin/bash 不是注释,表示当前文件的shell类型
4.3 别名
alias # 查看系统中所有别名
alias 别名='原命令' # 设置新的别名
unalias 别名 # 删除别名
例如:
my_suse:~ # alias hello='echo "Hello world"'
my_suse:~ # hello
Hello world
my_suse:~ #
# 命令执行顺序
1. 用绝对路径或相对路径执行的命令
2. 别名
3. Bash的内部命令
4. 按照$PATH环境变量定义的目录匹配到的第一个命令
4.4 快捷键
Ctrl + l # 清屏 = clear
Ctrl + c # 强制终止当前命令
Ctrl + a # 光标移动到行首
Ctrl + e # 光标移动到行尾
Ctrl + u # 从光标所在位置删除到行首
Ctrl + z # 把命令放入后台
Ctrl + r # 从历史命令中搜索
Tab # 自动补全命令或文件
# 如果只有一个候选命令时,按一下Tab键自动补全
# 如果存在多个候选命令时,按两下Tab键自动列出候选命令
4.5 历史命令
history [选项]
# -c 清空历史命令
# -w 把缓存中的历史命令立即写入~/.bash_history文件
默认是在当前用户退出时才将缓存中的历史命令写入~/.bash_history文件
# 历史命令默认保存数量为1000,可通过以下命令查询
cat /etc/profile | grep HISTSIZE
# 历史命令有以下几种调用方式
1. 使用上下箭头调用历史命令
2. 使用 !n 重复执行第 n 条历史命令
3. 使用 !! 重复执行上一条历史命令
4. 使用 !字符串 重复执行最后一条以该字符串开头的历史命令
4.6 重定向
4.6.1 标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型
键盘 | /dev/stdin | 0 | 标准输入
显示器 | /dev/stdout | 1 | 标准输出
显示器 | /dev/stderr | 2 | 标准错误输出
4.6.2 输出重定向
# 标准输出重定向
命令 > 文件 # 覆盖方式,将命令正确输出重定向到文件中
命令 >> 文件 # 追加方式,将命令正确输出重定向到文件中
示例:date > test.log

# 标准错误输出重定向(注意:'>'前后都没有空格)
错误命令 2>文件 # 覆盖方式,将命令错误输出重定向到文件中
错误命令 2>>文件 # 追加方式,将命令错误输出重定向到文件中
示例:cat /home 2>test.log

# 标准输出和标准错误输出同时重定向
命令 > 文件 2>&1 # 覆盖方式
命令 >> 文件 2>&1 # 追加方式
命令 &>文件 # 覆盖方式
命令 &>>文件 # 追加方式
命令 >> 文件1 2>>文件2 # 追加方式

# 如果不想要任何输出,可以使用下面的命令(/dev/null代表linux中的黑洞)
命令 &>/dev/null
4.6.3 输入重定向
# wc 命令
wc [选项] [文件名]
# -c 统计字节数
# -w 统计单词数
# -l 统计行数

# 把文件内容作为输入
命令 < 文件名 # 示例:wc -l < /etc/passwd
命令 <<标识符 # 起始标识符
...
标识符 # 结束标识符,要处于最后一行的行首,前面没有空格
示例:
my_suse:~ # wc -l <<END
> a
> b
> END
2
my_suse:~ #
4.7 管道符
4.7.1 多命令顺序执行
命令1; 命令2 # 多个命令顺序执行,命令之间没有逻辑关系
命令1 && 命令2 # 逻辑与,命令1执行成功时,命令2才会被执行
命令1 || 命令2 # 逻辑或,命令1执行失败时,命令2才会被执行
4.7.2 管道符
命令1 | 命令2 # 命令1的正确输出作为命令2的操作对象
# 命令2需要能够操作命令1的正确输出
示例:
ll /etc | more
netstat -an | grep ESTABLISHED | wc -l
4.8 通配符
4.8.1 通配符
? # 匹配1个任意字符
* # 匹配0个或多个任意字符
[] # 匹配1个中括号中的任意字符,[a-z]表示任意一个字母,[0-9]表示任意一个数字
[^] # 匹配1个不在中括号中的任意字符,[^0-9]匹配一个非数字的字符
4.8.2 特殊符号
' # 单引号,在单引号中的所有特殊符号都没有特殊含义(例如:$ 和 `)
" # 双引号,在双引号中的所有特殊符号都没有特殊含义,但以下3个例外:
# $ 表示调用变量的值, ` 表示引用命令, \ 表示转义符
` # 反引号,反引号括起来的内容是系统命令,在Bash中会先执行它。
# 和$()作用一样,推荐使用$(),因为反引号非常容易看错
$() # 和反引号作用一样,用来引用系统命令
# # 在Shell脚本中,#开头的行代表注释
$ # 用于调用变量的值,例如 $name 表示调用变量name的值
\ # 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符
示例:
name=100 ; echo $name
name=200 ; echo '$name'
name=300 ; echo "$name"
name=400 ; echo "\$name"
name=`pwd` ; echo $name
name=$(pwd) ; echo $name
----------------------------------------------------------------
相关链接
http://www.imooc.com/learn/175

--END