0. 前言
一篇关于linux简单命令的学习笔记。
在linux的/bin/
目录下包含一些基础命令的可执行文件(二进制文件)。
以下命令格式中,略去命令选项。
1. 文件管理
cd
~
到用户HOME目录
/
到系统根目录
-
退到上一个进入的目录
ls
格式:
ls <选项> <目录>
主要参数:
-a
查看当前目录下所有文件和目录,包括隐藏文件
-A
同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-S
按文件大小排序列表
-l
使用长列表格式列出详细信息
-t
按文件的最后修改时间排序列表。
-c
(1)与-lt一起用时按照存取时间来排序列表,并在列表中显示存取时间的值,其中存取时间是文件状态信息中的最后修改时间;(2)与-l一起用时按照文件名来排序列表,但在列表中显示存取时间。
-full-time
显示每个文件的完全日期和时间
-h
以人们易读的格式显示文件大小("K","M","G")
-i
显示文件的节点号
-r
反序列表
-R
递归显示子目录中的内容
-s
以磁盘块个数的形式显示每个文件的大小
-time=WORD
将WORD作为时间显示以代替文件的最后修改时间。
ls -ilh
后显示:
total 28K
658691 -rw-rw-r-- 1 test test 81 Dec 13 01:52 db_info
658248 drwxrwxr-x 3 test test 4.0K Dec 11 19:44 douNine
658064 drwxrwxr-x 5 test test 4.0K Dec 13 20:05 go
658315 -rw-rw-r-- 1 test test 9.0K Nov 28 22:33 hist
656748 drwxrwxr-x 2 test test 4.0K Dec 3 15:19 ziwen
- 第一字段:inode(文件或目录索引点,相当于指向文件在磁盘中数据的指针)
- 第二字段:文件种类(
-
表示正常文件,d
表示目录,l
表示链接文件)和权限(rwx,共9位,分别控制文件属主、所属用户组以及其它用户的权限) - 第三字段:硬链接个数
- 第四字段:文件属主
- 第五字段:文件所归属的用户组
- 第六字段:文件或目录的大小(字节)
- 第七字段和第八字段:最后访问或修改时间
- 第九字段:文件名或目录名
mkdir
创建一个目录
格式:
mkdir <dir>
主要参数:
-m
设置许可模式
-v
为每一个创建的目录显示一条消息
rmdir
删除一个空目录
格式:
rmdir <dir>
rm
删除(remove)
格式:
rm <选项> <文件或目录>
主要参数:
-i
以询问的方式删除
-f
强制删除
-r
递归删除,删目录时
rm -rf
强制递归删除过于暴力,且删除后还无法复原。因此,我常自定义删除文件/目录的命令,在~/.bashrc
中添加:
alias rm='echo "please use trash"'
alias trash=trash
trash() {
mv $@ ~/.trash/
}
alias clearTrash=clearTrash
clearTrash() {
sudo /bin/rm -rf ~/.trash/*
}
mv
移动(move)
格式:
mv <文件A或目录A> <文件B或目录B>
说明:
该命令有重命名的作用,当xxB不存在时,会将xxA重命名为xxB
cp
复制(copy)
格式:
cp <文件A或目录A> <文件B或目录B>
pwd
显示当前绝对路径
cat
只读形式显示文件内容
格式:
cat <文件>
主要参数:
-b
计算所有非空输出行,开始为1。
-e
在每行末尾显示$符号。
-n
计算所有输出行,开始为1。
-s
将相连的多个空行用单一空行代替。
file
格式:
file <file/dir>
查看文件类型
more
分页显示文件的内容
格式:
more <file>
说明:
分页显示文件内容查看时:
- 上下左右键进行翻阅
-
q
键退出。
less
more
命令的进阶版
说明:
less
= more
+ vi
在分页查看文件内容时,还可以:
- 使用
/pattern
从头向尾查找显示字符串 - 使用
?pattren
从尾向头查找显示字符串
./可执行文件
运行可执行文件
touch
新建文件
格式:
touch <文件>
chmod
修改文件权限。
在linux中,一个文件的权限范围有:
-
u
:User,即文件或目录的拥有者。 -
g
:Group,即文件或目录的所属群组。 -
o
:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围。 -
a
:All,即全部的用户,包含拥有者,所属群组以及其他用户。
而,文件的权限又分为:
-
r
:读取权限,数字代号为 4 -
w
:写入权限,数字代号为 2 -
x
:执行或切换权限,数字代号为 1 -
-
:不具任何权限,数字代号为 0
查看文件权限用 ls -l
命令,就会显示每个文件u,g,o范围的权限。
修改一个文件的权限大致有两种方法,如:
chmod u+x <file>
file 的 u(即文件所拥有者)
新增 x(执行权限),u-x
即对该范围取消 x 权限
chmod 755 <file>
表示对file的 u,g,o 范围分别赋予 7,5,5 权限。7=1+2+4,指rwx权限;5=1+4,指r-x权限;同理,还有 0,2,4,6 等权限。
理解:
为何任意一个小于7数字就能表示一种三个权限的组合呢?我猜想是因为这是个三位的二进制数。x
是第一位,w
是第二位,r
是第三位,0和1表示权限关和开。所以,7
的二进制为111
,表示三个权限都开启;5
的二进制为101
,表示r
和x
权限开启。
chown
修改文件/目录的属主。
chown root test/
将test/
目录的属主改为root
。
chgrp
修改文件/目录的属组。
chgrp root test/
将test/
目录的属组改为root
。
wc
依次显示文件的行数,单词数和字符数
格式:
wc <文件>
主要参数:
-l
只显示行数
-w
只显示单词数
-c
只显示字符数
find
查找文件或目录
主要参数:
-name <文件>
匹配要名字相同的文件,要找的文件名字包括在引号中,可以使用通配符(*和?)
-perm <模式>
匹配所有模式为指定数字型模式值的文件。不仅仅是读,写和执行,所有模式都必须匹配。如果在模式前是负号(-),表示采用除这个模式外的所有模式。
-user <用户号>
匹配所有用户序列号是前面所指定的用户序列号的文件,可以是数字型的值或用户登录名。
-atime n
匹配所有在前n天内访问过的文件。
-mtime n
匹配所有在前n天内修改过的文件。
-newer <文件>
匹配所有修改时间比file文件更新的文件。
-size n
匹配所有大小为n 块的文件(若k在n后,则为1K字节块)。
-print
显示整个文件路径和名称。一般来说,如果没有这个参数,find命令进行所要求的搜索是不会显示结果的。
示例:
find ~/go/src/ -name "beego" -print
通过文件名查找,并打印出文件或目录的路径
find ~/go/src/ -name "bb*" -print
根据部分文件名查找。会匹配名字为 bba、bbhj、bbac 等文件或目录。
find /etc –size 2500b –print
根据文件的特征查询。例如,知道一个文件尺寸小于为2500bytes
注解:
通配符又称多义符。在描述文件时,有时在文件名部分用到一些通配符,以加强命令的功能。与正则表达式很像。
-
?
:表示该位置可以是一个任意字符。 -
*
:表示该位置可以是零个或多个任意字符。 -
[charset]
:可选择charset集中的任何单个字符。例如:ls name[1-5].png
会列出name1.png、name2.png...
tar
加密解密,此处参照大神博客。
示例:
tar -xvf file.tar
解压 tar包
tar -xzvf file.tar.gz
解压tar.gz
ln
对文件或目录建立链接(其中的软链接,类似于Windows的快捷方式)。
分类:硬链接(Hard Link),符号链接(Symbolic Link)。
硬链接
默认情况下,ln产生硬链接。
建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。有硬链接关系的两个文件的inode值相同。
当我们修改其中一个文件的内容时,互为硬链接的文件的内容也会跟着变化。可以这么理解,互为硬链接关系的文件,他们好象是克隆体,他们的属性几乎是完全一样;硬链接关系的文件是无法区别的。
格式:
ln <选项> <源目录/文件> <目标目录/文件>
说明:
ln a.c ~/
如果最后一参数是一个已存在的目录,那么ln命令就在目录下创建与各个目标相连的链接,而且名字也与目标相同。
ln a.c ~/b.c
如果给出了两个文件名,那么命令生成一个从第二个文件指向第一个文件的链接。
ln a.c
如果只给出了一个目标,ln就在当前目录下生成一个指向目标的链接。
软链接
软链接也叫符号链接,其实就是快捷方式。
格式:
ln -s 源文文件或目录 目标文件或目录
示例:
$ ln -s /mnt/d/my_code/ ~/link_my_code
软链接一个目录到另一个目录下时,用绝对路径
$ ln -s my_code/ ~/link_my_code
这样是错误的,因为~/下没有my_code这个目录
区别
1)硬链接相当于拷贝了指向文件数据的“指针”(文件索引结点信息)过来。而软链接记住的,是文件索引结点所在的目录,似乎是一个“指针”的指针。
2)若一个文件有多个硬链接,删除其中一个文件后,文件数据其实并未删除,还可以通过其它硬链接找到这个文件,只是文件的硬链接个数会减一。而软链接,删除源文件后,软链接就不可用了,此处很像window的快捷方式。
注:不管软硬链接,修改一个文件,另一个文件也会被修改。
2. 内存管理
ps
查看进程(process)
主要参数:
-A
显示所有进程(等价于-e)
-a
显示一个终端的所有进程,除了会话引线
-N
忽略选择。
-d
显示所有进程,但省略所有的会话引线
-x
显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。
-p pid
进程使用cpu的时间
-u uid 或 username
选择有效的用户id或者是用户名,如 -u test 查看test用户
-g gid 或 groupname
显示组的所有进程。
U username
显示该用户下的所有进程,且显示各个命令的详细路径。如: U test
-f
全部列出,通常和其他选项联用。如:ps -fa 或 ps -fx
-l
长格式(有F,wchan,C 等字段)
-j
操作格式
-o
用户自定义格式。
v
以虚拟存储器格式显示
s
以信号格式显示
-m
显示所有的线程
-H
显示进程的层次(和其它的命令合用,如:ps -Ha)
e
命令之后显示环境(如:ps -d e; ps -a e)
h
不显示第一行
ps -aux
后,显示的头部如下:
用户 进程id CPU使用率 内存使用率 状态 开始日期 开始时间 命令
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
其中STAT
有以下几种状态:
-
D
: 不可中断的静止 -
R
: 正在执行中 -
S
: 静止状态 -
T
: 暂停执行 -
Z
: 不存在但暂时无法消除 -
W
: 没有足够的记忆体分页可分配 -
<
: 高优先序的行程 -
N
: 低优先序的行程 -
L
: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O)
kill
kill -stop pid
发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。
kill -cont pid
发送SIGCONT (19,18,25)重新开始一个停止的进程。
kill -kill pid
发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。
kill -9 -1
终止你拥有的全部进程。
top
动态显示任务管理器
3. 用户管理
linux多用户概念
root 权限最高的主用户,HOME目录为 /root/
其它(如test) 权限较小的用户,HOME目录一般为 /home/test/
~
用户HOME目录。 cd ~
或 cd
回到HOME目录,cd ~/go/src/
去HOME目录下的go/src/目录
/
系统根目录。 /bin/ 为系统根目录下的bin目录
su
切换用户
格式:
su <name>
切换到某个用户,没加用户名则默认登录root用户。
useradd
创建新用户
格式:
useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name
主要参数:
-c
:加上备注文字,备注文字保存在passwd的备注栏中。
-d
:指定用户登入时的主目录。默认值/home/<用户名>
-D
:变更预设值。
-e
:指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。
-f
:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1.
-g
:指定用户所属的群组。值可以使组名也可以是GID。用户组必须已经存在的,期默认值为100,即users。
-G
:指定用户所属的附加群组。
-m
:自动建立用户的登入目录。
-M
:不要自动建立用户的登入目录。
-n
:取消建立以用户名称为名的群组。
-r
:建立系统账号。
-s
:指定用户登入后所使用的shell。默认值为/bin/bash。
-u
:指定用户ID号。该值在系统中必须是唯一的。0~499默认是保留给系统用户账号使用的,所以该值必须大于499。
说明:
用 useradd 创建账号之后,再使用passwd设定账号的密码。
各用户的信息都保存在 /etc/passwd
文件中。
各用户组的信息都保存在 /etc/group
文件中。
示例:
useradd -m test
创建test用户并自动建立用户登录目录
passwd
格式:
passwd <name>
为name用户创建密码
赋予用户管理员权限
修改 /etc/sudoers
文件如下:
# User privilege specification
root ALL=(ALL:ALL) ALL
<name> ALL=(ALL:ALL) ALL
注意: 该文件是只读权限,需要先给文件增加写权限,再进行修改。
root@iZuf697sx3nms8k9zb2kw4Z:~# chmod a+w /etc/sudoers
root@iZuf697sx3nms8k9zb2kw4Z:~# vim /etc/sudoers
修改完后还要将该文件改回只读权限,不然用户使用sudo
时会报错:
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
userdel
格式:
userdel <name>
删除名为name的用户
4.网络管理
netstat
主要参数:
-t
仅显示TCP相关选项
-u
仅显示UDP相关选项
-n
拒绝显示别名,能显示数字的全部转化为数字。直接通过ip地址,而不通过域名服务器
-l
仅列出在Listen(监听)的服务状态
-p
显示建立相关链接的程序名
-a
显示所有连接中socket
常用:
netstat -tnlp
5.磁盘管理
blkid
查看Linux系统上所有块设备与交换分区(可以理解为每个硬盘)的文件系统类型、UUID、LABEL标签、挂载目录等信息。
换而言之,就是查看系统中的如磁盘、CD/DVD、U盘之类的文件(linux将所有储存的东西都称为文件)位置及信息。
mount
将设备挂载到Linux上。
格式:
mount [-t vfstype] [-o options] <device> <dir>
主要参数:
1.-t vfstype
指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。
常用类型有:
光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
2.-o options
主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
3.device
指明要挂载的设备(是一个文件),设备文件通常在/dev/
目录下。比如插入的CD/DVD会是/dev/sr0
文件。
4.dir
设备在系统上的挂载点(是一个目录)。
示例:mount /dev/sr0 ~/dvd/
将设备挂载到~/dvd/
目录下。
umount
取消挂载,类似于弹出u盘
格式:
umount <dir>
dir
是挂载点目录
du
说明:
显示文件和目录的磁盘使用空间大小。
命令参数:
-a
显示目录中文件的大小,单位KB。
-b
显示目录中文件的大小,以字节byte为单位。
-c
显示目录中文件的大小,同时也显示总和;单位KB。
-k
\-m
显示目录中文件的大小,-k 单位KB,-m 单位MB。
-s
仅显示目录的总值,单位KB。
-h
以K M G为单位显示,提高可读性。
-x
以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L
显示选项中所指定符号链接的源文件大小。
-S
显示个别目录的大小时,并不含其子目录的大小。
-X
在<文件>指定目录或文件。
--exclude=<目录或文件>
略过指定的目录或文件。
-D
显示指定符号链接的源文件大小。
-H\--si
与-h参数相同,但是K,M,G是以1000为换算单位。
-l
重复计算硬件链接的文件。
6. 杂项
grep
查找字符串。在一个或多个输入文件中查找含有与指定模式(正则表达式)相匹配的字符串的行。
格式:
grep <string> <dir>
主要参数:
-c
对匹配的行计数
-l
只显示包含匹配的文件的文件名
-h
抑制包含匹配文件的文件名的显示
-n
每个匹配行只按照相对的行号显示
-i
产生不区分大小写的匹配,缺省状态是区分大小写
-v
列出不匹配的行
示例:
grep magic /usr/src/*
在‘/usr/src’目录下搜索带字符串‘magic’的文件。
cat hello.c | grep hello
在 cat hello.c 后显示出来的内容中,查找hello字符串
echo $PATH
显示PATH变量内容
history
显示历史的输入指令
bc
进入计算器模式。输入 quit
退出。
alias
为命令取别名。例如: 执行 alias look='ll -a'
,即使得命令 look
等价于 ll -a
。当然,这样的别名意义不大。
我们可以用 unalias look
来删除这个别名。
我们也可以在bash配置文件添加这个自定义的命令(别名),vim ~/.bashrc
或 vim /etc/bashrc
,一个相对于当前用户,一个相对于全体用户。
在~/.bashrc中加入:alias serverOpen="python -m SimpleHTTPServer $1"
。保存退出后,再执行 source ~/.bashrc
使得该配置生效。这样之后,我们就可以用 serverOpen 8080
开启一个简单的8080端口的web服务器,不加端口则默认是8000端口。
whereis
whereis命令只能用于搜索程序名,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
主要参数:
-b
搜索二进制文件
-m
man说明文件
-s
源码文件
示例:
$ whereis vim
vim: /usr/bin/vim.basic /usr/bin/vim.tiny /usr/bin/vim /etc/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
$ whereis python
python: /usr/bin/python2.7 /usr/bin/python3.5 /usr/bin/python3.5m /usr/bin/python /usr/lib/python2.7 /usr/lib/python3.5 /etc/python2.7 /etc/python3.5 /etc/python /usr/local/lib/python2.7 /usr/local/lib/python3.5 /usr/share/python /usr/share/man/man1/python.1.gz
which
which命令是查找命令是否存在,以及命令的存放位置在哪儿。
示例:
$ which vim
/usr/bin/vim
$ which python
/usr/bin/python
whoami
显示当前用户的用户名