具体Linux的信息建议先自己百度了解,本博客是笔者自己的学习记录,因此本博客是按照本人的学习进度及内容而写的,如有错误或者忘记的,欢迎留言告知。
进入Linux系统
Linux系统与Windows系统的设定理念大不相同,windows系统的设想是用户都是傻子,所以系统面向对象来说比较简单,而Linux系统则认为用户都是了解相关方的知识。
按照Linux系统有多种方法,比较常见的是两种,一种是直接安装到电脑的系统,另一种是安装虚拟机,笔者选择是安装虚拟机,然后在虚拟机中安装Linux系统,详细方法请自行搜索或者私聊笔者。
正常登录与退出
进入 Linux系统,如同Windows下的一样,只需要账号密码即可,下面是我个人的Linux系统的主页面
至于退出就更加简单了,点x号就行。
命令行页面的登录与退出
下面介绍使用命令行页面登录和退出Linux系统,
切换到命令行页面
Linux系统提供了6个虚拟控制台(虚拟终端),同时按CTRL+alt+F1到F6来切换,但是部分系统的不同,比如笔者,当在登录页面或上一个页面按CTRL+alt +F3后,就会进入(如下图),但是其他的没有反应。
此时就是Linux的登录界面,在login处输入用户名,然后按enter;在password输入密码,再按enter,若用户名或者密码错误就会出现以下情况,登录成功就会如下第二个图,值得注意的是,Linux的密码输入不像window一样会显示出来,因此大家不必担心密码泄露。
而登录成功以后,Linux系统的系统提示符是$而不是#,是因为用户是普通用户,root用户的提示符为#,表示最高权限,若想看自己所处于的终端时,可输入ttp命令来查看,如图显示我的处于第三号虚拟终端
想要退出,只需要输入exit命令,就会返回上一个需要输入用户名和密码的地方,然后再按一次CTRL+alt+F7即可,笔者的是F1;自行尝试。另外,以上命令在页面的终端命令行也可以使用
若没有桌面显示的终端,到下面的9个点里寻找即可。右键有固定到收藏夹选项。
在虚拟机中切换或许会不流畅,可能不会达到预期的效果,但是问题不大。
Linux基本命令认识
Linux命令格式
Linux命令格式不算辅助,但是其中需要英语基础,它们与英语口语十分的相似,其 格式如下:
命令 [选项] [参数] (command [options] [arguments])
注意,每一项之间用一个或者多个空格隔开,方括号里的是可选的,具体含义如下;
命令:告诉Linux系统需要执行什么。
选项:说明命令运行的方式(可以改变命令的功能),且一般以"-"字符开始。
参数:说明命令影响或者操作的是什么,如一个文件,一个目录或者一段文字。
用户查询命令
有人可能想问,我自己是谁我能不知道吗,实际上是因为Linux是一个支持多用户且多程序同时进行的,一个人可以拥有多个用户,因为工作需要经常切换,忘记了哪个用户也很正常。
id 可以查询有效用户的 UID 和 GID、groups 信息
who 可以查询当前登录在系统上的登录用户的信息
who am i 等同于 who -m,只打印执行该命令的登录用户的信息(此处不出是其他原因)
whoami 可以查询当前有效用户的名字
w 获取到更多关于用户的信息
users 查询目前登录Linux系统的用户
uname命令
直接输入uname可获取操作系统信息
uname -n:查看主机名
uname -i:查看所使用系统的硬件平台名
同时查看只需要将前面两个命令组合即可,且与先后次序无关
-r:显示操作 系统发布的版本信息
-s:显示操作系统名
-m:显示机器硬件名
-p:显示主央处理器的类型
-a:显示所有信息(注意:也可以使用uname --all,相同的结果)
注意:可自由组合
若想知道所有可使用的命令信息,可以带有--help来查看
date,cal,clear命令
date命令
用于显示系统日期和时间
时间方面:
- % : 印出 %
- %n : 下一行
- %t : 跳格
- %H : 小时(00..23)
- %I : 小时(01..12)
- %k : 小时(0..23)
- %l : 小时(1..12)
- %M : 分钟(00..59)
- %p : 显示本地 AM 或 PM
- %r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
- %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
- %S : 秒(00..61)
- %T : 直接显示时间 (24 小时制)
- %X : 相当于 %H:%M:%S
- %Z : 显示时区
日期方面:
- %a : 星期几 (Sun..Sat)
- %A : 星期几 (Sunday..Saturday)
- %b : 月份 (Jan..Dec)
- %B : 月份 (January..December)
- %c : 直接显示日期与时间
- %d : 日 (01..31)
- %D : 直接显示日期 (mm/dd/yy)
- %h : 同 %b
- %j : 一年中的第几天 (001..366)
- %m : 月份 (01..12)
- %U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
- %w : 一周中的第几天 (0..6)
- %W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
- %x : 直接显示日期 (mm/dd/yy)
- %y : 年份的最后两位数字 (00.99)
- %Y : 完整年份 (0000..9999)
实例如下:
cal命令
显示日历,基本参数和实例如下,此版本为简单记录,不过深究,
-1 | 只显示本月的日历,这是默认的参数 |
-3 | 显示上一月、本月以及下个月共三个月的日历 |
-y [year] | 显示指定年份的所有月份,如果不指定哪一年,默认为本年。-y可以省略 |
-m [month] | 显示本年指定月份; [month]可以是数字或者月份对应的英文全拼或缩写,== [month]参数不可省==;如果使用数字指定月份,那么可以在数字后面添加f(following)或p( previous)参数用于指定下一年或者上一年(注意,数字和参数不可有空格!)。 |
-A [num] | 显示在已指定的任何月份之后发生的月份数(num个月),即add num months |
-B[num] | 显示在已指定的任何月份之前发生的月份数(num个月),即before num months |
-d YYYY-MM | 显示年份为YYYY,月份为MM的日期 |
-h | 不突出显示今天的日期 |
clear命令
与名字一样,意思为清除终端窗口中的显示
passwd命令
更改用户密码,不管普通用户还是root用户都可以用这个命令;
值得注意的是,roo用户的权限过高,很容易造成不可逆转的变故,所有一般是使用sudo来操作需要root权的指令,如查看其他用户的密码状态
passwd -S name查看某一用户密码的状态name表示想查看的账户名
whatis命令与--help
课本以及资料上显示的大概内容是,Linux操作系统的命令和参数太多,不可能全部记住,因此它提供了whatis和--help来帮助我们
whatis:what is,字面意思,后面加想知道的命令,如;
如第一条命令显示uname命令有两种功能,列出系统信息和获取当前内核名字与信息
--help:注意是‘--’而不是‘-’,功能与上面的内容相识。
man命令
man是manual(手册)的前三个字母
简单来说就是怕我们在命令,文件,函数等有什么不明白的可以通过man手册来查询
我们常用前3个手册,第1手册中是用来存放可执行程序和shell命令的;第2个手册用来存放系统调用函数的,这些函数由内核提供;第3个手册是用来存放库调用函数的,这些函数由第三方库来提供。
man 3 printf与man printf的区别是第一个命令是到手册3中寻找
注:进入上面的时候想退出时按q即可
关键词搜寻Man Pages
当要使用一个命令而又不能确定它的名字的时候,就可以用带有-k选项和要搜寻的关键词的man命令来搜寻Man Pages 中相关的内容
格式:man -k keyword,其中keyword是要搜寻的关键词,如whoami和who命令
当你记不全命令时,可以利用-k关键词来搜寻命令
若想要知道命令的功能,则可能用-f来查看,格式如下
man -f name;name表示命令的名字,其实应该用cammand来表示,本记录为了方便
值得注意的是,man -f name 输出的结果和whatis name是一样的
info命令等获取帮助的方法
格式:info name
和man的效果差不多,但是在开发者看来它提供的信息比man的详细得多,用法也更加简单
除了上面的方法,还可以查看/usr/share/doc/
file——确定文件数据类型
在Linux中因为文件没有拓展名(后缀),所以想要用file这个命令来查看数据类型
格式:file 参数 文件名或目录
常用参数
-b 不显示文件名称,只显示文件类型。在shell脚本中时有用。
-i 显示MIME类别。
-L 直接显示符号连接所指向的文件的类别。
-f namefile 指定名称文件(namefile),该文件每一行为一个文件名,file命令将按每一行的文件名辨别该文件的类型
cat——concatenate浏览正文文件内容
cat命令会将一个或者多个文件的内容显示到屏幕上,它会不停顿地以只读的方式显示整个文件的内容,若是显示多个文件,则所有的文件会连续地显示在屏幕上。
格式:cat 参数 一个或多个文件
cat filename,查看filename内容。
-n filename,查看文件的内容,并对所有输出行进行编号(包括空白行)
-b filename ,用法和 -n 差不多,但是不对空白行编号。
-s filename,当遇到有连续两行或两行以上的空白行,就代换为一行的空白行。
-e filename,在输出内容的每一行后面加一个$符号(包括空白行)
-A显示文件所有内容·
-b为非空行显示行号
-E显示文件行尾,用一个 $ 符号
-v显示不可打印字符
另外,cat命令还能创建文件夹,如下图创建一个new的文件夹(命名错了,但是我用mv命令改了,相当于复习之前的命令),在这个命令中按CTRL+D
more
当一个文件很大的时候,用上面的命令来预览文件并不是很方便,使用more命令可以显示内容并类似于阅读一样可以翻页显示内容,并且在底部会出现“--more--(n%)”的信息。
head,tail——浏览文件靠前靠后内容
head命令默认是显示文件的前10行,也可以用-n的参数的命令来查看自己想看的前几行。head命令在计算行数的时候是以换行符为标准的。
常用参数为
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数。
值得注意的是,其实把-n改成--line或者直接-数字也一样可以
tail的意思本就是尾的意思。tail命令的用法和head命令是一样的,但是其中若是-n则显示从文件末尾算起的n行,而+n则显示从文件的第n行算起。
常用参数
-f循环读取——表示文件内容有变化会时时跟随着变化
-n<行数>显示文件的尾部n行内容
-c<数目>显示的字节数
wc——word count
用来显示文件中的行数,单词数和字符数;
格式:wc [选项] 文件名(注意有空格分隔)
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度
-help 显示帮助信息并退出
--version 显示版本信息并退出
Linux文件系统及相关命令
层次结构基本知识
在Linux系统中,一切皆文件,分布是树状图样式
注意,Linux下文件是区分大小写的
bin:binary ,二进制,属于普通用户可以使用的命令
sbin:Supervisor binary 管理员(root)使用的命令
boot:启动,与系统启动相关的命令/文件
cdrom:光盘文件位置
dev:device,设备,Linux下所有的设备都放在/dev路径下
etc:存放系统的配置文件,在该目录下的文件基本都是ASCII码的正文文件,普通用户可以查看,只有超级用户可以修改
home:存放普通用户信息
root:存放主用户信息
lib:library,库
media:多媒体
mnt:mount,挂载 mount point 挂载点
opt:optional,可选的,可选的软件包将会放到此路径下
proc:进程
srv:service,服务
sys:系统
var:variable,变量,可变的
tmp:普通用户或程序可以将临时文件存入这目录,且各个用户都可以查看,因此重要文件不可放在这里
在Linux文件系统中,有两个特殊的目录,一个是用户所在的工作目录,即当前目录,可用一个点"."表示;另外一个是当前目录的上一层目录,也叫父目录,可以用两个点表示".",若是一个目录是以一个点开始的,就表示这个目录或者文件是一个隐藏目录或者文件。当用以默认方式查找时,就不会显示目录或文件。
Linux文件系统中另外一个非常重要的目录,也是用户使用最多的目录应该就是家目录,家目录是用来存放用户自己的文件或者目录,当用户登录Linux的时候,系统就自动进入家目录,其中,超级用户root的家目录是/root,普通用户的家目录被存放在/home目录之下。并使用该名字作为最后一级家目录的名字,如cat用户的家目录为/home/cat
cd,pwd,ls
cd命令——change directories
当我们想要切换到其他目录中去时,就可以使用这个命令,如下命令,ls列出目录下的文件及子目录,用cd切换到mnt1中,以此类推。
值得注意的是,cd是目录之间的切换,其中不乏使用绝对路径和相对路径。若是想返回上一级目录,输入ls ..即可,注意是“..”而不是“.”,可以直接只是输入cd或者cd ~就会返回本账户下的开始(主)目录
另外,可以用cd -来切换工作目录
pwd命令——print working directory
pwd用来显示当前目录的绝对目录,whoami是用来确定当前用户,而pwd是用来确定选择所以在的工作目录。
ls命令——list
显示指定工作目录下的文件及属性信息。
格式:ls [参数] [文件]
-a:列出指定目录下所有文件和子目录的信息(包括隐含文件)。作用与--all的作用相同
-A:同-a,但不列出. 和..。
-b:当文件名中有不可显示的字符时,将显示该字符的八进制数字。
-c:按文件的最后修改时间排序。
-C:分成多列显示。
-d:显示目录名而不是显示目录下的内容,一般与-l连用。
-f:在列出的文件名后加上符号来区别不同类型。
-R:递归地显示指定目录的各级子目录中的文件。
-s:给出每个目录项所用的块数,包括间接块。
-t:按最后修改时间排序(新的在前,旧的在后)。
-h:human,会将文件的大小转换成相对易懂的方式。其中第五列的数字表示文件的大小,单位是字节,用-h之后就转换成了k
-l:以长格式显示文件的详细信息,包括文件的类型与权限、链接数、文件所有者、文件所有者所属的组、文件大小、最近修改时间及文件名
这些命令可以和文件或者路径一起使用
其中第一个字母的含义如下(详情后面会讲)
cp命令——copy
cp命令可以将一个文件或者一个目录从一个位置复制到另外一个位置,其中,目的文件或者目录一定是cp命令的最后一个参数。值得注意的是,cp命令是一个具有破坏性的命令,谨慎使用。
格式:
cp [-options] source(s) target
source(源);可以是一个文件或多个文件,也可以是一个或多个目录名。
target(目的):可以是一个文件或目录
option(选项):cp命令的选项,以下是一些经常用的选项
-i 或 --interactive 覆盖文件之前先询问用户
-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-p 或 --preserve保留源文件或目录的属性,包括所有者,所属组、权限与时间戳
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
值得注意的是,一般用户使用cp命令,默认是-f的操作,而root用户下的是-i的操作,带有-i的命令需要确认,Y表示yes,N表示no。若是要复制目录,且该目录下有子目录,则需要使用带有-r的命令,且成功了不会又提醒
如果不使用绝对引用,则会在当前目录复制,若目的文件或者目录不存在。则会自动创建一个目录或者文件。
mv——move
顾名思义就是移动文件或者目录,同样,mv命令也可以用来修改文件和目录名,而且它也是一个具有破坏性的命令,谨慎使用。
格式:mv [选项] 源文件或目录 目标文件或目录
-b :若需覆盖文件,则覆盖前先行备份。
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件(destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且source 比较新,才会更新(update)
-t :--target-directory=DIRECTORY move all SOURCE arguments into
DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,
此时目标目录在前,源文件在后。
如上图,移动的时候使用了绝对路径,就会移动到该位置,但是若是没有绝对路径,就会在当前路径下重新创建一个同名的文件并把值赋值到这个文件中。(也就是仅仅改名字了)
mkdir——make directory
在Linux中不可避免的要创建目录,Linux给我们提供了mkdir来创建新的目录,可以是绝对目录也可以是相对目录
格式:mkdir 参数 目录名
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
-v, --verbose 每次创建新目录都显示信息
touch——创建文件夹
上面讲了如何创建目录,现在就到了如何创建文件名
创建文件夹的时候,可以是一个文件,也可以是多个文件,当时若是没有输入路径,则会在当前路径下创建空文件。如下,第一个是创建一个名为txt1的空文件,而后一个则是创建多个文件夹,其中文件夹之间用空格隔开
若是想要创建的文件已经存在,则touch命令就会把该文件的时间戳改为当前访问的时间和日期,如下,txt1本来是21:33,经过该命令就会更改为22:30
rm——remove——删除文件
格式 参数 目录/文件
其中目录和文件可以是多个,它会永久的在文件系统中删除文件或者目录,所以它是一个具有破坏性的命令。
其中的参数为
-d或--directory 直接把欲删除的目录的硬连接数据删成0,删除该目录。
-f或--force 强制删除文件或目录,忽略不存在的文件,不提示确认。
-i或--interactive 删除既有文件或目录之前先询问用户。
-I 在删除超过三个文件或者递归删除前要求确认。此选项比-i 提示内容更少,但同样可以阻止大多数错误发生。
-r或-R或--recursive 递归删除,将指定目录下的所有文件及子目录一并删除。
-v或--verbose 显示指令执行过程。
一般情况下使用rm命令,默认是带有参数-f的,在超级用户root下则会是默认-i
rmdir或者rm -r删除目录
介绍了文件和目录,以及删除文件,那当然也要学习删除目录。
Linux提供了rmdir和rm -r来删除目录,但是,rmdir命令只能删除一个目录,且只能删除空目录,即目录中不能有子目录和文件。
利用通配符操作文件
顾名思义,就是用来代替文件名。
*:匹配任意字符串/文本,包括空字符串;*表示任意字符(0个或多个)ls file *
?:匹配任何一个字符(不在括号内时)?代表人意1个字符 ls file 0
[abcd]:匹配abcd中任何一个字符
[a-z]:表示范围a到z,表示范围的意思 []匹配中括号中任意一个字符 ls file 0
{…}:表示生成序列。以逗号分隔,且不能有空格