碎片杂文
🏥面经
00 分钟
2024-3-15
2024-4-16
type
status
date
slug
summary
tags
category
icon
password
Property
Apr 16, 2024 10:34 AM

c++

c++的类型转换
四种强制类型转换操作符分别为:static_cast、dynamic_cast、const_cast、reinterpret_cast
  • 1)static_cast :用于各种隐式转换。具体的说,就是用户各种基本数据类型之间的转换,比如把int换成char,float换成int等。以及派生类(子类)的指针转换成基类(父类)指针的转换。
    • 特性与要点:
      1. 它没有运行时类型检查,所以是有安全隐患的。
      1. 在派生类指针转换到基类指针时,是没有任何问题的,在基类指针转换到派生类指针的时候,会有安全问题。
      1. static_cast不能转换const,volatile等属性
  • 2)dynamic_cast:用于动态类型转换。具体的说,就是在基类指针到派生类指针,或者派生类到基类指针的转换。dynamic_cast能够提供运行时类型检查,只用于含有虚函数的类。dynamic_cast如果不能转换返回NULL。
  • 3)const_cast:用于去除const常量属性,使其可以修改 ,也就是说,原本定义为const的变量在定义后就不能进行修改的,但是使用const_cast操作之后,可以通过这个指针或变量进行修改; 另外还有volatile属性的转换。
  • 4)reinterpret_cast几乎什么都可以转,用在任意的指针之间的转换,引用之间的转换,指针和足够大的int型之间的转换,整数到指针的转换等。但是不够安全。
C++虚函数相关(虚函数表,虚函数指针),虚函数的实现原理(热门,重要)
C++的虚函数是实现多态的机制。它是通过虚函数表实现的,虚函数表是每个类中存放虚函数地址的指针数组,类的实例在调用函数时会在虚函数表中寻找函数地址进行调用,如果子类覆盖了父类的函数,则子类的虚函数表会指向子类实现的函数地址,否则指向父类的函数地址。一个类的所有实例都共享同一张虚函数表。
 
如果多重继承和多继承的话,子类的虚函数表长什么样子?
多重继承的情况下越是祖先的父类的虚函数更靠前,多继承的情况下越是靠近子类名称的类的虚函数在虚函数表中更靠前。详见:https://blog.csdn.net/qq_36359022/article/details/81870219
实现编译器处理虚函数表应该如何处理
编译器处理虚函数的方法是:
如果类中有虚函数,就将虚函数的地址记录在类的虚函数表中。派生类在继承基类的时候,如果有重写基类的虚函数,就将虚函数表中相应的函数指针设置为派生类的函数地址,否则指向基类的函数地址。
为每个类的实例添加一个虚表指针(vptr),虚表指针指向类的虚函数表。实例在调用虚函数的时候,通过这个虚函数表指针找到类中的虚函数表,找到相应的函数进行调用。
基类的析构函数一般写成虚函数的原因
首先析构函数可以为虚函数,当析构一个指向子类的父类指针时,编译器可以根据虚函数表寻找到子类的析构函数进行调用,从而正确释放子类对象的资源。
如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除指向子类的父类指针时,只会调用父类的析构函数而不调用子类析构函数,这样就会造成子类对象析构不完全造成内存泄漏。
构造函数为什么一般不定义为虚函数
1)因为创建一个对象时需要确定对象的类型,而虚函数是在运行时确定其类型的。而在构造一个对象时,由于对象还未创建成功,编译器无法知道对象的实际类型,是类本身还是类的派生类等等
2)虚函数的调用需要虚函数表指针,而该指针存放在对象的内存空间中;若构造函数声明为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址用来调用虚函数即构造函数了
构造函数或者析构函数中调用虚函数会怎样
在构造函数中调用虚函数,由于当前对象还没有构造完成,此时调用的虚函数指向的是基类的函数实现方式。
在析构函数中调用虚函数,此时调用的是子类的函数实现方式。
c++11新特性
  • 自动类型推导auto:auto的自动类型推导用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推导,可以大大简化我们的编程工作
  • nullptr
    • :nullptr是为了解决原来C++中NULL的二义性问题而引进的一种新的类型,因为NULL实际上代表的是0,而nullptr是void*类型的
  • lambda表达式:它类似Javascript中的闭包,它可以用于创建并定义匿名的函数对象,以简化编程工作。Lambda的语法如下:
    • [函数对象参数](操作符重载函数参数)mutable或exception声明->返回值类型{函数体}
  • thread类和mutex类
  • 新的智能指针 unique_ptr和shared_ptr
c++14新特性
指针和引用的区别
  • 指针是一个新的变量,指向另一个变量的地址,我们可以通过访问这个地址来修改另一个变量;而引用是一个别名,对引用的操作就是对变量的本身进行操作
  • 指针可以有多级,引用只有一级
  • 传参的时候,使用指针的话需要解引用才能对参数进行修改,而使用引用可以直接对参数进行修改
  • 指针的大小一般是4个字节,引用的大小取决于被引用对象的大小(指的是使用sizeof运算符得到的结果,引用本质上还是使用指针,因此所占内存和指针是一样的)
  • 指针可以为空,引用不可以。
HTTP和HTTPS区别
HTTP(超文本传输协议)和HTTPS(HTTP安全)是用于在网络上传输数据的协议,它们之间有几个重要的区别:
  1. 安全性:
      • HTTP是明文传输的协议,数据在传输过程中是未加密的,因此容易受到窃听和中间人攻击的威胁。
      • HTTPS通过使用SSL/TLS协议对数据进行加密,提供了更高的安全性,使得数据在传输过程中被加密,从而更难以被窃听或篡改。
  1. 加密方式:
      • HTTP不提供数据加密功能,数据以明文形式传输。
      • HTTPS使用SSL/TLS协议对传输的数据进行加密,确保数据的机密性和完整性。
  1. 端口号:
      • HTTP默认使用端口80。
      • HTTPS默认使用端口443。
  1. 证书要求:
      • HTTPS需要使用SSL证书来验证服务器的身份,并建立安全的通信通道。
      • HTTP不需要证书,通信是明文的,不提供身份验证和数据加密。
  1. 搜索引擎排名:
      • 搜索引擎通常更青睐使用HTTPS的网站,因为HTTPS提供了更高的安全性,对于保护用户数据和隐私具有重要意义。
      • 使用HTTPS可能对网站在搜索引擎中的排名产生积极影响。
总的来说,HTTPS相对于HTTP来说更加安全,适用于需要保护敏感数据和用户隐私的场景,如网上支付、登录等。在今天的互联网环境中,大多数网站都倾向于使用HTTPS来保护用户数据的安全性。
cookie 和 session 的区别是什么
Cookie和Session都是在Web开发中用于跟踪用户状态的机制,但它们有一些重要的区别:
  1. 存储位置:
      • Cookie:存储在客户端(用户的浏览器)中,以文本文件的形式保存在用户的计算机上。
      • Session:存储在服务器端,通常存储在服务器的内存中,也可以存储在数据库或文件系统中。
  1. 安全性:
      • Cookie:相对不安全,因为存储在客户端,用户可以查看和修改Cookie的内容。虽然可以设置Cookie的安全属性,如Secure和HttpOnly,来增加安全性。
      • Session:相对安全,因为存储在服务器端,用户无法直接查看或修改Session数据。
  1. 数据存储方式:
      • Cookie:存储在客户端的浏览器中,可以设置过期时间,也可以通过设置路径和域名来限制Cookie的访问范围。
      • Session:存储在服务器端,通常由一个唯一的会话ID来标识用户的会话,这个会话ID会存储在Cookie中或者通过URL重写传递给客户端,然后客户端发送会话ID给服务器来识别用户的会话。
  1. 容量限制:
      • Cookie:每个Cookie的大小通常受到浏览器的限制,一般为4KB左右,不同浏览器有所不同。
      • Session:理论上没有固定的容量限制,但实际上会受到服务器内存或者其他存储介质的限制。
  1. 生命周期管理:
      • Cookie:可以设置过期时间,可以是会话级别的(浏览器关闭时失效)或者持久性的(在指定的过期时间之前有效)。
      • Session:通常在用户关闭浏览器时或者长时间不活动时失效,也可以通过程序代码来手动销毁会话。
综上所述,Cookie和Session都是用于在Web开发中跟踪用户状态的重要机制,但它们在存储位置、安全性、数据存储方式、容量限制和生命周期管理等方面有所不同,开发者需要根据具体的需求选择合适的机制来管理用户状态。
计算机组成原理讲了什么
rip 是什么
计算机网络中,RIP通常指的是路由信息协议(Routing Information Protocol)。
路由信息协议(RIP)是一种基于距离向量算法的动态路由协议,用于在局域网或广域网中自动交换路由信息,并根据网络的拓扑结构和路由距离(通常以跳数为单位)动态调整路由表。RIP最初由Xerox开发,后来被广泛采用于互联网和其他计算机网络中。
RIP协议的特点包括:
  1. 跳数作为度量标准: RIP使用跳数(即经过的路由器数量)作为度量标准,以确定最佳路由路径。当路由器转发RIP消息时,它会更新路由表中的跳数信息。
  1. 基于广播: RIP使用UDP协议进行通信,通过在网络中周期性地广播路由更新消息,以便邻居路由器了解网络的拓扑结构和可达性。
  1. 最大跳数限制: RIP对网络中允许的最大跳数进行了限制,通常为15跳,超过这个跳数的路由被认为是不可达的。
  1. 慢收敛速度: RIP的收敛速度相对较慢,因为它使用了较长的更新间隔和计时器,因此可能需要一段时间才能适应网络拓扑的变化。
  1. 简单易用: RIP协议相对简单,易于配置和管理,适用于小型网络或简单网络环境。
尽管RIP协议在过去被广泛使用,但由于其收敛速度慢、跳数限制和其他局限性,如今在大型或复杂网络中往往被更先进的动态路由协议如OSPF(开放最短路径优先)和BGP(边界网关协议)所取代。
友元函数和友元类
友元提供了不同类的成员函数之间、类的成员函数和一般函数之间进行数据共享的机制。通过友元,一个不同函数或者另一个类中的成员函数可以访问类中的私有成员和保护成员。友元的正确使用能提高程序的运行效率,但同时也破坏了类的封装性和数据的隐藏性,导致程序可维护性变差。
使用友元类时注意:
(1) 友元关系不能被继承。
(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
说一下volatile关键字的作用
volatile的意思是“脆弱的”,表明它修饰的变量的值十分容易被改变,所以编译器就不会对这个变量进行优化(CPU的优化是让该变量存放到CPU寄存器而不是内存),进而提供稳定的访问。每次读取volatile的变量时,系统总是会从内存中读取这个变量,并且将它的值立刻保存。
vector会迭代器失效吗?什么情况下会迭代器失效?
  • 当vector在插入的时候,如果原来的空间不够,会将申请新的内存并将原来的元素移动到新的内存,此时指向原内存地址的迭代器就失效了,first和end迭代器都失效
  • 当vector在插入的时候,end迭代器肯定会失效
  • 当vector在删除的时候,被删除元素以及它后面的所有元素迭代器都失效。
typdef和define区别
#define是预处理命令,在预处理是执行简单的替换,不做正确性的检查
typedef是在编译时处理的,它是在自己的作用域内给已经存在的类型一个别名
被free回收的内存是立即返还给操作系统吗?为什么
不是的,被free回收的内存会首先被ptmalloc使用双链表保存起来,当用户下一次申请内存的时候,会尝试从这些内存中寻找合适的返回。这样就避免了频繁的系统调用,占用过多的系统资源。同时ptmalloc也会尝试对小块内存进行合并,避免过多的内存碎片。
模板的用法与适用场景 实现原理
用template <typename T>关键字进行声明,接下来就可以进行模板函数和模板类的编写了
编译器会对函数模板进行两次编译:第一次编译在声明的地方对模板代码本身进行编译,这次编译只会进行一个语法检查,并不会生成具体的代码。第二次编译时对代码进行参数替换后再进行编译,生成具体的函数代码。
inline关键字说一下 和宏定义有什么区别
inline是内联的意思,可以定义比较小的函数。因为函数频繁调用会占用很多的栈空间,进行入栈出栈操作也耗费计算资源,所以可以用inline关键字修饰频繁调用的小函数。编译器会在编译阶段将代码体嵌入内联函数的调用语句块中。
1、内联函数在编译时展开,而宏在预编译时展开
2、在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。
3、内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能。
4、宏不是函数,而inline是函数
5、宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。
6、inline可以不展开,宏一定要展开。因为inline指示对编译器来说,只是一个建议,编译器可以选择忽略该建议,不对该函数进行展开。
7、宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单替换,因此它不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型,这样,它的使用就存在着一系列的隐患和局限性。
C++的智能指针有
哪些 C++中的智能指针有auto_ptr,shared_ptr,weak_ptr和unique_ptr。智能指针其实是将指针进行了封装,可以像普通指针一样进行使用,同时可以自行进行释放,避免忘记释放指针指向的内存地址造成内存泄漏。
  • auto_ptr是较早版本的智能指针,在进行指针拷贝和赋值的时候,新指针直接接管旧指针的资源并且将旧指针指向空,但是这种方式在需要访问旧指针的时候,就会出现问题。
  • unique_ptr是auto_ptr的一个改良版,不能赋值也不能拷贝,保证一个对象同一时间只有一个智能指针。
  • shared_ptr可以使得一个对象可以有多个智能指针,当这个对象所有的智能指针被销毁时就会自动进行回收。(内部使用计数机制进行维护)
  • weak_ptr是为了协助shared_ptr而出现的。它不能访问对象,只能观测shared_ptr的引用计数,防止出现死锁
内存泄露的定义,如何检测与避免?
动态分配内存所开辟的空间,在使用完毕后未手动释放,导致一直占据该内存,即为内存泄漏。
造成内存泄漏的几种原因:
1)类的构造函数和析构函数中new和delete没有配套
2)在释放对象数组时没有使用delete[],使用了delete
3)没有将基类的析构函数定义为虚函数,当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确释放,因此造成内存泄露
4)没有正确的清楚嵌套的对象指针
避免方法:
  1. malloc/free要配套
  1. 使用智能指针;
  1. 将基类的析构函数设为虚函数;
什么情况下会调用拷贝构造函数(三种情况)
  • 对象以值传递的方式传入函数参数
    • void func(Dog dog){};
  • 对象以值传递的方式从函数返回
    • Dog func(){ Dog d; return d;}
  • 对象需要通过另外一个对象进行初始化
介绍C++所有的构造函数
C++中的构造函数主要有三种类型:默认构造函数、重载构造函数和拷贝构造函数
  • 默认构造函数是当类没有实现自己的构造函数时,编译器默认提供的一个构造函数。
  • 重载构造函数也称为一般构造函数,一个类可以有多个重载构造函数,但是需要参数类型或个数不相同。可以在重载构造函数中自定义类的初始化方式。
  • 拷贝构造函数是在发生对象复制的时候调用的。
对象复用的了解,零拷贝的了解
对象复用指得是设计模式,对象可以采用不同的设计模式达到复用的目的,最常见的就是继承和组合模式了。
零拷贝指的是在进行操作时,避免CPU从一处存储拷贝到另一处存储。在Linux中,我们可以减少数据在内核空间和用户空间的来回拷贝实现,比如通过调用mmap()来代替read调用。
用程序调用mmap(),磁盘上的数据会通过DMA被拷贝的内核缓冲区,接着操作系统会把这段内核缓冲区与应用程序共享,这样就不需要把内核缓冲区的内容往用户空间拷贝。应用程序再调用write(),操作系统直接将内核缓冲区的内容拷贝到socket缓冲区中,这一切都发生在内核态,最后,socket缓冲区再把数据发到网卡去。
在C++中const的用法(定义,用途)
  • const修饰类的成员变量时,表示常量不能被修改
  • const修饰类的成员函数,表示该函数不会修改类中的数据成员,不会调用其他非const的成员函数
define 和const的联系与区别(编译阶段、安全性、内存占用等)
联系:它们都是定义常量的一种方法。
区别:
  • define定义的常量没有类型,只是进行了简单的替换,可能会有多个拷贝,占用的内存空间大,const定义的常量是有类型的,存放在静态存储区,只有一个拷贝,占用的内存空间小。
  • define定义的常量是在预处理阶段进行替换,而const在编译阶段确定它的值。
  • define不会进行类型安全检查,而const会进行类型安全检查,安全性更高。
  • const可以定义函数而define不可以。
delete和delete[]的区别
  • delete只会调用一次析构函数,而delete[]会调用每个成员的析构函数
  • 用new分配的内存用delete释放,用new[]分配的内存用delete[]释放
堆快一点还是栈快一点?(字节提前批一面)
栈快一点。因为操作系统会在底层对栈提供支持,会分配专门的寄存器存放栈的地址,栈的入栈出栈操作也十分简单,并且有专门的指令执行,所以栈的效率比较高也比较快。而堆的操作是由C/C++函数库提供的,在分配堆内存的时候需要一定的算法寻找合适大小的内存。并且获取堆的内容需要两次访问,第一次访问指针,第二次根据指针保存的地址访问内存,因此堆比较慢。
Struct和class的区别
  • 使用struct时,它的成员的访问权限默认是public的,而class的成员默认是private的
  • struct的继承默认是public继承,而class的继承默认是private继承
  • class可以用作模板,而struct不能
静态绑定和动态绑定的介绍
静态绑定也就是将该对象相关的属性或函数绑定为它的静态类型,也就是它在声明的类型,在编译的时候就确定。在调用的时候编译器会寻找它声明的类型进行访问。
动态绑定就是将该对象相关的属性或函数绑定为它的动态类型,具体的属性或函数在运行期确定,通常通过虚函数实现动态绑定。
什么是 XSS 注入
XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的网络安全漏洞,攻击者利用这种漏洞向网页中插入恶意的客户端脚本,以在用户的浏览器中执行恶意代码。
XSS攻击通常发生在Web应用程序中,攻击者利用未正确过滤或验证用户输入的漏洞,将恶意的脚本代码嵌入到网页中。这些恶意脚本可以是JavaScript、HTML或其他客户端脚本语言,一旦用户浏览器加载了受感染的网页,这些恶意脚本就会在用户的浏览器中执行,从而导致一系列安全问题,如窃取用户的Cookie信息、劫持用户会话、篡改网页内容等。
XSS攻击可以分为三种主要类型:
  1. 存储型XSS(Stored XSS): 攻击者将恶意脚本上传到Web应用程序的服务器,脚本会被存储在数据库中。当其他用户访问包含恶意脚本的页面时,脚本会从服务器加载并在用户的浏览器中执行。
  1. 反射型XSS(Reflected XSS): 攻击者将包含恶意脚本的URL发送给用户,当用户点击这个URL时,恶意脚本会在用户的浏览器中执行。这种类型的XSS攻击通常利用了Web应用程序中未正确处理用户输入的漏洞。
  1. DOM型XSS(DOM-based XSS): 攻击者通过修改网页中的DOM(文档对象模型)来触发XSS攻击,而不是直接向服务器提交恶意代码。这种类型的XSS攻击主要影响客户端脚本在浏览器中执行的方式,而不涉及服务器端的交互。
为了防止XSS攻击,开发者可以采取以下措施:
  • 对用户输入进行严格的验证和过滤,确保用户输入的数据不包含恶意脚本。
  • 对输出到网页的数据进行适当的转义和编码,防止恶意脚本在浏览器中执行。
  • 使用安全的编程实践,如避免使用eval()函数和innerHTML属性等,以减少XSS攻击的风险。
  • 使用HTTP头部中的安全标志,如X-XSS-Protection和Content-Security-Policy,加强浏览器对恶意脚本的检测和防范能力。
从 100 亿级别数量中判断是否存在一个元素的方法
  1. 哈希表(Hash Table): 使用哈希表来存储所有元素,然后通过哈希函数来查找目标元素是否存在。哈希表的查找操作时间复杂度通常为 O(1),但需要额外的空间来存储哈希表。
  1. 布隆过滤器(Bloom Filter): 布隆过滤器是一种数据结构,用于快速判断一个元素是否可能存在于一个集合中,具有空间效率高和查询速度快的特点。虽然布隆过滤器可以提供快速的查询速度,但是它可能会产生误判,即判断某个元素存在于集合中,但实际上并不存在。
  1. 分布式存储和并行计算: 如果数据集合非常大,单台机器无法容纳,可以考虑使用分布式存储和并行计算的方法,将数据集合分布存储在多台机器上,并通过并行计算来加速查找操作。
  1. 索引结构: 如果数据集合是有序的,可以考虑使用索引结构,如二叉搜索树、B+ 树等,来加速查找操作。通过索引结构可以在较快的时间内定位到目标元素。
  1. 顺序扫描: 如果数据集合无序,且没有额外的索引或者辅助数据结构,只能进行顺序扫描来逐个检查每个元素是否与目标元素相等。虽然顺序扫描的时间复杂度为 O(n),但是可以通过并行计算和优化算法来提高效率。

Linux

查看 IP 的指令
  • 使用终端并输入 ifconfig 命令可以查看网络接口的配置信息,包括IP地址、子网掩码、广播地址等。在较新的Linux系统中,也可以使用 ip addr 命令来代替 ifconfig
  • 另外,使用 hostname -I 命令可以仅查看当前计算机的IP地址。
查看自己文件系统的磁盘空间配额呢
使用命令repquota 能够显示出一个文件系统的配额信息
【附】只有root用户才能够查看其它用户的配额
怎样查看一个linux命令的概要与用法?假设你在/bin目录中偶然看到一个你从没见过的的命令,怎样才能知道它的作用和用法呢?
使用命令whatis 可以先出显示出这个命令的用法简要,比如,你可以使用whatis zcat 去查看‘zcat’的介绍以及使用简要。
[root@localhost ~]# whatis zcat
数据字典属于哪一个用户的?
数据字典是属于’SYS’用户的,用户‘SYS’ 和 ’SYSEM’是由系统默认自动创建的
一页一页地查看一个大文件的内容
通过管道将命令”cat file_name.txt” 和 ’more’ 连接在一起可以实现这个需要.
[root@localhost ~]# cat file_name.txt | more
哪一个bash内置命令能够进行数学运算
bash shell 的内置命令let 可以进行整型数的数学运算
bash shell 中的hash 命令有什么作用
linux命令’hash’管理着一个内置的哈希表,记录了已执行过的命令的完整路径, 用该命令可以打印出你所使用过的命令以及执行的次数。
你的系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
使用linux命令 ’disown -r ’可以将所有正在运行的进程移除。
如果你的助手想要打印出当前的目录栈,你会建议他怎么做?
使用Linux 命令dirs可以将当前的目录栈打印出来。
[root@localhost ~]# dirs
【附】:目录栈通过pushd popd 来操作。
要知道当前系统支持的所有命令的列表
使用命令compgen ­-c
当你需要给命令绑定一个宏或者按键的时候,应该怎么做呢?
可以使用bind命令,bind可以很方便地在shell中实现宏或按键的绑定。
在进行按键绑定的时候,我们需要先获取到绑定按键对应的字符序列。
比如获取F12的字符序列获取方法如下:先按下Ctrl+V,然后按下F12 .我们就可以得到F12的字符序列 ^[[24~。
接着使用bind进行绑定。
[root@localhost ~]# bind ‘”\e[24~":"date"'
注意:相同的按键在不同的终端或终端模拟器下可能会产生不同的字符序列。
【附】也可以使用showkey -a命令查看按键对应的字符序列。
awk 详解
awk '{pattern + action}' {filenames}
du 和 df 的定义,以及区别?
du 显示目录或文件的大小
df 显示每个<文件>所在的文件系统的信息,默认是显示所有文件系统。
(文件系统分配其中的一些磁盘块用来记录它自身的一些数据,如 i 节点,磁盘分布图,间接块,超级块等。这些数据对大多数用户级的程序来说是不可见的,通常称为 Meta Data。) du 命令是用户级的程序,它不考虑 Meta Data,而 df 命令则查看文件系统的磁盘分配图并考虑 Meta Data。
df 命令获得真正的文件系统数据,而 du 命令只查看文件系统的部分情况。
对命令进行取别名
alias la='ls -a’
通过什么命令查找执行命令?
which 只能查可执行文件
whereis 只能查二进制文件、说明文档,源文件等
使用什么命令查看网络是否连通?
netstat
使用什么命令查看磁盘使用空间?空闲空间呢?
df -hl
搜索文件用什么命令? 格式是怎么样的?
find <指定目录> <指定条件> <指定动作>
whereis 加参数与文件名
locate 只加文件名
find 直接搜索磁盘,较慢。
find / -name "string*"
把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?
把后台任务调到前台执行 fg
把停下的后台任务在后台执行起来 bg
哪个命令专门用来查看后台任务
job -l
利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进程的信息?
ps -ef (system v 输出)
ps -aux bsd 格式输出
ps -ef | grep pid
怎么使一个命令在后台运行?
一般都是使用 & 在命令结尾来让程序自动运行。
Linux 进程状态
D 不可中断 Uninterruptible(usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核 2.6 开始无效)
X 死掉的进程
终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令?
终端 /dev/tty
黑洞文件 /dev/null
文件权限修改:chmod
$ chmod u+x file 给 file 的属主增加执行权限
$ chmod 751 file 给 file 的属主分配读、写、执行(7)的权限,给 file 的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
$ chmod u=rwx,g=rx,o=x file 上例的另一种形式
$ chmod =r file 为所有用户分配读权限
$ chmod 444 file 同上例
$ chmod a-wx,a+r file同上例
$ chmod -R u+r directory 递归地给 directory 目录下所有文件和子目录的属主分配读的权限
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

评论
Loading...