关于Linux命令行使用的集中贴

啊啊啊啊查了才知道g++是专为c++设计的,能不能给一下下载c编译器的指令?

1 个赞

(@Horo (给 GNU/Linux 萌新的 Arch Linux 安装指南 rev.B

3 个赞

自己歪自己的楼(小声)
有什么在同一输入法中进行中英文切换的快捷键吗

1 个赞

(这个设置里是有的吧 (((超小声

2 个赞

Shift?

2 个赞

gcc和g++一般是同一个包来着(((
// 后者是c编译器(

1 个赞

(人家自己也说要看installation guide嘛

不我试过没用

什么是gcc / g++
首先说明:gcc 和 GCC 是两个不同的东西
GCC:GNU Compiler Collection(GUN 编译器集合),
它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。
gcc是GCC中的GUN C Compiler(C 编译器)
g++是GCC中的GUN C++ Compiler(C++编译器)

出自cnblogs.com
我已经被搞懵了

1 个赞

关于2: apt安装即可。
关于3:
关于Markdown: 自己写个程序提取被```c包裹的代码块并输出到xxx.c。
关于txt: 改后缀为xxx.c,不能编译就不是C代码。
关于4:

$ gcc code.c -o code.exe
2 个赞

GCC是一堆编译器的集合…
gcc仅仅是C编译器。

4 个赞

楼主别听这个人的(

2 个赞

无所谓啊,cpp也可以兼容c的不是

1 个赞

那命令是一样的吗?
都是gcc-o?
可好像行不通……

1 个赞

我只是想顺利地在电脑上打出一个hello world啊!(有大佬可以救救我吗?

2 个赞

应该可以呀…你去搜一下常用命令或者找个noip规则上面应该有写编译命令

2 个赞

截图录屏_deepin-terminal_20200821120933

有没有大佬普及一下这是什么情况?

2 个赞
sudo apt install gcc

应该是这个包的来着…
以及cc是很久以前的东西了吧(((
(K&R C时代的C编译器似乎叫cc来着(((

1 个赞

少了个空格,cc空格-v

2 个赞

啊以及能用百度搜到的blog, 或者cnblogs/csdn上的非oi blog基本都可以说, 如果不对它所说的内容有一定了解的话, 当作放屁就好.
中文圈上有一堆教程的那种教程网站, 和与这些教程网站中的任何一个排版相似的英文网站, 可以认为都是用屁股写的, 除非万不得已否则没有什么看的价值.

或者一言以蔽之, 中文圈内的任何内容, 和英文的任何与它们排版相似的内容, 都不建议在不对它们有一定了解的时候看.
诚然这样会过滤掉很多有价值的东西, 但是也能过滤掉绝大部分有毒物质.


senioria还是写一下posix shell入门吧><
(虽然写得可能比那些垃圾教程还烂(((

在开始讲什么东西之前, 先bb一句注释: #(英文井号)之后, 到这行的结束, 一切内容都是注释, 在shell里不起任何作用.
(小声说一句: zsh里默认的repl是不能用注释的, 需要在.zshrc里加setopt interactivecomments

命令

首先, shell里一切语句本质上都是命令, 而一切数据本质上都是字符串. 了解了这个就能理解很多看上去很智障的设定…

命令的语法是这样子的: 命令名称+用空格分割的参数列表. 比如:

echo /dev/null # 保护高亮不炸(捂脸
cat /dev/zero /dev/null
dd if=/dev/null of=/dev/zero
# 当然也可以不玩这堆空设备(
dd if=/dev/random bs=512 count=1 progress=none

然后… 其实就没有太多别的了(

分号被作为一个命令的结尾, 这样就可以在一行内写两个命令, 比如:

echo hello; echo hi

变量

定义变量/给变量赋值的语法是: 变量名=值; 等号两边不能有空格.
变量名的限制懒得查(被打), 但是似乎和c差不多, 不过允许数字开头了(

比如:

TZ=Europe/Rome  # 当然这个TZ不能在date里用, 因为只是shell的变量(
2333=orz

使用的话, 语法是$变量名, 在可能引起歧义时可以用${变量名}, 后者还允许一些更复杂的替换等操作.

环境变量

然后还有一种东西叫环境变量, 懒得介绍太多了… ><
可以在命令前直接对变量赋值来临时地对于这个命令改变这个环境变量的值, 比如:

TZ=Europe/Rome date  # 然后就是现在的罗马时间了(((

export似乎可以比较持久地更改环境变量的值, 不过懒得试了(((
*NIX下的环境变量, 如果senioria没记错的话, 是一个一个进程继承下来的, 所以不会存在"设置系统环境变量"这回事, 只能在某个比较重要的系统程序的配置文件里设置环境变量, 然后它的所有子进程就都会被设置这个环境变量.

嗯… 因为允许空变量+允许这么设置环境变量, 所以变量赋值的等号两端不允许加空格…

命令的组合: 重定向和管道

>, 2>, <可以重定向一个命令的标准输出流, 标准错误流和标准输入流到一个文件. 就像c标准库里的open函数一样, 它们的写操作会擦除文件中原有的内容. 追加是>>2>>.

比如:

cat < /dev/random  # 等价于cat /dev/random
cat /dev/random > /dev/null
g++ errorous.cpp 2> err.log # 把编译器的抱怨存到文件里(
python -m http.server > /dev/null 2>&1  & # 安静地在当前目录下开一个http服务器
# (&1在这里指的是标准输出(1是stdout的文件id), 所以也可以换过来, 这样:
echo hello >&2

以及管道: 把一个命令的标准输出当作另一个命令的标准输入, 语法是命令|命令(竖线), 可以一直套娃下去(

echo hello | cat # 脱裤子放屁系列(((
cat args.txt | xargs echo args:
# xargs是把标准输入中的内容当作参数(一行一个)传给命令(当然实际上要复杂点)

还有一种似乎叫"command substitution"的东西(命令替换?), senioria看来大概也属于管道的一种. 语法是$(命令), 会执行括号里的命令, 并且把这个结构替换为这个命令的输出().
比如:

echo args: $(echo hello)  # 输出: args hello
# 正经一点的用法是for
for i in $(range 10); do
echo $i
done

字符串

为了防止一些特殊字符被解释成shell语法的一部分, 所以有了字符串(不负责任的扯淡.svg)(((
跟c的语法差不多, 区别是, ""这样双引号的字符串内可以有替换和转义序列, 而''单引号括起来的字符串真的是字符串(而不是c里的单个字符), 而且不允许转义序列.
shell在字符串外也可以用转义序列.

比如:

find -exec echo '{}' \;  # find命令的语法就是这么稀烂...
echo "$(echo hello)\nworld"
echo '$(echo hello) world'
/mnt/c/Program\ Files/Vim82/vim/gvim.exe
5 个赞