Nowcoder专项练习:Linux(七)

1,csh

csh,是一种计算机的linux、unix命令,用来调用C shell。

而所谓C shell,是Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。

  • tcsh:是csh的增强版,并且完全兼容csh。它不但具有csh的全部功能,还具有命令行编辑、拼写校正、可编程字符集、历史纪录、 作业控制 等功能,以及C语言风格的语法结构。

  • awk:是一种优良的文本处理工具, Linux 及 Unix 环境中现有的功能最强大的数据处理引擎之一, AWK 提供了极其强大的功能:可以进行样式装入、 流控制 、数学 运算符 、进程 控制语句 甚至于内置的变量和函数。

  • sed:是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大。


2,makefile

makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模块及库等).创建程序(make程序)首先读取makefile文件,然后再激活编译器,汇编器,资源编译器和连接器以便产生最后的输出,最后输出并生成的通常是可执行文件.创建程序利用内置的推理规则来激活编译器,以便通过对特定CPP文件的编译来产生特定的OBJ文件.
Makefile里主要包含了五个东西:显式规则隐晦规则变量定义文件指示注释

1、显式规则
显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。

2、隐晦规则
由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。

3、变量的定义
在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上

4、文件指示
其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;还有就是定义一个多行的命令。有关这一部分的内容,我会在后续的部分中讲述。

5、注释
Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,这个就像C/C++中的“//”一样。如果你要在你的Makefile中使用“#”字符,可以用反斜框进行转义,如:“#”。
默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件,找到了解释这个文件。在这三个文件名中,最好使用“Makefile”这个文件名,因为,这个文件名第一个字符为大写,这样有一种显目的感觉。最好不要用 “GNUmakefile”,这个文件是GNU的make识别的。有另外一些make只对全小写的“makefile”文件名敏感,但是基本上来说,大多数的make都支持“makefile”和“Makefile”这两种默认文件名。
在Makefile使用include关键字可以把别的Makefile包含进来,这很像C语言的#include,被包含的文件会原模原样的放在当前文件的包含位置。include的语法是:
include ; filename可以是当前操作系统Shell的文件模式(可以保含路径和通配符)

Q:
关于makefile描述正确的有?

A:

  • makefile文件保存了编译器和连接器的参数选项。
  • 主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。
  • 默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件, 找到了解释这个文件。
  • 在Makefile不可以使用include关键字把别的Makefile包含进来。

3,grep命令

Q:
写出linux命令: 在当前目录及其子目录所有的.cpp文件中查找字符串"example", 不区分大小写?

A:

  • grep -i -r example ./*.cpp

其中:

  • -i ignore 忽略大小写
  • -r recursion 递归

4,man

man的级别:
1:查看命令的帮助
2:查看可被内核调用的函数的帮助
3:查看函数和函数库的帮助
4:查看特殊文件的帮助(主要是/dev目录下的文件)
5:查看配置文件的帮助
6:查看游戏的帮助
7:查看其它杂项的帮助
8:查看系统管理员可用命令的帮助

Q:
man 5 passwd的含义?

A:
显示passwd文件的结构。


5,虚拟内存

进程的虚拟内存大小并不受物理内存大小的限制,例32位处理器虚拟内存空间可能是4G,但物理内存实际是小于4G的,部分地址空间分配给了ROM、外设等。


6,命令含义

Q:
有一个文件ip.txt,每行一条ip记录,共若干行,下面哪个命令可以实现“统计出现次数最多的前3个ip及其次数”?

A:

  • sort ip.txt | uniq -c | sort -rn | head -n 3

首先排序sort,相同的ip会排在一起,然后uniq -c 会去掉重复的ip,只有保留一条,同时记录重复数在行首,
如: 3 ip1 \n 1 ip2 \n 2 ip3
再按照数字反向排序即可sort -nr,-n是按照数字,-r是降序,最后 head -n 3取出前三个即可。


7,退出

  • esc,在vi的插入模式或者底行命令模式下进入命令模式
  • exit,一般用于退出会话式程序或者交互式命令行,如ssh远程连接,切换 shell(Linux中)
  • q,用来退出 man 手册查看命令或者配置文件的状态,或者more、less等命令查看文件的状态
  • quit,一般用于图形界面的退出

8,文件描述符

Q:
在bash中,在一条命令后加入”1>&2”意味着?

A:

  • 标准输出重定向到标准错误输出

0 ,1,2叫文件描述符;Linux中,每打开一个文件都有一个小的整数与之对应,就是文件描述符。

  • 0 是标准输入的 (stdin)
  • 1 是标准输出的 (stdout)
  • 2 是标准报错输出的 (stderr)
  • '<'是输入重定向符
  • ‘>’是输出重定向符

9,目录创建

Q:
在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是?

A:

  • -p

-p --parent 可以一次建立多个目录,并且如果所指定的路径中有些父目录不存在,自动新建它们。

另外:
-m --mode=MODE 将新建的目录的存取权限设置为MODE,存取权限用给定的八进制数字表示。


10,系统资源显示命令含义

  • free:直观的展示linux系统内存使用及交换区的容量大小等
  • top:动态实时查看系统中每一个进程的资源使用情况
  • cat /proc/meminfo:查看物理内存的大小
  • gnome-system-monitor:一个显示最近一段时间内的CPU、内存、交换区及网络使用情况的视图工具
  • ps aux –sort -rss:各个线程的资源使用情况
  • vmstat -s:vmstat命令显示实时的和平均的统计,覆盖CPU、内存、I/O等内容

11,数组名作为参数

Q:
在Linux下64位c程序,请计算输出的三个sizeof分别是:

void func(char str_arg[100])
{
  cout<<sizeof(str_arg)<<endl;
}
int main(int argc,char* argv[])
{
  char str[]="Hello";
  char *p=str;
  cout<<sizeof(str)<<endl;
  cout<<sizeof(p)<<endl;
  func("test");
  return 0;
} 

A:
6,8,8

  • sizeof返回实际空间长度,包含\0
  • 数组和指针最大的区别就是:作为参数传递到函数的时候,数组只能传递指针进入,失去了数组的性质。函数内sizeof数组名实际是sizeof指针。

12,Linux命令

Q:
如何查看当前Linux系统的状态,如CPU使用,内存使用,负载情况,下列描述正确的是?

A:

  • 可以使用top命令分析CPU使用、内存使用、负载等情况。
  • 可以使用free查看内存整体的使用情况。
  • 可以使用cat /proc/meminfo 查看内存更详细的情况。

TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。
TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表,该命令可以按CPU使用。内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。

free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。

meminfo文件中,有以下信息:

  • MemTotal: 所有可用RAM大小 (即物理内存减去一些预留位和内核的二进制代码大小)
  • MemFree: LowFree与HighFree的总和
  • Buffers:用来给块设备做的缓冲大小(只记录文件系统的metadata以及 tracking in-flight pages,就是说 buffers是用来存储,目录里面有什么内容,权限等等)
  • Cached: 用来给文件做缓冲大小(直接用来记忆我们打开的文件). 它不包括SwapCached
  • SwapCached:已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口
  • Active:最近经常被使用的内存,除非非常必要否则不会被移作他用
  • Inactive:最近不经常被使用的内存,非常用可能被用于其他途径
  • HighFree:高位内存是指所有在860MB以上的内存空间,该区域主要用于用户空间的程序或者是缓存页面。内核必须使用不同的手法使用该段内存,因此它比低位内存要慢一些
  • LowFree:低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构
  • SwapTotal:交换空间的总和
  • SwapFree:从RAM中被替换出暂时存在磁盘上的空间大小
  • Dirty:等待被写回到磁盘的内存大小
  • Writeback:正在被写回到磁盘的内存大小
  • Mapped:映射文件的大小
  • Slab:内核数据结构缓存

13,Samba

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议。

Q:
Samba 服务器的配置文件是?

A:

  • smb.conf

其中:

  • httpd.conf WEB服务器配置文件
  • initd.conf 启动脚本配置文件
  • rc.samba samba脚本
  • samba服务配置文件 smb.conf

14,交换区

mkswap

功能说明:
设置交换区(swap area),可将磁盘分区或文件设为Linux的交换区

语法:
mkswap [-cf][-v0][-v1][设备名称或文件][交换区大小]

参数:
-c 建立交换区前,先检查是否有损坏的区块。
-f 在SPARC电脑上建立交换区时,要加上此参数。
-v0 建立旧式交换区,此为预设值。
-v1 建立新式交换区。
[交换区大小] 指定交换区的大小,单位为1024字节

swapon

功能说明:
激活swap

参 数:
-a 自动启动所有SWAP装置
-s 显示简短的装置讯息

swapoff

功能说明:
关闭系统交换分区

语法:
swapoff[必要参数][选择参数]

参数:

  • 必要参数
    -a 关闭所有交换设备

选择参数
-h 帮助信息
-V 版本信息


15,内核线程与用户线程

线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两种类型:“用户线程”和“内核线程”。

用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。

内核线程则需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进行创建和撤销。

  • 用户线程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会。
  • 内核线程只运行在内核态,不受用户态上下文的影响。
  • 内核线程有利于发挥多处理器的并发优势,但却占用了更多的系统开支。

16,tar

tar命令相关参数:

  • -c :创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。相当于打包。
  • -x :从档案文件中释放文件。相当于拆包。
  • -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩或解压? 一般格式为xx.tar.gz或xx. tgz
  • -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩或解压?一般格式为xx.tar.bz2
  • -v :压缩的过程中显示文件!这个常用
  • -f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加其他参数!
  • -p :使用原文件的原来属性(属性不会依据使用者而变)
  • –exclude FILE:在压缩的过程中,不要将 FILE 打包!

17,Linux文件夹

/bin 二进制可执行命令

/dev 设备特殊文件

/etc 系统管理和配置文件

/etc/rc.d 启动的配置文件和脚本

/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示

/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件

/sbin 超级管理命令,这里存放的是系统管理员使用的管理程序

/tmp 公共的临时文件存储点

/root 系统管理员的主目录

/mnt 系统提供这个目录是让用户临时挂载其他的文件系统

/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)

/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。

/var 某些大文件的溢出区,比方说各种服务的日志文件

/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录,其中包含:

/usr/x11R6 存放x window的目录

/usr/bin 众多的应用程序

/usr/sbin 超级用户的一些管理程序

/usr/doclinux 文档

/usr/includelinux 下开发和编译应用程序所需要的头文件

/usr/lib 常用的动态链接库和软件包的配置文件

/usr/man帮助文档

/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里

/usr/local/bin 本地增加的命令


18,退出编辑器

Vi一共有三种模式:
命令行模式 (command mode/一般模式)
任何时候,不管用户处于何种模式,只要按一下“ESC”键,即可使Vi进入命令行模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。
在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。

文本输入模式 (input mode/编辑模式)
在命令模式下输入插入命令i(insert)、附加命令a (append)、打开命令o(open)、修改命令c(change)、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按"ESC"键即可。

末行模式 (last line mode/指令列命令模式)
末行模式也称ex转义模式。

Vi和Ex编辑器的功能是相同的,二者主要区别是用户界面。在Vi中,命令通常是单个键,例如i、a、o等;而在Ex中,命令是以按回车键结束的正文行。Vi有一个专门的“转义”命令,可访问很多面向行的Ex命令。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。

Q:
在Linux系统下,你用vi编辑器对文本文件test.txt进行了修改,想保存对该文件所做的修改并正常退出vi编辑器,可以?

A:

  • 在命令模式下执行ZZ命令
  • 在末行模式下执行:wq

19,Linux缺省的shell

Q:
shell不仅仅是用户命令解释器,同时一种强大的编程语言,linux缺省的shell是什么?

A:

  • bash

20,Bash

Bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell。

Bash是Bourne shell的后继兼容版本与开放源代码版本,它的名称来自Bourne shell(sh)的一个双关语(Bourne again / born again):Bourne-Again SHell。

Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。和其他Unix shell 一样,它支持文件名替换(通配符匹配)、管道、here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。包括关键字、语法在内的基本特性全部是从sh借鉴过来的。其他特性,例如历史命令,是从csh和ksh借鉴而来。总的来说,Bash虽然是一个满足POSIX规范的shell,但有很多扩展。

Unix Shell

Unix shell,一种壳层与命令行界面,是UNIX操作系统下传统的用户和计算机的交互界面。第一个用户直接输入命令来执行各种各样的任务。

普通意义上的shell就是可以接受用户输入命令的程序。它之所以被称作shell是因为它隐藏了操作系统低层的细节。同样的Unix下的图形用户界面GNOME和KDE,有时也被叫做“虚拟shell”或“图形shell”。

Unix操作系统下的shell既是用户交互的界面,也是控制系统的脚本语言。当然在这点也有别于Windows下的命令行,虽然也提供了很简单的控制语句。在Windows操作系统下,可能有些用户从来都不会直接的使用shell,然而在Unix系列操作系统下,shell仍然是控制系统启动、X Window启动和很多其他实用工具的脚本解释程序。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值