Linux 如何学习

自主查询

Linux设备与文件名

设备设备在 Linux 内的文件名
IDE 硬盘/dev/hd[a-d]
SCSI/SATA/USB 硬盘/dev/sd[a-p]
U盘/dev/sd[a-p]
软驱/dev/fd[0-1]
打印机并口:/dev/lp[0-2] USB:/dev/usb/lp[0-15]
鼠标USB:/dev/usb/mouse[0-15] PS2:/dev/psaux
当前 CD ROM/DVD ROM/dev/cdrom
当前鼠标/dev/mouse

更多支持https://www.kernel.org/pub/linux/docs/lanana/device-list/devices-2.6.txt

命令行模式

字符界面:Ctrl + Alt + F1 ~ F6
图形界面:Ctrl + Alt + F7
启动命令:startx

执行命令

 command [-options] parameter1 parameter2 ...
  1. 一行命令中第一个输入部分绝对是 “Command” 或 “可执行文件”。

  2. command 为命令的名称。

  3. Parameter... 为依附在 options 后面的参数,或者是command 的参数。

  4. 命令, -options,参数,之前以空格来区分,不论空几格,都视为一格。

  5. 按下 Enter 键后立即执行。

  6. 命令太长的时候,可使用 \ 来转义 Enter 等符号,使命令连续到下一行。

基础命令操作

显示日期与时间:date;

gerrycheng@ubuntu:~$ dateTue Dec 30 03:57:23 PST 2014gerrycheng@ubuntu:~$ date +%Y/%m/%d2014/12/30gerrycheng@ubuntu:~$ date +%H:%M04:02

显示日历命令:cal;

gerrycheng@ubuntu:~$ cal 12 2014   December 2014      Su Mo Tu We Th Fr Sa  
    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 26 27  28 29 30 31

计算器:bc;

gerrycheng@ubuntu:~$ bc
bc 1.06.95Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
scale=4
1/3
.3333
343/344553
.0009
1+45
46
quit

重要热键

[Tab]命令补全、文件补全

gerrycheng@ubuntu:~$ ca [Tab] [Tab]
cal                              capsh
calendar                         captoinfo
calibrate_ppa                    case

[Ctrl]-c 中断目前程序
[Ctrl]-d 替代 Exit

man page 与 info page

man page

gerrycheng@ubuntu:~$ man date

超级简单的文本编辑器:nano

gerrycheng@ubuntu:~$ nano
  GNU nano 2.2.6                New Buffer                                      



^G Get Help  ^O WriteOut  ^R Read File ^Y Prev Page ^K Cut Text  ^C Cur Pos
^X Exit      ^J Justify   ^W Where Is  ^V Next Page ^U UnCut Text^T To Spell

正确关机重启方法

查看系统的使用状态
who | netstat -a | ps -aux |
通知在线用户关机的时间
shutdown | reboot |

关机命令:shutdown

gerrycheng@ubuntu:~$ shutdown -h now
立刻关机
gerrycheng@ubuntu:~$ shutdown -h 21:1521点15分关机,如执行时间超过此时间,隔天执行
gerrycheng@ubuntu:~$ shutdown -h +10系统再过10分钟自动关机
gerrycheng@ubuntu:~$ shutdown -r now
系统立刻重启
gerrycheng@ubuntu:~$ shutdown -r +30 'The system will reboot'30分钟后重启并提示消息给在线用户
gerrycheng@ubuntu:~$ shutdown -k now 'This system will reboot'系统不会关机,但发出警告消息

切换执行等级:init

  • run level 0:关机

  • run level 3:命令行模式

  • run level 5:图形界面模式

  • run level 6:重启

Linux 文件属性

root@ubuntu:~# ls -al
total 24
drwxrwxrwx  3 root root 4096 Dec 23 01:08 .
drwxr-xr-x 22 root root 4096 Dec 23 00:20 ..
-rw-------  1 root root  340 Dec 30 22:59 .bash_history
-rw-r--r--  1 root root 3106 Feb 19  2014 .bashrc
drwx------  2 root root 4096 Dec 23 00:29 .gconf
-rw-r--r--  1 root root  140 Feb 19  2014 .profile
[权限][连接][所有者][用户组][文件大小][修改日期][文件名]

  • 文件类型是[d]则是目录,是[-]则是文件,是[l]则是连接文件(linkfile),是[b]表示设备文件里的可供存储的接口设备,是[c]表示设备文件里面的串行端口设备。

  • 接下来的字符,以3个为一组,[r]代表 Read,[w]代表 Write,[x]代表 execute(若没有目录的可执行权限,则无法进入这个目录),如里没有权限,会以[-]表示。

  • 第一组为“文件所有者权限”,第二组为“同用户组的权限”,第三组为“其他用户组的权限”

如何改变文件属性与权限

  • chgrp:改变文件所属用户组

  • chown:改变文件所属用户

  • chmod:改变文件权限

root@ubuntu:~# chgrp [-R] dirname/filename...[-R]是指进行递归操作,即连同子目录下的所有文件、目录都更新成为这个用户组。
root@ubuntu:~# chown [-R] 账号名称 文件或目录root@ubuntu:~# chmod [-R] xyz 文件或目录xyz => r=4,w=2,x=1root@ubuntu:~# chmod u=rwx,go=rx testu=user,go=group,o=other

Linux文件种类与扩展名

文件种类

  • 普通文件(Regular file):用[-]表示

  • 纯文本文件(ASCII)

  • 二进制文件(Binary)

  • 数据格式文件(Data)

  • 目录(Directory):文件属性第一个字母为[d]

  • 连接文件(Link):第一个属性为[l]

  • 设备与设备文件(Device):块(Block)设备文件为[b]、字符(Character)设备文件为[c]

  • 套接字(Sockets)属性为[s]

  • 管道(FIFO,Pipe)属性为[p]

扩展名

  • sh:脚本或批处理文件

  • Z、tar、tar.gz、zip、tgz:不同压缩软件生成的扩展名

  • html、php:网页相关文件

Linux文件名长度限制
在Linux下面,使用默认的Ext2/Ext3文件系统时,文件的文件名限制为:

  • 单一文件或目录的最大容许文件名为255个字符

  • 包含完整路径名称及目录(/)的完整文件名为4096个字符

Linux目录配置

FHS(Filesystem Hierarchy Standard)将目录定义成为四种交互作用的形态。

FHS定义出根目录(/)下要有下面这些子目录:

其他目录

usr的意义与内容

var的意义与内容

目录树

绝对路径与相对路径

  • 绝对路径(absolute)是指由根目录(/)开始写起的文件名或目录名。

  • 相对路径(relative)是相对于目前路径的文件名写法。

.代表当前的目录,也可以用./来表示
..代表上一层目录,也可以用../来表示

目录相关操作

常见命令

  • cd:切换目录(Change Directory)

  • pwd:显示路径(Print Working Directory)

  • mkdir:创建目录(Mak Directory)

  • rmdir:删除一个空的目录(Remove Directory)

.代表当前的目录
..代表上一层目录
-代表前一个工作目录
~代表“目前用户身份”所在的主文件夹
~account代表 account 这个用户的主文件夹

pwd

root@ubuntu:/var# cd lockroot@ubuntu:/var/lock# pwd/var/lock
root@ubuntu:/var/lock# pwd -P/run/lock
root@ubuntu:/var/lock# [-P]显示正确路径而不是连接文件

mkdir

root@ubuntu:~# mkdir test1/test2/test3mkdir: cannot create directory ‘test1/test2/test3’: No such file or directory
root@ubuntu:~# mkdir -p test1/test2/test3root@ubuntu:~# lstest  test1

rmdir

root@ubuntu:~# lstest  test1
root@ubuntu:~# rmdir testroot@ubuntu:~# rmdir test1/rmdir: failed to remove ‘test1/’: Directory not empty
root@ubuntu:~# rmdir -p test1/test2/test3/root@ubuntu:~# lsroot@ubuntu:~# 加[-p]参数删除嵌套的空的目录

执行文件路径的变量:$PATH

root@ubuntu:~# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@ubuntu:~# ^Croot@ubuntu:~# su - gerrycheng 用 gerrycheng 的身份列出查询路径
gerrycheng@ubuntu:~$ echo $PATH/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
不包含sbin
gerrycheng@ubuntu:~$ ifconfigCommand 'ifconfig' is available in '/sbin/ifconfig'The command could not be located because '/sbin' is not included in the PATH environment variable.This is most likely caused by the lack of administrative privileges associated with your user account.ifconfig: command not found
gerrycheng@ubuntu:/$ ./sbin/ifconfig 
根据绝对路径使用命令可以正常运行
eth0      Link encap:Ethernet  HWaddr 00:0c:29:42:42:37  
          inet addr:192.168.42.163  Bcast:192.168.42.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe42:4237/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:31 errors:0 dropped:0 overruns:0 frame:0          TX packets:93 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000 
          RX bytes:3716 (3.7 KB)  TX bytes:12625 (12.6 KB)          Interrupt:19 Base address:0x2000 gerrycheng@ubuntu:/$ PATH="$PATH":./sbin
将sbin加入gerrycheng
gerrycheng@ubuntu:/$ echo $PATH/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:./sbin
gerrycheng@ubuntu:/$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:42:42:37  
          inet addr:192.168.42.163  Bcast:192.168.42.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe42:4237/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:33 errors:0 dropped:0 overruns:0 frame:0          TX packets:95 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000 
          RX bytes:4118 (4.1 KB)  TX bytes:13009 (13.0 KB)          Interrupt:19 Base address:0x2000

文件与目录管理

查看文件与目录:ls

-a:列出全部文件,连同隐藏文件
-A:列出全部文件,连同隐藏文件,但不包括 . 及 .. 这两个目录
-d:列出目录本身
-f:列出结果,不进行排序,ls默认会以文件名排序
-F:根据文件、目录等信息给予附加数据结构:* 代表可执行文件,/ 代表目录,= 代表 socket 文件, | 代表 FIFO 文件
-h:将文件容量以易读的方式显示出来
-i:列出 inode 号码
-l:列出长数据串,包含文件的属性与权限等数据
-n:列出 UID 与 GID
-r:将排序结果反向输出
-R:连同子目录一起列出
-S:以文件容量大小排序,而不是用文件名排序
-t:依时间排序,而不是用文件名
--color--=never:不要颜色显示
--color--=always:显示颜色
--full-time:以完整时间模式
--time={atime,ctime}:输出访问时间或改变权限属性时间而非内容更改时间

复制、删除与移动

cp复制文件或目录
-a:相当于-pdr的意思
-d:若源文件为连接文件的属性,则复制连接文件属性而非文件本身
-f:若目标文件已经存在且无法开房,则删除后再尝试一次
-i:若目标文件已经存在,在覆盖时会进行询问
-l:进行硬连接的连接文件创建,而非复制文件本身
-p:连同文件的属性一起复制过去,而非使用默认属性
-r:递归持续复制,用于目录的复制
-s:复制成为符号链接文件,即“快捷方式”文件
-u:若destination 比 source 旧才更新 destination
注意,如果源文件有两个以上,则最后一个目的文件一定要是“目录”才可以

rm 移除文件或目录
-f:忽略不存在的文件,不出现警告信息
-i:互动模式,在删除前询问用户是否操作
-r:递归删除,目录的删除

mv 移动文件与目录或更名
-f:如果目标文件已经存在,不询问直接覆盖
-i:若目标文件已经存在,询问是否覆盖
-u:若目标文件已经存在,且源文件比较新,才会更新
注意,如果源文件或目录有两个以上,则最后一个目的文件一定要是“目录”才可以

取得路径的文件名与目录名称

root@ubuntu:~# basename /etc/pm/sleep.d/sleep.d
root@ubuntu:~# dirname /etc/pm/sleep.d//etc/pm

文件内容查阅

  • cat:从第一行开始显示文件内容,-n 打印出行号

  • tac:从最后一行开始显示

  • nl:显示的时候输出行号

  • more:一页一页显示文件内容,输入 "/字符串" 后向下查询该字符串

  • less:与 more 类似,但可以往前翻页,'/' 向下查询,'?' 向上查询

  • head、tail:只看头几行及只看后几行,-n 代表显示几行

  • od:以二进制方式读取文件,od [-t TYPE],TYPE --> a(默认字符)、c(ASCII)、d[size](十进制及每个整数占用字节数)、f[size]浮点、o[size]八进制、x[size]十六进制

修改文件时间或创建新文件:touch

最常使用的情况是:
创建一个空文件
将某个文件日期修改为特定日期(mtime 与 atime)

  • mtime = modification time(ls -l 默认显示mtime)

  • ctime = status time (如权限属性改变时)

  • atime = access time

root@ubuntu:~# ls -l /etc/manpath.config -rw-r--r-- 1 root root 5173 Apr 10  2014 /etc/manpath.config
root@ubuntu:~# ls -l --time=atime /etc/manpath.config -rw-r--r-- 1 root root 5173 Jan  7 04:32 /etc/manpath.config
root@ubuntu:~# ll --time=ctime /etc/manpath.config -rw-r--r-- 1 root root 5173 Dec 23 00:14 /etc/manpath.config
root@ubuntu:~# touch [-acdmt] filename

-a:仅修改访问时间
-c:仅修改文件的时间
-d:后面可以接想要修改的日期或时间
-m:仅修改mtime
-t:后面可以接想要修改的时间

root@ubuntu:~# cd /tmp/root@ubuntu:/tmp# touch testtouchroot@ubuntu:/tmp# ll testtouch -rw-r--r-- 1 root root 0 Jan  7 06:15 testtouch
root@ubuntu:/tmp# cp -a ~/.bashrc bashrcroot@ubuntu:/tmp# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r-- 1 root root 3106 Feb 19  2014 bashrc
-rw-r--r-- 1 root root 3106 Jan  7 05:10 bashrc
-rw-r--r-- 1 root root 3106 Jan  7 06:16 bashrc
分号代表依次执行命令
root@ubuntu:/tmp# touch -d "two days ago" bashrc touch: invalid date format ‘two days ago’
root@ubuntu:/tmp# touch -d "2 days ago" bashrc root@ubuntu:/tmp# ll bashrc ;ll --time=atime bashrc ;ll --time=ctime bashrc -rw-r--r-- 1 root root 3106 Jan  5 06:21 bashrc
-rw-r--r-- 1 root root 3106 Jan  5 06:21 bashrc
-rw-r--r-- 1 root root 3106 Jan  7 06:21 bashrc
root@ubuntu:/tmp# touch -t 1411130113 bashrc root@ubuntu:/tmp# ll bashrc ;ll --time=atime bashrc ;ll --time=ctime bashrc -rw-r--r-- 1 root root 3106 Nov 13 01:13 bashrc
-rw-r--r-- 1 root root 3106 Nov 13 01:13 bashrc
-rw-r--r-- 1 root root 3106 Jan  7 06:23 bashrc

文件与目录的默认权限与隐藏权限

umask文件默认权限

root@ubuntu:/tmp# umask0022root@ubuntu:/tmp# umask -Su=rwx,g=rx,o=rx
看后3位“002”,数字代表要拿掉的权限