很多粉丝给一口君留言,想要学习Linux资料,其实关注一口君,后台回复 1024 ,就有很多非常不错的电子书,但是有一个问题,很多粉丝是初学者,而这一大堆电子书,估计随便一本,还没看完就基本上开始劝退了。
到底要如何Linux入门呢?
因为Linux的知识体系非常的庞大,IT行业很多领域都需要使用到Linux,有运维的、有应用程序开发的、有驱动开发的、有系统优化的、有搞单片机的、有做系统移植的、有做网络产品的等等。
总结一句话,IT的很大部分从业者都需要掌握Linux的部分知识,但是由于每个人的从事领域不一样,对Linux的要求也不一样,这就直接导致,网上搜索学习路线有很多种,还有就是推荐的书籍很多都不利于初学者。
比如Linux命令的学习,很多人都力推《鸟哥的私房菜》这本书,一口君在直播间多次强调,初学者不要看这本书,不是说这本书不好,而是,这本书其实你要当做一本工具书来看,如果你的目标是想快速的基于Linux做一些开发工作,最迫切的就是快速掌握一些基本的命令,一些和开发相关的最基础的知识,而不是去学习那些可能这辈子都用不到的命令。
为了让初学者更好的学习Linux,入门Linux,一口君特地整理了Linux入门必须掌握的一些基础知识点,掌握这些知识点之后,就可以学习C编程的知识了,后续遇到一些不熟悉的命令和配置,只需要网上搜索下就可以很快上手了。
一、Linux操作系统概述1、发展1991 Linus Linux 0.0.1版,代码为8K行。现在最新版本为5.12.4。Linux加入了GNU,整体基于GPL协议,允许开源、分享传播、修改。
内核下载的地址: https://www.kernel.org/
2、组成- kernel内核:
核心程序,用于管理硬件设备、系统的线程进程、内存、交换空间、文件系统、精灵进程(守护进程)等。主要实现系统程序与硬件之间的控制管理功能。
- Shell:
包裹在内核之外的人机交互界面,用于用户和内核之间打交道的功能,类似于windows的cmd。 通过Shell将输入的命令与内核通讯,好让内核可以控制硬件并正确无误的操作工作。
Shell有着不同的分类,比如Bourne shell(sh),Korn shell(ksh)、C shell (csh)、Bourne-again shell(bash)、tcsh。其中最常用的有csh和bash。
ubuntu 16.04的terminal如下:
- user application Linux根据程序的运行,分为用户空间和内核空间,简单的理解就是,普通的应用程序运行在用户空间,一些涉及到系统核心资源的操作的程序运行在内核空间,比如TCP/IP协议栈、驱动、进程调度、内存管理、文件系统等都运行于Linux内核空间,
其实一些应用程序当需要访问系统资源的时候,必须通过系统调用,通过一些内核函数将系统资源由内核空间拷贝到用户空间。
- Files System: 文件系统,管理文件和目录。
多用户、多任务(进程、线程处理),多平台,图形化界面(x-windows)、硬件低配置、通信与联网、应用程序的支持(编辑器、编辑工具、数据库、办公软件、图形处理、Internet应用、游戏)。
二、Linux操作系统安装1、Linux的选择red hat: 企业级的,已经开始收费(商用)。
CentOS 是RHEL的克隆版本。RedHat一直都提供源代码的发行方式,CentOS就是将RedHat发行的源代码重新编译一次,形成一个可使用的二进制版本。由于Linux的源代码是GNU,所以从获得RedHat的源代码到编译成新的二进制,都是合法。只是RedHat是商标,所以必须在新的发行版里将RedHat的商标去掉。 通常搭建服务器选用CentOS。
ubuntu: 桌面开源的,比较纯正的Linux,android官方指定的编译操作系统,发展快、已支持ARM架构。 ubuntu在开发者中,非常受欢迎,一口君所有的文章和视频都以ubuntu为主。
2、安装Ubuntu DesktopLinux环境安装篇幅较长,安装详细步骤参考这篇文章: 《linux环境搭建-ubuntu16.04安装》
3、基本操作
ctrl altF2可以进入终端界面
ctrl altF7进入桌面界面
ctrl alt t文本编辑
我们通常用快捷键ctrl alt t打开一个终端,这个一定要记住。
其中:
peng当前用户
ubuntu主机名
~当前用户主目录,/home/peng,每一个用户都会在/home下创建一个与用户名同名的目录
$普通用户
如果切换到管理员用户
root管理员
/home/peng当前工作目录
#当前是管理员
Linux 中一切皆为文件,文件系统用来组织计算机的文件和资料的系统,是操作系统封装的一个系统服务程序,实际是一个软件程序,用来存储和管理计算机文件和资料。 文件系统分类如下:
磁盘文件系统:NTFS,EXT3
闪存文件系统:JFFS2,YAFFS
数据库文件系统:BFFS,WINFS
网络文件系统:NFS
虚拟文件系统:VFS(Proc)
文件系统的功能:能定义文件的组织方式,文件的结构;提供建立和存取文件的环境(目录和文件)
2、Linux文件系统及文件- EXT3:是一个日志方式的文件系统,系统中的每个文件都有索引,用户对文件的每个操作都会记录在日志中,形成一个任务队列。
- SWAP:是交换分区的文件系统,类似于windows的虚拟内存,其实现的方式有以下两种: 第一种是进行内存排列像内存池一样,进行优化; 第二种是把硬盘上的空间模拟成内存。 Swap是Linux 的虚拟内存,在安装时要设置好大小,一般设置为物理内存的两倍。
- 目录结构 linux 的结构是由很多文件块区组成,与Windows分区不同。
3. Linux文件属性:
Linux文件属性一共7种:
1、普通文件
使用 ls -l 命令后,
第一列第一个字符为 "-" 的文件为普通文件.
2、目录文件Linux 中的目录也是文件,目录文件中保存着该目录下其他文件的 inode 号 和文件名等信息,目录文件中的每个数据项都是指向某个文件 inode 号的链接,删除文件名就等于删除与之对应的链接。目录文件的字体颜色是蓝色,使用 ls -l 命令查看,第一个字符为"d"(directory)。
目录文件的权限:
- 1)r 表明该目录文件具有可读权限,即可以使用 ls 命令查看该目录的存储情况;
- 2)w 表明该目录文件具有写权限,即可以往该目录下添加、修改、删除文件;
- 3)x 表明该目录文件具有可执行文件,即可以使用 cd 命令进入到该目录下。
可以使用 chmod 指令来改变文件的权限。
3、链接文件链接文件一般指的是一个文件的软连接(或符号链接),使用 ls -l 命令查看,第一个符号为 "l",文件名为浅蓝色,如下:
这里,test_softlink 就是一个链接文件,从结果上还可以看到它是文件 test.txt 的软链接,删除原文件 test.txt 的话,对应的软链接文件 test_softlink 也会消失。可以使用 ln 命令来创建一个文件的链接文件:
1)软链接 软链接(又称符号链接),使用 ln -s file file_softlink 命令可以创建一个文件的软链接文件:
ln-stest.txttest_softlink
软链接相当于给原文件创建了一个快捷方式,如果删除原文件,则对应的软链接文件也会消失。
2)硬链接 硬链接,相当于给原文件取了个别名,其实两者是同一个文件,删除二者中任何一个,另一个不会消失;对其中任何一个进行更改,另一个的内容也会随之改变,因为这两个本质上是同一个文件,只是名字不同。使用 ls -i 命令查看,可以发现硬链接的两个文件的 inode 号是一样的:
同样的,使用 ln 命令可以创建一个文件的硬链接:
lntest.txttest_hardlink
Linux 中的硬件设备如硬盘、鼠标等也都被表示为文件,即为设备文件。
设备文件一般存放在 /dev/ 目录下,文件名为黄色,如下:
设备文件分两种:
- 1)块设备文件:
块设备文件支持以块(block)为单位的访问方式。在 EXT4 文件系统中,一个 block 通常为 4KB 的大小,也就是说每次可以存取 4096(或其整数倍) 个字节的数据。应用程序可以随机访问块设备文件的数据,程序可以自行确定数据的位置,硬盘、软盘等都是块设备。使用 ls -l 命令查看,块设备文件的第一个字符是 "b"(block)。
- 2)字符设备文件:
字符设备文件以字节流的方式进行访问,由字符设备驱动程序来实现这种特性,这通常要用到 open、close、read、write 等系统调用。字符终端、串口和键盘等就是字符设备。另外,由于字符设备文件是以文件流的方式进行访问的,因此可以顺序读取,但通常不支持随机存取。使用 ls -l 命令查看,字符设备文件的第一个字符是 "c"(char)。
5、管道文件(FIFO文件)管道文件主要用于进程间通信,使用 ls -l 命令查看,第一个字符为 "p"(pipe)。可以使用 mkfifo 命令来创建一个管道文件:
mkfifofifo_file
在 FIFO 中可以很好地解决在无关进程间数据交换的要求,FIFO 的通信方式类似于在进程中使用文件来传输数据,只不过 FIFO 类型的文件同时具有管道的特性,在读取数据时,FIFO 管道中同时清除数据。
6、套接字文件套接字文件,通常指域套接字文件,使用 ls -l 命令查看,第一个字符为 "s"。
域套接字是进程间通信(IPC)的一种方法,是可靠的一种IPC通信,是POSIX标准的一个组件,只能用于同一主机间的通信。
后续学习进程间通信需要学习该知识。
4. 文件颜色常见的文件颜色如下:
- 蓝色:目录文件
- 绿色:可执行文件
- 浅蓝色:链接文件
- 红色:压缩文件
- 黄色:字符设备
- 灰色:其他文件
$command[option(s)][argument(s)]
命令名空格选项空格参数
- command : 命令名
- [option(s)] :选项
- [argument(s)] :参数
注意:
- 在命令行中,每两个部分之间有空格分隔
- 每个命令行可使用的最多的命令字符是256个
- 命令区分大小写
- 不同的命令提示符使用分隔符号 “/”
- 命令中的参数/选项可以是多个,并且参数其实就是要传入命令程序主函数main的参数。
- [ ] 表示这个内容可以不包含,比如 [argument(s)] ,输入命令时可以不加参数
遇到一些函数和命令,不知道含义时可以使用命令man来查看帮助信息。
manls
man-kkeyword
man手册根据内容分为9个手册,可以使用下面命令查看
man man
man文档的分类编号
1-commands(普通的命令)
2-systemcalls(系统调用)
3-librarycalls(库函数)
4-specialfiles(特殊文件:/dev下设备文件)
5-fileformatsandconvertions(文件格式)
6-gamesforlinux(游戏和娱乐)
7-macropackagesandconventions(杂项)
8-systemmanagementcommands(管理员命令)
9-其他(Linux特定,用来存放内核例行程序的文档)
使用-k参数,man可以在所有的man文档和简介中查找符合条件的命令。
peng@ubuntu:~/test$man-kbash
bash(1)-GNUBourne-AgainSHell
bash-builtins(7)-bashbuilt-incommands,seebash(1)
bashbug(1)-reportabuginbash
builtins(7)-bashbuilt-incommands,seebash(1)
dh_bash-completion(1)-installbashcompletionsforpackage
rbash(1)-restrictedbash,seebash(1)
有的关键词在系统中对应多个手册, 使用-f参数,用于查找同名的手册:
peng@ubuntu:~/test$man-ftime
time(7)-overviewoftimeandtimers
time(1)-runprogramsandsummarizesystemresourceusage
time(2)-gettimeinseconds
清屏使用命令clear或者使用快捷键:ctrl l
3)历史纪录 history(history -n)这是一个非常有用的命令,想知道之前输入过的所有命令,就可以用他。
history:查看最近使用的命令,最多500条
historyn:曾经使用的最近n条命令
!n:执行最近第n条命令
!!:执行最近使用的第一条命令
方向上键:执行上一条命令
方向下键:执行下一条命令
下面这几个命令是使用最频繁的命令:
- cd
cd//回到当前用户主目录
cd~//回到当前用户主目录
cd~[用户名]//进入指定用户主目录
- file 功能说明:辨识文件类型。
语法:file[-beLvz][-f<名称文件>][-m<魔法数字文件>…][文件或目录…]
参数:
-b列出辨识结果时,不显示文件名称。
-c详细显示指令执行过程,便于排错或分析程序执行的情形。
-f<名称文件>指定名称文件,其内容有一个或多个文件名称呢感,让file依序辨识这些文件,格式为每列一个文件名称。
-L直接显示符号连接所指向的文件的类别。
-m<魔法数字文件>指定魔法数字文件。
-v显示版本信息。
-z尝试去解读压缩文件的内容。
补充说明:通过file指令,我们得以辨识该文件的类型。
peng@ubuntu:~/test$filewait.c
wait.c:ASCIItext
peng@ubuntu:~/test$filefifo_file
fifo_file:fifo(namedpipe)
什么是文件的路径? 就是文件存放的地方,可以联想为 文件的“家”。
在Linux中,存在着绝对路径和相对路径:
绝对路径:路径的写法一定是由根目录 / 写起的,例如 /usr/local/mysql
相对路径:路径的写法不是由根目录 / 写起的。
例如 首先用户进入到 /home,然后再进入到peng,执行的命令为
#cd/home
#cdpeng
此时用户所在的路径为 /home/peng。
第一个cd命令后紧跟/home,前面有斜杠,是绝对路径; 而第二个cd命令后紧跟peng,前面没有斜杠,表示从当前目录下找peng这个目录,这个peng是相对于/home目录来讲的,所以称为相对路径。
3)创建和删除文件目录1、创建文件touch功能说明:
文件名不存在,则创建一个新的空文件
如果文件名存在,更新该文件或者目录的修改访问时间,内容不变。
语法:
touch[-acfm][-d<日期时间>][-r<参考文件或目录>][-t<日期时间>][–help][–version][文件或目录…]
或touch[-acfm][–help][–version][日期时间][文件或目录…]
补充说明: 使用touch指令可更改文件或目录的日期时间,包括存取时间和更改时间。
参数:
-a或–time=atime或–time=access或–time=use只更改存取时间。
-c或–no-create不建立任何文件。
-d<时间日期>使用指定的日期时间,而非现在的时间。
-f此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m或–time=mtime或–time=modify只更改变动时间。
-r<参考文件或目录>把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同。
-t<日期时间>使用指定的日期时间,而非现在的时间。
–help在线帮助。
–version显示版本信息。
功能说明:
建立目录
语法:
mkdir[-p][–help][–version][-m<目录属性>][目录名称]
补充说明: mkdir可建立目录并同时设置目录的权限。
参数:
-m<目录属性>或–mode<目录属性>建立目录时同时设置目录的权限。
-p或–parents若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录。
–help显示帮助。
–verbose执行时显示详细的信息。
–version显示版本信息。
功能说明:
删除文件或目录。
语法:
rm[-dfirv][–help][–version][文件或目录…]
补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数”-r”,否则预设仅会删除文件。
参数:
-d或–directory直接把欲删除的目录的硬连接数据删成0,删除该目录。
-f或–force强制删除文件或目录。
-i或–interactive删除既有文件或目录之前先询问用户。
-r或-R或–recursive递归处理,将指定目录下的所有文件及子目录一并处理。
-v或–verbose显示指令执行过程。
–help在线帮助。
–version显示版本信息。
4、删除目录
rmdir(remove directory)
功能说明:删除目录。
语 法:
rmdir[-p][–help][–ignore-fail-on-non-empty][–verbose][–version][目录…]
补充说明:当有空目录要删除时,可使用rmdir指令。
参 数:
-p或–parents删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除。
–help在线帮助。
–ignore-fail-on-non-empty忽略非空目录的错误信息。
–verbose显示指令执行过程。
–version显示版本信息。
功能:
把档案串连接后传到基本输出到屏幕或加>fileName到另一个档案
使用权限:
所有使用者
语法:
cat[-AbeEnstTuv][–help][–version]fileName
参数:
-n或–number由1开始对所有输出的行数编号
-b或–number-nonblank和-n相似,只不过对于空白行不编号
-s或–squeeze-blank当遇到有连续两行以上的空白行,就代换为一行的空白行
-v或–show-nonprinting
范例:
cat-ntextfile1>textfile2把textfile1的档案内容加上行号后输入textfile2这个档案里
cat-btextfile1textfile2>>textfile3把textfile1和textfile2的档案内容加上行号(空白行不加)之后将内容附加到textfile3里。
cat</dev/stdin>1.txt//利用输入重定向CRTL D结束输入
cat/dev/null>1.txt//输出重定向进行清空
功能:
查找文件的前多少行
语法:
head[-n]filename
功能:
查找文件的莫问多少行
语法:
tail[-n]filename
功能:
分屏显示
用法
morefilename
功能说明:
cp源文件目标文件
将源文件复制为目标文件或目录。
语法:
cp[-abdfilpPrRsuvx][-S<备份字尾字符串>][-V<备份方式>][–help][–spares=<使用时机>][–version][源文件或目录][目标文件或目录][目的目录]
补充说明:cp指令用在复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。
2. mv功能说明:
mv[源文件、目录][目的文件、目录]
移动或更名现有的文件或目录。
语法:
mv[-bfiuv][–help][–version][-S<附加字尾>][-V<方法>][源文件或目录][目标文件或目录]
补充说明: mv可移动文件或目录,或是更改文件或目录的名称。
参数:
-b或–backup若需覆盖文件,则覆盖前先行备份。
-f或–force若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录。
-i或–interactive覆盖前先行询问用户。
-S<附加字尾>或
–suffix=<附加字尾>与-b参数一并使用,可指定备份文件的所要附加的字尾。
-u或–update在移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件。
-v或–verbose执行时显示详细的信息。
-V=<方法>或
–version-control=<方法>与-b参数一并使用,可指定备份的方法。
–help显示帮助。
–version显示版本信息
文件的权限:
以普通文件为例,使用 ls -l 命令,可以看到结果的第一列是 -rwxrwxrwx 的形式,其中第一个字符 "-" 表示这个文件为普通文件,它也可以是其他的字符,不同的字符代表不同类型的文件。其后的一串字符表明了该文件的权限,其中:
- 1)r 表明该文件具有可读权限,若该位置为 "-" ,则表明文件不可读;
- 2)w 表明该文件具有写权限,若该位置为 "-" ,则表明文件不可写;
- 3)x 表明该文件具有可执行权限,若该位置为 "-" ,则表明文件不具有可执行权限;
- 4)第一个 rwx 表示该文件的所有者对该文件的权限;第二个 rwx 表示该文件所属组对该文件的权限;第三个 rwx 表示其他用户对该文件的权限。
文件所有者:生成文件或目录的当前人,权限最高,用u表示。 文件所属用户组:系统管理员分配的同组一个或几个人,用g表示。 其他人对此文件的权限:除拥有者、用户组以外的人,用o 表示。 所有人:包括拥有者,所属用户组、其他用户,用a表示
-rwxr(所有者)-xr(所在组)-x(其他人)
chmod命令用来修改文件目录的访问权限,修改权限的前提条件是在修改权限时具有可操作权限。
(a)用字母表示权限 Who(u、g、o、a) cp(“=”设置权限“ ”添加权限“-”删除权限) permission(“r”读权限“w”写权限“x”操作权限) 例如:
chmodg=wr1.c;
chmodu w,g-w,o=wr1.c
(b)用八进制数字表示权限
rwx
000无权限
111有权限
R:4,w;2,x:1
例如 :
Chmod777build将build的权限成所有人rwx
注意:在Ubuntu中建立的文件默认权限是664
4. Chown改变文件的所属者和所属组chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令。
语法
chown[-cfhvR][--help][--version]user[:group]file...
参数 :
user:新的文件拥有者的使用者ID
group:新的文件拥有者的使用者组(group)
-c:显示更改的部分的信息
-f:忽略错误信息
-h:修复符号链接
-v:显示详细的处理信息
-R:处理指定目录以及其子目录下的所有文件
--help:显示辅助说明
--version:显示版本
实例: 把 /var/run/httpd.pid 的所有者设置 root:
chownroot/var/run/httpd.pid
Linux chgrp(英文全拼:change group)命令用于变更文件或目录的所属群组。
与 chown 命令不同,chgrp 允许普通用户改变文件所属的组,只要该用户是该组的一员。
语法
chgrp[-cfhRv][--help][--version][所属群组][文件或目录...]或chgrp[-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]
参数说明:
-c或--changes效果类似"-v"参数,但仅回报更改的部分。
-f或--quiet或--silent不显示错误信息。
-h或--no-dereference只对符号连接的文件作修改,而不更动其他任何相关文件。
-R或--recursive递归处理,将指定目录下的所有文件及子目录一并处理。
-v或--verbose显示指令执行过程。
--help在线帮助。
--reference=<参考文件或目录>把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
--version显示版本信息。
Chown、chgroup使用频率较低,了解即可。
6)find查找文件Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。
如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
我们有时候还要模糊查找某个文件,比如根据文件的后缀名,文件创建时间,文件大小等等。
语法:
findpath-option[-print][-exec-okcommand]{}\;
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。
如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
参数说明:
-namename,-inamename:文件名称符合name的文件。iname会忽略大小写
-user按照用户(文件的属主)
-sizen:文件大小是n单位,b代表512位元组的区块,c表示字元数,k表示kilobytes,w是二个位元组。
-mtime按照最后一次修改时间
-atime按照最后一次访问时间
-perm:按照文件的权限
-typetypen:查找文件类型为typen的文件
c:字符设备
d:目录
c:字型装置文件
b:区块装置文件
p:具名贮列
f:一般文件
l:符号连结
s:socket
注意 find 的使用条件所查找的路径必须具有读权限。 查找选项通过文件属性来查找。
例如: 实例
- 1.将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
#find.-name"*.c"
- 2.将目前目录及其下子目录中所有一般文件列出
#find.-typef
- 3.将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
#find.-ctime-20
- 4.查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:
#find/var/log-typef-mtime 7-okrm{}\;
- 5.查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
#find.-typef-perm644-execls-l{}\;
- 6.查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
#find/-typef-size0-execls-l{}\;
- whereis whereis命令用于查找文件。 该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。 该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
语法
whereis[-bfmsu][-B<目录>...][-M<目录>...][-S<目录>...][文件...]
参数:
-b只查找二进制文件。
-B<目录>只在设置的目录下查找二进制文件。
-f不显示文件名前的路径名称。
-m只查找说明文件。
-M<目录>只在设置的目录下查找说明文件。
-s只查找原始代码文件。
-S<目录>只在设置的目录下查找原始代码文件。
-u查找不包含指定类型的文件。
实例:
- 1.使用指令"whereis"查看指令"bash"的位置,输入如下命令:
peng@ubuntu:~/test$whereisbash
bash:/bin/bash/etc/bash.bashrc/usr/share/man/man1/bash.1.gz
- 2.查找标准库头文件stdio.h位置
peng@ubuntu:~/test$whereisstdio.h
stdio:/usr/include/stdio.h/usr/share/man/man3/stdio.3.gz
功能: 查出包含某些字符串的结果,对文件或输出结果进行过滤,对于大小写有一定 要求。
语法:
grep[option]stringfilename
补充说明: grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。
-A<显示行数>:除了显示匹配pattern的那一行外,显示该行之后的内容
-B<显示行数>:除了显示匹配pattern的那一行外,显示该行之前的内容
-C<显示行数>:除了显示匹配pattern的那一行外,显示该行前、后的内容
-c:统计匹配的行数
-e:同时匹配多个pattern
-i:忽略字符的大小写
-n:显示匹配的行号
-o:只显示匹配的字符串
-v:显示没有匹配pattern的那一行,相当于反向匹配
-w:匹配整个单词
举例:
1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
greptest*file
2、以递归的方式查找符合条件的文件。 例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:
grep-rupdate/etc/acpi
3、反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。
查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
grep-vtest*test*
grep应用非常频繁,经常还会和正则表达式一起使用,常用的正则表达式:
.:任意单个字符
*:任意字符多次
[]:指定范围,如[0-9]、[a-z]、[A-Z]、[0-9a-zA-Z]
^:行首
$:行尾
^$:空行
举例 假定如下文件:
9)wc计数
功能: Linux wc命令用于计算字数。 利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
wc [选项] 文件名
- l 统计多少行
- w 统计多少单词
- c 统计多少个字符
语法
wc[-clw][--help][--version][文件...]
参数:
-c或--bytes或--chars只显示Bytes数。
-l或--lines显示行数。
-w或--words只显示字数。
--help在线帮助。
--version显示版本信息。
实例
在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。使用的命令为:
wctestfile
tar命令可以为linux的文件和目录创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
语法
tar[必要参数][选择参数][文件]
常用命令参数:
-A新增压缩文件到已存在的压缩
-B设置区块大小
-c建立新的压缩文件
-d记录文件的差别
-r添加文件到已经压缩的文件
-u添加改变了和现有的文件到已经存在的压缩文件
-x从压缩的文件中提取文件
-t显示压缩文件的内容
-z支持gzip解压文件
-j支持bzip2解压文件
-Z支持compress解压文件
-v显示操作过程
-l文件系统边界设置
-k保留原有文件不覆盖
-m保留文件不被覆盖
-W确认压缩文件的正确性
常见解压/压缩命令 tar
解包:tarxvfFileName.tar
打包:tarcvfFileName.tarDirName
(注:tar是打包,不是压缩!)
.gz
解压1:gunzipFileName.gz
解压2:gzip-dFileName.gz
压缩:gzipFileName
.tar.gz 和 .tgz
解压:tarzxvfFileName.tar.gz
压缩:tarzcvfFileName.tar.gzDirName
.bz2
解压1:bzip2-dFileName.bz2
解压2:bunzip2FileName.bz2
压缩:bzip2-zFileName
.tar.bz2
解压:tarjxvfFileName.tar.bz2
压缩:tarjcvfFileName.tar.bz2DirName
.bz
解压1:bzip2-dFileName.bz
解压2:bunzip2FileName.bz
压缩:未知
.tar.bz
解压:tarjxvfFileName.tar.bz
压缩:未知
.Z
解压:uncompressFileName.Z
压缩:compressFileName
.tar.Z
解压:tarZxvfFileName.tar.Z
压缩:tarZcvfFileName.tar.ZDirName
.zip
解压:unzipFileName.zip
压缩:zipFileName.zipDirName
.rar
解压:rarxFileName.rar
压缩:raraFileName.rarDirName
举例:
实例1:将文件log2021全部打包成tar包
命令:
tar-cvflog.tarlog2021.log仅打包,不压缩!
tar-zcvflog.tar.gzlog2021.log打包后,以gzip压缩
tar-jcvflog.tar.bz2log2021.log打包后,以bzip2压缩
实例2:查阅上述 tar包内有哪些文件
说明:
由于我们使用 gzip 压缩的log.tar.gz,所以要查阅log.tar.gz包内的文件时,就得要加上 z 这个参数了。
实例3:将tar 包解压缩
命令:
tar-zxvf/opt/soft/test/log.tar.gz
*:通配0个或多个字符
*?:通配任意单个字符
*[s]:通配某个范围内的任意一个字符
举例:
2) 一行执行多条命令
一行执行多条命令:在命令与命令之间用“;”隔开
cd;ls
>:将一个命令的输出放入文件中
>>:输出重定向但不会把源文件覆盖,在原文件末尾追加
举例: 将ls的输出结果输出给test.txt
- 当前目录没有操作权限 cd .. 退回上一级目录
- 修改文件夹权限 为方便起见,我们将test的权限全部打开
用“>”的输出结果如下:
然后再用“>>”做测试其结果如下
4) 输入重定向:<
下面再实现以下输入重定向:
5) 管道符:|
管道符“|”:将一个进程的输出作为另一个进程的输入
输入命令 :
ls-l/etc|cat
显示的结果如上图所示。
6) 其他:%,$,~
%:作业控制,提示符等
$:取某一列的值,取变量值等
a) date: 显示日期时间
b) cal :显示日历
2、ps进程查询
功能: ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
语法
ps[options][--help]
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义:
-A列出所有的进程
-w显示加宽可以显示较多的资讯
-au显示较详细的资讯
-aux显示所有包含其他使用者的行程
au(x)输出格式:
USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
USER:行程拥有者
PID:pid
%CPU:占用的CPU使用率
%MEM:占用的记忆体使用率
VSZ:占用的虚拟记忆体大小
RSS:占用的记忆体大小
TTY:终端的次要装置号码(minordevicenumberoftty)
STAT:该行程的状态:
D:无法中断的休眠状态(通常IO的进程)
R:正在执行中
S:静止状态
T:暂停执行
Z:不存在但暂时无法消除
W:没有足够的记忆体分页可分配
<:高优先序的行程
N:低优先序的行程
L:有记忆体分页分配并锁在记忆体内(实时系统或捱AI/O)
START:行程开始时间
TIME:执行的时间
COMMAND:所执行的指令
实例
- 显示所有进程信息,连同命令行
- 查找指定进程init:
- 显示指定用户信息
终端的命令行最右边的字符
$普通用户
#管理员用户
有很多命令需要管理员权限才能使用,可以输入命令前加sudo,也可以直接切换到管理员再执行。
切换到管理员root
切换用户
su用户名:切换账户
4、电源管理a) shutdown
安全关闭或重启Linux系统,它在系统关闭之前给系统上的所有登陆用户提示一条警告信息。该命令还允许用户指定一个时间参数、可以是一个精确的时间、也可以是从现在开始的一段时间。 精确时间的格式: hh:mm 表示小时和分钟,时间段由 和分钟数表示。系统执行该命令后会自动进行数据同步的工作。
功能说明: 系统关机指令。
语法:shutdown[-efFhknr][-t秒数][时间][警告信息]
补充说明: shutdown指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。
参数:
-c当执行”shutdown-h11:50”指令时,只要按 键就可以中断关机的指令。
-f重新启动时不执行fsck。
-F重新启动时执行fsck。
-h将系统关机。
-k只是送出信息给所有用户,但不会实际关机。
-n不调用init程序进行关机,而由shutdown自己进行。
-rshutdown之后重新启动。
-t<秒数>送出警告信息和删除信息之间要延迟多少秒。
[时间]设置多久时间后执行shutdown指令。
[警告信息]要传送给所有登入用户的信息。
功能说明: 重新开机。
语 法:
dreboot[-dfinw]
补充说明: 执行reboot指令可让系统停止运作,并重新开机。
参数:
-d重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有”-n”参数的效果。
-f强制重新开机,不调用shutdown指令的功能。
-i在重开机之前,先关闭所有网络界面。
-n重开机之前不检查是否有未结束的程序。
-w仅做测试,并不真的将系统重新开机,只会把重开机的数据写入/var/log目录下的wtmp记录文件。
功能说明: 关闭系统。
语法:
halt[-dfinpw]
补充说明: halt会先检测系统的runlevel。若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。
参数:
-d不要在wtmp中记录。
-f不论目前的runlevel为何,不调用shutdown即强制关闭系统。
-i在halt之前,关闭全部的网络界面。
-nhalt前,不用先执行sync。
-phalt之后,执行poweroff。
-w仅在wtmp中记录,而不实际结束系统。
用户的密码要求有6~8个字符,其中至少要包含2个字母、1个数字或特殊字符,而且不能与用户名相同,还要不同于以前的密码,至少要有三个字符不同与以前的密码。
(2)passwd修改密码命令
输入命令passwd
输入原密码****
输入新密码
确认新密码
注意:在输入密码过程中机器是没有任何动作的
(3)查找用户
id
查看用户ID(用户名)及其所属组ID(组名)
user
查看已经登陆到当前系统中的用户,只显示出用户名。
who
查看用户的详细信息
who am i
查看当前用户自己的信息
whoanmi
查看当前用户自己的用户名
产看磁盘信息
1. du显示磁盘使用摘要信息
du以Block为单位方式显示
-k以k字节方式显示
-m以m字节方式显示
-s显示当前目录下的内容总的占用磁盘的大小,以Block为单位
以Block单位显示的数字是以k字节方式显示的数字的2倍,1k字节=2个Block
显示整个文件系统的空间使用磁盘情况
-k以k字节方式显示
查看当前机器与另一台机器的联通情况 ping 主机名称或者主机的IP:向ping后面的主机发送数据包,若被ping的主机有回复则表示连通的。
语法:
ping[-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]
补充说明: 执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
参数:
-d使用Socket的SO_DEBUG功能。
-c<完成次数>设置完成要求回应的次数。
-f极限检测。
-i<间隔秒数>指定收发信息的间隔时间。
-I<网络界面>使用指定的网络界面送出数据包。
-l<前置载入>设置在送出要求信息之前,先行发出的数据包。
-n只输出数值。
-p<范本样式>设置填满数据包的范本样式。
-q不显示指令执行过程,开头和结尾的相关信息除外。
-r忽略普通的RoutingTable,直接将数据包送到远端主机上。
-R记录路由过程。
-s<数据包大小>设置数据包的大小。
-t<存活数值>设置存活数值TTL的大小。
-v详细显示指令的执行过程。
2、ifconfig
查看和配置当前机器的网络参数信息
语 法:
ifconfig[网络设备][downup-allmulti-arp-promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]
补充说明: ifconfig可设置网络设备的状态,或是显示目前的设置。
参数:
add<地址>设置网络设备IPv6的IP地址。
del<地址>删除网络设备IPv6的IP地址。
down关闭指定的网络设备。
<hw<网络设备类型><硬件地址>设置网络设备的类型与硬件地址。
io_addr<I/O地址>设置网络设备的I/O地址。
irq<IRQ地址>设置网络设备的IRQ。
media<网络媒介类型>设置网络设备的媒介类型。
mem_start<内存地址>设置网络设备在主内存所占用的起始地址。
metric<数目>指定在计算数据包的转送次数时,所要加上的数目。
mtu<字节>设置网络设备的MTU。
netmask<子网掩码>设置网络设备的子网掩码。
tunnel<地址>建立IPv4与IPv6之间的隧道通信地址。
up启动指定的网络设备。
-broadcast<地址>将要送往指定地址的数据包当成广播数据包来处理。
-pointopoint<地址>与指定地址的网络设备建立直接连线,此模式具有保密功能。
-promisc关闭或启动指定网络设备的promiscuous模式。
[IP地址]指定网络设备的IP地址。
[网络设备]指定网络设备的名称。
举例
ifconfig-a//显示产看当前机器的IP、Netmask、Gateway等网络信息
ifconfigeth0up(down)//激活与关闭某个网络适配器
ifconfigeth0[ipaddress]netmask[address]//设置IP和子网掩码
十、Linux应用程序的安装与卸载基础1、Linux安装包
Linux安装包的通常是tar的格式,同时也支持自己定义的格式。 在redhat中软件安装包的格式通常是rpm 在Ubuntu中软件安装包的格式通常是deb
2、 安装包命名通用规则在Linux中常用的命名格式是:
软件名称版本号-修订版本号体系架构.扩展名
dpkg
dpkg-i安装
dpkg-p卸载
源文件安装的过程:
配置configure>>编译make>>安装makeinstall
安装 :
apt-getinstall
卸载 :
apt-getremove-purge
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
1、vim优势:- a)所有Unix Like系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在;
- b)很多软件的编辑接口都会主动调用vi
- c)vi具有程序编辑能力,可以主动以字体颜色辨别语法的正确性,方便程序设计;
- d)程序简单编辑速度快。
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
1)命令模式:用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
i切换到输入模式,以输入字符。
x删除当前光标所在处的字符。
:切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
2)输入模式在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACKSPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
PageUp/PageDown,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
q退出程序
w保存文件
按ESC键可随时退出底线命令模式。
简单的说,我们可以将这三个模式想成底下的图标来表示:
3. vim cheat sheet
下图就是赫赫有名的vim cheat sheet,一图包含了大部分常用的vim命令,建议保存
4. 举例
如果你想要使用 vim 来建立一个名为 peng.c 的文件时,输入下面命令:
peng@ubuntu:~$vimpeng.c
按下 i 进入输入模式(也称为编辑模式),开始编辑文字
在一般模式之中,只要按下 i, o, a 等字符就可以进入输入模式了!
在编辑模式当中,你可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。
这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮了,所以你可以进行任何的编辑。
按下 ESC 按钮回到一般模式
好了,假设我已经按照上面的样式给他编辑完毕了,那么应该要如何退出呢?是的!没错!就是给他按下 Esc 这个按钮即可!马上你就会发现画面左下角的 – INSERT – 不见了! 在一般模式中按下 :wq 储存后离开 vi
OK,我们要存档了,存盘并离开的指令很简单,输入 :wq 即可保存离开!
OK! 这样我们就成功创建了一个peng.c 的文件。
5. 快捷键说明移动光标的方法
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!
搜索替换
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!
删除、复制与贴上
这个 u 与 [Ctrl] r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!
一般模式切换到编辑模式的可用的按钮说明进入输入或取代的编辑模式
上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入。
一般模式切换到指令行模式的可用的按钮说明指令行的储存、离开等指令
vim 环境的变更
这些基础知识学会以后,就可以进入到下一步,学习Linux下的C程序开发了! 想学习Linux,快关注我吧!
,