用户身份与文件的权限(普通权限、特殊权限、隐藏权限和文件控制列表ACL)

用户身份

        root用户是存在于所有类UNIX操作系统中的超级用户,它拥有最高的系统所有权。root用户的用户身份号码UID为0,UID相当于用户的身份证号码一样,具有唯一性。管理员用户(超级用户)UID为0;系统用户UID为1~999(不同的系统不一样),Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整个服务器,默认服务会有独立的系统用户负责运行,进而有效控制被破坏的范围(windows是单用户操作系统,一旦该用户被入侵,则有权限对整个环境进行操作),系统用户只是用来管理某一项具体的服务,因此不需要登陆该系统服务器中,其终端解释器为/sbin/nologin,因此该用户被入侵时,并不能提权至整台服务器;普通用户的UID从1000开始(即使前面有闲置的号码),是由管理员创建的日常工作的用户。

        用户组分为基本用户组(-g)和扩展用户组(-G)。用户组身份号码GID可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户被纳入其它用户组,则这个其它用户组称之为扩展用户组。一个用户只能拥有一个基本用户组,可以拥有多个扩展用户组。 用id命令可以查看:用户的用户身份号码(用户名);基本用户组身份号码(基本用户组名);扩展用户组身份号码(扩展用户组名)。在默认情况下,基本用户组名与用户名一样,除非自己指定。

         useradd命令  用于创建新的普通用户,该命令创建的用户目录默认会存放在/home目录中,默认的shell解释器为/bin/bash,而且会默认创建一个与其同名的基本用户组。  -d 指定家目录  -u指定用户的UID  -g指定一个基本用户组(必须是存在的组,没有就要创建)  -G指定扩展用户组   -N不创建与用户同名的基本用户组  -s指定用户的shell解释器   useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe  创建了一个名为linuxprobe的用户   # id linuxprobe  输出为:uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)  此时用户只有基本用户组(名字为linuxprobe),没有扩展用户组    

         groupadd命令  用于创建组(基本或者扩展)    groupadd zsx     创建一个名为zsx的组

         usermod命令  修改用户的属性  用户的信息保存在/etc/passwd文件中,可以直接用文本编辑器来修改其中的用户参数项目,也可以用usermod命令来修改已经创建的用户信息,如用户的UID、基本/扩展用户组、默认终端等。-g 变更基本用户组   -G 变更扩展用户组   -s变更默认终端   -u修改用户的UID     usermod -G root linuxprobe 增加扩展用户组root, 则id查看信息为: uid = 8888 (linuxprobe)  gid=8888  (linuxprobe)  groups=8888(linuxprobe),0(root)   可见其扩展用户组名为root,扩展用户组身份号码为0。这里在次变更: usermod -G zsx linuxprobe  变为:  uid=8888(linuxprobe)  gid= 8888 (linuxprobe)    groups = 8888(linuxprobe) ,1001(zsx)

        passwd命令    passwd命令用于修改用户的密码,格式:passwd  用户名  仅仅只有passwd,则为修改自己的密码。   -l 锁定用户,禁止其登陆   -u解除锁定,允许其登陆   passwd -l luciusvorenus    --stdin 允许通过管道符方式来设定用户密码     echo "zsx" | passwd --stdin luciusvorenus 

        userdel命令 删除用户   userdel linuxprobe 删除该用户,但是家目录/home/linuxprobe会保留下来,可添加-r参数,连同家目录一起删除    -f 强制删除用户

文件权限与归属
        -为普通文件(一般文件、文本文件);d为目录文件;l为软链接文件;b为块设备文件;c为字符设备文件(设备文件为硬件映射形成的文件,如硬盘等);p为管道文件;s为socket文件。

        文件的所有者(所属主)、所属组和其它用户对该文件所拥有的可读(r,4)、可写(w,2)和可执行(x,1)等权限。对目录文件来说,可读表示能够读取目录内的文件列表;可写表示能够在目录内新增、删除和重命名 文件;可执行表示能够进入该目录。 文件的权限表示:rwxrw-r--  用数字表示则为: 764     -rwxr--r--. 1 root root 206 Sep 29 21:24 ex.sh    该文件为普通文件,所属主(所有者)为root用户,拥有7权限;所属组为root,拥有4权限;其他用户拥有权限4。所属主前面的数字1代表该文件的硬链接数(即实际指针的文件个数,软链接不算)为1个。该文件的磁盘占用大小为206个字节,最后一次修改的时间为9月29日的21:24分,文件的名称为ex.sh。

SUID特殊权限位(u+s)
        SUID、SGID和SBIT的特殊权限位,是一种对文件进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。SUID拥有权限4,SGID拥有权限2,SBIT拥有权限1。rwsrwSrw-用数字表示为:其一般权限为rwxrw-rw-,即为766,载加上特殊权限,则为6766。第一个6为4+2。SUDI特殊权限位仅对拥有执行权限的二进制程序有效,即当用户执行该二进制程序时,可以临时拥有该二进制程序所属主(所有者)的身份。对于/etc/passwd  -rw-r--r--. 1 root root 1926 Sep 29 21:50 /etc/passwd     除了root管理员之外,其余所有用户都只能读取该文件信息,不能修改;对于/etc/shadow(保存了用户的密码)
----------. 1 root root 1990 Sep 29 18:48 /etc/shadow  除了root用户外,其余任何用户都不能读取、修改该文件; 对于passwd命令文件:-rwsr-xr-x. 1 root root 27832 Jan 29  2014 /bin/passwd  该文件是二进制程序文件,所有用户都可以执行该文件,因此任何一个用户执行该文件时,都会临时获得该文件所属主的身份,即root身份,进一步利用该身份可以取修改/etc/shadow和/etc/passwd文件的信息了(把变更的密码信息写到/etc/shadow文件中)。 rwx变为rws  rw-变为rwS  后面一样 rwt  rwT

SGID特殊权限位(g+s)

        SGID特殊权限位实现两种功能:1.让执行者临时拥有属组的权限(身份)(仅对拥有执行权限的二进制程序有效);2.对目录文件进行设置时,在该目录文件中创建的文件自动继承该目录的用户组(只可以对目录设置)。对于/dev/kmem文件(早期的linux系统才会有):cr--r----- 1 root system 2, 1 Feb 11 2017 kmem  该文件为字符设备文件,只有root用户和system组内的用户才可以读取该文件,其余用户不能访问。ps命令文件:    -rwxr-sr-x. 1 bin system 100120 Feb 27  2014 /usr/bin/ps  该文件为二进制程序,当任何一个用户执行该文件时,可以临时获得所属组的身份(system),从而可以读取kmem文件中的信息,获得系统中所有进程的状态信息。利用SGID特殊权限位,可以为一个部门内部所有用户设置一个共享目录,即首先将所有用户划分为一个组,然后设置这个目录的用户组就为该部门成员所在的那个组:# mkdir /tmp/haha       drwxrwxr-x. 2 root root 6  Mar  5 15:46 haha  可以看出该目录文件的用户组为root,则root组内的用户都可以该目录读、写和执行。赋予该目录SGID特殊权限位: chmod g+s /tmp/haha   则:drwxrwsr-x. 2 root root 6 Mar  5 15:46 haha  则root组内任何一个用户在该目录内部创建文件时,创建的文件的所属组都为root,从而该文件能够被组内所有用户访问,即实现了组内用户的共享目录。   注意:在对目录设置SGID权限之前目录内的所有文件的所属组在设置SGID权限后不会发生变化。比如:chown root:bin /tmp/haha   此后,创建的文件的所属组为bin  之前的文件依然为root    在默认情况下,一个用户创建的文件的所属主为该用户,所属组为该用户的基本用户组。一个用户的基本用户组只有该用户一个成员,且默认情况下组名与用户名相同。  当创建或传送一个文件,这个文件的所属主就为执行这个操作的用户。

chmod和chown命令

        chmod命令用于设置一个文件的权限位,包括一般权限和特殊权限。对于文件zs,所有者可读可写可执行,对于所属组可读可写,对于其它用户没有任何权限,即rwxrw----,其对应的数字为760,则:chmod 760 zs  要设置为:rwsrw----,则: chmod 4760 zs chown命令用于设置文件的所有者和所属组。其格式为:chown  所有者:所属组 文件或目录名称   chown bin:root zs  设置zs文件的所有者为bin,所属组为root  
        SUID特殊权限位的设置: chmod  u+s 文件名称(仅对可执行的二进制程序文件有效)
        SGID特殊权限位的设置: chmod  g+s 文件名称(仅对可执行的二进制程序文件有效)
                       chmod  g+s 目录名称(仅对目录文件有效)
        SBIT特殊权限位的设置: chmod  o+t 目录名称
共性:chmod与chown命令在对目录文件进行操作时,加上-R参数表示递归操作,即对目录内所有的文件进行整体操作。不加-R参数,只是对目录进行设置。
u 代表所属主  g代表所属组  o代表其它用户 a代表全部用户, 如 chmod u+x ex.sh 表示对ex.sh文件的所属主增加执行权限(x)。  r w x s t 也可以用字母指明,可以不用数字   chmod +x file 和 chmod a+x file等价。

SBIT特殊权限位(o+t)  仅对目录设置
        对于一个共享目录,在设置了SGID特殊权限位后,该目录及目录内部创建的所有文件的用户组都为该部门成员。为了防止一个人的文件被其他用户删除,则可以设置SBIT特殊权限位。SBIT特殊权限位可以确保用户只能删除自己的文件,不能删除他人的文件(root用户除外),即只能被文件的所有者执行删除操作。 如RHEL7系统中的/tmp为一个共享目录,默认已经设置好了SBIT特殊权限位: drwxrwxrwt. 61 root root 4096 Oct  6 22:35 /tmp     则,在该目录中创建的文件只能够被该文件的所有者和root用户删除,其余人都没有权限删除。 即使该文件的权限最大(777),且目录允许进行读、写和执行,但还是无法删除该文件。
        另外需要注意,一个文件能否被删除不取决于自身的权限,而取决于其所在目录是否有写入权限。如 /tmp/haha目录: drwxr-sr-x. 2 root root 16 Mar  5 16:18 haha  可见对与该文件,只有root用户有写入权限,即新增、重命名和删除目录内的文件,其它任何用户都不能在该目录内部创建、删除或者重命名文件,只能进入该目录和读取该目录内部的文件列表。  chmod 775 haha   则:drwxrwsr-x. 2 root root 6 Mar  5 16:43 haha   则此时root组内成员增加了写权限,而账户zsx为root组内成员,此时zsx用户可以在目录内部新增、重命名和删除文件。   综上,对文件的删除、新增和重命名并不取决于文件本身,而是取决于文件所在的目录。     chmod o+t /tmp/zsx

文件的隐藏权限
        文件被隐藏起来的权限,默认情况下不能被用户察觉。
        chattr命令用于设置(增加或删除)文件的隐藏权限: chattr +参数 filename 增加隐藏权限  chattr -参数  filename 删除隐藏权限    i 无法对文件进行修改(本身无法删除,内容无法修改),对于目录文件,仅能修改其中的子文件内容,不能新建或删除文件。  a 仅允许补充(追加)内容,不能覆盖/删除内容,也不能删除该文件或对文件重命名。     chattr +a zs 此时zs文件所在的目录即使开放了用户可以删除文件的权限,但是该文件依然不能删除,因为设置了隐藏权限。 移出: chattr -a zs      lsattr filename 用于查看文件的隐藏权限  ls命令是无法查看文件的隐藏权限的。

文件访问控制列表ACL
        用于对某个指定的用户(u)或用户组(g)进行单独的权限设置,基于普通文件或者目录文件设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。如果针对目录设置了ACL且采用了-R参数,则目录中的文件会继承其ACL;若针对文件设置了ACL,则文件不再继承其所在目录的ACL。
        setfacl命令 用于设置文件的ACL(文件访问控制列表),对于普通文件采用-m参数即可;对于目录文件若采用-m参数,则仅仅只是对目录文件进行ACL的设置,对目录内的其余文件没有影响(注意,必须清晰目录权限与目录内部文件的权限之间的区别与联系,严格遵守),若采用-Rm参数,则对目录和目录内部所有文件都设置ACL,即对于某个特定的用户或用户组有哪些权限,如果目录内部已经有文件设置了ACL,则该文件不再继承目录的ACL。setfacl -b filename 用于删除对文件已经设置好了的ACL。下面示例:
setfacl -m u:zsx:rx /root 
setfacl -Rm u:zsx:rwx /root/work/      对/root/work目录设置ACL u指定用户 g指定用户组 
getfacl guess.sh         guess.h文件是该目录内部的文件,可见该文件继承了目录的ACL
# file: guess.sh   文件名
# owner: root     所属主
# group: root    所属组
user::rw-    
user:zsx:rwx
group::r--
mask::rwx   有效权限
other::r--
注意:zsx用户要能进入到/root/work目录,还必须对/root目录也要设置ACL(上面第一条),若只是
对/root/work目录进行设置,仍然进入不了该目录。
getfacl /root/
# file: root/
# owner: root
# group: root
user::r-x
user:zsx:r-x
group::r-x
mask::r-x   
other::---
getfacl /root/Desktop/
# file: root/Desktop/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x   可见目录Desktop/并没有继承目录/root的ACL,因为上面没有使用-R参数
setfacl -b /root/
getfacl /root/
# file: root/
# owner: root
# group: root
user::r-x
group::r-x
other::---   可见已经删除了ACL
setfacl -m g:wheel:rwx work/   针对wheel用户组设置权限
getfacl work/
# file: work/
# owner: root
# group: root
user::rwx
group::r-x
group:wheel:rwx
mask::rwx
other::r-x
    getfacl命令 可以查看文件的所属主、所属组、各种权限和ACL权限。如查看/root目录:
getfacl /root/
# file: root/
# owner: root
# group: root
user::r-x  所属主权限
group::r-x  所属组权限
other::---   其它用户权限
如查看/root/work/:
getfacl work/
# file: work/
# owner: root
# group: root
user::rwx
group::r-x
group:wheel:rwx 
mask::rwx    有效权限  
other::r-x

dr-xr-x---+ 17 root root 4096 Mar  5 15:12 /root 采用ls命令可以查看文件是否设置了ACL,.号会变为+号。但是这也不是绝对的,如果文件的ACL是继承了目录的,那么用ls命令查看其属性依然为.号,因此查看一个文件是否设置ACL,最准确的方法是使用getfacl命令。注意:某个用户或用户组的权限并不是只根据ACL配置来决定的,它是由该用户或用户组基本权限与配置的ACL权
限的“与”运算决定的,即other:r-x 与 wheel:rwx = wheel:r-x  即实质上wheel组内的用户对该目录(上面的/root/work/目录)只有读和执行权限。对于有效权限mask:用户或组所设置的权限必须要存在于mask的权限设置范围内才会生效,否则无效。设置mask
的方法: setfacl -m m:w  filenanme  即设置文件filename的有效权限mask为w(写)。

su命令与sudo服务(visudo)
        su命令可以解决切换用户身份的要求。 su与su -是有区别的,前者只是切换了身份,但Shell环境仍然是原来用户的Shell(环境不变);而后者连用户和Shell环境一起切换成新用户身份了。只有切换了Shell环境才不会出现PATH环境变量错误。
        sudo命令可以把特定命令的执行权限赋予给指定用户,这样既可以保证普通用户完成特定的工作,又可以避免密码的泄漏。sudo服务的配置原则:在保证普通用户完成工作的前提下,应当尽量少赋予额外的权限。格式:sudo  命令名称  
        sudo命令具有如下功能:限制用户执行指定的命令;记录用户执行的每一条命令;配置文件/etc/sudoers提供集中的用户管理、权限与主机等参数;验证密码的后5分钟内(默认值)无需再让用户再次验证密码。
        对于/etc/sudoers文件:-r--r-----. 1 root root 4000 Jan 15  2014 /etc/sudoers  可以看出,只有只有管理员用户才可以对该配置文件进行修改,管理员和root组用户可以对该文件查看。        sudo命令文件:---s--x--x. 1 root root 130712 Feb 26  2014 /usr/bin/sudo 该文件具有SUID特殊权限位,即任何用户利用sudo命令都可以临时获得root管理员的身份,从而可以读取和修改配置文件/etc/sudoers。如果担心直接修改配置文件/etc/sudoers会出现问题,也可以使用sudo命令提供的visudo命令来配置用户权
限,该命令在配置用户权限时将禁止多个用户同时修改sudoers配置文件,还可以对配置文件内参数进行语法检查,并在发现参数错误时进行报错。只有root管理员才可以使用visudo命令编辑sudo服务的配置文件。visudo命令配置sudo命令的配置文件/etc/sudoers时,其操作方法与Vim编辑器中用到的方法相同。综上,sudo命令文件的服务配置文件为/etc/sudoers,可以直接进行编辑,也可以使用visudo命令进入编辑。
    sudo -h 列出帮助信息    sudo -l列出当前用户可以执行的命令                                                                                                                         # visudo
    (大约第99行:)
    root               ALL=(ALL)         ALL       //可以再下面接着添加(配置)某个用户的限制命令
谁可以使用  允许使用的主机=(以谁的身份) 可以执行的命令(必须用绝对路径)
   luciusvorenus      ALL=(ALL)       /usr/bin/ls                                                                                                                                                      允许使用的主机: 外部网络或者内部网络登陆进入系统,当采用ALL时,无论是本地还是远程登陆的主机都可以允许使用规定的服务。
以谁的身份:ALL代表可以以任何用户的身份,相当于root。 (ALL)=(root)
如果有多个命令,则命令之间用逗号进行间隔。在进行了以上配置以后,luciusvorenus用户使用:sudo ls命令就相当于root用户使用ls命令了,可以查看/root目录内的内容等(初次使用sudo需要luciusvorenus用户的密码,默认时间为5分钟,5分钟内无需再让用户再次验证密码),如下:
# ls /root
ls: cannot open directory /root: Permission denied
# sudo ls /root
[sudo] password for luciusvorenus: 
anaconda-ks.cfg  Desktop  Documents  Downloads    gongxiang  initial-setup-ks.cfg  Music    Pictures  
Public  Templates  Videos  work                                                                                                                                                                          为了避免用户在输入 sudo 命令 时频繁的验证用户的密码,可以将上面那一行内容改为如下内容:
luciusvorenus      ALL=(ALL)    NOPASSWD:    /usr/bin/ls

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存储结构与磁盘划分

文件系统层次化标准(FHS,file system hierarchy standard) 在windows操作系统中,要找到一个文件需要先进入该文件所在的磁盘分区(如C:\等 C:\ZSX\zsx.txt),然后在进入该分区下的一个具…

Linux中常用文件的含义

在Linux中配置了服务文件后,需要重启该服务,配置信息才会生效。 /etc/passwd 保存了系统中所有用户的信息,一旦用户的登陆终端设置为/sbin/nologin,则不再允许登录到系统 /etc/shadow与/etc/passwd均为用户信息文件 /…

64. 最小路径和

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [[1,3,1],[1,5,1],[4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。…

Linux本地yum源配置以及使用yum源安装各种应用程序

将软件包传送到Linux中后,挂载,然后配置yum软件仓库,最后就可以使用yum来安装相应的应用程序了。假设挂载目录为/tmp/ruanjianbao,则下面说明配置本地yum仓库的过程: (1)cd /etc/yum.repos.d/…

gcc与g++编译器

首先在Linux(RHEL7.0)上安装gcc:yum install gcc gcc-c -y 其中gcc-c是为了能够编译c源代码,即g。 gcc为Linux C/C下重要的编译环境,是GUN项目中符合ANSIC标准的编译系统, gcc可以编译C、C、Objective-C、Java、Fortran、Pascal…

【Leetcode | 49】230. 二叉搜索树中第K小的元素

给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。 示例 1: 输入: root [3,1,4,null,2], k 1 3 / \ 1 4 \ 2 输出: 1 示例 2: 输入…

gcc编译器的整个工作过程

gcc hello.c ./a.out 或者 gcc hello.c -o hello ./hello ./表示执行当前目录下的可执行程序或脚本程序。 首先gcc需要调用预处理程序cpp,由它负责展开在源文件中定义的宏,并向其中插入“#include”语句所包含的内容;接着gcc会调用…

宏定义对调试代码的作用

以如下代码为例&#xff1a; //head.h #ifndef __HEAD_H__ #define __HEAD_H__#define NUM1 10 #define NUM2 20 #endif//sum.c #include <stdio.h> //直接在标准库中查找 #include "head.h" //先在工作目录中查找&#xff…

【第15章】多重继承

1. 虚基类介绍 多继承时很容易产生命名冲突&#xff0c;即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字&#xff0c;命名冲突依然有可能发生&#xff0c;比如非常经典的菱形继承层次。如下图所示&#xff1a; 类A派生出类B和类C&#xff0c;类D继承自类B和…

gcc编译器与g++编译器的区别

gcc与g编译器的程序文件分别为&#xff1a;/usr/bin/g和/usr/bin/gcc。 gcc 和 GCC 是两个不同的东西&#xff0c;GCC:GNU Compiler Collection(GUN 编译器集合)&#xff0c;它可以编译C、C、JAV、Fortran、Pascal、Object-C、Ada等语言。gcc是GCC中的GUN C Compiler&#xff0…

1. 排序算法

一、概述 假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;这些记录的相对次序保持不变&#xff0c;即在原序列中&#xff0c;r[i]r[j]&#xff0c;且r[i]在r[j]之前&#xff0c;而在排序后的序列中&#xff0c;r[i]仍…

1036. 跟奥巴马一起编程(15)

美国总统奥巴马不仅呼吁所有人都学习编程&#xff0c;甚至以身作则编写代码&#xff0c;成为美国历史上首位编写计算机代码的总统。2014年底&#xff0c;为庆祝“计算机科学教育周”正式启动&#xff0c;奥巴马编写了很简单的计算机代码&#xff1a;在屏幕上画一个正方形。现在…

库文件与头文件

首先说明库文件与头文件在gcc中的具体使用方法&#xff0c;然后说明两者的区别与联系。 库文件即库函数&#xff0c;如printf和scanf函数。以libgtdf.so库文件为例&#xff08;库文件在命名时都以lib开头&#xff0c;因此使用-l选项去链接指定的库文件时可以省略lib三个字母&am…

gcc的常用参数

-c 编译成目标文件.o&#xff08;只编译不链接&#xff09; gcc -c hello.s -o hello.o -o 指出输出文件名&#xff0c;输出文件名跟在-o后面。如果不使用这一选项&#xff0c;则缺省的输出文件名为a.out。gcc hello.c -o hello.exe&#xff08;在Linux中该项后缀名无要求&a…

1027. 打印沙漏(20)

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相邻两行符号数差2&#xff1b;符号数先从大到小顺序递减…

【C++ Priemr | 15】构造函数与拷贝控制

继承的构造函数 1. 简介&#xff1a; 子类为完成基类初始化&#xff0c;在C11之前&#xff0c;需要在初始化列表调用基类的构造函数&#xff0c;从而完成构造函数的传递。如果基类拥有多个构造函数&#xff0c;那么子类也需要实现多个与基类构造函数对应的构造函数。 class …

C命令行参数

C命令行参数的作用是在执行程序时&#xff0c;可以将命令行的参数传值给C程序内部&#xff0c;这样就可以从外部控制程序&#xff0c;而不是在代码内对这些值进行硬编码。命令行参数是使用main函数来处理的&#xff0c;argc是指参数的个数&#xff0c;为int类型&#xff1b;arg…

剖析数组名、函数名(不是指针常量,更不是指针)

对于一个数组&#xff0c;如 int a[4]; 如果只是给出数组名a&#xff0c;编译器不知道该取该数组的第几个元素&#xff0c;因此编译器不会自动取值&#xff0c;而是返回该数组的首地址&#xff08;第一个元素的地址&#xff09;。其实&#xff0c;数组名a就是数组本身&#xf…

【C++ Priemr | 15】面向对象程序设计

类型准换与继承 为了支持c的多态性&#xff0c;才用了动态绑定和静态绑定。 需要理解四个名词&#xff1a; 对象的静态类型&#xff1a;对象在声明时采用的类型&#xff0c;是在编译期确定的。对象的动态类型&#xff1a;目前所指对象的类型&#xff0c;是在运行期决定的。对…

linux里source、. 、sh、bash、./有什么区别

转载&#xff1a;https://www.cnblogs.com/pcat/p/5467188.html 1.source a.sh source可以简写为“.”&#xff0c;即. a.sh 注意中间有空格&#xff0c;在当前shell内去读取、执行a.sh&#xff0c;而a.sh不需要有"执行权限"。 2.sh a.sh 和 bash a.sh 都是打开…