常用linux命令介绍。入门Linux必学的命令行,熟练掌握后,效率远超Windows GUI操作。重要的是,可以方便的做自动化处理!

更多命令在线查询 linux-command.17lai.site

Linux shell

Bash 基础

说明

记录在Linux中经常会用到的命令,持续更新。更多命令详解可参考:

Shell选择与切换

在现代的 Linux 上,sh 已经被 bash 代替,/bin/sh往往是指向/bin/bash的符号链接。早期macos系统默认使用bash解释器,在macos10.15系统中官方推荐使用zsh解释器。bash和zsh均是shell的一种,由于bash或zsh本质上都是解释器,他们所共同服务的是shell语言,因此在命令语法上基本相同,zsh能基本完美兼容bash的命令,并且使用起来更加优雅。

$ echo $SHELL               # 查看当前默认shell
$ cat /etc/shells          # 查看系统安装了哪些shell

$ chsh -s /bin/bash        # 切换bash,读取的配置文件:~/.bash_profile
$ chsh -s /bin/zsh        # 切换,读取的配置文件:~/.zshrc

当从bash切换为zsh时,如果不想重新配置一遍.zshrc文件,可以在.zshrc文件中加上source ~/.bash_profile,从而直接从.bash_profile文件读取配置。

如果选择zsh,会获得如下好用的功能:

$ cd .....                         # 输入n+1个点,可以往上跳转n层
$ kill process_name        # 自动补全进程ID
$ d                                        # 列出最近访问过的目录,然后选择目录前面的数字进行快速跳转
$ r                                        # 重复执行上一条命令
$ commond + tab                # 常用命令参数补全提醒

扩展阅读:程序员内功系列–iTerm与Zsh篇

特殊命令符号

符号格式作用
;命令1;命令2多个命令顺序执行,命令之间无任何逻辑关系
&&命令1&&命令2逻辑与:当命令1正确执行后,命令2才会正确执行,否则命令2不会执行
||命令1||命令2逻辑或:当命令1不正确执行后,命令2才会正确执行,否则命令2不会执行
|命令1命令2管道符:命令1的正确输出作为命令2的操作对象
&命令 &后台执行:把命令放在后台执行
>命令1 > file输出重定向:将命令1的结果输出到文件中,该文件原有内容会被删除
>>命令1 >> file输出重定向:将命令1的结果附加到文件中,原文件内容不会被删除
<命令1 < file输入重定向:将file作为命令1的输入

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null,以下是常用重定向命令示例:

  • 将 stderr 重定向到 file:command 2>file
  • 将 stderr 追加到 file 文件末尾:command 2>>file
  • 将 stdout 和 stderr 合并后重定向到 file:$ command > file 2>&1
  • 对 stdin 和 stdout 都重定向:command < file1 > file2
  • 屏蔽 stdout 和 stderr:command > /dev/null 2>&1

**注意:**0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。这里的 2> 之间不可以有空格,2> 是一体的时候才表示错误输出。

Bash中的特殊符号

通配符作用
?匹配一个任意字符
*匹配0个或多个任意字符,也就是可以匹配任何内容
[]匹配括号中任意一个字符
[-]匹配括号中任意一个字符,“-”代表范围
[^]逻辑非,表示匹配不是括号内的一个字符
‘’单引号,在单引号中所有的特殊符号,如“$”和“`”(反引号)都无特殊含义
“”双引号,在双引号中特殊符号都无特殊含义, 但“$”、“`”(反引号)和“\”是例外,拥有“调用变量值”,“引用命令”和“转义符”的特殊含义
反引号:反引号括起来的内容是系统命令,在Bash中先会执行它和()
$()和反引号作用相同,用来引用系统命令
#在shell脚本中,#开头的行代表注释
$用于调用变量的值,如需要调用变量name的值时,需要用的 $name 方式得到
\转义符,跟在\之后的特殊字符将失去特殊含义,变为普通字符

基础命令

查看系统基础信息

$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]        # 免密登录
$ cat /etc/redhat-release                                   # 查看CentOS版本
$ lshw                                                      # 查看硬件详细信息
$ cat /proc/cpuinfo| grep "cpu cores"| uniq                # 查看cpu核心数
$ cat /proc/cpuinfo| grep "physical id"|uniq| wc -l         # 查看物理cpu个数
$ cat /proc/cpuinfo | grep "processor[[:space:]]:"| wc -l   # 查看逻辑cpu的个数

$ free -h                  #查看内存大小

添加用户

# 添加用户 lxl80
$ useradd lxl80 && echo "Lixl.cn" | passwd --stdin lxl80 
$ vi  /etc/sudoers
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
# 添加以下内容
weixin  ALL=(ALL) NOPASSWD: ALL

$ vim /etc/ssh/sshd_config    # 禁止root用户远程登录
PermitRootLogin   no          # 生效要重启sshd进程。
$ systemctl restart sshd

基础设置

$ yum install -y wget               # 安装wget
# 修改yum源
$ cd /etc/yum.repos.d 
$ mv CentOS-Base.repo CentOS-Base.repo.bak
$ wget -O ./CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
$ yum clean all
$ yum makecache

$ yum update                        # 升级系统及相关软件
# 安装必备软件
$ yum install net-tools -y          # 安装常用网络工具
$ yum install bash-completion -y    # 命令自动补全    
$ echo -e 'set completion-ignore-case on' >> ~/.inputrc && bind -f  ~/.inputrc     # 命令补全忽略大小写

$ yum install ntp                   # 与NTP服务器进行的同步
$ systemctl start ntpd
$ systemctl enable ntpd
$ ntpdate -u  cn.ntp.org.cn         # 同步时间
$ date                              # 检查时间

$ yum -y install crontab            # 安装crontab
$ crontab -e                        # 创建crontab任务
# 每天2点同步一次,先通过 which ntpdate 查找命令所在路径
$ * 2 * * * /sbin/ntpdate cn.ntp.org.cn > /dev/null 2>&1   
$ service crond reload              # 重启crontab

磁盘管理

# 以易读的方式查看磁盘占用情况
$ df -Th
$ lsblk                  # 查看分区和磁盘,列出所有可用块设备的信息
$ fdisk -l                # 分区工具查看分区信息,查看所有被系统识别的磁盘
$ fdisk /dev/sdb         # 分区操作,n,p, , ,w

# 格式化sdb1分区,挂载到/home/weixin,并开机启动自动挂载
$ mkfs -t ext4 /dev/sdb1 && mkdir /weixin && mount /dev/sdb1 /weixin && echo /dev/sdb1 /weixin ext4 defaults 0 0 >> /etc/fstab
$ chmod 700 /weixin && chown weixin:weixin /weixin        # 更改目录权限及归属
$ resize2fs /dev/sdb      # 扩展ext*磁盘分区文件系统的大小
$ xfs_growfs /dev/sdb     # 扩展xfs磁盘分区文件系统的大小

$ du -sh *                # 以易读的方式查看当前目录空间占用总计
$ du -h --max-depth=1     # 查看哪个文件夹或文件占用磁盘最多
$ du -ch *.tar.gz         # 查看当前文件夹下所有后缀是 tar.gz 的文件的磁盘使用量总和 -c

查看网络情况

$ semanage port -l|grep ssh                      # 查看 SELinux 开放给 ssh 使用的端口
$ semanage port -a -t ssh_port_t -p tcp 12022    # 为 ssh 添加允许使用的端口12022
$ vi /etc/ssh/sshd_config                               # 查看/修改 ssh 使用的端口
$ vi /etc/hosts.allow                            # 如果ssh无法链接
sshd: ALL            ##允许所有ip主机均能连接本机

# 查看当前网络连接情况
$ netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'  
$ netstat -anlp | grep 1230                  # 查看端口监听

$ systemctl status firewalld                 # 查看防火墙状态
$ systemctl stop firewalld.service           # 停止防火墙
$ systemctl disable firewalld.service        # 禁止防火墙开机启动
$ firewall-cmd --zone=public --permanent --add-port=端口号/tcp    # 新增开放端口
$ firewall-cmd --zone=public --permanent --remove-port=端口号/tcp # 移除开放端口
$ firewall-cmd --zone=public --list-ports    # 查看开放端口
$ firewall-cmd --reload                                   # 刷新防火墙

$ nc -lv 19301                          # 监听本机19301端口
$ nc 192.168.0.18 19301                 # 连接特定端口
$ telnet 192.168.0.18 19301                     # 尝试连接19302端口,ctrl+],q退出

上传下载文件

# 通过 sftp 上传下载文件
$ sftp  -i ~/Downloads/newszxl.pem [email protected]     # 连接服务器
$ get /data/chainmaker/log/*  .                    # 把log下所有日志下载到本地当前目录
$ put crypto-config.zip /data/app/chainmaker/      # 把节点证书上传版到服务器

# 通过 scp 远程传输文件
$ scp -rp /data/ [email protected]:/data/
$ scp -rp [email protected]:/data/ /data/

# 通过 rsync 传输/同步文件,排除/data/dir1/目录下的所有文件,不排除dir1目录
$ sudo yum install -y rsync
$ rsync -av --exclude={'.*','dir1/*'} /data/ [email protected]:/data/

清除history

$ history -c                      # 清除所有历史记录
$ vim ~/.bash_history                       # 按需修改
$ history -r                      # 重置文件里的内容到内存中,缓存修改

窗口管理

tmux 是一个终端复用器,可以激活多个终端或窗口,每一个终端都可以访问、运行和控制各自的程序。tmux类似于screen,可以关闭窗口将程序放在后台运行,需要的时候再重新连接。常用快捷键如下:

  • Ctrl+b %:划分左右两个窗格。
  • Ctrl+b ":划分上下两个窗格。
  • Ctrl+b <方向键>:光标切换到其他窗格。
  • Ctrl+b x:关闭当前窗格。
  • Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小。
  • Ctrl+b Ctrl+<方向键>:按箭头方向调整窗格大小。

后台执行

$ command &     # 命令末尾添加&符号在后台运行
$ command > /dev/null 2>&1 &   # 将stdout重定向到/dev/null,将stderr重定向到stdout
ctrl + z        # 将一个正在前台执行的命令放到后台,并且处于暂停状态。
$ bg            # 将一个在后台暂停的命令继续执行。用bg %jobnumber 恢复运行
$ fg            # 将后台任务切换到前台执行
$ jobs -l       # 显示当前shell会话中所有已停止和后台进程的状态

性能测试

磁盘测试

# 使用dd磁盘IO简易性能测试
$ dd if=/dev/zero of=iotestr bs=1024k count=8k conv=fsync   # 测试写性能
$ dd if=/dev/sda of=/dev/null bs=8k count=1024k  # 测试读性能

# 使用fio进行磁盘专业性能测试
$ yum install fio -y
# 测试随机写IOPS:
$ fio -direct=1 -iodepth=64 -rw=randwrite -ioengine=libaio -bs=4k -size=8G -numjobs=1 -runtime=60 -group_reporting -filename=iotest -name=Rand_Write_IOPS_Test
# 测试随机读IOPS:
$ fio -direct=1 -iodepth=64 -rw=randread -ioengine=libaio -bs=4k -size=8G -numjobs=1 -runtime=60 -group_reporting -filename=iotest -name=Rand_Read_IOPS_Test
# 测试写吞吐量:
$ fio -direct=1 -iodepth=32 -rw=write -ioengine=libaio -bs=1024k -size=8G -numjobs=1 -runtime=60 -group_reporting -filename=iotest -name=Write_BandWidth_Test
# 测试读吞吐量:
$ fio -direct=1 -iodepth=32 -rw=read -ioengine=libaio -bs=1024k -size=8G -numjobs=1 -runtime=60 -group_reporting -filename=iotest -name=Read_BandWidth_Test

延伸阅读:磁盘性能压测—FIO

网络测试

# 网络测试(需要在需要测试的服务器上分别安装iperf)
$ wget https://iperf.fr/download/source/iperf-3.1.3-source.tar.gz
$ tar zxvf iperf-3.1.3-source.tar.gz
$ cd iperf-3.1.3
$ ./configure
$ make 
$ make install
# 服务器端测试命令,后台运行
$ iperf3 -s -D -i 10 -p 19302 --logfile /data/iperf.log
# 客户端测试命令,运行60秒,加参数R代表ServerToClient模式
$ iperf3 -c 192.168.0.18 -t 60 -f M -P 1 -p 19302 --get-server-output
$ iperf3 -c 192.168.0.18 -t 60 -f M -P 1 -R -p 19302 --get-server-output

延伸阅读:使用 iPerf 进行网络带宽测试使用 MTR 诊断网络问题

系统监

dstat

dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。使用dstat命令可以查看当前cpu,磁盘,网络,内存页和系统的一些当前状态指标。

$ yum install -y dstat
$ dstat 5     # 5秒统计一次

1、 –total-cpu-usage—- CPU使用率

usr:用户空间的程序所占百分比;

sys:系统空间程序所占百分比;

idel:空闲百分比;

wai:等待磁盘I/O所消耗的百分比;

hiq:硬中断次数;

siq:软中断次数;


2、-dsk/total-磁盘统计

read:读总数

writ:写总数


3、-net/total- 网络统计

recv:网络收包总数

send:网络发包总数


4、—paging– 内存分页统计

in: pagein(换入)

out:page out(换出)

注:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,通常情况下当系统已经开始用交换空间的时候,就说明你的内存已经不够用了,或者说内存非常分散,理想情况下page in(换入)和page out(换出)的值是0 0。


5、–system–系统信息

int:中断次数

csw:上下文切换

注:中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。

vmstat

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可实时动态监视操作系统的虚拟内存、进程、CPU活动。

$ vmstat -S m -t 3     # 3秒刷新一次,以M为单位
  • r 表示运行队列,当这个值超过了CPU数目,就会出现CPU瓶颈了。
  • b 正在等待资源的阻塞内核线程数,大于3表示io性能不好
  • bi: 每秒读取的块数
  • bo: 每秒写入的块数
  • us: 用户进程执行时间(user time)
  • sy: 系统进程执行时间(system time)
  • id: 空闲时间(包括IO等待时间)
  • wa: IO等待所占用的CPU时间的百分比,高过30%时IO压力高。

top

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。

$ top -s # 在安全模式运行top
  • Cpu(s) %id:空闲CPU时间百分比
  • Cpu(s) %wa:等待I/O的CPU时间百分比
  • VIRT:进程占用的虚拟内存,详情可参考: 观察进程的内存占用情况
  • RES:进程占用的物理内存
  • SHR:进程使用的共享内存
  • i 只显示正在运行的进程
  • e 切换内存单位,切换顺序为: k,m,g,t,p
  • k 杀掉某进程
  • o: COMMAND=chain 过滤进程,只显示启动命令带chain的进程

sysstat

一个非常方便的工具,它带有众多的系统资源监控工具,用于监控系统的性能和使用情况。我们在日常使用的工具中有相当一部分是来自sysstat工具包的。同时,它还提供了一种使用cron表达式来制定性能和活动数据的收集计划。以下是包含在sysstat包中的工具:

  • iostat: 输出CPU的统计信息和所有I/O设备的输入输出(I/O)统计信息。
  • mpstat: 关于CPU的详细信息(单独输出或者分组输出)。
  • pidstat: 关于运行中的进程/任务、CPU、内存等的统计信息。
  • sar: 保存并输出不同系统资源(CPU、内存、IO、网络、内核等)的详细信息。
  • sadc: 系统活动数据收集器,用于收集sar工具的后端数据。
  • sa1: 系统收集并存储sadc数据文件的二进制数据,与sadc工具配合使用
  • sa2: 配合sar工具使用,产生每日的摘要报告。
  • sadf: 用于以不同的数据格式(CVS或者XML)来格式化sar工具的输出。
  • Sysstat: sysstat工具的man帮助页面。
  • nfsiostat: NFS(Network File System)的I/O统计信息。
  • cifsiostat: CIFS(Common Internet File System)的统计信息。
$ yum install sysstat -y                         # 安装
$ iostat 2 -mxt                                  # 监测IO,2秒刷新一次,以M为单位
$ pidstat -u 1 10                                # 监测进程,1秒刷新一次
  • %user:CPU处在用户模式下的时间百分比。
  • %nice:CPU处在带NICE值的用户模式下的时间百分比。
  • %system:CPU处在系统模式下的时间百分比。
  • %iowait:CPU等待输入输出完成时间的百分比。
  • %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
  • %idle:CPU空闲时间百分比。
  • r/s: 每秒完成的读 I/O 设备次数。即 rio/s
  • w/s: 每秒完成的写 I/O 设备次数。即 wio/s
  • rMB/s: 每秒读M字节数。
  • wMB/s: 每秒写K字节数。
  • rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
  • wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
  • avgrq-sz:平均每次设备I/O操作的数据大小,类似于平均每人所买的东西多少
  • avgqu-sz:平均I/O队列长度,类似于单位时间里平均排队人数,如果值比较大,表示有大量io在等待。
  • await: 平均每次设备I/O操作的等待时间 (毫秒),类似于平均每人的等待时间,如果远大于svctm说明IO响应太慢。
  • r_await:平均每次读请求的等待时间(毫秒)。这包括请求在队列中和执行它们所花费的时间。
  • w_await:平均每次写请求的等待时间(毫秒)。这包括请求在队列中和执行它们所花费的时间。
  • aqu-sz:发送到设备的请求的平均队列长度。

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈,同时可以结合vmstat 查看b参数和wa参数。

另外 await 的参数也要和 svctm 参考比较。差的过高就一定有 IO 的问题。svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢。

队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。

更详细的信息,可参考:深入理解iostat

iotop

iotop 是一个类似 top 的工具,用来显示实时的磁盘活动。监控 Linux 内核输出的 I/O 使用信息,并且显示一个系统中进程或线程的当前 I/O 使用情况。它显示每个进程/线程读写 I/O 带宽。它同样显示当等待换入和等待 I/O 的线程/进程花费的时间的百分比。

$ yum install iotop
$ iotop -o   # 仅显示正在占用I/O的进程或者线程,可以随时按o切换
$ iotop -oP   # 按进程显示

性能调优

分析进程调用

pstack用来跟踪进程栈,如果发现一个服务一直处于work状态(如假死),可以多执行几次pstack,若发现代码栈总是停在同一个位置,很可能就是出问题的地方:

$ yum install gdb -y
$ pstack pid  # 获取进程栈

strace能够动态的跟踪进程执行时的系统调用和所接收的信号:

$ yum install -y strace
$ strace -ttTv o ~/straceout.txt -p 21120 # 查看进程20020的系统调用情况

内核参数优化

对于服务器来说,file-max和ulimit都需要设置,否则会出现文件描述符耗尽的问题。否则会碰到”Too many open files”或者Socket/File: Can’t open so many files等错误。

# 查看用户进程级的能够打开文件句柄的数量,Centos7默认是1024。
$ ulimit -a 
# 查看系统级别的能够打开的文件句柄的数量,Centos7默认是794168
$ cat /proc/sys/fs/file-max
# 永久生效的修改方法,文件末尾加入配置内容:
$ vim /etc/sysctl.conf
fs.file-max = 2000000
# 然后执行命令,使修改配置立即生效:
$ sysctl -p
# 查看当前shell的当前用户的打开的最大限制
$ ulimit -n
# 修改一个用户的所有shell能打开的最大数,文件末尾加入配置内容:
$ vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
# 修改以后,需要重新登录才能生效。如果需要设置当前用户session立即生效,还需要执行:
$ ulimit -n 65535 

文本处理

Vim常用命令

$ vi +/pattern filename   # 打幵文件,并将光标置于第一个与pattern匹配的位置
# u 撤销刚才执行的命令
# I 在光标所在行的行首插入随后输入的文本,相当于光标移动到行首执行 i 命令
# o/O 在光标所在行的下面/上面插入新的一行。光标停在空行首,等待输入文本
# /abc ?abc 从光标所在位置向前/向后查找字符串 abc,如搜索空格加转义符\
# ?abc    从光标所在为主向后查找字符串 abc
# /^abc /abc$    查找以 abc 为行首/为行尾的行
# n  N    向同一/相反方向重复上次的查找指令
# gg 跳转到第一行,G 跳转到最后一行
# :s/a1/a2/g    将当前光标所在行中的所有 a1 用 a2 替换
# :n1,n2 s/a1/a2/g    将文件中 n1 到 n2 行中所有 a1 都用 a2 替换
# :%s/a1/a2/g    将文件中所有的 a1 都用 a2 替换
# x    删除光标所在位置的字符(放入剪贴板)
# ndd    删除当前行(包括此行)后 n 行文本(放入剪贴板)
# dG    删除光标所在行一直到文件末尾的所有内容(放入剪贴板)
# D    删除光标位置到行尾的内容(放入剪贴板)
# p(P)    将剪贴板中的内容粘贴到光标后(光标后)
# 列编辑模式
$ ctrl + v   # 进入列编辑模式,然后通过光标移动选择要编辑的块
$ shift + i/a        # 在光标前/后插入,ESC自动补全
$ shift + c   # 修改内容,ESC自动补全

文本处理

$ grep "put block" logs -R -n               # 在多级目录中对文本递归搜索
$ grep -e "ERROR" -e "put block" file # 匹配多个模式
$ cat LOG.* | tr a-z A-Z | grep "FROM " | grep "WHERE" > b    # 将日志中的所有带where条件的sql查找查找出来
$ sort unsort.txt | uniq                             # 消除重复行
$ sort unsort.txt | uniq -c                        # 统计各行在文件中出现的次数
$ sort unsort.txt | uniq -d                        # 找出重复行
$ echo 12345 | tr '0-9' '9876543210'     # 加解密转换,替换对应字符
$ cat text| tr '\t' ' '                           # 制表符转空格
$ cat file | tr -d '0-9'                          # 删除所有数字
$ cat file | tr -c '0-9'                             # 获取文件中所有数字
$ cat file | tr -d -c '0-9 \n'                 # 删除非数字数据
$ cut -f2,4 filename                                    # 截取文件的第2列和第4列
$ paste file1 file2    -d ","                        # 将两个文本按列拼接到一起,用,分割
$ wc -l file                                                     # 统计行数
$ wc -w file                                                     # 统计单词数
$ wc -c file                                                     # 统计字符数
$ sed 's/text/replace_text/' file       # 替换每一行的第一处匹配的text
$ sed 's/text/replace_text/g' file        # 全局替换,输出替换后的内容
$ sed -i 's/text/replace_text/g' file    # 全局替换,直接替换源文件
$ sed '/^$/d' file                                        # 移除空白行

awk 数据流处理

awk是文本处理程序,它依次处理文件的每一行,并读取里面的每一个字段。适用于处理日志、CSV 这种每行格式相同的文本文件。参考:Awk入门30个Awk文本处理示例

脚本结构: awk 'BEGIN{statements} statements2 END{statements}',工作方式:

  • 执行begin中语句块;
  • 从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;
  • 执行end语句块;
# 使用不带参数的print时,会打印当前行,输入内容如下:
$ echo -e "line1\nline2" | awk 'BEGIN{print "start"} {print} END{print "End"}'    
start
line1
line2
End
$ awk '{print $0}' demo.txt        # 把demo.txt文件中每一行原样打印出来
# 用空格分割,输出字段数>30且第四列为特定字符的行中1,4及倒数第二列,第4列转成大写。','代表用空格分割
$ awk -F ' ' 'NF>3 {if ($4 = "CONSENSUS") print $1,toupper($4),$(NF-1)}' panic.log

数字证书

// 查看证书信息
$ openssl x509 -noout -text -in user/admin1/admin1.tls.crt
$ openssl x509 -in cert.pem -noout -text

系统相关

hostname - 查看主机名

hostname命令用于查看系统的主机名,或是修改系统的主机名。

hostname的常用命令如下:

# 显示系统的当前主机名
hostname

# 修改你系统的主机名
hostname blinkfox-system

# 使用 -F 选项,从指定的文件中读取主机名
hostname -F /root/hostname.txt

uptime - 查看系统运行时间

uptime命令用于打印系统的运行时间等信息。使用如下:

uptime

w、who - 列出登录的用户

w命令用于显示登录用户及他们当前运行的进程。输入的内容格式如下:

w

# 打印如下
22:42  up 18 days, 1 hr, 2 users, load averages: 1.23 1.79 1.75
USER     TTY      FROM              LOGIN@  IDLE WHAT
blinkfox console  -                日19   6days -
blinkfox s000     -                五23       - w

who命令有与w命令类似的用途,但它的功能比w命令更强大一些。语法格式如下:

who [OPTION]... [FILE | ARG1 ARG2]

who常用命令如下:

# 显示当前登录的所有用户信息
who

# 显示系统的启动时间
who -b

# 显示系统登录进程
who -l

# 显示与当前标准输入关联的用户信息
who -m

# 显示系统的运行级别
who -r

# 显示所有登录用户的用户名和登录用户数
who -q

uname - 查看系统信息

uname命令用于打印内核名称和版本、主机名等系统信息。命令的语法如下所示:

uname [OPTION]...

常用使用方式如下:

# 只打印内核的名称
uname

# 使用 -n 选项,只打印系统的主机名
uname -n

# 使用 -r 选项,打印内核版本信息
uname -r

# 使用 -m 选项,打印系统的硬件名称
uname -m

# 使用 -p 选项,打印系统的处理器类型信息
uname -p

# 使用 -i 选项,打印系统的硬件平台信息
uname -i

# 使用 -a 选项,打印上述所有示例中的信息
uname -a

date - 显示和设置系统日期和时间

date命令用于以多种格式显示日期和时间,或设置系统的日期和时间。date命令的语法如下所示:

date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

常用使用命令如下:

# 以默认格式显示系统的当前日期时间
date

# 格式化当前日期
date +"%Y-%m-%d"

# 格式化输出昨天的日期
date -d "1 day ago" +"%Y-%m-%d"

# 2秒后格式化输出
date -d "2 second" +"%Y-%m-%d %H:%M.%S"

# 普通格式化转出
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"

# apache格式转换
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"

# 日期加减操作
date +%Y%m%d #显示前天年月日
date -d "+1 day" +%Y%m%d #显示前一天的日期
date -d "-1 day" +%Y%m%d #显示后一天的日期
date -d "-1 month" +%Y%m%d #显示上一月的日期
date -d "+1 month" +%Y%m%d #显示下一月的日期
date -d "-1 year" +%Y%m%d #显示前一年的日期
date -d "+1 year" +%Y%m%d #显示下一年的日期

# 设定时间
date -s # 设置当前时间,只有root权限才能设置,其他只能查看
date -s 20160816 # 设置成20160816,这样会把具体时间设置成空00:00:00
date -s 01:01:01 # 设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23" # 这样可以设置全部时间
date -s "01:01:01 20120523" # 这样可以设置全部时间
date -s "2012-05-23 01:01:01" # 这样可以设置全部时间
date -s "20120523 01:01:01" # 这样可以设置全部时间

id - 显示用户属性

id命令用于打印输出用户uidgid、用户名和组名等用户身份信息。id命令的语法如下所示:

id [OPTION]... [USERNAME]

常见使用命令如下:

# 输出当前用户的uid、用户名、gid、组名及用户属于的群组信息
id

# 使用 -u 选项,输出用户的 uid
id -u

#-u 选项和 -n 选项结合使用,输出账户的用户名
id -un

# 使用 -g 选项,输出帐号当前起作用的gid
id -g

# -g 与 -n 选项结合使用,输出帐号当前起作用的用户组名
id -gn

# 使用 -G 选项,输出帐号所属的所有群组id
id -G root

# -G 与 -n 选项结合使用,输出账号所属的所有群组的名称
id -Gn root

文件和目录操作

touch - 创建文件

touch命令就可用于创建、变更和修改文件的时间戳。它是 Linux 操作系统的标准程序。touch命令又如下选项:

-a: 只改变访问时间
-c: 不创建任何文件
-m: 只改变修改时间
-r: 使用指定文件的时间替代当前时间
-t: 使用 [[CC]YY]MMDDhhmm[.ss] 替代当前时间

touch 命令的常见用法如下:

# 创建一个名为 effyl 的新空文件
touch effyl

# 同时创建名称分别为 effyl myeffyl lueffyl 的三个文件
touch effyl myeffyl lueffyl

# 使用 -a 选项,可以改变或更新文件的最新访问时间,如果文件 effyl 不存在,则新创建一个
touch -a effyl

# 使用 -c 选项,可以避免创建一个新文件,并用当前时间更新文件的时间戳
touch -c effyl

# 使用 -m 选项,可以只改变文件的修改时间,而访问时间不变
touch -m effyl

# 使用 -c 和 -t 选项,来明确设置文件的时间
touch -c -t YYMMDDHHMM filename

# 如果想使用文件 myeffyl 的时间戳更新文件 effyl 的时间戳,可以使用 -r 选项
touch -r myeffyl effyl

mkdir - 创建目录

mkdir命令用于创建一个新目录。最基本的mkdir命令的使用方法如下所示:

# 在当前目录下创建一个给定的目录名
mkdir <dirname>

# 在 backup 中的相对路径创建一个名为 old 的目录
mkdir backup/old

# 在 backup 中的绝对路径中创建一个名为 old 的目录
mkdir /home/blinkfox/backup/old

# 使用 -p 选项,会自动创建所有还不存在的父目录
mkdir -p backup/old

# 使用 -m 选项,可以设置将要创建目录的权限
# 如:创建一个任何人都有读写访问权限的目录
mkdir -p -m 777 backup/old

cp - 复制文件或目录

cp命令用于将文件从一个地方复制到另一个地方。原来的文件保持不变,新文件可能保持原名或用一个不同的名字。

使用 cp 命令复制文件和目录的语法有以下几种:

# 复制源文件到目标文件
cp [OPTION] SOURCE DEST

# 复制一个或多个源文件到一个目录
cp [OPTION] SOURCE... DIRECTORY

# 同上
cp [OPTION] -t DIRECTORY SOURCE...

常用使用示例如下:

# 在当前目录下,创建一个文件 file.txt 的副本,取名为 newfile.txt
cp file.txt newfile.txt

# 复制当前目录下的 file.txt 文件到 /tmp 目录下
cp file.txt /tmp

# 复制当前目录下的所有文件到 /tmp 目录下
cp * /tmp

# 使用 -p 选项,可以使复制一个文件到新文件时,保留源文件的所有者、权限等信息
cp -p filename /path/to/new/location/myfile

# 使用 -R 或 -r 选项,恶意递归地复制一个目录
# 即将一个目录及其下的所有文件和子目录都复制到另一个目录
cp -R * /home/blinkfox/backup

ln - 链接文件或目录

ln命令用于创建软链接或硬链接。使用 -s 选项,可以创建一个软链接:

# 在目录 lib 下创建一个软链接 library.so,链接到 /home/blinkfox/src/library.so
ln -s /home/blinkfox/src/library.so /home/blinkfox/lib

# 创建目录的软链接
ln -s /home/blinkfox/src source

mv - 移动文件或目录

mv命令用于将文件和目录从一个位置移到另外一个位置。除了移动文件,mv命令还可用于修改文件或目录的名字。

mv 命令的基本语法如下所示:

mv SOURCE... DIRECTORY

常用命令如下:

# 将当前目录下的文件 source.txt 移到目录 /tmp 下
mv source.txt /tmp

# 将目录 dir1、dir2 移到目录 dir_dist 下
mv dir1 dir2 dir_dist

# 将当前目录下的 old.txt 文件更名为 new.txt
mv old.txt new.txt

# 使用 -i 选项,在重写覆盖目标文件或目录之前给出提示信息
mv -i old.txt new.txt

# 将当前目录下的所有文件移动到目录 /tmp 下
mv * /tmp/

# 使用 -i 选项,从 dir1 中移动那些在目标目录中不存在的文件到目标目录
mv -u dir1/* dir2/

rm - 删除文件或目录

rm命令用于删除指定的文件和目录。其语法如下所示:

rm [OPTIONS]... FILE...

rm的常用命令如下:

# 删除当前目录下的文件 file1.txt、file2.txt、file3.txt
rm file1.txt file2.txt file3.txt

# 删除当前目录下的所有文件
rm *

# 删除你当前帐号主目录下的 temp 目录中的所有文件
rm ~/temp/*

# 使用 -i 选项,可以在删除每个文件或目录前提示用户确认
rm -i *

# 删除当前目录下所有以".doc"结尾的文件
rm *.doc

# 删除当前目录下所有文件名中包含"movie"字符串的文件
rm *movie*

# 删除当前目录下所有以"a"开头的文件
rm a*

# 删除当前目录下整个文件名(包括扩展名)只有 3 个字符的所有文件
rm ???

# 删除当前目录下文件扩展名有两个字符的所有文件
rm *.??

# 删除当前目录下文件名中含有字母 a 或 b 或 c 的所有文件
rm *[abc]*

# 删除当前目录下文件名中包含 0~9 的所有文件
rm *[0-9]*

# 删除当前目录下文件扩展名是字母 c 或 h 的所有文件
rm *.[ch]

# 删除 /tmp 目录下的所有文件及其子目录
rm -rf /tmp/*
  • -f 删除前不提示用户确认,并忽略不存在的文件
  • -r 递归地删除目录及其下的内容

ls - 列出文件名和目录

ls命令是Linux中最常用的命令之一,其作用就是列出文件名和目录。在命令行提示符下,直接输入ls命令,不带任何选项,将列出当前目录下所有文件和目录,但不会显示详细的信息,比如,文件类型、大小、修改日期和时间、权限等。

以下便是ls命令及其选项的作用说明:

# 仅列出当前目录下所有文件和目录
ls

# 每行显示一条记录,每条记录包括文件类型、大小、修改日期和时间、权限等
ls -l

# 将文件大小显示符合人类阅读习惯的格式
ls -lh

# 将使用不同的特殊字符归类不同的文件类型
ls -F

# 以长列表格式列出某个目录的信息
ls -ld /var/log

# 将递归地列出子目录的内容
ls -R /etc/sysconfig/

# 以长列表格式按文件或目录的修改时间倒序地列出文件和目录
ls -ltr

# 以长列表格式按文件大小顺序列出文件和目录
ls -ls

# 列出包括隐藏文件或目录在内的所有文件和目录,包括“.”(当前目录)和“..”(父目录)
ls -a

# 列出包括隐藏文件或目录在内的所有文件和目录,不包括“.”(当前目录)和“..”(父目录)
ls -A

输出的内容类似于-l选项,指示显示uid和gid,替代显示所有者和用户组
ls -n

cat - 连接显示文件内容

cat 命令也是 Linux 系统中最常用的命令之一。cat命令让我们可以看看文件的内容、连接文件、创建一个或多个文件和重定向输出到终端或文件。

cat命令的语法如下所示:

cat [OPTION] [FILE]...

cat常用命令如下:

# 使用 cat 命令查看文件 /etc/group 的内容
cat /etc/group

# 显示多个文件的内容
cat /etc/redhat-release /etc/issue

# -n 选项,可以显示文件内容的行号
cat -n /etc/fstab

# -b 选项和 -n 选项类似,但只标识非空白行的行号
cat -b /etc/fstab

# -e 选项,将在每一行的结尾显示“$”字符
cat -e /etc/fstab

当你只输入 cat 命令,而没有任何参数时,它只是接收标准输入的内容并在标准输出中显示。所以你在输入一行内容并回车后,会在接下来的一行显示相同的内容。你也可以重定向标准输出到一个新文件。

dd

less、more - 分屏显示文件

more命令在你使用小的 xterm 窗口时,或是想不使用文本编辑器而只是简单地阅读一个文件时是很有用的。more 命令是一个用于一次翻阅一整屏文件的过滤器。

# 查看一个文件,自动清空屏幕并显示文件开头部分
more /etc/inittab

# 指定一次显示num行
more -num /etc/inittab

more命令相比,我个人更喜欢less命令来查看文件。less命令与more命令类似,但less命令向前和向后翻页都支持,而且less命令不需要在查看前加载整个文件,即less命令查看文件更快速。

less常用命令参数如下:

-b  <缓冲区大小> 设置缓冲区的大小
-e  当文件显示结束后,自动离开
-f  强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g  只标志最后搜索的关键词
-i  忽略搜索时的大小写
-m  显示类似more命令的百分比
-N  显示每行的行号
-o  <文件名> 将less 输出的内容在指定文件中保存起来
-Q  不使用警告音
-s  显示连续空行为一行
-S  行过长时间将超出部分舍弃
-x  <数字> 将“tab”键显示为规定的数字空格
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n: 重复前一个搜索(与 / 或 ? 有关)
N: 反向重复前一个搜索(与 / 或 ? 有关)
b  向后翻一页
d  向后翻半页
h  显示帮助界面
Q  退出less 命令
u  向前滚动半页
y  向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]:   向上翻动一页

head - 显示文件头部

head命令用于打印指定输入的开头部分内容。默认情况下,打印每个指定输入的前 10 行内容。

使用-n选项可以指定打印文件的前 N 行:

# 指定打印文件的前5行
head -n 5 /etc/inittab
(或)head -5 /etc/inittab

# 打印文件的前N个字节的数据
head -c 10 /etc/inittab

tail - 显示文件尾部

tail命令和head命令相反,它打印指定输入的结尾部分的内容。默认情况下,它打印指定输入的最后 10 行内容。

使用-n选项可以指定打印文件的最后 N 行:

# 指定打印文件的后10行
tail -n 10 /etc/inittab
tail -10 /etc/inittab

# 即时打印文件中新写入的行
tail -f /var/log/messages

# --retry选项表示持续尝试打开某个文件,当你想打开一个稍后才会创建或即使不可用的文件
tail -f /tmp/debug.log --retry

file - 查看文件类型

file命令用于接收一个文件作为参数并执行某些测试,已确定正确的文件类型。

# 查看文件类型
file /etc/inittab

# 可以MIME类型的格式显示文件类型的信息
file -i  /etc/inittab

# 使用-N 选项,输出的队列可以以在文件名之后无空白填充的形式显示
file -N *

wc - 查看文件统计信息

wc命令用于查看文件的行数、单词数和字符数等信息。语法类似如下所示:

wc filename
X Y Z /etc/inittab

其中 X 表示行数,Y 表示单词数,Z 表示字节数,filename 表示文件名。

# -l选项,可以只统计文件的行数信息
wc -l /etc/inittab

# -w选项,可以只统计文件的单词数信息
wc -w /etc/inittab

# -c选项,可以只统计文件的字节数信息
wc -c /etc/inittab

# -L选项,可以只统计文件中最长的行的长度
wc -L /etc/inittab

find - 查找文件或目录

find命令用于根据你指定的参数搜索和定位文件和目录的列表。find命令可以在多种情况下使用,比如你可以通过权限、用户、用户组、文件类型、日期、大小和其他可能的条件来查找文件。

find命令常用使用和说明如下:

# 查找指定目录下的某个文件
find /etc/ -name inittab

# 在当前目录下查找名称为 inittab 的文件
find . -name inittab

# 在当前目录下,文件不区分大小写是example的所有文件
find . -iname example

# 找出当前目录下所有以 sh 结尾的文件
find . -type f -name "*.sh"

# 找出当前目录下,文件权限是 777 的所有文件
find . -type f -perm 777

# 找出当前目录下,文件权限不是 777 的所有文件
find . -type f ! -perm 777

# 找出当前目录下所有只读文件
find . -type f ! -perm /a+w

# 找出你帐号主目录下的所有可执行文件
find ~ -type f -perm /a+w

# 找出 /tmp 目录下的.log文件并将其删除:
find /tmp/ -type f -name "*.log" -exec rm -f {} \;

# 找出当前目录下的所有空文件
find . -type f -empty

# 找出当前目录下的所有空目录
find . -type d -empty

# 找出 /tmp 目录下的所有隐藏文件
find /tmp/ -type f -name ".*"

# 找出 /tmp 目录下,所有者是 root 的文件和目录
find /tmp/ -user root

# 找出 /tmp 目录下,用户组是 developer 的文件和目录
find /tmp/ -group root

# 找出你账号的主目录下,3 天前修改的文件
find ~ -type f -mtime 3

# 找出你账号的主目录下,30 天以前修改的所有文件
find ~ -type f -mtime +30

# 找出你账号的主目录下,3 天以内修改的所有文件
find ~ -type f -mtime -3

# 找出你账号的主目录下,30 天以前,60 天以内修改的所有文件
find ~ -type f -mtime +30 -mtime -60

# 找出 /etc 目录下,一小时以内变更过的文件
find /etc -type f -cmin -60

# 找出 /etc 目录下,一小时以内访问过的文件
find /etc -type f -amin -60

# 找出你账号主目录下,大小是50MB的所有文件
find ~ -type f -size 50MB

# 找出你账号主目录下,大于50MB小于100MB的所有文件
find ~ -type f -size +50MB -size -100MB

# 找出你账号主目录下,大于100MB的文件并将其删除
find ~ -type f -size +100MB -exec rm -rf {} \;

文本处理

sort - 文本排序

sort命令用于将文本文件的行排序。默认情况下,sort命令是按照字符串的字母顺序排序。

sort 的常用命令如下:

# 将文本内容按字母顺序排序
sort example.txt

# 使用 -u 选项,移除所有重复行后排序
sort -u example.txt

# 使用 -n 选项,将令数字按数值的大小排序
sort -n example.txt

# 使用 -r 选项,以倒序方式排序
sort -n -r example.txt

# 同时将 file1、file2 的内容排序
sort file1 file2

uniq - 文本去重

uniq命令用于移除或发现文件中重复的条目。

# 它将移除文件中重复的行并显示单一行
uniq example.txt

# 可以统计重复行出现的次数
uniq -c example.txt

# 使用 -d 选项,只显示文件中有重复的行并只显示一次
uniq -d example.txt

# 使用 -D 选项,显示文件中所有重复的行
uniq -D example.txt

# 使用 -u 选项,只显示文件中不重复的行
uniq -u example.txt

# 使用 -w 选项,限制 uniq 命令只比较每行的前 3 个字符是否重复
uniq -w 3 example.txt

# 使用 -s 选项,避免 uniq 命令比较每行的前 3 个字符,只比较后面的字符是否重复
uniq -s 3 example.txt

# 使用 -f 选项,避免 uniq 命令比较第一列的内容,只比较后面的字符是否重复
uniq -f 1 example.txt

tr - 替换或删除字符

tr命令主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串 1 用于查询,字符串 2 用于处理各种转换。tr刚执行时,字符串 1 中的字符被映射到字符串 2 中的字符,然后转换操作开始。

tr命令的语法如下所示:

tr [OPTION]... SET1 [SET2]

常用命令示例:

# 若要将大括号转换为小括号
tr '{}' '()' < textfile > newfile

# 若要将大括号转换成方括号
tr '{}' '\[]' < textfile > newfile

# 若要将小写字符转换成大写,请输入:
tr 'a-z' 'A-Z' < textfile > newfile

# 若要创建一个文件中的单词列表
tr -cs '[:lower:][:upper:]' '[\n*]' < textfile > newfile

# 若要从某个文件中删除所有空字符
tr -d '\0' < textfile > newfile

# 若要用单独的换行替换每一序列的一个或多个换行,请输入:
tr -s '\n' < textfile > newfile

# 要以单个“#”字符替换 <space> 字符类中的每个字符序列
tr -s '[:space:]' '[#*]'

grep - 查找字符串

grep命令用于搜索文本或指定的文件中与指定的字符串或模式相匹配的行。默认情况下,grep命令只显示匹配的行。

grep命令的语法如下所示:

grep [OPTION]... PATTERN [FILE]...
grep [OPTION]... [-e PATTERN | -f FILE] [FILE]...
# `grep`命令查找文件/etc/passwd 中帐号 blinkfox 的信息
grep blinkfox /etc/passwd

# 使用 -i 选项,强制 grep 命令忽略搜索关键字的大小写
grep -i blinkfox /etc/passwd

# 使用 -r 选项,可以递归搜索指定目录下的所有文件
grep -r blinkfox /etc/

# 使用 -w 选项,只匹配包含指定单词的行
grep -w blinkfox /etc/

# 使用 -c 选项,报告文件或文本中模式被匹配的次数
grep -c blinkfox /etc/passwd

# 使用 -n 选项,显示每一个匹配的行的行号
grep -n blinkfox /etc/passwd

# 使用 -v 选项,可以输出除匹配指定模式的行以外的其他所有行
grep -v blinkfox /etc/passwd

# 使用 --color 选项,在输出中将匹配的字符串以彩色的形式标出
grep --color blinkfox /etc/passwd

diff - 比较两个文件

diff命令用于比较两个文件,并找出它们之间的不同。diff命令的语法如下所示:

diff [OPTION]... from-file to-file

常用使用方式如下:

# 比较两个文件
diff nsswitch.conf nsswitch.conf.org

# 使用 -w 选项,比较时忽略空格
diff -w nsswitch.conf nsswitch.conf.org

# 使用 -y 选项,以并排的格式输出两个文件的比较结果
diff -y nsswitch.conf nsswitch.conf.org

使用 -c 选项,以上下对比的格式输出两个文件的比较结果
diff -c nsswitch.conf nsswitch.conf.org

Linux 和UNIX 的新手培训教程

免费的新手Linux教程

免费的UNIX 新手教程

  • UNIX Tutorial for Beginners – 来自The University of Surrey的新手指南,告诉你Unix系统最基本的特性。
  • A Basic UNIX Tutorial – 这是来自 Idaho State University 教程,主要用于Unix计算的基础,其中有一些很不错的示例和练习。
  • UNIX Training Manual – 这是一个 88页 的培训手册,主要用一些示例来教一个Unix文件系统的相关的命令。严格说来,这并不是一个教程,但也很有用。
  • UNIX Command Tutorial – 来自University of Mississippi 的教学生如果使用Unix命令和操作系统交互的课程。
  • Learn UNIX Tutorial – Soft Lookup 的一个全面的 UNIX 教程,完全可以让你从一个新手变成一个高手。
  • UNIX – The Bare Minimum – 来自 UC Davis 教授,提供了一个简单的UNIX介绍。
  • Learning About UNIX – 来自University of Toronto,提供了一些UNIX 和Linux 课程笔记。这个课程关注于UNIX 和Linux 工具。
  • What is UNIX? – 这个教程提供了一个简单的Unix介绍,以及一个初学者的论坛。

Linux 和 UNIX 专家培训教程

免费的Linux高手教程

免费的UNIX高手教程

参考&感谢


作者: 夜法之书
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 夜法之书 !
评论
数据加载中 ...
 上一篇

阅读全文

中西医的优缺点
中西医的优缺点 中西医的优缺点
中医西医谁更科学,总是争论不休,这里说说个人的一些看法,中西医都是非科学,都只是经验科学,各有各自的优缺点
2022-05-30
下一篇 

阅读全文

Doxygen入门教程
Doxygen入门教程 Doxygen入门教程
作为一个专业的开发,不会写专业的代码文档怎么行?Doxygen是专门为生成专业的代码注释文档而设计的专业工具。本文章向大家介绍Doxygen 入门教程,主要包括Doxygen 入门教程使用实例、应用技巧、基本知识点总结和需要注意事项。
2022-05-28