文章目录
Linux基础
Linux指令基础
linux的指令下达方式如下
command [-options] para1 para2
# 指令 选项 参数1 参数2
-
一行指令中的第一个输入的部分绝对是指令或者是可执行文件
-
command是指令名称,如切换文件夹指令 cd
-
中括号是可选项目,实际使用的时候不能加中括号 --help
-
para1和para2是依附在指令后的参数,或者是command的参数
-
指令、选项、参数都是用空格做区分
-
按下Enter之后该指令立即执行
-
指令太长时候可以用 \ 来换行
-
linux中的字母大小写是严格区分的 cd和CD并不是一个指令
指令基础操作
可以自己去试试下面的例子:
例如:
- date显示日期和时间 :
date # 输出当前日期和时间 默认格式
date +%Y/%m/%d # 日期格式为/分割输出
date +%H:%M # 只输出时间
- cal 显示日历,默认可能不安装,在ubuntu下需要使用apt install ncal之后才可以使用该指令
cal # 显示当前月份日历
cal 2023 # 显示2023年日历
cal 12 2023 # 显示2023年12月份日历
- bc 简单的计算器
bc # 计算器,使用quit退出,没退出之前会等待输入
以上是使用指令来执行一些基本的操作,
接下来介绍一个重要的操作
- tab 键补全: 我们敲ca之后敲 两下tab看效果
- 如果我们执行了
find /
之后我们按 ctrl + c 可以终止执行 - ctrl + d关闭当前shell窗口
执行shell命令的时候,有时候因为某些原因,执行的命令会报错,这个时候我们需要根据报错信息去具体查询自己的报错是因为啥。
Linux的man page和info page
首先我们不可能记住所有的linux指令,linux也提供了tab补全的方式,因此我们不需要完全记住命令。一般指令都有–help的选项
0或者是类似的选项。
你可以执行如下命令,看对应的效果
date --help # 执行date的help查看
我这里列出来一点:
Usage: date [OPTION]... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current time in the given FORMAT, or set the system date.
Mandatory arguments to long options are mandatory for short options too.
-d, --date=STRING display time described by STRING, not 'now'
--debug annotate the parsed date,
and warn about questionable usage to stderr
-f, --file=DATEFILE like --date; once for each line of DATEFILE
-I[FMT], --iso-8601[=FMT] output date/time in ISO 8601 format.
FMT='date' for date only (the default),
'hours', 'minutes', 'seconds', or 'ns'
for date and time to the indicated precision.
Example: 2006-08-14T02:34:56-06:00
-R, --rfc-email output date and time in RFC 5322 format.
Example: Mon, 14 Aug 2006 02:34:56 -0600
--rfc-3339=FMT output date/time in RFC 3339 format.
FMT='date', 'seconds', or 'ns'
for date and time to the indicated precision.
Example: 2006-08-14 02:34:56-06:00
-r, --reference=FILE display the last modification time of FILE
-s, --set=STRING set time described by STRING
-u, --utc, --universal print or set Coordinated Universal Time (UTC)
--help display this help and exit
--version output version information and exit
FORMAT controls the output. Interpreted sequences are:
%% a literal %
%a locale's abbreviated weekday name (e.g., Sun)
%A locale's full weekday name (e.g., Sunday)
%b locale's abbreviated month name (e.g., Jan)
......
Usage : 表示用法,后面的则是介绍options的选项和format的类型
接下来介绍我们的重头戏:man
man page
还是先执行命令:
man date #
我这里贴出一点,我会用# 给这里面加上注释
DATE(1) User Commands DATE(1) # 注意DATE括号里面的数字
NAME # 指令的说明
date - print or set the system date and time
SYNOPSIS # 指令的基础语法
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
DESCRIPTION # 指令的描述,详细介绍参数的用法
Display the current time in the given FORMAT, or set the system date.
Mandatory arguments to long options are mandatory for short options too.
指令括号的含义:
代号 | 代表内容 |
---|---|
1 | 用户在shell环境中可以操作的指令或者可执行文件 |
2 | 系统核心可呼叫的函数与工具等 |
3 | 一些常用的函数或者函数库,大部分为c的函数库(libc) |
4 | 装置文件的说明, 通常在/dev下的文件 |
5 | 配置文件或者是某些文件的格式 |
6 | 游戏 |
7 | 惯例与协议等,例如linux文件系统,网络协议,ASCII code等等的说明 |
8 | 系统管理员可用的管理指令 |
9 | 跟kernel有关的文件 |
man 的几个部分:
代号 | 代表内容 |
---|---|
NAME | 简短的指令、数据名称说明 |
SYNOPSIS | 简短的指令下达语法简介 |
DESCRIPTION | 较为完整的说明 |
OPTIONS | 针对synopsis部分,有列举的所有可用选项的说明 |
COMMANDS | 这个程序在执行的时候可以下达的指令 |
FILES | 这个程序或者数据所使用或参考或连接到的某些文件 |
SEE ALSO | 可以参考的,跟这个指令或者数据有关的其他说明 |
EXAMPLE | 一些可以参考的范例 |
man的常用指令:
按键 | 进行工作 |
---|---|
空格 | 向下翻一页 |
page down | 下一页 |
page up | 上一页 |
home | 去到首页 |
end | 去到尾页 |
/string | 向下查找 |
?string | 向上查找 |
n/N | 使用查询之后查找下一个/上一个 |
q | 退出 |
尝试执行一下命令吧:
man -f man # 查询所有与man相关的命令
man 1 man # 其中1 是上面查到的命令的括号中的内容
man 7 man # 其中7 是上面查到的命令的括号中的内容
man -k man # 查询所有包含了man的命令(包括name中包含man)
whatis man # 类似于man -f man
apropos man # 类似于 man -k man
mandb #
info page
试试下面的命令吧:
info info
info man
Linux关机
试试如下命令吧:
sudo shutdown -k 10 "shutdown" # 不是真的关机,发出后面的关机警告
sudo shutdown -r 10 "shutdown" # 10分钟之后重启
sudo shutdown -h 10 "shutdown" # 10分钟之后关机
sudo shutdown -c # 取消关机计划
sudo halt # 系统停止
sudo poweroff # 断电
sudo reboot # 重启
sudo suspend # 重启
Linux文件权限和目录配置
尝试使用下面的命令吧
ls -al
-rw------- 1 turbo turbo 1302 6月 12 11:18 .viminfo
# 权限 连接 拥有者 群组 文件容量 修改日期 文件名称
-
文件权限 :
-
第一个字符代表文件类型
[d] 目录 [-] 文件 [l] 连接文件 [b] 块设备文件 [c] 字符设备文件 [p] 管道文件 [s] 接口文件
-
后面的以3个为一组 rwx 分别代表可读、可写、可执行,如果没有对应的权限则是-
第一组是文件拥有者, 第二组是文件群组,第三组是其他人
-
-
连接:表示这个文件有多个个连接
我们使用下面的命令创建一个软连接,这个时候看连接节点的变化
ln [filename] [newname]
-
第三个表示文件拥有者
-
第四个表示这个文件所属群组
-
第五个表示文件容量大小,默认单位为bytes
-
第六个表示文件最近修改日期
-
第七栏表示文件名称,如果有个.在文件名之前则表示这个文件时一个隐藏文件
linux的文件系统的属性主要是为了数据安全。
修改文件权限
- chgrp:修改文件群组
- chown:修改文件拥有者
- chmod:修改文件的权限,suid, sgid, sbit等属性
chgrp [-R] 目录名称/文件名称
chown [-R] 账号名称 目录名称/文件名称
chmod [-R] 777 文件或者目录名称 # 可执行是1 可写是2 可读是4 分别是 001 010 100
chmod +x 文件或者目录 # 默认为all 可在+前指定 u g o // +后面是 r w x
组件 | 内容 | 迭代物件 | r | w | x |
---|---|---|---|---|---|
文件 | 详细的data | 文件文件夹 | 读到文件内容 | 修改文件内容 | 执行文件内容 |
目录 | 目录名 | 可分类抽屉 | 读到目录名 | 修改目录名称 | 进入该目录权限 |
目录配置
- FHS标准
可分享的(shareable) | 不可分享的(unshareable) | |
---|---|---|
不变的(satic) | /usr (软件放置处) | /etc (配置文件) |
/opt (第三方协作软件) | /boot (开机核心文档) | |
可变的(variable) | /var/mail (使用者邮箱信箱) | /var/run (程序相关) |
/var/spool/news (新闻组) | /var/lock (程序相关) |
根目录(/)
目录 | 应放置文件内容 |
---|---|
第一部分: | FHS要求必须存在的目录 |
/bin | 系统有很多放置执行文件的目录,但是/bin比较特殊,因为/bin放置的是在单人维护模式下还能够被操作的指令。/bin底下的指令可以被root账号和一般账号所使用,例如:cat chmod chown date mv mkdir cp bash等 |
/boot | 这个目录主要放置开机会使用到的文件,包括linux核心文件以及开机选单与开机所需要的配置文件等。linux kernel 常用的文档名称为vmlinuz,如果使用grub2这个开机管理程序吗,则还会存在/boot/grub2这个目录 |
/dev | 在linux系统上,任何装置与接口设备都是以文件形态存在于这个目录当中。只要透过存取这个目录底下的某个文件就等于存取某个装置, 比如/dev/null /dev/zero /dev/tty /dev/loop* /dev/sd* 等 |
/etc | 系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、各种服务的起始档等,一般来说这个目录下的各个文件属性是可以让一般使用者查阅的,但是只有root可以修改 FHS建议不要放置可执行文件在这个目录中,比较重要的有/etc/modprobe.d /etc/passwd /etc/fstab /etc/issue等 另外FHS规范最好还有以下的目录: 1. /etc/opt 这个目录在放置第三方写作软件/opt的相关配置 2. /etc/X11 与X Window有关的配置都在这里 3. /etc/sgml 与SGML格式有关的配置文件 4. /etc/xml 与xml格式有关的配置文件 |
/lib | 系统函数库非常多,而/lib放置的则是在开机时候会用到的函数库,以及在/bin或者/sbin底下的指令需要的函数库。 另外FSH还要求 /lib/modules必须存在: 这个目录放置可轴换式的核心相关模块(驱动程序) |
/media | 放置软盘,光盘等 |
/mnt | 如果你想要挂载一些额外的设备,一般都放在这个目录。 |
/opt | 这个是放置第三方软件的,或者是自行安装的软件,当然你也可以安装到/usr/local下 |
/run | 存放开机后的各项信息 |
/sbin | linux中有很多指令是用来设置系统环境的,这些指令只有root才能使用,其他用户只能查询,放在/sbin下的是开机过程需要的程序,里面包含了开机、修复、还原系统所需要的指令。 |
/srv | service的缩写,放置一些网络服务等 |
/tmp | 临时文件,不可存放重要数据 |
/usr | 第二层FHS设定,后续介绍 |
/var | 第二层FHS设定,后续介绍 |
第二部分: | FHS建议可以存在的目录 |
/home | 这个是系统默认用户的家目录,在你新增账号时候,默认的家目录都会创建在这里 |
/lib<qual> | 用来存放与/lib不同格式的二进制函数库, 例如/lib64 |
/root | 系统管理员的家目录 |
不在FHS却也很重要的目录:
目录 | 应放置文件内容 |
---|---|
/lost+found | 这个目录是使用标准的ext2/ext3/ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放到这个目录下面,不过如果使用xfs文件系统则不会存在这个目录 |
/proc | 这个目录是一个虚拟文件系统,数据是放在内存中的 |
/sys | 这个系统跟/proc很类似,记录系统和硬件相关信息 |
/usr
目录 | 应放置文件内筒 |
---|---|
第一部分 | FHS要求必须存在的目录 |
/usr/bin | 所有用户的一般指令都放在这里 |
/usr/lib | 基本上与/lib功能相同 |
/usr/local | 系统管理员在本机安装的自己下载的软件 |
/usr/sbin | 非系统正常运作的系统指令 |
/usr/share | 主要放置只读架构文件,当然也包括共享文件。 |
第二部分 | FHS建议可以存在的目录 |
/usr/games | 与游戏相关的数据 |
/usr/include | c/c++头文件 |
/usr/libexec | 某些不被一般使用者使用的执行文档或者脚本 |
/usr/lib<qual> | 与lib<qual>功能相同 |
/usr/src | 一般是存放源码 |
/var
目录 | 应放置文件内筒 |
---|---|
第一部分 | FHS要求必须存在的目录 |
/var/cache | 应用程序本身运作过程中的缓存文件 |
/var/lib | 程序执行所需的数据文件 |
/var/lock | 某些文件只能被一个程序使用没如果两个文件都在使用时候会出现错误,所以需要间该装置上错,以确保只会给单一软件使用 |
/var/log | 非常重要的,目录,登录文件放置目录 |
/var/mail | 这个是个人电子邮箱目录 |
/var/run | 某个程序或者服务启动后的PID会在这个目录下存在 ,这个目录连接到run去了 |
/var/spool | 通常放置队列数据,通常被使用之后就被删除了 |
现在的linux目录和以上的要求还是有部分不同的,也很容易看出来。这个就具体情况具体分析啦,必要的时候可以自己查询一下相关的目录信息。
系统版本的一些命令
试试执行以下命令吧
uname -r # 查看内核版本
uname -m # 查看操作系统版本
lsb_release -a # 查看操作系统信息