the behavior of Linux and shell programming | Linux的行为与SHELL编程

/ 2021-09-16 / 400 Words/has been Read   Times


以root登录linux系统,并进入/proc目录,键入ls命令,查看/proc下的内容 #

终端显示的界面如下:

img

Proc 目录下主要目录和文件的内容有:

Ioports I/O 端口的使用,Kcore 内核核心印象,Kmsg 内核消息,Ksyms 内核符号表,Loadavg 负载均衡,Locks 内核锁,Misc 杂项,Modules 加载模块列表,Mounts加载的文件系统,Partitions 系统识别的分区表,Rtc 实时时钟,Slabinfo Slab 池信息,还有一些其他的信息可参见下表:

文件名 文件内容
proc/apm 高级电源管理信息
/proc/cmdline 加载kernel时所执行的相关参数。此文件可帮助了解系统是如何启动的
/proc/cpuinfo 本机的CPU相关信息,包含频率、类型与运算功能等
/proc/devices 记录了系统各个主要设备的主要设备代号,与mknod有关
/proc/dma 使用的DMA通道
/proc/filesystems 目前系统已经加载的文件系统
/proc/interrupts 目前系统的IRQ分配状态
/proc/ioports 目前系统的各个设备所配置的IO地址
/proc/kcore 内存的大小
/proc/loadavg top和uptime上面的三个平均数值
/proc/meminfo 使用free列出的内存信息,在这也能查阅
/proc/mounts 系统已经挂载的数据,就是用mount命令调出来的数据
/proc/swaps 系统加载的内存,使用的分区记录
/proc/stat 全面统计状态表
/proc/partitions 使用fdisk -l会出现目前所有的分区,这个文件中也有记录
/proc/version 内核版本
/proc/uptime 系统正常运行时间

查看每个文件的读写权限,如fs文件夹,输入指令

ls -l fs

img

读写权限一共有10位数,其中最前面的d代表的是类型, d代表此文件是文件夹,-代表此文件是普通文件,l代表此文件是软链接(相当于windows中的快捷方式),中间那三个r-x代表的是所有者,然后那三个r-x代表的是组群,最后那三个r-x代表的是其他人.

r表示文件可以被读(read),w表示文件可以被写(write),x表示文件可以被执行(如果它是程序的话),-表示相应的权限还没有被授予。[1]

根据/proc下的信息,查看CPU的类型和型号、当前Linux版本、从启动到当前时刻所经过的时间、当前内存状态。 #

proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc 得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

1 ) 查询CPU 的类型和型号,采用指令

cat cpuinfo

(cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的),可以看到是Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz:

img

  1. 查看内存使用情况,使用指令
cat meminfo

img

  • MemTotal表示内存总数,系统从加电开始到引导完成,BIOS等要保留一些内存,内核要保留一些内存,最后剩下可供系统支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的。
  • MemFree:空闲内存数,表示系统尚未使用的内存。MemUsed=MemTotal-MemFree就是已被用掉的内存。
  • MemAvailable:可用内存数,指应用程序可用内存数。系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以MemFree不能代表全部可用的内存,这部分可回收的内存加上MemFree才是系统可用的内存,即:MemAvailable≈MemFree+Buffers+Cached,它是内核使用特定的算法计算出来的,是一个估计值。它与MemFree的关键区别点在于,MemFree是说的系统层面,MemAvailable是说的应用程序层面。
  • Buffer:缓冲区内存数
  • Cache:缓存区内存数
  • Shared:多个进程共享的内存空间[2]
  1. 查看linux 版本,输入指令
cat version

img

  1. 从启动到当前时间所经过的时间,执行指令
uptime

img

使用常用的Linux命令 #

1) 查看当前目录,pwd命令用于显示当前目录,效果如下所示。

img

2)罗列文件,ls命令用于查看文件与目录,回到根目录查看列表(..表示返回上一级目录,/表示返回根目录),效果如下所示。

img

3)拷贝文件或目录,cp命令用于拷贝文件,若拷贝的对象为目录,则需要使用-r参数,回到home/hadoop/目录下,创建test目录,然后拷贝test目录,效果如下所示。

img

4)移动或重命名文件或目录,mv命令用于移动文件,在实际使用中,也常用于重命名文件或目录,把test2移动到test目录下。

img

然后进入test目录,效果如下所示

img

5)删除文件或目录,rm命令用于删除文件,若删除的对象为目录,则需要使用-r参数,效果如下所示。

img

6)压缩与解压文件,tar命令用于文件压缩与解压,参数中的c表示压缩,x表示解压缩,如

tar -zxvf /home/hadoop/test/test.tar.gz

7)cat命令,主要有三大功能:一次显示整个文件,从键盘创建一个文件(只能创建新文件,不能编辑已有文件),将几个文件合并为一个文件。

首先创建test1文件,文本编辑为hello file1, 然后退出(ctrl c 或者ctrl d退出),再使用cat命令查看test1文件内容。

img

然后创建test2文件,把test1和test2合并为一个文件test,如下图所示:

img

注: cat « EOF的语句,EOF是“end of file”,表示文本结束符,可以把EOF替换成其他东西,意思是把内容当作标准输入传给程序。

1、cat«EOF,以EOF输入字符为标准输入结束:

2、cat>filename,创建文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束:

3、cat>filename«EOF,以EOF作为输入结束,和ctrl+d的作用一样[3]

创建test3,以EOF作为输入结束的标志,如下图:

img

cat指令经常和其他指令组合使用,导致看起来很复杂,例如:cat » ~/.bashrc

这里~/是进入当前用户的主目录。比如我用的用户名是Hadoop,则命令 cd ~/ 就进入了/home/Hadoop目录。而.bashrc 是进入.bashrc文件夹,bashrc与profile都用于保存用户的环境信息,bashrc用于非交互式(non-loginshell),而profile用于交互式(login shell)

所以这个指令就是指显示用户目录下的.bashrc目录[4]

说明:‘<’,‘«’,‘>’,‘»’的含义,>>>的区别在与,>的作用是直接将原先内容覆盖掉,替换为新的内容,是w。而>>的作用是在原有的内容上追加内容,是a。符号<,它的作用就是>反过来,从文件中读取内容,然后作为输入[5]

8)date命令 ,date命令的功能是显示和设置系统日期和时间。

  • #date //显示当前日期
  • #date -s //设置当前时间,只有root权限才能设置,其他只能查看。
  • #date -s 20211010 //设置成20211010,这样会把具体时间设置成空00:00:00
  • #date -s 12:23:23 //设置具体时间,不会对日期做更改
  • #date -s “12:12:23 2021-10-10″ //这样可以设置全部时间
img

其中,CST:中国标准时间(China Standard Time),UTC:协调世界时,又称世界标准时间,GMT:格林尼治标准时间。

9)man命令,man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息

语法:man+(选项)+参数

其中选项

-a:在所有的man帮助手册中搜索;

-f:等价于whatis指令,显示给定关键字的简短描述信息;

-P:指定内容时使用分页程序;

-M:指定man手册搜索的路径。

查看ls指令的作用,

img

10)grep命令,grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

使用指令grep file *test在当前目录中,查找后缀有 test 字样的文件中包含 file 字符串的文件,并打印出该行。

img

11)tail命令,tail 命令可用于查看文件结尾的内容,

  • tail -f filename

说明:监视filename文件的尾部内容(默认10行,相当于增加参数 -n 10),刷新显示在屏幕上。退出,按下CTRL+C。

  • tail -n 20 filename

说明:显示filename最后20行。

打开文件test3,在虚拟机里加入一些文本信息,然后执行上面的指令进行测试:

img

12)head指令,head 用来显示档案的开头至标准输出中,和tail指令对应。

命令参数:

-q 隐藏文件名

-v 显示文件名

-c<字节> 显示字节数

-n<行数> 显示的行数

  • head -q filename

说明:监视filename文件的头部内容(默认10行,相当于增加参数 -n 10),刷新显示在屏幕上。退出,按下CTRL+C。

  • head -n 20 filename

说明:显示filename最后20行。[6]

img

13)wc指令,利用wc指令我们可以计算文件的Byte数、字数、或是列数

wc -c filename:显示一个文件的字节数

wc -m filename:显示一个文件的字符数

wc -l filename:显示一个文件的行数

wc -L filename:显示一个文件中的最长行的长度

wc -w filename:显示一个文件的字数

直接输入指令wc filename输出信息依次是:行数 字数 字节数 文件名称,如下图:

img

14) who指令,who 命令显示关于当前在本地系统上的所有用户的信息。显示以下内容:登录名、tty、登录日期和时间。输入whoami 显示登录名、tty、您登录的日期和时间。如果用户是从一个远程机器登录的,那么该机器的主机名也会被显示出来。

img

使用vi编辑器编辑文件,熟悉vi编辑器的各种操作模式和常用命令。 #

在命令行输入“vim 文件名”后,默认进入“命令模式”,不可编辑文档,需按“i”键,方可编辑文档,编辑结束后,需按“ESC”键,先退回命令模式,再按“:”进入末行模式,接着输入“wq”方可保存退出。

vi/vim共分为三种工作模式:命令模式(Command mode)、输入模式(Insert mode)和末行模式(Last line mode)。用户刚刚启动vi/vim,便进入了命令模式,此状态下敲击键盘动作会被vim识别为命令,而非输入字符,命令模式下是常用的几个命令包括:“i”切换到输入模式,以输入字符;“x”删除当前光标所在处的字符;“:”切换到末行模式,以在最底端一行输入命令。在命令模式下按下“i”就进入了输入模式,在输入模式中,可以使用若干按键完成相应任务,例如字符按键以及Shift组合,输入字符;Insert按键切换光标为输入/替换模式,光标将变成竖线/下划线;ESC按键退出输入模式,切换到命令模式等。在命令模式下按下“:”(英文冒号)就进入末行模式,末行模式下可以输入单个或多个字符的命令,可用的命令非常多,例“q”可以退出程序,“w”用于保存文件等,按ESC键可随时退出末行模式。

img

常用快捷键:

yy拷贝当前行,5yy拷贝当前行向下的5行,p粘贴;

dd删除当前行,5dd删除当前行向下的5行。

使用vi编辑器编写一段Shell程序,取名为mycal,实现与Linux中cal命令类似的功能 #

当输入$mycal [月份名] 年时,屏幕输出指定的年月的月历,参数可以是英文或者是数字。例如:

$mycal October 2009

屏幕输出2009年10月的月历。

将脚本放到/usr/local/sbin/目录下,利用vim mycal.sh来创建脚本,脚本代码如下[7]

#!/bin/bash
case $1 in
    "1"|"January")
       cal 1 $2;;
  "2"|"February")
       cal 2 $2;;
    "3"|"March")
       cal 3 $2;;
    "4"|"April")
       cal 4 $2;;
    "5"|"May")
       cal 5 $2;;
    "6"|"June")
      cal 6 $2;;
    "7"|"July")
      cal 7 $2;;
    "8"|"August")
     cal 8 $2;;
    "9"|"September")
       cal 9 $2;;
    "10"|"October")
       cal 10 $2;;
    "11"|"November")
       cal 11 $2;;
    "12"|"December")
      cal 12 $2;;
    "")
    echo "Please input mouth and year"
esac

使用指令

sh mycal.sh

来启动脚本,第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,shell脚本就不能被执行。’#!’是一个约定标记,用来告诉解释器采用哪一种shell。

img

如果输入指令./mycal.sh4 2021显示没有权限,用

chmod +x mycal.sh

给脚本赋予权限即可[8]

参考 #

  1. ^ https://blog.csdn.net/robin88129/article/details/84462981
  2. ^ https://blog.51cto.com/xujpxm/1961072
  3. ^ https://www.runoob.com/linux/linux-comm-cat.html
  4. ^ https://blog.csdn.net/qing101hua/article/details/53086318
  5. ^ https://blog.csdn.net/qq754772661/article/details/111176340
  6. ^ https://blog.csdn.net/youmatterhsp/article/details/80298360
  7. ^ https://max.book118.com/html/2018/0608/171535845.shtm
  8. ^ https://www.cnblogs.com/zhang-jun-jie/p/9266858.html

Last modified on 2021-09-16