适用于Web开发人员的* NIX Shell命令

那么,为什么* NIX以及为什么需要转到控制台?

根据W3Techs的统计,Unix被已知其操作系统的网站中的68%使用。 这意味着,如果您是Web开发人员,则您的代码很可能在Linux服务器上运行。 并且至少您需要知道如何在Unix和Linux系统上配置和调试代码。 让我们找出在命令行中感到自在所需的知识。

基础

* NIX基本命令由三个组件组成:

  • 要运行的命令或程序
  • 更改或指定命令行为的选项
  • 运行命令所需的参数或输入数据

例如,如果需要获取目录/var/www中的文件列表,则需要使用参数/var/www运行命令ls 。 要将文件的大小添加到输出中,您需要添加-s选项,最终命令将如下所示:

ls -s /var/www

I / O重定向和管道

许多* NIX命令使用文本输入和输出,您可以对其进行操作,其最大特点是您可以使用重定向将命令的输出结果发送到文件,甚至可以将一个命令的输出传递给文件的输入。使用管道的另一个命令。 例如,我们可以将上一个示例中的命令输出到文件中:

ls -s /var/www > /var/www/files.txt

此命令将创建或删除文件/var/www/files.txt并在/var/www目录中输出文件列表。 以下是标准I / O重定向和管道的列表:

  • >将命令的输出重定向到磁盘上的文件。 该文件将被删除并覆盖。
  • >>相同的重定向,但附加了输出文件。
  • <从文件获取命令输入。
  • | 将一个命令的输出传递到另一命令的输入。
  • tee两者都将输出重定向到文件,并将其传递到管道中的下一个命令。

主要命令

要获取命令的手册页,请运行man 。 手册页遵循通用布局,并且可能包含名称,简介,描述和用法示例。 这将显示chmod命令的文档:

man chmod

要执行一些命令,例如保存配置或重新启动进程,您需要以超级用户身份运行它们。 为此,您需要在命令前添加sudo

user@server:/var/www$ chmod 777 log
chmod: changing permissions of ‘log’: Operation not permitted
user@server:/var/www$ sudo chmod 777 log
sudo chmod 777 log

如果您需要以超级用户身份执行一堆命令,则可以使用su或切换用户命令。

user@server:/var/www$ su
Password:
root@server:/var/www#

注意:为了保存安全层并避免意外执行令人反感的命令,请勿无故使用sudosu

进入现实世界

基本导航

在文件树中可以浏览三个主要命令:

  • pwd打印当前工作目录的名称
  • cd更改目录
  • ls列出目录内容

这是在终端的输出中使用这些命令的示例:

user@server:~$ pwd
/home/user
user@server:~$ cd /var/www
user@server:/var/www$ ls -alF
total 16
drwxr-xr-x  5 root    root    4096 Jan 22 09:45 ./
drwxr-xr-x 14 root    root    4096 Jan 22 09:38 ../
drwxr-xr-x  2 root    root    4096 Jan 22 09:45 html/
drwxr-xr-x  3 root    root    4096 Jan 22 09:45 log/
drwxrwxrwx  1 user    user    442  Mar 24 12:22 testing/

搜索文件

find命令可以在目录层次结构中搜索文件。 该命令功能非常强大,可以按名称,访问权限,日期和大小搜索文件和目录。

使用-type选项在/var/www目录中找到所有带有“ logs”名称的目录:

find /var/www -type d -name logs

要在当前目录中搜索PHP文件,请添加-name选项:

find . -type f -name "*.php"

使用-perm选项查找具有定义权限的文件:

find . -type f -perm 0777 -print

查找所有大于500MB的文件:

find / -size +500M

当然,您可以将所有这些选项组合在一个命令中,而这仅仅是find命令的基础,它是用于搜索文件的非常强大的工具。 使用手册页获取更多信息。

处理文件和文件夹

在* NIX系统中,有五个用于处理文件和文件夹的主要命令:

  • touch用于更改现有文件和目录的时间戳,但这也是创建新文件的最简单方法
  • mkdir创建目录
  • cp复制文件和目录
  • mv移动或重命名文件和目录
  • rm删除文件和文件夹

下一个示例将创建一个文件index.html ,将此文件复制到/var/www的新目录,然后删除源文件。

root@localserver:~# touch index.html
root@localserver:~# mkdir /var/www/newdir
root@localserver:~# cp index.html /var/www/newdir/
root@localserver:~# rm index.html

另一个很棒的命令是ln ,它用于在文件之间建立链接。 命令ln通常用于创建符号链接以启用虚拟主机:

sudo ln -s /etc/apache2/sites-available/newvirtualhost.com.conf /etc/apache/sites-enabled/ newvirtualhost.com.conf

更改访问权限

要更改文件所有者和组,请使用chown 。 创建Web应用程序的新虚拟主机时,请不要忘记将所有权授予apache用户:

sudo chown -R www-data:www-data /var/www/newvirtualhost.com

有时,应用程序的缓存或日志目录必须对所有用户都可写,因此您需要使用chmod命令将访问模式更改为777。 添加-R选项可为所有嵌套文件和文件夹添加权限。

sudo chmod -R 777 /var/www/private/cache

如果只想使文件可执行,则将chmod+x选项一起使用。

sudo chmod +x /var/www/private/backup.sh

文件读取

要在控制台中查看文件,可以使用cat命令。 使用cat ,您可以使用其他参数来串联文件的内容,还可以在文件名中使用mask。

cat /etc/apache2/apache2.conf
cat /etc/apache2/apache2.conf /etc/apache2/ports.conf 
cat /etc/apache2/mods-enabled/*

但是cat命令会使您非常困惑,因为它以原始格式显示输出而没有任何分页,因此与日志输出一起使用很不方便。 为了得到一个过滤器,通过文本一屏同时分页,你应该使用moreless命令,这是大同小异的。

less /etc/apache2/apache2.conf
cat /etc/apache2/mods-enabled/* | less

另一个有用的命令是tail ,它被创建为输出文件的最后一部分。 该命令非常适合查看日志历史记录。 缺省情况下,此tail命令将打印最后10行,您可以使用-n参数更改此数字。

tail /var/log/apache2/error.log
tail -n 25 /var/log/apache2/error.log

但是,例如,如果有一堆日志文件,则需要更强大的功能来进行正确的搜索。 类似于grep程序-一种程序,它从标准输入中读取内容,根据模式对每一行进行测试,然后将与该模式匹配的行写入标准输出。 通过将它与cat和管道结合使用,您将获得想要的东西。

如果要过滤输出的文本行,可以使用grep命令:

grep notice /var/log/apache2/error.log
cat /var/log/apache2/*.log | grep "shutting down"

如您所见, grep非常适合在管道中使用。 在此示例中,最后一条命令将从日志文件中输出所有包含“ shutdown”字符串的行。

文件编辑

如果要在控制台模式下编辑文本文件,则可以使用三种最受欢迎​​的文本编辑器之一:

  • GNU nano ,一个小巧友好的默认文本编辑器,是完成基本任务的理想选择
  • Vim ,一种改进的程序员文本编辑器,功能最强大,但对初学者来说却很复杂
  • mcedit ,来自Midnight Commander的全功能窗口编辑器,易于使用,但默认情况下未安装在* NIX系统上

比较它们并做出选择:

nano /var/log/apache2/error.log
vim /var/log/apache2/error.log
mcedit /var/log/apache2/error.log

封存

有时您需要备份或压缩服务器上的某些数据。

最常见的归档实用程序是tarzip 。 请注意,默认情况下zip命令可能未安装在服务器上。

您可以使用以下命令创建档案:

tar -zcvf archive-name.tar.gz directory-or-file-name
tar -jcvf archive-name.tbz2 directory-or-file-name
zip archive-name.zip directory-or-file-name

如果只想查看档案中的文件列表,则可以对tarunzip使用-l选项:

tar -ztvf archive-name.tar.gz
tar -jtvf archive-name.tbz2
unzip -l archive-name.zip

或提取一些源文件:

tar -zxvf archive-name.tar.gz
tar -jxvf archive-name.tbz2
zip archive-name.zip

计划任务

如果要安排脚本定期运行,则需要使用Cron实用程序,该实用程序由cron表驱动—一个配置文件,该文件指定shell命令以给定的时间表定期运行。 维护cron表的命令是crontab

使用选项-l调用crontab将显示您的cron表。

另外,提供了-u选项以指定正在使用crontab的用户的名称。 如果要运行Web应用程序的任务,最好为用户www-data编辑crontab。

user@server:~$ sudo crontab -lu www-data
# m h  dom mon dow   command
*/5 * * * * php5 /var/www/yii do/tasks >> /var/www/tasks.log
00 15 * * 1-5 /var/www/backuper.sh

在此输出中,您可以看一下cron表的示例。 如您所见,每行都是按分钟,小时,每月的某天,某月和某周的某天安排的。 每个字段可能是一个星号,表示该字段的每个值。 您也可以使用逗号和连字符来使用集合和范围。 在带斜线的范围后面指定在范围内跳过数字值。 在此示例中,第一个命令每五分钟运行一次,第二个命令从星期一至星期五15:00运行。

要编辑此列表,请使用-e键而不是-l运行crontab。 cron列表将在您的默认编辑器中打开。 使用-r选项清除cron列表。

性能监控

命令顶部显示系统摘要信息,并提供正在运行的系统进程的动态实时视图。 按Shift-M按内存使用量对进程进行排序,或按Shift-P按CPU使用率进行排序。

top - 21:33:02 up 308 days, 21:24,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  87 total,   1 running,  86 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:    501800 total,   471348 used,    30452 free,    49672 buffers
KiB Swap:  4194300 total,    56192 used,  4138108 free.   149488 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND     
16269 www-data  20   0  348592  38884  12044 S  0.0  7.7   0:02.42 php5        
26533 www-data  20   0  409516  38488  24312 S  0.0  7.7   1:00.04 php5-fpm    
 1076 mysql     20   0  887824  32748   1616 S  0.0  6.5 276:46.59 mysqld      
  862 syslog    20   0  256612  31428    368 S  0.0  6.3  32:45.88 rsyslogd    
18901 root      20   0  105632   4316   3248 S  0.0  0.9   0:00.04 sshd        
25393 www-data  20   0   87356   4312   1564 S  0.0  0.9   4:46.92 nginx       
27846 memcache  20   0  328464   3828    252 S  0.0  0.8   1:04.30 memcached

要显示系统中的可用内存量,请使用free命令。 添加-h选项以人类可读的格式显示输出字段。

user@server:~$ free -h
             total       used       free     shared    buffers     cached
Mem:          490M       453M        36M        23M        46M       140M
-/+ buffers/cache:       265M       224M
Swap:         4.0G        54M       3.9G

另一个有用的命令是df ,它是一个报告文件系统磁盘空间使用情况的命令。 您可以使用-a选项调用它以显示服务器的所有文件系统。 另外,不要忘记为人类可读的格式添加-h选项。

user@server:~$ df -ah
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  6.3G   13G  34% /
udev            235M  4.0K  235M   1% /dev
tmpfs            50M  344K   49M   1% /run

命令行历史

您可以使用!! 命令重复上一个命令,或使用sudo !! 如果您忘记使用sudo运行命令。

user@server:/var/www$ chmod 777 log
chmod: changing permissions of ‘log’: Operation not permitted
user@server:/var/www$ sudo !!
sudo chmod 777 log

如果您忘记了命令的语法或对键入大型命令查询感到懒惰,则可以使用history来显示命令历史记录。 最好将此命令与字符串过滤器命令(例如greptail和其他命令)结合使用,以准确找到所需的内容。

history | tail
history | grep crontab
history | egrep -i 'ssh|ftp'

结论

使用控制台不是火箭科学。 Unix和Linux系统设计简单,文档完善,因此易于理解和使用。 我希望本文能使您对命令行非常满意,并带您进入使用命令行管理Web应用程序的新层次。

如果您有任何疑问,或者想分享自己喜欢的控制台命令,请不要在文章下方发表评论。

翻译自: https://code.tutsplus.com/articles/useful-nix-shell-commands-for-web-developers--cms-26161

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值