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  指定建立新视窗时,所要执行的shell。
    -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 ] [keepalive ]
    [hw
] [mtu ]
    [[-]trailers] [[-]arp] [[-]allmulti]
    [multicast] [[-]promisc]
    [mem_start ] [io_addr ] [irq ] [media ]
    [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相关的安全策略等信息的存储位置