linux命令学习笔记 - Go语言中文社区

linux命令学习笔记


前言

一篇关于linux简单命令的学习笔记。

在linux的/bin/目录下包含一些基础命令的可执行文件(二进制文件)。

以下命令格式中,略去命令选项。

文件管理

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 递归删除,删目录时

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,表示rx权限开启。

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的快捷方式。

注:不管软硬链接,修改一个文件,另一个文件也会被修改。

内存管理

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

动态显示任务管理器

用户管理

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的用户

网络管理

netstat

主要参数:

-t 仅显示TCP相关选项
-u 仅显示UDP相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字。直接通过ip地址,而不通过域名服务器
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
-a 显示所有连接中socket

常用:

netstat -tnlp

磁盘管理

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是挂载点目录

杂项

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 ~/.bashrcvim /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

显示当前用户的用户名

版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/fc9a82456cbe
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-12 12:01:24
  • 阅读 ( 1197 )
  • 分类:Linux

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢