linux学习笔记-1

linux学习笔记-1

学习资料
1.http://billie66.github.io/TLCL/book/index.html

shell

1.什么是shell?
shell就是一个程序,它接收来自键盘的命令,传送给操作系统执行。
几乎所有的 Linux 发行版都提供一个名为 bash 的 来自 GNU 项目的 shell 程序。bash是‘Bourne Again SHell’的缩写,所指的是这样一个事实,bash 是最初 Unix 上由 Steve Bourne 写成 shell 程序 sh 的增强版。

2.终端仿真器
当使用图形用户界面时,我们需要另一个和 shell 交互的叫做终端仿真器的程序。 如果我们浏览一下桌面菜单,可能会找到一个。虽然在菜单里它可能都 被简单地称为 “terminal”,但是 KDE 用的是 konsole , 而 GNOME 则使用 gnome-terminal。 还有其他一些终端仿真器可供 Linux 使用,但基本上,它们都完成同样的事情,让我们能访问shell。也许,你可能会因为附加的一系列花俏功能而喜欢上某个终端。

3.启动终端
[me@linuxbox ~]shell提示符,通常包括用户名@主机名,紧接着当前工作目录(稍后会有更多介绍)和一个美元符号。  
 如果提示符的最后一个字符是“#”,而不是“
shell提示符,通常包括用户名@主机名,紧接着当前工作目录(稍后会有更多介绍)和一个美元符号。   如果提示符的最后一个字符是“#”,而不是“
”,那么这个终端会话就有超级用户权限。这意味着,我们或者是以 root 用户的身份登录,或者是我们选择的终端仿真器提供超级用户(管理员)权限。
- linux使用命令su进入超级用户
- MAC OSX使用命令sudo su -进入超级用户

退出超级用户命令
exit或者ctrl+D

4.mac磁盘命令
diskutil list

shenbufandeAir:~ private$ diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *121.3 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_APFS Container disk1 121.1 GB disk0s2

/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +121.1 GB disk1
Physical Store disk0s2
1: APFS Volume Macintosh HD 109.6 GB disk1s1
2: APFS Volume Preboot 20.2 MB disk1s2
3: APFS Volume Recovery 519.9 MB disk1s3
4: APFS Volume VM 3.2 GB disk1s4

其中的 /dev/disk0 为内置磁盘 ,/dev/disk1 其实就是disk0s2作为APFS文件系统容器的具体信息。

5.部分命令介绍
- date - 显示系统当前时间和日期
- cal - 打印当前月日历
- df - 查看磁盘剩余空间的数量
- free - 查看空闲内存的数量
- exit - 结束终端会话,或退出root

文件系统中跳转

相关命令:
- pwd -打印出当前工作目录名
- cd - 更改目录
根据路径名更改。路径名又分相对路径和绝对路径。相对路径是开始于工作目录,而绝对路径从根目录开始,直到它的目的地。在文件系统树中用一对特殊符号来表示相对位置。
符号’.’指的是当前目录
符号’..’指的是当前目录的父目录。
例如:有目录/usr/bin
将工作目录/usr/bin改为父目录/usr有两种方式
a.cd /usr
b.cd ..
将工作目录/usr改为/usr/bin也有两种方式
a.cd /usr/bin
b.cd ./bin
选择输入量最少的方式
- ls - 列出目录内容

文件系统树

所有文件组成了一颗树型目录。文件系统中的第一级目录称为根目录。
根目录包含文件和子目录,子目录包含更多的文件和子目录,以此类推。
注意:类Unix操作系统,总是只有一个单一的文件系统树,无论有多少个磁盘或者存储设备连接到计算机上。根据负责维护系统安全的系统管理员的兴致,存储设备连接到(更精确的说法是挂载到)文件系统树的各个节点上。
关于文件名的重要规则
1.以 “.” 字符开头的文件名是隐藏文件。这仅表示,ls 命令不能列出它们, 用 ls -a命令就可以了。当你创建帐号后,几个配置帐号的隐藏文件被放置在你的家目录下。稍后,我们会仔细研究一些隐藏文件,来定制你的系统环境。 另外,一些应用程序也会把它们的配置文件以隐藏文件的形式放在你的家目录下面。
2.文件名和命令名是大小写敏感的。文件名 “File1” 和 “file1” 是指两个不同的文件名。
3.Linux 没有“文件扩展名”的概念,不像其它一些系统。可以用你喜欢的任何名字来给文件起名。文件内容或用途由其它方法来决定。虽然类Unix的操作系统,不用文件扩展名来决定文件的内容或用途,但是有些应用程序会。
4.虽然 Linux 支持长文件名,文件名可能包含空格,标点符号,但标点符号仅限 使用 “.,“-”,下划线。最重要的是,不要在文件名中使用空格。如果你想表示词与词间的空格,用下划线字符来代替。过些时候,你会感激自己这样做。

探究操作系统

linux系统相关指令
+ ls - 列出目录内容
+ file - 确定文件类型
+ less - 浏览文件内容

命令名经常会带有一个或多个用来更正命令行为的选项,选项后面会带有一个或多个参数,这些参数是命令作用的对象。因此命令格式如下:
command -options arguments

例如:
ls -l 长格式输出
ls -t 选项按文件修改时间的先后来排序
ls -lt 组合使用
ls -lt –reverse 结果以相反的顺序输出

ls命令选项
选项 长选项 描述
-a –all 列出所有文件,甚至包括文件名以圆点开头的默认会被隐藏的隐藏文件。
-d –directory 通常,如果指定了目录名,ls 命令会列出这个目录中的内容,而不是目录本身。 把这个选项与 -l 选项结合使用,可以看到所指定目录的详细信息,而不是目录中的内容。
-F –classify 这个选项会在每个所列出的名字后面加上一个指示符。例如,如果名字是 目录名,则会加上一个’/’字符。
-h –human-readable 当以长格式列出时,以人们可读的格式,而不是以字节数来显示文件的大小。
-l 以长格式显示结果。
-r –reverse 以相反的顺序来显示结果。通常,ls 命令的输出结果按照字母升序排列。
-S 命令输出结果按照文件大小来排序。
-t 按照修改时间来排序。

深入研究长格式输出

shenbufandeAir:~ private$ ls -l
total 24
drwxr-xr-x@ 5 private staff 160 3 2 2017 360云盘
drwxr-xr-x 5 private staff 160 4 30 2017 Applications
drwx——+ 65 private staff 2080 6 1 17:15 Desktop
drwx——+ 7 private staff 224 9 4 2017 Documents
drwx——+ 148 private staff 4736 6 1 20:17 Downloads
drwx——@ 77 private staff 2464 1 11 16:29 Library
drwx——+ 5 private staff 160 8 1 2017 Movies
drwx——+ 9 private staff 288 9 2 2017 Music
drwx——+ 8 private staff 256 4 30 2017 Pictures
drwxr-xr-x+ 6 private staff 192 11 22 2017 Public
drwxr-xr-x 6 private staff 192 3 20 23:22 VirtualBox VMs
drwxr-xr-x 6 private staff 192 4 11 21:43 aiohttpdemo_polls
-rw-r–r– 1 private staff 12 10 10 2017 c.txt
-rw-r–r– 1 private staff 12 8 14 2017 data.txt
-rw-r–r– 1 private staff 5 9 3 2017 myfile.txt
-rw-r–r– 1 private staff 0 5 12 19:21 test.db

长格式列表的字段
字段 含义
-rw-r–r– 对于文件的访问权限。第一个字符指明文件类型。在不同类型之间, 开头的“-”说明是一个普通文件,“d”表明是一个目录。其后三个字符是文件所有者的 访问权限,再其后的三个字符是文件所属组中成员的访问权限,最后三个字符是其他所 有人的访问权限。这个字段的完整含义将在第十章讨论。
1 文件的硬链接数目。参考随后讨论的关于链接的内容。
private 文件所有者的用户名。
staff 文件所属用户组的名字。
32059 以字节数表示的文件大小。

lrwxr-xr-x 1 root wheel 22 10 11 2017 resolv.conf -> ../var/run/resolv.conf
注意看,为何这条信息第一个字符是“l”,并且有两个文件名呢? 这是一个特殊文件,叫做符号链接(也称为软链接或者 symlink )。 在大多数“类 Unix” 系统中, 有可能一个文件被多个文件名所指向。虽然这种特性的意义并不明显,但它真的很有用。

确定文件类型

使用file名令来确定文件的类型
格式:file filename
事实上,在类Unix系统中有个普遍的观念就是“一切皆文件”。

用less浏览文件内容

less命令用来浏览文本文件。
格式:less filename
一旦运行起来,less程序允许你前后滚动文件。一旦 less程序运行起来,我们就能浏览文件内容了。如果文件内容多于一页,那么我们可以上下滚动文件。按下“q”键,退出less程序。例如,要查看一个定义了系统中全部用户身份的文件,输入以下命令:
$ less /etc/passwd

less命令最常用的格式
命令 行为
Page UP or b 向上翻滚一页
Page Down or space 向下翻滚一页
UP Arrow 向上翻滚一行
Down Arrow 向下翻滚一行
G 移动到最后一行
1G or g 移动到开头一行
/charaters 向前查找指定的字符串
n 向前查找下一个出现的字符串,这个字符串是之前所指定查找的
h 显示帮助屏幕
q 退出 less 程序

linux系统中的目录

目录 评论
/ 根目录,万物起源。
/bin 包含系统启动和运行所必须的二进制程序。
/boot
包含 Linux 内核、初始 RAM 磁盘映像(用于启动时所需的驱动)和 启动加载程序。

有趣的文件:

/boot/grub/grub.conf or menu.lst, 被用来配置启动加载程序。
/boot/vmlinuz,Linux 内核。
/dev 这是一个包含设备结点的特殊目录。“一切都是文件”,也适用于设备。 在这个目录里,内核维护着所有设备的列表。
/etc
这个目录包含所有系统层面的配置文件。它也包含一系列的 shell 脚本, 在系统启动时,这些脚本会开启每个系统服务。这个目录中的任何文件应该是可读的文本文件。

有趣的文件:虽然/etc 目录中的任何文件都有趣,但这里只列出了一些我一直喜欢的文件:

/etc/crontab, 定义自动运行的任务。
/etc/fstab,包含存储设备的列表,以及与他们相关的挂载点。
/etc/passwd,包含用户帐号列表。
/home 在通常的配置环境下,系统会在/home 下,给每个用户分配一个目录。普通用户只能 在自己的目录下写文件。这个限制保护系统免受错误的用户活动破坏。
/lib 包含核心系统程序所使用的共享库文件。这些文件与 Windows 中的动态链接库相似。
/lost+found 每个使用 Linux 文件系统的格式化分区或设备,例如 ext3文件系统, 都会有这个目录。当部分恢复一个损坏的文件系统时,会用到这个目录。这个目录应该是空的,除非文件系统 真正的损坏了。
/media 在现在的 Linux 系统中,/media 目录会包含可移动介质的挂载点, 例如 USB 驱动器,CD-ROMs 等等。这些介质连接到计算机之后,会自动地挂载到这个目录结点下。
/mnt 在早些的 Linux 系统中,/mnt 目录包含可移动介质的挂载点。
/opt 这个/opt 目录被用来安装“可选的”软件。这个主要用来存储可能 安装在系统中的商业软件产品。
/proc 这个/proc 目录很特殊。从存储在硬盘上的文件的意义上说,它不是真正的文件系统。 相反,它是一个由 Linux 内核维护的虚拟文件系统。它所包含的文件是内核的窥视孔。这些文件是可读的, 它们会告诉你内核是怎样监管计算机的。
/root root 帐户的家目录。
/sbin 这个目录包含“系统”二进制文件。它们是完成重大系统任务的程序,通常为超级用户保留。
/tmp 这个/tmp 目录,是用来存储由各种程序创建的临时文件的地方。一些配置导致系统每次 重新启动时,都会清空这个目录。
/usr 在 Linux 系统中,/usr 目录可能是最大的一个。它包含普通用户所需要的所有程序和文件。
/usr/bin /usr/bin 目录包含系统安装的可执行程序。通常,这个目录会包含许多程序。
/usr/lib 包含由/usr/bin 目录中的程序所用的共享库。
/usr/local 这个/usr/local 目录,是非系统发行版自带程序的安装目录。 通常,由源码编译的程序会安装在/usr/local/bin 目录下。新安装的 Linux 系统中会存在这个目录, 并且在管理员安装程序之前,这个目录是空的。
/usr/sbin 包含许多系统管理程序。
/usr/share /usr/share 目录包含许多由/usr/bin 目录中的程序使用的共享数据。 其中包括像默认的配置文件、图标、桌面背景、音频文件等等。
/usr/share/doc 大多数安装在系统中的软件包会包含一些文档。在/usr/share/doc 目录下, 我们可以找到按照软件包分类的文档。
/var 除了/tmp 和/home 目录之外,相对来说,目前我们看到的目录是静态的,这是说, 它们的内容不会改变。/var 目录存放的是动态文件。各种数据库,假脱机文件, 用户邮件等等,都位于在这里。
/var/log 这个/var/log 目录包含日志文件、各种系统活动的记录。这些文件非常重要,并且 应该时时监测它们。其中最重要的一个文件是/var/log/messages。注意,为了系统安全,在一些系统中, 你必须是超级用户才能查看这些日志文件。

操作文件和目录

这一节将会介绍一下命令:这五个命令属于最常使用的Linux命令之列。
+ cp - 复制文件和目录
+ mv - 移动/重命名文件和目录
+ mkdir - 创建目录
+ rm - 删除文件和目录
+ ln - 创建硬链接和符号链接

通配符

shell提供了特殊字符来帮助用户快速指定一组文件名,这些特殊字符叫做通配符。下面列出通配符及它们选择的对象。

通配符 意义

  • 匹配任意多个字符(包括零个或一个)
    ? 匹配任意一个字符(不包括零个)
    [characters] 匹配任意一个属于字符集中的字符
    [!characters] 匹配任意一个不是字符集中的字符
    [[:class:]] 匹配任意一个属于指定字符类中的字符

以下列出来最常使用的字符类

字符类 意义
[:alnum:] 匹配任意一个字母或数字
[:alpha:] 匹配任意一个字母
[:digit:] 匹配任意一个数字
[:lower:] 匹配任意一个小写字母
[:upper:] 匹配任意一个大写字母

类型匹配范例

模式 匹配对象
* 所有文件
g* 文件名以“g”开头的文件
b*.txt 以”b”开头,中间有零个或任意多个字符,并以”.txt”结尾的文件
Data??? 以“Data”开头,其后紧接着3个字符的文件
[abc]* 文件名以”a”,”b”,或”c”开头的文件
BACKUP.[0-9][0-9][0-9] 以”BACKUP.”开头,并紧接着3个数字的文件
[[:upper:]]* 以大写字母开头的文件
[![:digit:]]* 不以数字开头的文件
*[[:lower:]123] 文件名以小写字母结尾,或以 “1”,“2”,或 “3” 结尾的文件

mkdir - 创建目录

格式:mkdir directory…
注意表示法: 在描述一个命令时(如上所示),当有三个圆点跟在一个命令的参数后面,这意味着那个参数可以重复,就像这样:mkdir dir1 dir2 dir3 。会创建三个目录,名为 dir1, dir2, dir3。

cp - 复制文件和目录

它有两种使用方法:
1.cp item1 item2
复制单个文件或目录”item1”到文件或目录”item2”。
2.cp item… directory
复制多个项目(文件或目录)到一个目录下。

列举cp命令一些选项:
选项 意义
-a, –archive 复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操作文件的默认属性。
-i, –interactive 在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。
-r, –recursive 递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。
-u, –update 当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。
-v, –verbose 显示翔实的命令操作信息

cp实例
命令 运行结果
cp file1 file2 复制文件 file1 内容到文件 file2。如果 file2 已经存在, file2 的内容会被 file1 的内容重写。如果 file2 不存在,则会创建 file2。
cp -i file1 file2 这条命令和上面的命令一样,除了如果文件 file2 存在的话,在文件 file2 被重写之前, 会提示用户确认信息。
cp file1 file2 dir1 复制文件 file1 和文件 file2 到目录 dir1。目录 dir1 必须存在。
cp dir1/* dir2 使用一个通配符,在目录 dir1 中的所有文件都被复制到目录 dir2 中。 dir2 必须已经存在。
cp -r dir1 dir2 复制目录 dir1 中的内容到目录 dir2。如果目录 dir2 不存在, 创建目录dir2,操作完成后,目录 dir2 中的内容和 dir1 中的一样。 如果目录 dir2 存在,则目录 dir1 (和目录中的内容)将会被复制到 dir2 中。

mv - 移动和重命名文件

mv命令可以执行文件移动和文件命名任务,任何一种情况下,完成操作后,原来的文件名不再存在。用法与cp相似。
1.mv item1 item2
把文件或目录 “item1” 移动或重命名为 “item2”
2.mv item… directory
把一个或多个条目从一个目录移动到另一个目录中。

有用的选项和实例

mv选项

选项 意义
-i –interactive 在重写一个已经存在的文件之前,提示用户确认信息。 如果不指定这个选项,mv 命令会默认重写文件内容。
-u –update 当把文件从一个目录移动另一个目录时,只是移动不存在的文件, 或者文件内容新于目标目录相对应文件的内容。
-v –verbose 当操作 mv 命令时,显示翔实的操作信息。

mv实例

mv file1 file2 移动 file1 到 file2。如果 file2 存在,它的内容会被 file1 的内容重写。 如果 file2 不存在,则创建 file2。 这两种情况下,file1 都不再存在。
mv -i file1 file2 除了如果 file2 存在的话,在 file2 被重写之前,用户会得到 提示信息外,这个和上面的选项一样。
mv file1 file2 dir1 移动 file1 和 file2 到目录 dir1 中。dir1 必须已经存在。
mv dir1 dir2 如果目录 dir2 不存在,创建目录 dir2,并且移动目录 dir1 的内容到 目录 dir2 中,同时删除目录 dir1。如果目录 dir2 存在,移动目录 dir1(及它的内容)到目录 dir2。

rm - 删除文件和目录

rm 命令用来移除(删除)文件和目录:
rm item…

rm选项

选项 意义
-i, –interactive 在删除已存在的文件前,提示用户确认信息。 如果不指定这个选项,rm 会默默地删除文件
-r, –recursive 递归地删除文件,这意味着,如果要删除一个目录,而此目录 又包含子目录,那么子目录也会被删除。要删除一个目录,必须指定这个选项。
-f, –force 忽视不存在的文件,不显示提示信息。这选项覆盖了“–interactive”选项。
-v, –verbose 在执行 rm 命令时,显示翔实的操作信息。

rm实例

命令 运行结果
rm file1 默默地删除文件
rm -i file1 除了在删除文件之前,提示用户确认信息之外,和上面的命令作用一样。
rm -r file1 dir1 删除文件 file1, 目录 dir1,及 dir1 中的内容。
rm -rf file1 dir1 同上,除了如果文件 file1,或目录 dir1 不存在的话,rm 仍会继续执行。

【注意】类Unix操作系统中,没有复原命令。一旦用rm删除了一些东西,它就消失了。

尤其要小心通配符。思考一下这个经典的例子。假如说,你只想删除一个目录中的 HTML文件。

输入:
rm .html。这是正确的,如果你不小心在 “” 和 “.html” 之间多输入了一个空格,就像这样:
rm * .html。这个 rm 命令会删除目录中的所有文件,还会抱怨没有文件叫做 “.html”。

小贴士。 当你使用带有通配符的rm命令时(除了仔细检查输入的内容外),先用ls命令来测试通配符。这会让你看到将要被删除的文件是什么。然后按下上箭头按键,重新调用 刚刚执行的命令,用 rm替换 ls。

ln - 创建链接

ln 命令既可创建硬链接,也可以创建符号链接。可以用其中一种方法来使用它:
ln file link 创建硬链接。
ln -s item link 创建符号链接,”item” 可以是一个文件或是一个目录。

硬链接

与更加现代的符号链接相比,硬链接是最初 Unix 创建链接的方式。每个文件默认会有一个硬链接,这个硬链接给予文件名字。我们每创建一个硬链接,就为一个文件创建了一个额外的目录项。 硬链接有两个重要局限性:
1.一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联与链接本身不在同一个磁盘分区上的文件。
2.一个硬链接不能关联一个目录。

一个硬链接和文件本身没有什么区别。不像符号链接,当你列出一个包含硬链接的目录内容时,你会看到没有特殊的链接指示说明。当一个硬链接被删除时,这个链接被删除,但是文件本身的内容仍然存在(这是说,它所占的磁盘空间不会被重新分配),直到所有关联这个文件的链接都删除掉。知道硬链接很重要,因为你可能有时会遇到它们,但现在实际中更喜欢使用符号链接,下一步我们会讨论符号链接。

符号链接

创建符号链接是为了克服硬链接的局限性。符号链接生效,是通过创建一个特殊类型的文件,这个文件包含一个关联文件或目录的文本指针。在这一方面,它们和 Windows 的快捷方式差不多,当然,符号链接早于 Windows 的快捷方式 很多年;-)

一个符号链接指向一个文件,而且这个符号链接本身与其它的符号链接几乎没有区别。例如,如果你往一个符号链接里面写入东西,那么相关联的文件也被写入。然而,当你删除一个符号链接时,只有这个链接被删除,而不是文件自身。如果先于符号链接删除文件,这个链接仍然存在,但是不指向任何东西。在这种情况下,这个链接被称为坏链接。在许多实现中,ls 命令会以不同的颜色展示坏链接,比如说红色,来显示它们 的存在。

实战演习


http://billie66.github.io/TLCL/book/chap05.html

使用命令

这一章将介绍以下命令
+ type - 说明怎么解释一个命令名
+ which - 显示会执行哪个可执行程序
+ man - 显示命令手册页
+ apropos - 显示一系列适合的命令
+ info - 显示命info
+ whatis - 显示一个命令的简介描述
+ alias - 创建命令别名

到底什么是命令?

命令可以是下面四种形式之一:
1. 是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样。 这一类程序可以是用诸如C 和 C++语言写成的程序编译的二进制文件,也可以是由诸如shell,perl,python,ruby等等脚本语言写成的程序。
2. 是一个内建于 shell 自身的命令。bash 支持若干命令,内部叫做 shell 内部命令 (builtins)。例如,cd 命令,就是一个 shell 内部命令。
3.是一个 shell 函数。这些是小规模的shell脚本,它们混合到环境变量中。在后续的章节里,我们将讨论配置环境变量以及书写 shell 函数。但是现在, 仅仅意识到它们的存在就可以了。
4. 是一个命令别名。我们可以定义自己的命令,建立在其它命令之上。

识别命令

能确切地知道正在使用四类命令中的哪一类。Linux 提供了一对方法来弄明白命令类型。

type - 显示命令的类型

type 命令是shell内部命令,它会显示命令的类别,给出一个特定的命令名(做为参数)。它像这样工作:
type command
例子:
[me@linuxbox ~]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值