Linux初识
Linux简介
Linux是一种免费使用和自由传播的类UNIX操作系统,其内核是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在1991年10月5日首次发布。它主要受到Minux和Unix思想的启发,是一个基于POSIX的多用户,多任务,支持多线程和多CPU的擦做系统。
Linux发行版
Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。常见的有Debian、Slackware、RedHat三个分支
RedHat:
RHEL(Red Hat Enterprise Linux,收费版本):是Redhat自己的发行的企业版,是Redhat的一个重要节点。
CentOS(RHEL 的社区克隆版本,免费版本):是一个基于Redhat linux 提供的可自由使用源代码的企业级linux发行版本。目前Centos已被收购,成为redhat旗下的一个组织。Centos兼容RHEL的格式
Fedora Core(由 Red Hat 桌面版发展而来,免费版本):Fedore是一款基于linux的操作系统,也是一组维持计算机正常运行的软件集合。由红帽公司赞助。可视为Redhat的技术测试版,被认为可用的技术最终会加入到Red Hat Enterprise Linux中
Slackware:
SUSE:基于Slackware二次开发的一款Linux,主要用于商业桌面、服务器。
openSUSE:由suse发展而来,旨在推进linux的广泛使用,主要用于桌面环境,用户界面非常华丽,而且性能良好
Debian:三大发行版中唯一以社区形式运作,不以商业公司形式运作。是一个致力于创建自由操作系统的合作组织。而且debian开发者所创建的操作系统中绝大部分基础工具来自于GNU工程。
Ubuntu:是一个以桌面应用为主的linux操作系统。
minit:Linux Mint 是一款基于 Ubuntu 与 Debian 开发的 Linux 操作系统发行版,被很多爱好者誉为“最好的桌面应用系统”,就像是 Linux 世界中的 macOS,非常适合个人日常办公或开发电脑使用。
其他还有Arch Linux gentoo,麒麟Linux等
Linux不同发行版的联系和区别
联系:
1)使用linux内核
2)遵循GNU的GPL协定
3)约定版本号:主版本号.次版本号.发行号或修正号
区别:
1)不同发行版集成了不同的内核,程序和库
2)包管理方式的不同
RedHat:包管理器rpm,前端包管理器yum和最新的dnf
Debian:包管理器dpkg(deb格式),apt-get
SUSE:包管理器rpm,zypper
Linux安装
此处以虚拟机安装CentOS7.9最小化为例,设置时区亚洲/上海,创建指定用户和root用户密码,设置主机名centos7.example.com,IP地址设置自动获取(也可单独设置),安装完成后测设登录
centos7.9安装步骤
1)启动虚拟机,开始安装引导
2)选择系统语言为English点击Continue
3)选择最小化安装Minimal Install,点击Done
4)设置时区,检查时间是否准确,完成后点击Done
5)对磁盘进行分区
a.此处选择标准分区,共创建/root,/data,swap,/四个分区,点击“+”可添加分区,添加完成后点击Done
b.分区检查,确认无误后点击Accept
6)设置主机名和IP,这里点击Configure可自定Ip地址
7)设置完成后点击Begin
8)此处设置root密码和创建普通用户,完成后点击Finish
9)等待安装完成,点击Reboot
10)重启后测试登录
a.登录root用户
b.登录普通用户
ubuntu18.04安装步骤
此处以虚拟机安装Ubuntu最小化为例,设置时区亚洲/上海,创建指定用户和root用户密码,设置主机名ubuntu18.example.com,IP地址设置自动获取(也可单独设置),安装完成后测设登录
1)语言选择英文,开始安装
2)语言和键盘默认选择英文
3)设置主机名
4)创建账户
5)设置密码
6)选择时区
7)手动创建分区
8)这里选择不升级
9)安装openssh服务
10)安装grub
11)结束安装
12)测试登录
设置history输出格式
此处以修改全局配置文件和创建开机脚本的方式对history输出格式做修改
1)修改全局配置文件,此操作影响所有用户,如果对用户单独设置可修改家目录下.profile和.bashrc文件
a.修改/etc/profile,/etc/bashrc,文末添加:export HISTTIMEFORMAT="%F %T "
vim /etc/profile
查看输出:
211 2021-11-22 22:43:12 vim /etc/profile
212 2021-11-22 22:43:12 exit
213 2021-11-22 22:43:13 history
2)在/etc/profile.d/下创建.sh开机脚本
vim set_history.sh
写入:HISTTIMEFORMAT="%F %T "
执行:. /etc/profile.d/set_history.sh
查看history输出
214 2021-11-22 22:44:49 vim /etc/profile.d/set_history.sh
215 2021-11-22 22:44:56 shift
216 2021-11-22 22:45:00 history
Linux哲学思想
1.一切皆文件(包括硬件)
一切皆文件:是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待
2.小型,单一用途的程序
小型,单一用途的程序:程序和可执行文件不要太复杂,这样才能保证了linux内核的高效运行
3.链接程序。共同完成复杂的任务
连接程序,共同完成复杂功能:复杂的任务可以通过连接多个简单的程序实现复杂的功能。对于复杂的功能linux通过许多简单程序的组合等方式实现,在保证简单功能的高效性的同时,复杂的程序也必然是高效性的
4.避免令人困惑的用户界面
linux是开源的,无论什么问题都可以通过简洁的命令行实现 排错,修改系统的配置,一切都是简洁明了为基础。
5.配置数据存储在文本中
linux所有的配置文件都存放在文本配置文件当中,无论什么配置修改都只需修改其配置文件即可
Linux常用命令
在此总结一些常见的命令
1)ls
ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
语法:
ls [-alrtAFR] [name] ...
参数:
-a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-R 若目录下有文件,则以下之文件亦皆依序列出
范例:
列出/目录下文件(不包括 .filename文件)
[root@centos8 ~]# ls /
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
列出/目录下所有文件,包括隐藏文件
[root@centos8 ~]# ls -a /
. .. .autorelabel bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
列出/目录下文件详细信息
[root@centos8 ~]# ll /
total 20
lrwxrwxrwx. 1 root root 7 Nov 3 2020 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Nov 21 16:09 boot
drwxr-xr-x. 3 root root 64 Nov 22 17:05 data
drwxr-xr-x 19 root root 3160 Nov 22 14:46 dev
drwxr-xr-x. 83 root root 8192 Nov 22 22:43 etc
drwxr-xr-x. 2 root root 6 Nov 3 2020 home
lrwxrwxrwx. 1 root root 7 Nov 3 2020 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Nov 3 2020 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Nov 3 2020 media
drwxr-xr-x. 3 root root 18 Nov 21 16:06 mnt
drwxr-xr-x. 2 root root 6 Nov 3 2020 opt
2)cat
cat命令用于连接文件并打印到标准输出设备上。
语法:
cat [OPTION]... [FILE]...
参数:
-n 或 --number:由 1 开始对所有输出的行数编号。
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
-E 或 --show-ends : 在每行结束处显示 $。
-T 或 --show-tabs: 将 TAB 字符显示为 ^I。
-A, --show-all:等价于 -vET。
-e:等价于"-vE"选项;
-t:等价于"-vT"选项;
范例:
1)查看文件内容
[root@centos8 data]# cat test.txt
123456
abc
2)对查看内容进行编号,包括空行
[root@centos8 data]# cat -n test.txt
1 123456
2
3 abc
3)echo
echo 用于字符串的输出
语法:
echo [-neE] [arg ...]
参数
-E (默认)不支持 \ 解释功能
-n 不自动换行
-e 启用 \ 字符的解释功能
范例:
1)输出连续字符串
[root@centos8 data]# echo hello world
hello world
3)输出特殊符号,特殊字符串输出是需要转义\
[root@centos8 data]# echo "\"hello world\""
"hello world"
4)换行
[root@centos8 data]# echo -e hello "\n" world
hello
world
5)输出变量值
[root@centos8 data]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
6)输出命令结果,这里用的是 " ` “ <英文的tab键>
[root@centos8 data]# echo `date`
Mon Nov 22 22:56:49 CST 202
4)screen
利用screen 可以实现会话管理,如:新建会话,共享会话等 注意:CentOS7 来自于base源,CentOS8 来自于epel源。
语法:
screen [-opts] [cmd [args]]
参数:
-A 将所有的视窗都调整为目前终端机的大小。
-d<作业名称> 将指定的screen作业离线。
-h<行数> 指定视窗的缓冲区行数。
-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r<作业名称> 恢复离线的screen作业。
-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s
-S<作业名称> 指定screen作业的名称。
-v 显示版本信息。
-x 恢复之前离线的screen作业。
-ls或--list 显示目前所有的screen作业。
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。
screen命令常见用法:
创建新screen会话
screen –S [SESSION]
加入screen会话
screen –x [SESSION]
退出并关闭screen会话
exit
剥离当前screen会话
Ctrl+a,d
显示所有已经打开的screen会话
screen -ls
恢复某screen会话
screen -r [SESSION]
6)date
date命令可以用来显示或设定系统的日期与时间,可使用”+“跟上标记显示指定格式的时间
标记格式:
% : 印出 %
%n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
日期方面:
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。
范例:
1)格式输出年月日
[root@centos8 data]# date +%x
11/22/2021
[root@centos8 data]# date +%F
2021-11-22
2)按自定格式输出
[root@centos8 data]# date +"%Y-%m-%d"
2021-11-22
[root@centos8 data]# date +"%Y-%m-%d %H:%M:%S"
2021-11-22 23:02:29
7)ifconfig
ifconfig命令用于显示或设置网络设备。建议使用 ip 代替
ifconfig可设置网络设备的状态,或是显示目前的设置。
语法:
ifconfig [-a] [-v] [-s]
[add [/
[del [/
[[-]broadcast []] [[-]pointopoint []]
[netmask ] [dstaddr ] [tunnel ]
[outfill
[hw
[[-]trailers] [[-]arp] [[-]allmulti]
[multicast] [[-]promisc]
[mem_start
[txqueuelen
[[-]dynamic]
[up|down] ...
参数:
add<地址> 设置网络设备IPv6的IP地址。
del<地址> 删除网络设备IPv6的IP地址。
down 关闭指定的网络设备。
netmask<子网掩码> 设置网络设备的子网掩码。
up 启动指定的网络设备。
常见用法:
查看网卡信息:
ifconfig [IFACE]
启用禁用网卡
ifconfig IFACE [up/down]
对一块网卡设置多个IP
ifconfig IFACE:1 IP/net mask
8)export
export 命令用于设置或显示环境变量。
export 可新增,修改或删除环境变量,export 设置变量仅限于当前登陆操作。
语法:
export [-fn] [name[=value] ...] or export -p
参数:
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
常见用法:
查看当前变量
export -p
设置变量
export NAME=VALUE
注意:以上方式仅在当前可用,若要永久生效可将定义变量命令写入配置文件
Linux系统目录
Linux目录命名规则
Linux 系统中,文件和目录的命名规则如下:
a.除了字符“/”之外,所有的字符都可以使用,但是应避免使用特殊符号和非打印字符等,避免后续使用产生的不变。在特殊需要情况下访问或者引用带用特殊符号的文件时,可将带有特殊符号的文件名用""括起来
b.目录名或文件名的长度不能超过 255 个字符。
c.目录名或文件名是区分大小写的
d.文件的扩展名对 Linux 操作系统没有特殊的含义
Linux系统目录及其用途
1)系统目录
2)用途描述
boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
b: block device,随机访问
c: character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr: universal shared, read-only data
bin: 保证系统拥有完整功能而提供的应用程序
sbin:
lib:32位使用
lib64:只存在64位系统
include: C程序的头文件(header files)
share:结构化独立的数据,例如doc, man等
local:第三方应用程序的安装位置
bin, sbin, lib, lib64, etc, share
/var: variable data files
cache: 应用程序缓存数据目录
lib: 应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据
lock: 锁文件
log: 日志目录及文件
opt: 专用于为/opt下的应用程序存储可变数据
run: 运行中的进程相关数据,通常用于存储进程pid文件
spool: 应用程序数据池
tmp: 保存系统两次重启之间产生的临时数据
/proc: 用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置