0%

linux命令行快捷键

  • C-k: 先按住Ctrl键,然后再按k键;
  • M-k:先单击Esc键,然后再按k键。

移动光标

  • C-a:移到行首
  • C-e:移到行尾
  • C-b:往回(左)移动一个字符
  • C-f:往后(右)移动一个字符
  • M-b:往回(左)移动一个单词
  • M-f:往后(右)移动一个单词

删除字符

  • C-h:删除光标左方位置的字符
  • C-d:删除光标右方位置的字符(注意:当前命令行没有任何字符时,会注销系统或结束终端)

删除单词

  • M-d:由光标位置开始,删除单词,直到该单词结束。
  • C-w:由光标位置开始,往左删除单词。

删除行

  • C-k:由光标所在位置开始,删除右方所有的字符,直到该行结束。
  • C-u:由光标所在位置开始,删除左方所有的字符,直到该行开始。
  • C-a C-k 或 C-e C-u 或 C-k C-u 组合可删除整行。
  • C-l:清除屏幕,然后,在最上面重新显示目前光标所在的这一行的内容。

复原操作

  • C-_:回复之前的状态。撤销操作。

粘贴

C-y:把之前删除的字符或字符串,贴到光标所在位置。

重复执行操作动作:

  • M-操作次数 操作动作: 指定操作次数,重复执行指定的操作。

查找历史命令

  • C-p:显示当前命令的上一条历史命令
  • C-n:显示当前命令的下一条历史命令
  • C-r:搜索历史命令,随着输入会显示历史命令中的一条匹配命令,Enter键执行匹配命令;ESC键在命令行显示而不执行匹配命令。

执行历史命令中的特定命令

在下面的例子中,如果你想再次执行第四条命令,执行!4即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# history | more

1 service network restart

2 exit

3 id

4 cat /etc/redhat-release

# !4

cat /etc/redhat-release

Fedora release 9 (Sulphur)

开发IDE环境

xwpe

xwpe:Fred Kruse开发的一个基于字符的文件管理器和文件编辑器,网址为:http://www.identicalsoftware.com/xwpe/

c-Forge IDE

C-Forge是一个集成的开发工具,支持多种语言开发环境,能够为你提供完善的开发环境,支持的语言包括C、C++、HTML、QT、GTK等等。

Kdevelop

KDevelop,是一个支持多程序设计语言的集成开发环境。它运行于Linux和其它类Unix环境。它本身不包含编译器,而是调用其它编译器来编译程序。
目前的版本4.3.0。它建立在 KDE 4 技术之上,并有良好的 C、C++ 和 PHP 开发支援。
KDevelop 3.5.5已支持Ada、Bash、C、C++、Fortran、Haskell、Java、Pascal、Perl、Python、Ruby、SQL等程序设计语言。
gbuilder

anjuta

Anjuta是一个建立在GNU/Linux下为C、C++提供编译的集成开发环境。它最初旨在为GTK/GNOME设计,并且自身具有很好的编程属性。这其中包括项目管理、应用开发、交互调试以及强大的代码编辑和语法增彩的性质。
Anjuta成为Gnome环境下最理想的开发工具,其主要功能和KDE下的Kdevelop相似,目前最新的版本是3.2.0。

Kylix

Kylix是Borland公司推出的GNU/Linux版的开发环境,相对于Windows下的Delphi以及C++ Builder。通过Kylix,程序员可以在GNU/Linux下使用Object Pascal、C++或者C语言,进行软件开发

Eclipse

Eclipse是著名的跨平台开源集成开发环境(IDE)。最初主要用来Java语言开发,目前亦有人通过插件使其作为C++、Python、PHP等其他语言的开发工具。
Eclipse的本身只是一个框架平台,但是众多插件的支持,使得Eclipse拥有较佳的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。

C语言学习方法

参考 http://sunxiunan.com/?p=1661sunxiunan

C语言学习顺序:阅读参考书,阅读代码,编写调试实际程序,上网参与讨论,研究高级话题。

1,参考书籍

  • 《The C Programming Language》 如果你只想买一本书学习C语言,只需要买这一本就够了。用三个词语来形容它就是:经典!经典!经典!这本薄薄的只有二百多页的小书涵盖了C语言的方方面面,前无古人而且后无来者,任何溢美之词都不足以形容它。
  • 《C程序设计语言(第2版·新版)》这是K&R的中文译本,可以先从中文译本看起,然后再读一遍英文原版,既可以学习英文,又可以体会原文那种简约优美的风格。
  • 《C陷阱与缺陷》 《C专家编程》 这两本书也是学习及使用C语言的朋友必备的两本书,比如《C专家编程》,专门用两三个章节详细介绍C语言中数组与指针的不同之处,这两本书在某种程度上算是对K&R略过的地方做了详细补充,强烈推荐。
  • 《C语言参考手册》可以看作是C语言编程的《新华字典》,全面而权威。里面还涵盖了C99的内容,紧跟时代潮流。
  • 《C和指针》 指针的重要性如何,学过C语言(或者C++)的朋友都知道,这本书更是把指针拔高到了与C语言平起平坐的地位,其实也是从头开始介绍,作为教学参考书也是可以的。
  • 《C标准库》 这本书是专门介绍C语言的标准库如何实现的,比如malloc算法,用标准的C语言该如何写?strlen这个函数应该如何实现?尽管书中不少代码与真实的C标准库相差很多(由于标准库需要考虑性能优化,很多函数有一些特定的trick),但是绝对值得参考。
  • 《你必须知道的495个C语言问题》 这本书其实就是C-FAQ的印刷版本,C-FAQ在各种编程语言的FAQ中可以称得上质量一流。如果你想应聘或者招聘C语言相关程序员,这本书一定要参考。
  • 《Linux C编程一站式学习》 这本书是基于特定操作系统Linux来介绍C语言编程,可作为计算机相关专业的教科书或入门参考书,也是书单里面唯一一本国人原创的编程书籍,非常难得。书中几乎所有内容都在网上直接公开,针对读者的意见进行修改,这也是非常难得的一种开放态度。非常推荐大家买一本。

学习C语言,一定不能只读书,应该动手练习完成书里面的项目需求(比如编写一个目录浏览器)以及每章的练习题目。这就需要有可以实验的环境,下面针对不同操作系统简单做一下介绍。

2,开发环境

Windows系统下推荐大家使用Code::blocks这个软件。这个软件最大优点是自带了基于mingw的GCC以及GDB,只要下载70M左右软件包,就可以完整支持C++、C语言编程了。各种功能(比如调试功能)也很强大,版本更新也比较快。注意下载选择名字有mingw的文件,比如最新版本是codeblocks-10.05mingw-setup.exe(版本也许有所不同)。

主页:http://www.codeblocks.org/

另外推荐codelite,相比codeblock,这个更新的更频繁一些。也支持各种比较有用的插件、调试特性、WX等等。

主页 http://codelite.org/

如果需要做Windows操作系统的开发,可以下载Visual C++ 2010 Express。

因为Code::Blocks不包含Windows编程头文件(实际是因为没有Windows SDK),无法编写Windows操作系统相关的界面应用程序或者服务类程序。而VC++Express自带了这些头文件以及编程库,虽然功能稍微简陋,但对于练习使用基本够用。

主页:http://www.microsoft.com/express/windows/

对于计算机专业的学生朋友,建议大家使用Linux操作系统,或者更详细一点是使用Xubuntu操作系统作为桌面,使用Netbeans和GCC这个组合(当然也可以选择Code::Blocks)。在Xubuntu下可以通过apt-get install build-essential这个命令安装gcc相关程序,已经可以在Terminal下编译C语言程序了,但为了使用方便,大家可以选择Netbeans的C++支持包,在Netbeans网站上就能下载。

主页:http://netbeans.org/features/cpp/index.html

如果使用苹果Mac系统,毫无疑问XCode就是编程的绝佳选择,XCode可以在苹果开发者网站上免费下载,在IPhone SDK中也包含了XCode。

主页:http://developer.apple.com/technologies/tools/xcode.html

如果手头没有合适的编程环境,还需要实验一些简单的代码,可以用http://codepad.org/提供的服务,在线编写运行代码。

另外建议大家申请一个github.com的账号,在gist.github.com可以保存自己的练习代码,就不需要随身带着U盘了。

C语言编程电子书及教程:

gcc对文件扩展名的解释

  • .c:c语言源代码
  • .cc:c++源代码
  • .i:预处理后的C源代码
  • .ii:预处理后的C++源代码
  • .S,.s:汇编语言源代码
  • .o:编译后的目标代码
  • .a,.so:编译后的库代码

前缀:

  • UP=Ultra-sharp with Premier color 最高端、出厂带校正颜色
  • U=Ultra-sharp 最高端
  • P=Productivity 生产力,面向商用
  • S=Stylish 时尚,面向家用
  • E=Essential 基本款

四位数字:

  • 前两位=尺寸后两位=首发财年(比实际年份晚一年左右)

后缀:

  • H:FullHD 1920*1080,16:9
  • M:WUXGA 1920*1200,16:10
  • Q:4K
  • W:Wide 21:9 带鱼屏
  • D:QHD 2560*1440

作者:王昭
链接:https://www.zhihu.com/question/23978102/answer/293333495

我也是有身份…证的人 之 id

id命令用于显示用户的以及其所属群组的ID。

官方定义为:

id - print real and effective user and group IDs

语法

1
$ id [OPTION]... [USER]

参数说明

  • -g, --group:仅仅显示组的ID
  • -G, --groups:显示所有组的IDs
  • -u, --user:打印用户的ID

默认使用

显示当前用户信息

1
2
$ id 
uid=1000(user) gid=1000(user) groups=1000(user),980(data),1006(monitor)

可以看到用户user的ID及组ID均为1000,该用户还属于data和monitor组。

显示用户群组的ID

1
2
$ id -g
1000

仅显示用户组的ID

id 我也是有身份…证的人

id命令用于显示用户的以及其所属群组的ID。

官方定义为:

id - print real and effective user and group IDs

语法

1
$ id [OPTION]... [USER]

参数说明

  • -g, --group:仅仅显示组的ID
  • -G, --groups:显示所有组的IDs
  • -u, --user:打印用户的ID

默认使用

显示当前用户信息

1
2
$ id 
uid=1000(user) gid=1000(user) groups=1000(user),980(data),1006(monitor)

可以看到用户user的ID及组ID均为1000,该用户还属于data和monitor组。

显示用户群组的ID

1
2
$ id -g
1000

仅显示用户组的ID

时光总是催人老 time

.. note::

林花谢了春红,太匆匆。无奈朝来寒雨晚来风。

  • 李煜《相见欢·林花谢了春红》

Linux time命令的用途,在于测量指定命令消耗的时间。

最常用的在于大概评估一个程序的运行时间。

这个命令很容易给人的印象是与date混淆起来

官方定义为:

time - time a simple command or give resource usage

可以给出包括系统的粗略时间。

语法

1
$ time [options] command [arguments...]

参数

​ - 可以认为没有参数

示例

会显示程序或命令执行的消耗时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ time ls /var
account crash games lib log ......

real 0m0.014s
user 0m0.003s
sys 0m0.010s


$ time ps -aux
root 295490 0.0 0.0 0 0 ? S Feb20 0:10 [ldlm_cb00_019
root 297717 0.0 0.0 0 0 ? S< Jan29 0:04 [kworker/58:1H
root 304801 0.0 0.0 0 0 ? S Mar19 0:00 [kworker/1:1]
root 311110 0.0 0.0 0 0 ? S Mar20 0:00 [kworker/66:0]
root 313146 0.0 0.0 0 0 ? S Mar20 0:01 [kworker/73:2]
root 313461 0.0 0.0 0 0 ? S< Jan29 0:00 [kworker/44:2H
root 313914 0.0 0.0 0 0 ? S Feb21 0:10 [kworker/9:2]
root 314118 0.0 0.0 0 0 ? S Feb21 3:34 [kworker/18:1]
root 315801 0.0 0.0 0 0 ? S Mar20 0:00 [kworker/79:2]

real 0m0.180s
user 0m0.019s
sys 0m0.114

唯一需要留意的是上面的三个含义:

  1. real : 程序从开始调用到最后终止之间经过的实时时间
  2. user : 程序本身,以及它所调用的库中的子例程使用的CPU 时间
  3. sys : 程序直接或间接调用的系统调用执行的CPU 时间

Linux的 time 命令

Linux time命令的用途,在于测量指定命令消耗的时间。

最常用的在于大概评估一个程序的运行时间。🔑

这个命令很容易给人的印象是与date混淆起来

官方定义为:

time - time a simple command or give resource usage

可以给出包括系统的粗略时间。

语法

1
$ time [options] command [arguments...]

参数

​ - 可以认为没有参数

1⃣ 示例

会显示程序或命令执行的消耗时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ time ls /var
account crash games lib log ......

real 0m0.014s
user 0m0.003s
sys 0m0.010s

#=====================================

$ time ps -aux
root 295490 0.0 0.0 0 0 ? S Feb20 0:10 [ldlm_cb00_019
root 297717 0.0 0.0 0 0 ? S< Jan29 0:04 [kworker/58:1H
root 304801 0.0 0.0 0 0 ? S Mar19 0:00 [kworker/1:1]
root 311110 0.0 0.0 0 0 ? S Mar20 0:00 [kworker/66:0]
root 313146 0.0 0.0 0 0 ? S Mar20 0:01 [kworker/73:2]
root 313461 0.0 0.0 0 0 ? S< Jan29 0:00 [kworker/44:2H
root 313914 0.0 0.0 0 0 ? S Feb21 0:10 [kworker/9:2]
root 314118 0.0 0.0 0 0 ? S Feb21 3:34 [kworker/18:1]
root 315801 0.0 0.0 0 0 ? S Mar20 0:00 [kworker/79:2]

real 0m0.180s
user 0m0.019s
sys 0m0.114

唯一需要留意的是上面的三个含义:

  1. real : 程序从开始调用到最后终止之间经过的实时时间
  2. user : 程序本身,以及它所调用的库中的子例程使用的CPU 时间
  3. sys : 程序直接或间接调用的系统调用执行的CPU 时间

history命令 – 显示与处理历史命令

history命令用于显示用户以前执行过的历史命令,并且能对历史命令进行追加和删除等操作。

如果你经常使用Linux命令,那么使用history命令可以有效地提升你的效率。

语法比较简单:

1
$ history [OPTIONS] [..]

常用参数:

  • -a 将当前shell会话的历史命令追加到命令历史文件中,命令历史文件是保存历史命令的配置文件
  • -c 清空当前历史命令列表
  • -d 删除历史命令列表中指定序号的命令
  • -n 从命令历史文件中读取本次Shell会话开始时没有读取的历史命令

显示所有的历史命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ history

1 sudo apt get update
2 sudo apt update
3 sudo apt upgrade
4 sudo apt install vim
5 ls
6 pwd
7 cd
8 ls
9 sudo apt install vim
10 sudo apt search pgplot
11 bash go.sh
12 sudo apt install zsh
13 bash down.sh
14 exit
15 echo $PS1
16 bash
17 exit
18 sh test.sh
19 bash
20 exit
21 rsync -rv --progress user@192.168.1.123:~/data1/ .
22 rsync -rv --progress user@192.168.1.123:~/src/ .
......

列出最近的几条命令

history后面跟上数字,就可以列出最近的几条命令:

1
2
3
4
$ history 3
8540 pwd
8541 echo $PATH
8542 git status

删除部分命令

可以通过-d参数来删除某一条或者某些历史命令,支持正则表达式

1
2
3
4
5
# 删除第35条历史命令
$ history -d 35

# 删除第31到39条历史命令
$ histor -d 3{1..9}

删除全部命令

如果登陆某些调试机器,后面将不在使用,考虑到安全性,可以删除操作过的所有历史,通过-c参数,即clear的意思。

1
$ history -c

此时将没有任何历史操作。

进阶 - 如何获取使用的命令及频率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort –nr

967 ls
507 cd
199 vim
199 python
165 cp
152 less
105 mv
95 rm
94 ll
90 echo
85 bash
72 cat
66 apt
59 pwd
51 mkdir
...