基本命令

  • hostname -i: 查看服务器本地IP

  • find: find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    # find的使用格式如下:
    
    $ find <指定目录> <指定条件> <指定动作>
      - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
      - <指定条件>: 所要搜索的文件的特征。
      - <指定动作>: 对搜索结果进行特定的处理。
    如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。
    
    # find的使用实例:
    
    $ find ./ -name 'my*'
    搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
    
    $ find ./ -name 'my*' -ls
    搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
    
    $ find . -type f -mmin -10
    搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。
    
  • nohup: 不挂断地运行命令,该命令的一般形式为:nohup command &

    如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思(no hangup)。

  • dmesg: 查看系统日志错误

  • tail命令用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。

    1
    
    tail -f zsm.log  # 显示文件最新追加的内容
    
  • 如何判断Linux是32位还是64位:getconf LONG_BIT

  • 查看linux系统发行版本的名称及其内核版本号的命令:hostnamectl 或 cat /etc/redhat-release 或 cat /proc/version 或 cat /etc/issue

  • 文件上传下载

    1
    2
    3
    
    yum install lrzsx
    sz path/to/file // 下载文件,默认下载位置看 secure 等设置
    rz -y // 按Enter键选择文件上传到当前目录
    
  • sudo

    1
    2
    
    sudo su // 当前用户切换为超级用户
    sudo su - www // 切换系统用户为 www 用户
    
  • ps 命令就是最基本同时也是非常强大的进程查看命令。

    1
    2
    
    ps aux | grep php // ps 与grep 常用组合用法,查找特定进程
    ps -A // 查看系统所有进程
    
  • top -c // top命令提供了系统的活动监视器, 点击大写字母M可以设置按占用内存大小排序,小写字母e设置进程占用内存单位,大写字母E设置总体内存使用情况单位

  • chmod:文件夹或文件授权

    1
    2
    3
    
    sudo chmod -R 777 /var/www (-R表示递归子文件夹及子文件)
    
    chmod +x ./test.sh #使脚本具有执行权限
    

    文件详细信息中 drwxr-xr-x 所代表的意思

    d :第一位表示文件类型,d是目录文件. l是链接文件. -是普通文件. p是管道

    rwx :第2-4位表示这个文件的属主拥有的权限。r是读【4】. w是写【2】. x是执行【1】(例子:777:表示所有用户和组拥有读写执行权限,766表示拥有文件用户拥有读写执行权限,而该用户组和其他用户只有读写权限)

    r-x :第5-7位表示和这个文件属主所在同一个组的用户所具有的权限

    r-x :第8-10位表示其他用户所具有的权限

    权限的计算方法,使用二进制:

    例如“rwx”,二进制就是111,“2的2次方”+“2的1次方”+“2的0次方”=7;

    “r-x",二进制就是101,“2的2次方”+“0的1次方”+“2的0次方”=3

  • chown:修改当前文件所有者

    1
    
    chown -R hadoop:hadoop path/to/file
    
  • 解压缩

    1
    2
    3
    
    tar -czf lnmp.tar.gz lnmp/   //将 lnmp 文件打包并且将其用 gzip 压缩,名字为 lnmp.tar.gz
    tar xvf lnmp.tar.gz  // 解压
    unzip wx.zip  // 解压
    
  • telnet 命令有很多用途,比如确定远程服务的状态,比如确定远程服务器的某个端口是否能访问。

    1
    
    telnet 63.172.25.18 3306 回车  # 测试3306端口是否能访问
    
  • 监听端口是否启用/占用

    1
    2
    3
    
    netstat -apn | grep 11211   # 监听11211端口是否启用,11211为memcached占用的端口
    lsof -i:端口号 # 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000
    lsof -iTCP:80 | grep LISTEN # 查看 80 端口被哪个应用占用了
    
  • history

    1
    2
    3
    4
    
    history :查看最新历史命令
    history | more : 查看最初历史命令,可以搜索
    history | more +100 : 从第100条命令开始看
    history | grep php : 搜素php相关命令
    
  • wget: 是一个下载文件的工具

    1
    
    wget [参数] [URL地址]
    
  • pwd: 命令用于显示当前目录

  • cp & mv & rm

    1
    2
    3
    
    cp -r sourse_file_path destinct_file_path // 复制文件夹及子文件到目标文件夹
    mv -i 源文件或目录 目标文件或目录 // 文件移动或重命名
    rm -rf direct/ // 删除文件夹或文件
    
  • 服务器查看

    1
    2
    3
    
    查看硬盘使用情况:df -h(有时硬盘空间不够会导致服务器奔溃)
    查看cpu的方法: cat /proc/cpuinfo
    查看内存的方法: free -m 或者 cat /proc/meminfo
    
  • ls -al 等价于 ll

  • mkdir -p resources/views/articles // 递归创建文件夹

  • curl

    curl命令文章

    -i: 输出时包括protocol头信息

    -X: 指定请求method

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    # get
    curl -i -X GET http://127.0.0.1:9200
    
    # post
    curl -i -X POST http://127.0.0.1:8888/user/login -H 'content-type: application/json' -d '{"username":"admin","password":"123456"}'
    
    # 保存二进制内容到文件
    curl --location 'https://xxx/url/content' \
    --header 'Content-Type: application/json' \
    --data '{
        "url": "https://i2.sinaimg.cn/travel/ul/2010/0102/U3325P704DT20100102104850.jpg"
    }' --output 111.png
    
    # 安装命令
    apk add curl
    
    # 查ip/查IP地址:查询当前服务器ip
    curl cip.cc
    curl -L ip.tool.lu
    
    # 查看请求某个链接的响应时长
    curl -o /dev/null -s -w %{http_code}---%{content_type}---%{time_namelookup}---%{time_namelookup}---%{time_connect}---%{time_starttransfer}---%{time_total}---%{speed_download}"\n"  "https://www.baidu.com"
    
  • more/less

    more功能类似 cat,cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more命令从前向后读取文件,因此在启动时就加载整个文件

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。 在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按 键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

crontab

1
2
3
# 脚本代码更新后,crontab 不用操作需重启
crontab -l # 查看当前的计划任务
crontab -e # 编辑计划任务

crontab

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。整点必触发,如设定*/35,则触发时间点为 *:00, *:35
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

重定向

  1. 命令 » 文件 2>&1 :以追加的方式,把正确输出和错误输出都保存在文件中。
  2. 命令 &> 文件名:以覆盖的方式将正确和错误输出都保存在文件中。
  3. 命令 &» 文件名:以追加的方式将正确和错误输出都保存在文件中。
  4. 命令 » 文件A 2» 文件B:正确的输出到A文件中,错误的输出到B文件中。

管道

命令格式:命令A|命令B,即命令1的正确输出作为命令B的操作对象。

多命令顺序执行

  1. 命令1;命令2:执行完1再执行2,命令之间没有任何逻辑联系
  2. 命令1&&命令2:&&是一个“自私”符号,即命令1正确我命令2才执行,你错误了我2就不执行。
  3. 命令1||命令2:是一个备胎符号,即1不行了2就上,1行的话我就不执行。

常用文本处理命令

  • awk是一个非常棒的数字处理工具。相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分为数个“字段”来处理。运行效率高,而且代码简单,对格式化的文本处理能力超强。先来一个例子:
  • sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作

脚本后端挂起方式

  1. &

    当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上& 实现后台运行。例如:sh test.sh &

    command » out.file 2>&1 & # 脚本输出日志保存到文件

  2. GNU Screen

    GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。

    GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

    会话恢复

    只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。

    多窗口

    在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。

    会话共享

    Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

    常用 screen 参数

    1
    2
    3
    4
    5
    
    screen -S yourname # 新建一个叫yourname的session,并进入这个session
    screen -ls # 列出当前所有的session
    screen -r yourname # 回到yourname这个session
    screen -d yourname # 远程detach某个session(挂起session,切换到后台)
    screen -d -r yourname # 结束当前session并回到yournamed这个session
    

    删除创建的screen session:

    • 在screen session中执行exit
    • 有时远程的进程没有响应,用screen -r过去也不能杀掉,这是想把会话中止,方法如下: screen -S some_name -X quit

    快捷键

    Ctrl-a键 d键 -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。

rsync

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

使用 Git 和 rsync 更新生产环境代码的 ssh 脚本

1
2
3
4
5
#!/bin/bash
cd /data/git/data/qy_admin/
git pull
chown -R www:www *
/usr/bin/rsync -avzhP --delete --exclude='.git/' --exclude='.gitignore' --exclude='.svn/' --exclude='.idea' --exclude='application/cache/' --exclude='application/config/database.php' --exclude='application/logs/' --exclude='application/controllers/defaultcontroller.php' --exclude='upload/' --exclude='sql/' /data/git/data/qy_admin/  192.168.1.1:/data/wx/www/

用户和用户组

  • /etc/passwd: 存放用户信息
  • /etc/shadow: 存放用户加密信息
  • /etc/group: 存放用户组信息
  • /etc/gshadow: 存放用户组加密信息

回车和换行

  • 在linux/mac下,回车是\r,代表结束的意思。换行是\n,代表换行的意思。
  • 在windows下,一般换行就是指回车+换行两种意思,即\r\n。

软件包管理器

  • yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

kill vs pkill

kill [参数] [进程id]

kill:杀死单个进程

pkill: 看到pkill想到了什么?没错pgrep和kill!pkill=pgrep+kill。

下面是常用的信号:

  • HUP 1 终端断线
  • INT 2 中断(同 Ctrl + C)
  • QUIT 3 退出(同 Ctrl + \)
  • TERM 15 终止
  • KILL 9 强制终止
  • CONT 18 继续(与STOP相反, fg/bg命令)
  • STOP 19 暂停(同 Ctrl + Z)
1
2
3
4
5
6
7
8
# 删除占用 443 端口的进程
kill -15 $$(lsof -t -i:443) &

# -9 强制杀掉进程
kill –9 3268

#删除 logic.go 这个名称的相关进程
pkill -f main/logic.go &

shell

&

& 放在启动参数后面表示设置此进程为后台进程

默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&‘实现这个目的。

1
git clone git@gitlab.xxx.cn:xxx/c.git rename-c &

&&

shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 ? 中。当?中。当? == 0 时,表示执行成功;当 $? == 1 时(我认为是非0的数,返回值在0-255间),表示执行失败。

command1 && command2 [&& command3 …]

  1. 命令之间使用 && 连接,实现 逻辑与的功能。
  2. 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
  3. 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。

||

command1 || command2 [|| command3 …]

1 命令之间使用 || 连接,实现 逻辑或的功能。 2 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。 3 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。

;

command1; command2 [; command3 …]

分号是指无论前面的命令是否执行成功,都继续继续下一条命令。(等价于直接换行,变多条命令)

\

换行符,一行命令过长时建议换行