zoukankan      html  css  js  c++  java
  • Linux基础知识手册

    Linux简介

    Linux具有非常优良的血统,具有相当良好的多人多工环境。
    与Windows比较,Win面向非专业用户,Linux面向专业人员;Windows的宗旨是让不会电脑的人也可以操作电脑,Linux的宗旨是最大化精简系统。因此Win在大众领域受欢迎,而Linux在专业和速度领域大放异彩。
    Linux开源,易于移植。奇数版本为发展中版本,偶数版本为稳定版本。

    操作界面

    Linux预设的情况下会提供六个Terminal来让使用者登入。

    Linux有两种操作界面,纯文字界面和图形用户界面。
    [Ctrl] + [Alt] + [F2] ~ [F6] :文字界面登入 tty2 ~ tty6 终端机;
    [Ctrl] + [Alt] + [F1] :图形界面桌面。
    图形界面只能有一个,如果没有tty1-tty6都没有开启图形界面,可以使用命令startx开启图形界面。

    命令行介绍

    [dmtsai@study ~]$
    

    dmtsai是用户名,study是电脑名,~是home

    语系支持

    1.显示当前支持的语系

    # LANG 代表当前语系,LC_ 代表可支持的语系。
    locale
    
    LANG="zh_CN.UTF-8"
    LC_COLLATE="zh_CN.UTF-8"
    LC_CTYPE="zh_CN.UTF-8"
    LC_MESSAGES="zh_CN.UTF-8"
    LC_MONETARY="zh_CN.UTF-8"
    LC_NUMERIC="zh_CN.UTF-8"
    LC_TIME="zh_CN.UTF-8"
    LC_ALL=
    

    2.修改当前语系为英语

    LANG=en_US.utf8
    

    时间

    1.显示当前日期

    date
    
    2019年12月 1日 星期日 13时43分38秒 CST
    

    2.格式化输出时间

    date +%Y/%m/%d
    
    2019/12/01
    

    3.显示日历

    cal
    
          十二月 2019
    日  一 二  三 四  五 六
     1  2  3  4  5  6  7
     8  9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30 31
    

    4.显示整年日历

    cal 2019
    

    快捷键

    【TAB】按键:补全代码和命令;
    【ctrl+c】:终止当前程序;
    【ctrl+d】:相当于输入 exit

    文件操作

    LINUX下不同的文件类型有不同的颜色:
    蓝色 表示目录;
    蓝绿 色表示可执行文件,可执行的程序;
    红色 表示压缩文件或包文件;
    浅蓝色 表示链接文件;
    灰色 表示其它文件;

    ls 列出目录

    # 显示当前目录
    ls
    # 显示所有文件
    ls -a
    # 显示所有文件及细节
    ls -l
    # 筛选文件,可用正则表达式
    ls -d xxx*
    # 按时间排序
    ls -t
    

    cd 切换目录

    #切换到根目录
    cd /
    #切换到home
    cd ~
    #切换到上一级
    cd ..
    #切换到上一次目录
    cd -
    #切换到绝对路径
    cd /目录1/目录2/目录3
    #切换到相对路径
    cd ../目录
    

    pwd 显示当前目录

    #显示当前路径
    pwd
    #显示出确实的路径,而非使用连结 (link) 路径
    pwd —P
    

    mkdir 创建目录

    #创建文件夹
    mkdir test
    #创建多级目录
    mkdir test1/test2/test3/test4
    #建立权限为rwx--x--x的目录
    mkdir -m 711 test2
    

    rmdir 删除空的目录

    #删除文件夹
    rmkdir 目录
    #连同上一级『空的』目录也一起删除
    rmdir -p 目录1/目录2/目录3/目录4
    

    cp 复制文件/目录

    # 复制文件A到B
    cp A B
    # 强制复制,若目标存在,则移除后再复制
    cp -f A B
    # 若目标已存在,则询问
    cp -i A B
    # 连同档案的属性(权限、用户、时间)一起复制过去,而非使用预设属性
    cp -p A B
    # 递归复制,复制文档及其以内全部内容
    cp -r A B
    

    使用正则表达式

    cp test*.* TEST/
    

    rm 删除文件/目录

    # 删除文档A
    rm A
    # 强制删除,不进行询问
    rm -f A
    # 删除前询问
    rm -i A
    # 递归删除,删除文档及其以内全部内容
    rm -r A
    # 直接删除且不询问
    rm -rf A
    # 删除所有文件
    rm -rf *
    

    mv 移动/重命名

    # 将A移动到B
    mv A B
    # 重命名,其中B应该是新文件名称
    mv A B
    # 覆盖移动
    mv -f A B
    # 询问移动
    mv -i A B
    

    文件权限

    文件属主

    Linux是多人多工系统,因此为了保护每个人的隐私,创建了健全的保护机制。
    创建者:档案拥有者,即这个新建这个文档的人。
    群组:作用是让非创建者拥有和创建者一样的权利。
    文档权限:读写权和执行权。

    以上权限可以用如下命令修改:
    chown :改变档案拥有者
    chgrp :改变档案所属群组
    chmod :改变档案的权限, SUID, SGID, SBIT等等的特性

    chown

    chown username:username 文件名
    

    chgrp

    TODO:)

    文件权限解析

    dr-xr-xr-x   2 root root 4096 Dec 14  2012 bin
    dr-xr-xr-x   4 root root 4096 Apr 19  2012 boot
    -----------------------------------------------
    12  3  4     5 6    7    8    9   10  11
    

    属性1:代表这个文件是目录、文件或链接文件等等.
    [ d ]是目录;[ - ]是文件;[ l ]是链接文档;[ b ]是装置文件里面的可供储存的接口设备(可随机存取装置);[ c ]是装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

    属性2-4:用户权限,rwx分别为读、写和执行权.
    属性2是创建者(拥有者),属性3是群组,属性4是其他用户的权限,-表示没有此权限

    各权限的数字代表:

    权限 数字代表 作用
    r 4
    w 2
    x 1 执行
    - 0 无此权限

    如:超级权限777代表所有人都具有读写执行权

    chmod

    chmod用于设定文件属性,有两种方式:一种是数字方式,另一种是字母方式.
    1.数字方式

    # 给予文件夹内所有用户(root用户,管理员,普通用户)所有权限。
    chmod 777 -R 文件夹
    

    2.字母方式

    # 赋予文件A执行权.
    chmod +x A
    

    i属性

    设置了i属性之后:只能查看文件,不能修改(权限,内容等但是可以刷新时间)和删除;i属性就是将文件完全锁定,只能查看。

    # 查看i属性
    lsattr test.txt
    # 增加i属性
    chattr +i test.txt
    

    文件搜索

    which

    查找 PATH 路径中的命令,并返回该命令位置。

    which python
    
    /usr/bin/python
    

    whereis

    whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。

    whereis python
    
    /usr/bin/python
    

    find

    查找文件

    # 在路径中查找文件
    find 查找路径 -name 文件名
    

    支持正则表达式。

    locate

    ocate 可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的索引数据库,当寻找时就只需查询这个索引数据库而不必实际深入档案系统之中。locate 因为是只去检索索引数据库,所以在比 find 全盘检索要快很多。

    locate 文件名
    

    支持正则表达式。

    文件查看

    cat

    # 正序显示文件内容
    cat 文件名
    # 显示行号
    cat -b 文件名
    # 显示标记符
    cat -v 文件名
    
    # 显示文件前面几行,默认的情况下,显示前 10 行!
    head 文件名
    # 显示文件前20行
    head -n 20 文件名
    

    tail

    # 显示文件前面几行,默认的情况下,显示前 10 行!
    tail 文件名
    # 显示文件后20行
    tail -n 20 文件名
    

    文件传输

    scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。

    # 传输远程文件到本地
    scp 用户名@ip地址:文件名 本地目录
    # 递归传输本地文件到远程
    scp 本地文件  用户名@ip地址:文件名
    

    文件解压

    zip

    zip可能是目前使用得最多的文档压缩格式。它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用。缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在压缩率方面做得非常好。

    # 压缩,将文件B压缩为A.zip
    zip -r A.zip B
    # 解压,解压A.zip
    unzip A.zip
    

    tar

    Tar是在Linux中使用得非常广泛的文档打包格式。它的好处就是它只消耗非常少的CPU以及时间去打包文件,他仅仅只是一个打包工具,并不负责压缩。

    # 打包,将文件B打包为A.tar
    tar -cvf A.tar B
    # 解包,将A.tar解包到当前目录
    tar -xvf A.tar
    # 解包,将A.tar解包到指定目录
    tar -xvf A.tar -C 指定目录
    

    tar.gz

    这种格式是我使用得最多的压缩格式。它在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率。

    # 压缩,将文件B压缩为A.tar.gz
    tar -zcvf A.tar.gz B
    # 解压,将A.tar.gz解压到当前目录
    tar -zxvf A.tar.gz
    # 解压,将A.tar.gz解压到指定目录
    tar -zxvf A.tar.gz -C 指定目录
    

    rar

    # 解压,将A.rar解压到指定目录
    unrar x A.rar 指定目录
    

    用户和组

    Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
    用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

    创建新用户

    进入root

    su
    

    创建名为 db 的新用户:

    adduser db
    
    正在添加用户"db"…
    正在添加新组"db" (1006)…
    正在添加新用户"db" (1006) 到组"db"…
    创建主目录"/home/db"…
    正在从"/etc/skel"复制文件…
    输入新的 UNIX 口令:
    重新输入新的 UNIX 口令:
    两次输入db的初始密码,出现的信息如下
    passwd: password updated successfully
    Changing the user information for db
    Enter the new value, or press ENTER for the default
    Full Name []:
    Room Number []:
    Work Phone []:
    Home Phone []:
    Other []:
    Full Name []:
    

    一路回车,然后y,
    到此,用户添加成功。

    添加root权限:
    使用 visudo 打开 sudoers

    sudo visudo -f sudoers
    

    修改内容如下:

    # User privilege specification
    root ALL=(ALL) ALL
    db ALL=(ALL) ALL
    

    保存退出,db用户就拥有了root权限。
    :wq 退出,
    或者
    ctrl+o,回车,ctrl+x退出

    删除用户

    删除用户

    userdel 用户名
    

    把用户的主目录一起删除。

    userdel -r 用户名
    

    修改用户

    修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
    用法:

    usermod 参数 用户名
    
    参数:
        -c comment 指定一段注释性描述。
        -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
        -g 用户组 指定用户所属的用户组。
        -G 用户组,用户组 指定用户所属的附加组。
        -s Shell文件 指定用户的登录Shell。
        -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
    用户名:
        指定新账号的登录名。
    

    修改密码

    用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
    如果默认用户名,则修改当前用户的口令。

    # 修改密码
    passwd
    

    添加组

    groupadd 参数 用户组
    

    参数

    -g GID 指定新用户组的组标识号(GID)。
    -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
    

    删除组

    groupdel 用户组
    

    修改组

    groupmod 参数 用户组
    

    参数

    -g GID 为用户组指定新的组标识号。
    -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
    -n新用户组 将用户组的名字改为新名字
    

    切换组

    newgrp 组名
    

    系统目录

    ├── bin       存放普通用户可以执行的命令.
    ├── boot      启动项信息.
    ├── dev       外部设备信息.
    ├── etc       系统配置信息.
    ├── home      普通用户的主目录.
    ├── lib       动态库目录.
    ├── media     U盘、光驱等识别后,会挂载到这个目录下。
    ├── mnt       系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在`/mnt`/上,然后进入该目录就可以查看光驱里的内容了。
    ├── opt       软件安装目录.
    ├── proc      虚拟目录,可以通过直接访问这个目录来获取系统信息。
    ├── root      root用户主目录。
    ├── run       是一个临时文件系统,存储系统启动以来的信息。
    ├── sbin      存放root用户可以执行的命令.
    ├── srv       该目录存放一些服务启动之后需要提取的数据。
    ├── sys       这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:`针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
    ├── tmp       这个目录是用来存放一些临时文件的。
    ├── usr       Unix Software Resource,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
    ├── /usr/bin  系统用户使用的应用程序。
    ├── /usr/sbin 超级用户使用的比较高级的管理程序和系统守护程序。
    ├── /usr/src  内核源代码默认的放置目录。
    ├── var       这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
    

    bin:
    bin为binary的简写,主要放置系统的必备执行文件,例如:
    cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。

    /usr/bin:
    主要放置应用程序工具的必备执行文件,例如:
    c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb、wget等。

    /sbin:
    主要放置系统管理的必备程序,例如:
    cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等。

    /usr/sbin:
    主要放置网路管理的必备程序,例如:
    dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等.

    进程管理

    在 Linux 系统当中:‘触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设定。’ 从此以后,这个 PID 能够在系统上面进行的动作,就与这个 PID 的权限有关了!

    查看进程

    # 显示所有进程
    ps -e
    # 筛选进程
    ps -e | grep 关键字
    

    杀死进程

    kill -signal PID
    

    其中,PID是进程号,signal有:

    1	SIGHUP	启动被终止的程序,可让该 PID 重新读取自己的设定档,类似重新启动
    2	SIGINT	相当于用键盘输入 [ctrl]-c 来中断一个程序的进行
    9	SIGKILL	代表强制中断一个程序的进行,如果该程序进行到一半, 那么尚未完成的部分可能会有‘半产品’产生,类似 vim会有 .filename.swp 保留下来。
    15	SIGTERM	以正常的结束程序来终止该程序。由于是正常的终止, 所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时, 输入这个 signal 也是没有用的。
    19	SIGSTOP	相当于用键盘输入 [ctrl]-z 来暂停一个程序的进行
    

    杀死进程1234

    kill -9 1234
    

    gcc编译流程

    https://www.cnblogs.com/chendeqiang/p/12861616.html

    软件管理

    • dpkg:
      这个机制最早是由 Debian Linux 社群所开发出来的,透过 dpkg 的机制, Debian 提供的软件就能够简单的安装起来,同时还能提供安装后的软件资讯,实在非常不错。 只要是衍生于 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括 B2D, Ubuntu 等等。
    • RPM:
      这个机制最早是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多 distributions 就使用这个机制来作为软件安装的管理方式。包括 Fedora, CentOS, SuSE 等等知名的开发商都是用这咚咚。
    代表 软件管理机制 使用指令 线上升级机制(指令)
    Red Hat/Fedora RPM rpm, rpmbuild YUM (yum)
    Debian/Ubuntu DPKG dpkg APT (apt-get)

    apt

    apt是Debian系列的Linux操作系统的包管理工具,最近的项目中使用了stretch Linux,它也是使用apt来进行包管理的。

    apt工作原理

    apt采用集中式的软件仓库机制,将各式各样的软件分门别类的放在软件仓库之中,从而进行有效的组织和管理。然后,将软件仓库放置在许多镜像服务器中,并保持基本一致。这样一来,所有的用户都能获取最新的软件安装包。对用户而言,这写镜像就是软件源。
    由于用户所处网络的不同,无法随意的访问各个镜像站点。为了能让用户有选择的访问镜像站点,使用了软件源配置文件/etc/apt/sources.list列出最合适访问的镜像站点的地址。

    apt-get update

    在执行了apt-get update命令后,apt会自动联网寻找source.list.d文件中的list对应的Package/Sources/Release列表文件,如果存在则下载,存放在/var/lib/apt/lists目录中。
    然后看一下容器中的/var/lib/apt/lists目录。然后apt-get install相应的包。

    apt-get install

    apt-get install是下载命令,下载的软件都会存到/var/cache/apt/archives下。
    apt还会检查Linux系统的包依赖关系,简化了用户安装和卸载包的过程。
    要下载一个软件包时,大概需要4步:
    1.扫描本地存放的软件包更新列表,找到最新版本的软件包。
    2.进行软件包依赖关系检查,找到支持该软件的所有软件包。
    3.从镜像站点中下载相关软件包(包含所依赖的软件包),并存放在/var/cache/apt/archive
    4.解压软件包,并自动完成应用程序的安装和配置。

    apt-get update

    正如前面说的,要想使用apt-get下载安装软件,需要去/etc/apt/source/list中的镜像源地址中去下载,那么我们仅仅是知道去哪里下载,镜像源地址中有什么软件,我们并不清楚,所以需要使用apt-get update来刷新软件的索引,从而确定我们要的软件在镜像站点中是否存在。
    apt-get update会扫描每个镜像站点,并为该站点所具有的软件包资源建立索引文件,存放在本地的/var/lib/apt/list中。在使用apt-get命令执行安装或者更新操作时都会依赖这些索引文件,所以在每次更新或者安装前应该使用apt-get update命令来刷新索引,从而获取最新的软件资源。

    apt-get upgrade

    将系统中所有的软件包一次性升级到最新版本。

    提示:如果你和我一样,创建了一个docker镜像文件,建议不要使用apt-get upgrade命令,因为镜像其实就是系统的一个“快照”,这个镜像刚好满足了我们程序的需求,如果使用了apt-get upgrade命令后将会使得镜像变得很大,而且每次构建镜像时也会耗费更多时间。一个优秀的镜像的原则是,在满足程序需求的同时,体积越小越好。

    另外,在下载完成后可以删除/var/lib/apt/lists/中索引文件,从而减小镜像的体积。

    apt命令

    命令 作用
    sudo dpkg -i xxxx.deb 安装.deb软件包
    sudo apt-get -f install 安装依赖
    sudo apt-get install XXXXX 安装软件库的软件
    sudo apt-get remove XXXXX 卸载软件库的软件
    sudo apt-get purge XXXXX 卸载并清除配置
    sudo apt autoremove 删除没用的依赖包
    sudo apt-get update 更新软件列表,在文件 /etc/apt/sources.list 中列出
    sudo apt-get upgrade 更新软件
    sudo apt-get install -f 修复安装依赖问题
    dpkg -l 查看所有安装的软件
    apt search XXXXX 搜索软件库中的软件

    sudo apt 默认下载位置及安装位置

    下载的软件的存放位置:/var/cache/apt/archives
    安装后软件的默认位置:/usr/share
    可执行文件位置:/usr/bin
    配置文件位置:/etc
    lib文件位置:/usr/lib

    参考链接:
    https://www.jianshu.com/p/c6936efe5b58

    磁盘管理

    # 以阅读形式显示所有磁盘信息
    df -hl
    
    文件系统        容量  已用  可用 已用% 挂载点
    /dev/root        30G   25G  3.3G   89% /
    devtmpfs        434M     0  434M    0% /dev
    tmpfs           438M     0  438M    0% /dev/shm
    tmpfs           438M   17M  421M    4% /run
    tmpfs           5.0M  4.0K  5.0M    1% /run/lock
    tmpfs           438M     0  438M    0% /sys/fs/cgroup
    /dev/mmcblk0p1   43M   23M   21M   52% /boot
    tmpfs            88M  4.0K   88M    1% /run/user/1000
    

    以上面的输出为例,表示的意思为:
    HD硬盘接口的第二个硬盘(b),第二个分区(2),容量是75G,用了75G,可用是0,因此利用率是100%, 被挂载到根分区目录上(/)。

    在 Linux 底下如果 df 没有加任何选项,那么预设会将系统内所有的
    (不含特殊内存内的档案系统与 swap) 都以 1 Kbytes 的容量来列出来!

    关机命令

    由于Linux是多人多工操作系统,所以关机还是需要注意一些问题。

    命令 作用
    sync 将数据由内存同步到硬盘中。
    shutdown 关机指令,1分钟后关机。
    shutdown -h now 立刻关机
    shutdown –h 10分钟后关机,并且会显示在登陆用户的当前屏幕中。
    shutdown –h now 立马关机
    shutdown –h 20:25 系统会在今天20:25关机
    shutdown –h +10 十分钟后关机
    shutdown –r now 系统立马重启
    shutdown –r +10 系统十分钟后重启
    reboot 重启,等同于 shutdown –r now
    halt 关闭系统,等同于shutdown –h now 和 poweroff

    系统资源

    查看cpu使用率 top

    top
    

    查看内存使用率 free

    free -m
    
                  total        used        free      shared  buff/cache   available
    Mem:           874M        178M        301M         11M        395M        632M
    Low:           874M        573M        301M
    High:            0B          0B          0B
    Swap:           99M          0B         99M
    

    total:总内存
    used:已使用的内存(包含 shared、buffers、cached)
    free:未分配的内存
    shared:共享内存
    buffers:块设备的读写缓冲区
    cached:文件系统的cache

    查看系统信息 uname

    uname -a
    
    Linux study.centos.vbird 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015
    x86_64 x86_64 x86_64 GNU/Linux
    

    系统,主机名,版本号,时间,架构

    查看系统启动时间 uptime

    uptime
    
    02:35:27 up  7:48,  3 users,  load average: 0.00, 0.01, 0.05
    

    开机流程

    假设以个人电脑架设的 Linux 主机为例 (先回到第零章计算机概论看看相关的硬件常识喔), 当你按下电源按键后电脑硬件会主动的读取 BIOS 或 UEFI BIOS 来载入硬件资讯及进行硬件系统的自我测试,之后系统会主动的去读取第一个可开机的装置 (由 BIOS 设定的) ,此时就可以读入开机管理程式了。

    主机系统开始运作后,此时 Linux 才会呼叫外部程式开始准备软件执行的环境,并且实际的载入所有系统运作所需要的软件程式哩! 最后系统就会开始等待你的登入与操作啦!简单来说,系统开机的经过可以汇整成底下的流程的:

    1. 载入 BIOS 的硬件资讯与进行自我测试,并依据设定取得第一个可开机的装置;
    2. 读取并执行第一个开机装置内 MBR 的 boot Loader (亦即是 grub2, spfdisk 等程式);
    3. 依据 boot loader 的设定载入 Kernel ,Kernel 会开始侦测硬件与载入驱动程式;
    4. 在硬件驱动成功后,Kernel 会主动呼叫 systemd 程式,并以 default.target 流程开机;
    • systemd 执行 sysinit.target 初始化系统及 basic.target 准备作业系统;
    • systemd 启动 multi-user.target 下的本机与服务器服务;
    • systemd 执行 multi-user.target 下的 /etc/rc.d/rc.local 档案;
    • systemd 执行 multi-user.target 下的 getty.target 及登入服务;
    • systemd 执行 graphical 需要的服务

    终端快捷键

    命令 作用
    ctrl+alt+t 打开终端
    Ctrl+a 移动到当前行的开头
    Ctrl+l 刷新屏幕
    Ctrl+c 终止当前正在运行的程序。
    ctrl+shift+c 复制
    ctrl+shift+v 粘贴
    ctrl+shift+t 新建标签页
    ctrl+shift+w 关闭标签页
    Ctrl+PageUp 前一标签页
    Ctrl+PageDown 后一标签页
    F11 全屏
    ctrl + l 清屏
    ctrl + c 终止命令
    ctrl + d 退出 shell
    ctrl + z 将当前进程置于后台,fg 还原
    ctrl + r 从命令历史中找
    ctrl + u 清除光标到行首的字符(还有剪切功能)
    ctrl + w 清除光标之前一个单词 (还有剪切功能)
    ctrl + k 清除光标到行尾的字符(还有剪切功能)
    ctrl + y 粘贴 Ctrl+u 或 Ctrl+k 剪切的内容
    ctrl + t 交换光标前两个字符
    Alt + d 由光标位置开始,往行尾删删除单词
    Alt + . 使用上一条命令的最后一个参数
    Alt – b || ctrl + 左方向键 往回(左)移动一个单词
    Alt – f || ctrl + 右方向键 - 往后(右)移动一个单词

    vim命令

    vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。

    一般流程:
    vi runoob.txt,打开文档
    进入一般模式.
    按下 i 进入输入模式(也称为编辑模式),开始编辑文字,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入。
    按下 ESC 按钮回到一般模式
    在一般模式中按下 :wq 储存后离开 vi

    命令 作用
    :q 是离开而不保存
    :wq 是保存并离开
    :q! 不保存退出
    :set nu 显示行号
    vim . 使用vim打开当前目录
    :%d 全部删除
    :u 撤销
    gg 光标回到首行
    n回车 光标跳到n行

    配置自定义设置,打开 ~/.vimrc,写入命令即可设置自定义配置。

    vim命令

    Bash Shell

    shell简介

    shell用于用户和操作系统内核进行交互。
    由于早年的 Unix 年代,发展者众,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头预设的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为‘ Bourne Again SHell (简称 bash) ’,这个 Shell 是 Bourne Shell 的增强版本,也是基准于 GNU 的架构下发展出来的呦!

    1.查看可用shell

    gedit /etc/shells
    
    /bin/sh (已经被 /bin/bash 所取代)
    /bin/bash (就是 Linux 预设的 shell)
    /bin/tcsh (整合 C Shell ,提供更多的功能)
    /bin/csh (已经被 /bin/tcsh 所取代)
    

    2.查看预设的shell

    gedit /etc/passwd
    
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    

    如上所示,在每一行的最后一个资料,就是你登入后可以取得的预设的 shell 啦!那你也会看到, root 是 /bin/bash ,不过,系统账号 bin 与 daemon 等等,就使用那个怪怪的 /sbin/nologin 啰~

    Bash Shell简介

    Bash Shell是Linux预设的shell,优点有:
    历史命令查找;Tab补全功能;alias别名;工作控制、前景背景控制;程式化脚本;正则表达式等。

    变量

    在进入 shell 之前,也正如同上面提到的,由于系统需要一些变数来提供他资料的存取 (或者是一些环境的设定参数值, 例如是否要显示彩色等等的) ,所以就有一些所谓的‘环境变数’ 需要来读入系统中了!这些环境变数例如 PATH、HOME、MAIL、SHELL 等等,都是很重要的, 为了区别与自订变数的不同,环境变数通常以大写字元来表示呢!

    1.显示变量
    显示变量使用 echo $ 方式。

    echo ${PATH}
    echo $PATH
    
    /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin
    

    2.设置变量
    使用等号 =

    myname=ala
    

    变量设定规则:
    1.变数与变数内容以一个等号‘=’来连结,如下所示:
    ‘myname=VBird’
    2.等号两边不能直接接空白字元,如下所示为错误:
    ‘myname = VBird’或‘myname=VBird Tsai’
    3.变数名称只能是英文字母与数字,但是开头字元不能是数字,如下为错误:
    ‘2myname=VBird’
    4.变数内容若有空白字元可使用双引号‘"’或单引号‘'’将变数内容结合起来,
    但双引号内的特殊字元如 $ 等,可以保有原本的特性,如下所示:
    ‘var="lang is $LANG"’则‘echo $var’可得‘lang is zh_TW.UTF-8’
    单引号内的特殊字元则仅为一般字元 (纯文字),如下所示:
    var='lang is $LANG'’则‘echo $var’可得‘lang is $LANG’
    5.可用跳脱字元‘ ’将特殊符号(如 [Enter], (, \, 空白字元, '等)变成一般字元,如: ‘myname=VBird Tsai’ 6.在一串指令的执行中,还需要借由其他额外的指令所提供的资讯时,可以使用反单引号‘`指令`’或 ‘)(指令)’。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的设定:
    ‘version=$(uname -r)’再‘echo (version’可得‘3.10.0-229.el7.x86_64’ 7.若该变数为扩增变数内容时,则可用 ")变数名称" 或 ({变数} 累加内容,如下所示: ‘PATH=")PATH":/home/bin’或‘PATH=${PATH}:/home/bin’
    8.若该变数需要在其他子程序执行,则需要以 export 来使变数变成环境变数:
    ‘export PATH’
    9.通常大写字元为系统预设变数,自行设定变数可以使用小写字元,方便判断 (纯粹依照使用者兴趣与嗜好) ;
    10.取消变数的方法为使用 unset :‘unset 变数名称’例如取消 myname 的设定:
    ‘unset myname’

    环境变量与软链接

    绝对路径与相对路径
    绝对路径:路径的写法一定由根目录 / 写起,例如: /usr/share/doc
    相对路径:路径的写法不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:cd ../man 这就是相对路径的写法啦!相对路径意指 相对于目前工作目录的路径!

    环境变量
    我们知道查阅档案属性的指令ls完整档名为:/bin/ls(这是绝对路径), 那你会不会觉得很奇怪:为什么我可以在任何地方执行/bin/ls这个指令呢? ’为什么我在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变数 PATH 的帮助所致呀!
    Linux是一个多用户的操作系统,每个用户登录系统,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,默认环境实际上是一组环境变量的定义。通过相应的系统环境变量,用户可以对自己的运行环境进行个性化设置。
    通俗的讲,环境变量就是告诉电脑去哪几个目录寻找可执行程序.环境变量也是全局变量,即在任何界面输入命令都生效.
    其中包括:变量HOME(明确定义了用户登录目录的路径名)、变量PATH(指明了用户输入命令后,shell查找与之相应程序时所搜索的目录列表)。

    批注:如果一个程序需要引用多个环境变量,那么可以类似于java一样建立一个JAVA_HOME环境变量,后续其他环境变量基于这个环境变量修改。这样做的好处是以后更改时,只需要更改JAVA_HOME环境变量就可以了,非常方便。

    显示环境变量

    # 显示PATH环境变量
    echo $PATH
    
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
    

    即计算机将在以上目录中寻找可执行程序,其中:是分隔符.

    # 显示HOME变量
    echo $HOME
    
    /Users/abc
    
    # 显示所有环境变量
    export
    
    HOSTNAME=study.centos.vbird    <== 这部主机的主机名称
    TERM=xterm                     <== 这个终端机使用的环境是什么类型
    SHELL=/bin/bash                <== 目前这个环境下,使用的 Shell 是哪一个程式?
    HISTSIZE=1000                  <== ‘记录指令的笔数’在 CentOS 预设可记录 1000 笔
    OLDPWD=/home/dmtsai            <== 上一个工作目录的所在
    LC_ALL=en_US.utf8              <== 由于语系的关系,鸟哥偷偷丢上来的一个设定
    USER=dmtsai                    <== 使用者的名称啊!
    LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:
    or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:
    *.tar=01...                    <== 一些颜色显示
    MAIL=/var/spool/mail/dmtsai    <== 这个使用者所取用的 mailbox 位置
    PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
    PWD=/home/dmtsai               <== 目前使用者所在的工作目录 (利用 pwd 取出!)
    LANG=zh_TW.UTF-8               <== 这个与语系有关,底下会再介绍!
    HOME=/home/dmtsai              <== 这个使用者的家目录啊!
    LOGNAME=dmtsai                 <== 登入者用来登入的账号名称
    _=/usr/bin/env                 <== 上一次使用的指令的最后一个参数(或指令本身)
    

    设置环境变量

    如新添加的环境变量为/home/xxx/test/bin,则在~/.bashrc中填写:

    export PATH=$PATH:/home/xxx/test/bin
    

    然后source一下就可以使用了:

    source ~/.bashrc
    

    这样就将 /home/xxx/test/bin 也添加为了搜索目录,其中 $ 是引用变量, $PATH 即引用PATH变量, : 即分隔符.
    整句的意思是:设置环境变量为,原PATH路径以及/home/xxx/test/bin

    例程:设置java环境变量

    export JAVA_HOME=/home/xxx/soft/jdk1.8.0_231
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib/:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
    
    source ~/.bashrc
    

    测试:

    $ java -version
    java version "1.8.0_231"
    Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
    

    软链接
    软链接即Win的快捷方式.因此只要把要搜做的目录做成软链接(快捷方式)放进统一管理的bin目录下即可.

    语法:

    ln [-sf] 来源档 目标档
    

    -s :如果不加任何参数就进行连结,那就是hard link,至于 -s 就是symbolic link
    -f :如果 目标档 存在时,就主动的将目标档直接移除后再建立!

    栗子:
    将 /opt/cmake-3.12.2/bin/ 下的所有文件建立软链接放在 /usr/bin/ 目录下.这样计算机就可以在 /usr/bin/ 下搜索到 /opt/cmake-3.12.2/bin/* 了.

    ln -sf /opt/cmake-3.12.2/bin/*  /usr/bin/
    

    输入 read

    read -p "Please keyin your name: " -t 30 named
    
    Please keyin your name:
    

    输出 echo

    echo "hello"
    

    别名 alias

    alias lm='ls -al | more'
    

    bash欢迎信息

    还记得在终端机界面 (tty1 ~ tty6) 登入的时候,会有几行提示的字串吗?那就是进站画面啊! 那个字串写在哪里啊?呵呵!在 /etc/issue 里面啊!

    cat /etc/issue
    
    S
    Kernel 
     on an m
    

    issue 内的各代码意义:
    d 本地端时间的日期;
    l 显示第几个终端机界面;
    m 显示硬件的等级 (i386/i486/i586/i686...);
    显示主机的网络名称;
    O 显示 domain name;
    操作系统的版本 (相当于 uname -r)
    显示本地端时间的时间;
    S 操作系统的名称;
    v 操作系统的版本。

    source

    读入环境设定档的指令

    由于 /etc/profile 与 ~/.bash_profile 都是在取得 login shell 的时候才会读取的设定档,所以, 如果你将自己的偏好设定写入上述的档案后,通常都是得登出再登入后,该设定才会生效。那么,能不能直接读取设定档而不登出登入呢? 可以的!那就得要利用 source 这个指令了!

    source ~/.bashrc
    

    管道命令 pipe

    管线命令使用的是‘ | ’这个界定符号! 另外,管线命令与‘连续下达命令’是不一样的呦!
    假设我们想要知道 /etc/ 底下有多少档案,那么可以利用 ls /etc 来查阅,不过, 因为 /etc 底下的档案太多,导致一口气就将屏幕塞满了~不知道前面输出的内容是啥?此时,我们可以透过 less 指令的协助,利用:

    ls -al /etc | less
    

    如此一来,使用 ls 指令输出后的内容,就能够被 less 读取,并且利用 less 的功能,我们就能够前后翻动相关的资讯了!

    筛选命令 grep
    就是将一段资料经过分析后,取出我们所想要的。或者是经由分析关键字,取得我们所想要的那一行!

    # 在文件中查找关键字
    grep 关键字 文件
    

    其他管道命令
    cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand, split, xargs

    输出重定向

    例如输出到文件:

    echo "hello" >~/test.txt
    

    ip配置

    Ubuntu16.04 ip配置

    sudo gedit /etc/network/interfaces
    
    auto eth0                  #设置自动启动eth0接口
    iface eth0 inet static     #配置静态IP
    address 192.168.11.88      #IP地址
    netmask 255.255.255.0      #子网掩码
    gateway 192.168.11.1        #默认网关
    

    重启网络:

    sudo /etc/init.d/networking restart
    

    Ubuntu 18.04 ip配置

    Ubuntu 18.04的网络管理程序改为netplan了,因此配置方式也需要改喽!
    查看ip

    ifconfig -a
    

    设置静态ip

    sudo gedit /etc/netplan/50-cloud-init.yaml
    
    # This file is generated from information provided by
    # the datasource.  Changes to it will not persist across an instance.
    # To disable cloud-init's network configuration capabilities, write a file
    # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
    # network: {config: disabled}
    network:
        ethernets:
            enp0s3:
                addresses: [192.168.199.101/24, ]
                dhcp4: no
                dhcp6: no
                gateway4:  192.168.199.1
                nameservers:
                    addresses: [8.8.8.8, 9.9.9.9]
        version: 2
    

    其中,把dhcp4/dhcp6都设为no予以关闭,设上自己的ip地址、网关和域名服务器。
    应用网络:

    netplan apply
    

    代理配置

    bash代理

    sudo gedit ~/.bashrc
    
    export http_proxy=https://127.0.0.1:8000
    export https_proxy=https://127.0.0.1:8000
    # export http_proxy=https://邮箱用户名:邮箱密码@proxy.xxx.com:8080/
    
    source ~/.bashrc
    

    apt代理

    sudo gedit /etc/apt/apt.conf
    
    Acquire::https::proxy "https://127.0.0.1:8000/";
    Acquire::https::proxy "https://127.0.0.1:8000/";
    # Acquire::http::proxy "https://邮箱用户名:邮箱密码@proxy.xxx.com:8080/";
    

    Shell脚本

    www.purethought.cn/40027.html

    Ubuntu开机自动登录

    右上角 -> System Settings... -> User Accounts -> Automatic Login -> ON

    网线直连

    将两台电脑的静态ip设置为相同频段即可。如:
    A电脑

    ip地址:192.168.0.2
    子关掩码:255.255.255.0
    默认网关:192.168.0.1
    

    B电脑

    ip地址:192.168.0.3
    子关掩码:255.255.255.0
    默认网关:192.168.0.1
    

    然后可以使用ping进行测试。

    参考链接:
    https://www.runoob.com/linux/linux-shell.html
    https://www.cnblogs.com/nyist-xsk/p/7929859.html
    https://www.cnblogs.com/sunyllove/p/9772053.html
    https://linux.vbird.org/linux_basic/centos7/0220filemanager.php
    https://blog.csdn.net/politefish/article/details/4729551

  • 相关阅读:
    TCP心跳包
    interesting site
    TestNG环境搭建以及框架初识
    lambda表达式
    subprocess学习
    使用psutil模块获取电脑运行信息
    使用ssh和putty操控远程的linux server
    ubuntu系统源的更新
    将python的程序包装成windows下的service
    使用python进行re拆分网页内容
  • 原文地址:https://www.cnblogs.com/chendeqiang/p/12861718.html
Copyright © 2011-2022 走看看