时间:2022-12-26 12:52编辑:九州下载来源:www.wzjsgs.com
gcc first.C -o first 说明:
1>编译当前目录下、名字叫做first.C的c源文件;
2>在当前目录下、生成名字叫first(这个名字可以自己随便写、符合linux命名规则就行)的可执行程序; 关于运行: 用ls -l 命令,可以看到当前目录下有一个绿色的文件、名字叫first,就是刚刚编译得到的文件; 使用命令“./first”既可运行(无双引号、双引号是用来说明的);
在终端中输入 gcc 文件名 -o 目标文件名然后 ./目标文件名 就行了,没有目标文件名,自动存为 a执行 ./a 就行了。在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。 GCC最基本的用法是∶gcc 其中options就是编译器所需要的参数,filenames给出相关的文件名称。 -c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。 -o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。 -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。 -O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。 -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。 -Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶ A)#include <myinc.h> B)#include “myinc.h” 其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹内搜索相应文件。 GCC执行过程示例 示例代码 a.c: #include <stdio.h> int main() { printf("hellon"); } 预编译过程: 这个过程处理宏定义和include,并做语法检查。 可以看到预编译后,代码从5行扩展到了910行。 gcc -E a.c -o a.i cat a.c | wc -l 5 cat a.i | wc -l 910 编译过程: 这个阶段,生成汇编代码。 gcc -S a.i -o a.s cat a.s | wc -l 59 汇编过程: 这个阶段,生成目标代码。 此过程生成ELF格式的目标代码。 gcc -c a.s -o a.o file a.o a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped 链接过程: 链接过程。生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。 gcc a.o -o a 程序运行: ./a hello编辑本段GCC编译简单例子 编写如下代码: #include <stdio.h> int main() { printf("hello,world!n"); } 执行情况如下: gcc -E hello.c -o hello.i gcc -S hello.i -o hello.s gcc -c hello.s -o hello.o gcc hello.c -o hello ./hello hello,world!
平时用的不多的或者确实本身就有点模糊的,非常感谢面试官的解释,这里记录下:
文件权限 4755的涵义 = 文件权限中s/S的意义?
chmod是Linux下设置文件权限的命令,后面的数字表示不同用户或用户组的权限。
一般是三个数字:
第一个数字表示文件所有者的权限
第二个数字表示与文件所有者同属一个用户组的其他用户的权限
第三个数字表示其它用户组的权限
权限分为三种:读(r=4),写(w=2),执行(x=1)。综合起来还有可读可执行(rx=5=4+1)、可读可写(rw=6=4+2)、可读可写可执行(rwx=7=4+2+1)。
所以,chmod 755 设置用户的权限为:
1.文件所有者可读可写可执行
2.与文件所有者同属一个用户组的其他用户可读可执行
3.其它用户组可读可执行
chmod 4755与chmod 755 的区别在于开头多了一位,这个4表示其他用户执行文件时,具有与所有者相当的权限。
文章Linux中的文件特殊权限中通过实例很好地解释了这里的4的含义:
先看个实例,查看你的/usr/bin/passwd 与/etc/passwd文件的权限
# ls -l /usr/bin/passwd /etc/passwd
-rw-r--r--1 root root 154908-1913:54/etc/passwd
-rwsr-xr-x 1 root root 229842007-01-07/usr/bin/passwd
众所周知,/etc/passwd文件存放的各个用户的账号与密码信息,/usr/bin/passwd是执行修改和查看此文件的程序,但从权限上看,/etc/passwd仅有root权限的写(w)权,可是为什么每个用户都可以直接调用/usr/bin/passwd来写/etc/passwd从而达到修改自己的密码呢?注意这里的s代替了x( -rwsr-xr-x 1 root root 229842007-01-07/usr/bin/passwd) , 这里的s使得其他的用户执行/usr/bin/passwd时具有与owner root相当的权限。
这里的4或s是特殊的文件权限,其实s可以用在user或group,还有另一种特殊权限t:
再看个实例,查看你的/tmp目录的权限
# ls -dl /tmpdrwxrwxrwt 6 root root 4096 08-22 11:37 /tmp tmp目录是所有用户共有的临时文件夹,所有用户都拥有读写权限,这就必然出现一个问题,A用户在/tmp里创建了文件a.file,此时B用户看了不爽,在/tmp里把它给删了(因为拥有读写权限),那肯定是不行的。
有t特权的目录下的文件或目录只有owner和root才可以删除和修改,其他的人即使有写权限也不能删除。
如何设置以上特殊权限:
setuid:chmod u+s xxx
setgid: chmod g+s xxx
stick bit : chmod o+t xxx
或者使用八进制方式,在原先的数字前加一个数字,三个权限所代表的进制数与一般权限的方式类似,如下:
suid guid stick bit
1 1 1
所以:
suid的二进制串为:100,换算十进制为:4
guid的二进制串为:010,换算十进制:2
stick bit 二进制串:001,换算十进制:1
于是也可以这样设:
setuid:chmod 4755 xxx
setgid:chmod 2755 xxx
stick bit:chmod 1755 xxx
最后,在一些文件设置了特殊权限后,字母不是小写的s或者t,而是大写的S和T,那代表此文件的特殊权限没有生效,是因为你尚未给它对应用户的x权限.
硬链接和软连接的大小?
通过下面的测试,硬链接与源文件是相同的inode节点,指向相同的文件,肯定是相同的大小;软连接可以理解为文件内容中存储了源文件的地址或路径,所以有自己的大小。
$ mkdir mytest
$ cd mytest
$ echo "AAAAAAAAAAAAAAAAA" >hello
$ ln hello hello2
$ ln -s hello hello3
$ ls -lia
总计 16
5764989 drwxrwxr-x 2 aaa aaa 4096 11-25 16:03 .
5566272 drwx------ 23 aaa aaa 4096 11-25 16:02 ..
5765068 -rw-rw-r-- 2 aaa aaa 18 11-25 16:03 hello
5765068 -rw-rw-r-- 2 aaa aaa 18 11-25 16:03 hello2
5765116 lrwxrwxrwx 1 aaa aaa 5 11-25 16:03 hello3 -> hello
$ echo "BBBBBBBBBBB" >>hello
$ ls -lia
总计 16
5764989 drwxrwxr-x 2 aaa aaa 4096 11-25 16:03 .
5566272 drwx------ 23 aaa aaa 4096 11-25 16:02 ..
5765068 -rw-rw-r-- 2 aaa aaa 30 11-25 16:04 hello
5765068 -rw-rw-r-- 2 aaa aaa 30 11-25 16:04 hello2
5765116 lrwxrwxrwx 1 aaa aaa 5 11-25 16:03 hello3 -> hello
如何设置当前用户新建文件或目录的默认权限?
umask用来定义新建文件或目录的默认权限,新的目录的权限为777-umask设置的值,新建文件的权限为666-umask设置的值。若要长期修改umask的值,可以把它写进/etc/profile或~/.profile或~/.bash_profile中。
$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx
$ mkdir aa
$ touch bb
$ ls -la
总计 12
drwxrwxr-x 3 aaa aaa 4096 11-25 16:20 .
drwx------ 23 aaa aaa 4096 11-25 16:20 ..
drwxrwxr-x 2 aaa aaa 4096 11-25 16:20 aa
-rw-rw-r-- 1 aaa aaa 0 11-25 16:20 bb
$ umask 022
$ mkdir aa2
$ touch bb2
$ ls -la
总计 16
drwxrwxr-x 4 aaa aaa 4096 11-25 16:29 .
drwx------ 23 aaa aaa 4096 11-25 16:20 ..
drwxrwxr-x 2 aaa aaa 4096 11-25 16:20 aa
drwxr-xr-x 2 aaa aaa 4096 11-25 16:29 aa2
-rw-rw-r-- 1 aaa aaa 0 11-25 16:20 bb
-rw-r--r-- 1 aaa aaa 0 11-25 16:29 bb2
find . -name "filename" 中的filename为啥必须加引号?但是ls中不需要?
find
ls ... ...
因为这里的"filename"其实是表达式中的一个pattern,所以必须要加“”来组织shell的解析。 例如find . -name "aa*" -exec rm {}。
如何快速地将远程机器上的共享目录下的所有文件拷贝到本地供只读使用?
如果不拷贝,简单地mount到本地目录。但是这里是要求拷贝到本地,所以这里可以使用softlink来将对文件的拷贝时间变为固定值。具体可以使用cp的-s参数。
Linux中文件路劲可以用空格吗?
windows中用双引号就可以了,linux中用加空格来表示。
mkdir my folder (中间有2个空格)
cd my folder/
专业数据统计,95%的用户会因为[不安全]提示而放弃访问,从而给网站造成用户流失。问题就出在不安全的HTTP 明文传输协议上。2018年2月初,谷歌旗下Chrome浏览器宣布“封杀”HTTP协议的网站,并将这些网站标示为“Not Secure”(不安全)。
2023-03-03 21:141、do-while语句是一种后测试循环语句,即循环体中的代码执行后才会对退出条件进行求值。2、循环体内的代码至少执行一次。do-while的语法如下:do{ statement }while(expression)下面是一个例子:letxhs=0 do{ xhs+=2 }while(xhs<10)在上面的
2023-02-26 12:191、while语句是一种先测试循环语句,即先检测退出条件,再执行循环体内的代码。2、while循环体内的代码有可能不会执行。下面是 while 循环的语法:while(expression){ statement }实例leti=0 while(i<10){ i+=2 }在这个例子中,变量 xhs 从 0 开
2023-02-26 12:181、for语句也是先测试语句,只不过增加了进入循环之前的初始化代码.以及循环执行后要执行的表达式(loop-expression),语法如下:for(initialization;expression;loop-expression){ statement }下面是一个用例:letxhsLength=10 for(letxhs=0;xh
2023-02-26 12:17说明1、for-of语句是一种严格的迭代语句,用于遍历可迭代对象的元素。2、for-of循环将按照可迭代对象的next()方法产生值的顺序迭代元素。关于可迭代对象,请参考ES6系列的Iterator。如果尝试迭代的变量不支持迭代,for-of语句就会出错。语法:只
2023-02-26 12:16说明1、switch语句可用于所有的数据类型(在许多语言中,它只能用于数值),因此可以使用字符串甚至对象。2、条件值不一定是常量,或者是一个变量或者一个表达式。实例switch('helloxhsRookies'){ case'hello'+'xhsRookies&#
2023-02-26 12:15发布日期:2022-10-29人气:641
发布日期:2022-10-10人气:555
发布日期:2022-09-29人气:335
发布日期:2022-09-04人气:311
发布日期:2023-01-16人气:226
发布日期:2022-10-02人气:149
发布日期:2022-11-07人气:145