那么,为什么* 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#
注意:为了保存安全层并避免意外执行令人反感的命令,请勿无故使用sudo
和su
。
进入现实世界
基本导航
在文件树中可以浏览三个主要命令:
-
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
命令会使您非常困惑,因为它以原始格式显示输出而没有任何分页,因此与日志输出一起使用很不方便。 为了得到一个过滤器,通过文本一屏同时分页,你应该使用more
或less
命令,这是大同小异的。
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
封存
有时您需要备份或压缩服务器上的某些数据。
最常见的归档实用程序是tar
和zip
。 请注意,默认情况下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
如果只想查看档案中的文件列表,则可以对tar
和unzip
使用-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
来显示命令历史记录。 最好将此命令与字符串过滤器命令(例如grep
, tail
和其他命令)结合使用,以准确找到所需的内容。
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