面向开发人员的 Linux 命令
促销:以标签形式整理您的 Gmail 标签
tuladhar / gmail-标签作为选项卡
一个开源的 chrome 扩展程序,用于将您的 Gmail 标签组织为标签。
面向开发人员的基本 Linux 命令介绍
Linux是一个开源操作系统,为Android 手机、公共云、智能电视、物联网设备、卫星提供支持——它无处不在;从智能手机到大型强子对撞机(LHC)。
Linus Torvalds 是 Linux 内核的创建者,他还创建了开发人员日常使用的分布式版本控制系统“Git”。
了解如何使用 Linux 命令是开发人员必须具备的一项基本技能。
目录
设置游乐场
要学习和尝试 Linux 命令,可以安全地在 Linux 容器中运行它。Docker 是运行容器的热门选择,如果您尚未安装,请从下面的链接安装。
获取 Docker
一旦 Docker 安装并运行,请继续运行以下命令来启动Ubuntu docker容器:
$ docker pull ubuntu
$ docker run --rm -it ubuntu bash
root@e4675284d809:/#
在容器内部,运行以下命令来恢复在默认 Ubuntu 上找到的内容和包,以使其更适合交互和学习使用。
# Type 'y' when prompted
root@e4675284d809:/# unminimize
现在,安装一个名为tmux的程序,用于在单个终端窗口中运行多个 shell 会话。
$ apt update
$ apt install tmux
通过运行 tmux 命令启动 tmux
$ tmux
TMUX 简介
-
启动新的选项卡式窗口:按下
Ctrl+b
,释放,然后按c
-
水平启动新窗口:按下
Ctrl+b
,释放,然后按下"
-
垂直启动新窗口:按下
Ctrl+b
,释放,然后按下%
-
在选项卡式窗口之间切换:按下
Ctrl+b
,释放并按下p
或n
-
在水平或垂直窗口之间切换:按下
Ctrl+b
,释放,然后按下;
-
关闭窗口:按下
Ctrl+b
,释放,然后按下x
-
重命名选项卡式窗口:按下
Ctrl+b
,释放,然后按下,
-
滚动窗口控制台输出:按下
Ctrl+b
,释放,然后使用箭头移动
评论
Linux 命令行中的注释以 # 开头
$ # This is a comment
包管理器
apt 是一个包管理器,用于管理 Ubuntu Linux 中的包。
更新软件包存储库
$ apt update
批量升级包
$ apt
搜索名为 htop 的包
$ apt search htop
显示有关包的信息
$ apt show htop
安装名为 htop 的包
$ apt install htop
删除名为 htop 的包
$ apt remove htop
安装多个包
$ apt install htop less
apt-file
是一个用于搜索包含文件的软件包的程序。如果你不记得软件包的名称,但知道命令,那么这个程序会非常有帮助。
使用 apt 安装 apt-file
$ apt install apt-file
更新 apt-file 缓存
$ apt-file update
搜索提供 postgres 命令的包
$ apt-file search bin/psql
目录导航
切换到 /home 目录
$ cd /home
切换到上一个目录
$ cd -
进入目录树的上一级
$ cd ..
打印您所在的当前目录
$ pwd
系统信息
显示Linux内核信息
$ uname -a
显示内核发布信息
$ uname -r
显示系统运行时间+负载
$ uptime
显示系统主机名
$ hostname
显示主机的IP地址
$ hostname -I
显示系统重启历史记录
$ last reboot
显示当前日期和时间
$ date
显示本月的日历
$ cal
显示谁在线
$ w
您以谁的身份登录
$ whoami
$ id
硬件信息
显示CPU信息
$ cat /proc/cpuinfo
显示 CPU 核心数
$ nproc
显示内存信息
$ cat /proc/meminfo
显示进程的环境变量,例如:PID 1
$ cat /proc/1/environ
显示可用和已用内存(-h 表示人类可读,-m 表示 MB,-g 表示 GB。)
$ free -h
系统监控、统计、调试
显示和管理正在运行的进程
$ top
安装并使用友好的交互式进程查看器(顶部的替代)
$ apt install htop
$ htop
显示处理器相关统计信息(每1秒刷新一次)
$ mpstat 1
注意:如果遇到以下错误:/usr/bin/mpstat:没有此文件或目录。请搜索并安装提供 mpstat 工具的软件包。*
$ apt-file search bin/mpstat
sysstat: /usr/bin/mpstat
$ apt install sysstat
显示虚拟内存统计信息(每1秒刷新一次)
$ vmstat 1
显示磁盘 I/O 统计信息(每 1 秒刷新一次)
$ iostat 1
列出系统上所有打开的文件
$ lsof
列出用户打开的文件(例如:root)
$ lsof -u USER
列出由某个进程 PID 打开的文件(例如:1)
$ lsof -p PID
显示当前目录占用的磁盘空间(-h 为人类可读,-s 为总结)
$ du -sh
执行“df -h”,每 1 秒显示一次定期更新(专业提示:-d 标志显示视觉更新)
$ watch -n1 df -h
文件和目录
以长列表人类可读的格式列出当前目录中的所有文件(包括隐藏文件)(指定.
是可选的)。
$ ls -hal .
显示当前工作目录
$ pwd
创建一个或多个新的空文件
$ touch file1 file2
创建新目录
$ mkdir dir1
使用 -p 选项创建目录树
$ mkdir -p dir1/dir2/dir3
使用 tree 命令列出目录树
$ tree dir1
注意:安装 tree 包,如果遇到以下错误:
bash: tree: command not found*
$ apt install tree
将文件从一个目录复制(重复)到另一个目录(-v 选项用于启用详细模式)
$ cp -v file1 dir1/file1-copy
将目录及其所有内容复制到新目录
$ cp -vr dir1 dir1-copy
重命名或移动文件。如果 file2 是目录,则 file1 会移动到该目录。
$ mv -v file1 file1-rename
$ mv -v file1-rename dir1
删除文件或空目录(-f 选项强制删除而不询问)
$ rm file1
递归删除目录及其内容(-v 选项用于启用详细模式)
$ rm -vr dir1
创建指向文件或目录的符号链接(指针)
$ ln -s file1 file1-link
将简单文本写入文件
echo "hello, world!" > hello.txt
查看文件的内容
$ cat hello.txt
对大型文件进行分页
$ less hello.txt
显示文件的前20行
$ head -n 20 hello.txt
显示文件的最后 20 行
$ tail -n 20 hello.txt
显示文件的最后 10 行并跟踪文件的更新情况。
$ tail -f hello.txt
流程管理
进程是程序的运行实例。
显示当前正在运行的进程
$ ps
显示系统上的每个进程。
$ ps auxf
显示进程名称的进程信息
$ ps uf -C processname
显示正在运行的进程的交互式实时视图
$ top
$ htop
根据名称查找进程 ID
pgrep nginx
终止指定进程 ID 的进程。默认情况下,发送 TERM 信号
$ kill PID
向具有给定进程 ID 的进程发送自定义信号
$ kill -s SIGNAL_NUMBER pid
列出所有可用信号
$ kill -l
根据名称终止进程
$ pkill nginx
将命令作为后台作业运行
$ (sleep 30; echo "woke up after 30 seconds") &
列出后台作业
$ jobs
显示已停止或后台作业
$ bg
将最新的后台作业带到前台
$ fg
将作业 N 置于前台
$ fg N
终止作业 N
$ kill %N
文件权限
授予所有者所有权限,授予组读取执行权限,不授予其他权限
# Create a file
$ touch file1
# Set permission using either of the method
$ chmod 750 file1
$ chmod u=rwx,g=rx,o= file1
# List the file permission
$ ls -lh file1
将文件或目录的所有权更改为给定的用户和组
$ chown user:group file1
联网
显示所有可用网络接口的信息
$ ip addr
$ ifconfig -a # deprecated
显示eth0接口的信息
$ ip addr show eth0
$ ifconfig eth0 # deprecated
显示 IP 路由表
$ ip route
$ route # deprecated
Ping 主机名或 IP 地址
$ ping google.com
$ ping 8.8.8.8
显示域名的注册信息
$ whois medium.com
DNS 查找域
$ dig medium.com A # IPv4 addresses
$ dig medium.com AAAA # IPv6 addresses
$ dig medium.com NX # Nameservers
$ host medium.com # IPv4 addresses
显示本地机器的主机名和IP地址
$ hostname
$ hostname -i
从远程 HTTP 服务器下载文件
$ wget [http://ipv4.download.thinkbroadband.com/5MB.zip](http://ipv4.download.thinkbroadband.com/5MB.zip)
$ curl --output 5MB.zip [http://ipv4.download.thinkbroadband.com/5MB.zip](http://ipv4.download.thinkbroadband.com/5MB.zip)
显示所有监听 TCP 或 UDP 端口的进程
$ netstat -plunt
$ lsof -i
$ lsof -i tcp # only TCP ports
文本搜索
在文本文件中搜索模式
$ grep pattern file
# For example:
$ grep root /etc/passwd
在目录内的文本文件中递归搜索模式
$ grep -R "/bin/bash" /etc
搜索模式并输出模式匹配之前(B)或之后(A)的 N 行
$ grep -B 5 root /etc/passwd
$ grep -A 3 root /etc/passwd
在目录中查找具有匹配文件名的文件
find /etc -iname 'passwd'
find /etc -iname 'pass*' # glob pattern
根据文件大小查找文件
find / -size +1M # larger than 1MB
find / -size -1M # smaller than 1MB
磁盘使用情况
显示磁盘存储的可用空间和已用空间
df -h
显示目录或文件消耗的磁盘空间
du -sh /var/log
du -h 5MB.zip
交互式磁盘使用情况浏览器
apt install ncdu
ncdu
管道和重定向
重定向
将命令的正常输出(stdout)重定向到文件
echo "hello" > hello.stdout.txt
echo "world" > hello.stdout.txt
将错误输出(stderr)从命令重定向到文件
cat somefile 2> cat.stderr.txt
将命令的正常输出和错误输出重定向到文件。这对于日志记录很有用。
ps auxf >& processes.txt
将命令的正常输出(stdout)附加到文件,不同于>会覆盖文件
echo "hello" >> hello2.stdout.txt
echo "world! >> hello2.stdout.txt
将命令中的错误输出(stderr)附加到文件
cat some-unknown-file 2>> cat2.stderr.txt
将命令的正常输出和错误输出(stderr)附加到文件
ps auxf &>> processes.txt
管道
shell管道**是一种在命令之间进行通信的方式。
创建一个虚拟文件来学习管道
mkdir pipes-example
cd pipes-example
touch {1..10}.txt
示例 1:使用 sort 命令
ls -1 *.txt | sort -n # sorts the output in ASC order
ls -1 *.txt | sort -nr # sorts the output in DESC order
示例 2:使用 head & tail 命令
ls -1 *.txt | sort -n | head -n 5 # show the first 5 lines
ls -1 *.txt | sort -n | tail -n 5 # show the last 5 lines
示例 3:在文本文件中搜索模式
cat /etc/passwd | grep root # show lines containing string 'root'
环境变量
列出所有环境变量
$ env
显示环境变量的值
echo $HOME
echo $SHELL
创建环境变量
export PORT=80
export PLATFORM=medium.com
删除环境变量
unset PORT
PATH是常见且重要的环境变量之一。如果取消设置它,你认为会发生什么?
$ echo $PATH
$ unset PATH
…就是这样!
每个 Linux 命令本身都可以成为一本选项百科全书。如果你想深入了解所有可用选项、作者和示例,可以使用 man 命令,例如:man htop
或者man man
直接了解 man 命令本身。