热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pstree和ss命令详解

pstree查看进程树将所有进程以树状形式显示,表示进程间的关系以init进程(PID为1)为根或者指定PID的进程为根init进程,它是内核启动的第一个用户级进程pstree-V
pstree查看进程树

将所有进程以树状形式显示,表示进程间的关系
以init进程(PID为1)为根或者指定PID的进程为根
init进程,它是内核启动的第一个用户级进程

pstree -V查看版本,这里介绍22.15

root@ubuntusvn:~# pstree -V
pstree (PSmisc) 22.15
版权所有 (C) 1993-2009 Werner Almesberger 和 Craig Small

PSmisc 无任何保证。
该程序为自由软件,欢迎你在 GNU 通用公共许可证(GPL) 下重新发布。
详情可参阅 COPYING 文件。

相同进程或线程合并显示,进程名前有相同进程的数量,只显示进程名,进程的子线程用大括号{}表示

root@ubuntusvn:~# pstree 
init─┬─acpid
     ├─atd
     ├─cron
     ├─dbus-daemon
     ├─6*[getty]
     ├─httpd───10*[httpd]
     ├─irqbalance
     ├─mysqld───149*[{mysqld}]
     ├─nginx───6*[nginx]
     ├─php5-fpm───5*[php5-fpm]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─snmpd
     ├─sshd───sshd───bash───pstree
     ├─su───java───66*[{java}]
     ├─udevd───2*[udevd]
     ├─upstart-socket-
     ├─upstart-udev-br
     ├─vim
     ├─vsftpd
     ├─whoopsie───{whoopsie}
     └─wrapper-linux-x─┬─java───56*[{java}]
                       └─{wrapper-linux-x}

pstree -n 按进程号排序

root@ubuntusvn:~# pstree -n
init─┬─upstart-udev-br
     ├─udevd───2*[udevd]
     ├─vsftpd
     ├─upstart-socket-
     ├─sshd───sshd─┬─bash
     │             └─bash───pstree
     ├─rsyslogd───3*[{rsyslogd}]
     ├─dbus-daemon
     ├─6*[getty]
     ├─cron
     ├─atd
     ├─acpid
     ├─irqbalance
     ├─whoopsie───{whoopsie}
     ├─wrapper-linux-x─┬─{wrapper-linux-x}
     │                 └─java───56*[{java}]
     ├─httpd───10*[httpd]
     ├─mysqld───76*[{mysqld}]
     ├─su───java───66*[{java}]
     ├─php5-fpm───5*[php5-fpm]
     ├─snmpd
     ├─vim
     └─nginx───6*[nginx]

pstree -p显示进程及其子线程,并且显示PID
pstree -c显示进程及其子线程,与pstree -p相同,只是不显示PID

root@ubuntusvn:~# pstree -p
init(1)─┬─acpid(1040)
        ├─atd(1039)
        ├─cron(1038)
        ├─dbus-daemon(968)
        ├─getty(1021)
        ├─getty(1027)
        ├─getty(1031)
        ├─getty(1032)
        ├─getty(1035)
        ├─getty(2519)
        ├─httpd(1635)─┬─httpd(980)
        │             ├─httpd(2443)
        │             ├─httpd(2736)
        │             ├─httpd(3571)
        │             ├─httpd(3804)
        │             ├─httpd(5208)
        │             ├─httpd(5223)
        │             ├─httpd(5334)
        │             ├─httpd(30936)
        │             └─httpd(31365)
        ├─irqbalance(1140)
        ├─mysqld(2229)─┬─{mysqld}(2241)
        │              ├─{mysqld}(2242)
        │              ├─{mysqld}(2243)
        │              ├─{mysqld}(2244)
        │              ├─{mysqld}(2245)
        │              ├─{mysqld}(2246)
        │              ├─{mysqld}(2247)
        │              ├─{mysqld}(2248)
        │              ├─{mysqld}(2249)
        │              ├─{mysqld}(2250)
        │              ├─{mysqld}(2252)
        │              ├─{mysqld}(2253)
        │              ├─{mysqld}(2254)
        │              ├─{mysqld}(2255)
        │              ├─{mysqld}(2264)
        │              ├─{mysqld}(9669)
        │              ├─{mysqld}(11878)
        │              ├─{mysqld}(11881)
        │              ├─{mysqld}(11905)
        │              ├─{mysqld}(11907)
        │              ├─{mysqld}(11909)
        │              ├─{mysqld}(11910)
........

pstree -p [PID] 以指定PID的进程为根,显示进程名和进程号

root@ubuntusvn:~# pstree -p 30395
nginx(30395)─┬─nginx(30396)
             ├─nginx(30397)
             ├─nginx(30398)
             ├─nginx(30399)
             ├─nginx(30400)
             └─nginx(30401)

pstree -u显示进程所属用户名

root@ubuntusvn:~# pstree -u
init─┬─acpid
     ├─atd(daemon)
     ├─cron
     ├─dbus-daemon(messagebus)
     ├─6*[getty]
     ├─httpd(svnuser)───10*[httpd]
     ├─irqbalance
     ├─mysqld(mysql)───71*[{mysqld}]
     ├─nginx───6*[nginx(nginx)]
     ├─php5-fpm───5*[php5-fpm(www-data)]
     ├─rsyslogd(syslog)───3*[{rsyslogd}]
     ├─snmpd(snmp)
     ├─sshd───sshd───bash───pstree
     ├─su(artifactory)───java───66*[{java}]
     ├─udevd───2*[udevd]
     ├─upstart-socket-
     ├─upstart-udev-br
     ├─vim
     ├─vsftpd
     ├─whoopsie(whoopsie)───{whoopsie}
     └─wrapper-linux-x(svnuser)─┬─java───56*[{java}]
                                └─{wrapper-linux-x}

pstree -a 显示每个程序的完整指令,包含路径,可能显示不全,配合-l才完整显示

root@ubuntusvn:~# pstree -a
init    
  ├─acpid -c /etc/acpi/events -s /var/run/acpid.socket
  ├─atd
  ├─cron
  ├─dbus-daemon --system --fork --activation=upstart
  ├─getty -8 38400 tty4
  ├─getty -8 38400 tty5
  ├─getty -8 38400 tty2
  ├─getty -8 38400 tty3
  ├─getty -8 38400 tty6
  ├─getty -8 38400 tty1
  ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   └─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  ├─irqbalance
  ├─mysqld
  │   └─96*[{mysqld}]
  ├─nginx
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   └─nginx                   
  ├─php5-fpm      
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   └─php5-fpm                                         
  ├─rsyslogd -c5
  │   └─3*[{rsyslogd}]
  ├─snmpd -Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid
  ├─sshd -D
  │   └─sshd    
  │       └─bash
  │           └─pstree -a
  ├─su - artifactory --shell=/bin/sh -c exec /tar/artifactory-2.5.1.1/bin/artifactory.init /tar/artifactory-2.5.1.1/etc/jetty.xml >>/tar/artifactory-2.5.1.1/logs/consoleout.log 2>&1
  │   └─java -server -Xms1g -Xmx1g -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=64M -XX:MaxPermSize=128M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31-XX:+Use
  │       └─66*[{java}]
  ├─udevd --daemon
  │   ├─udevd --daemon
  │   └─udevd --daemon
  ├─upstart-socket- --daemon
  ├─upstart-udev-br --daemon
  ├─vim erp.conf.sav
  ├─vsftpd
  ├─whoopsie
  │   └─{whoopsie}
  └─wrapper-linux-x /opt/csvn/bin/../data/conf/csvn-wrapper.conf wrapper.syslog.ident=csvn wrapper.pidfile=/opt/csvn/bin/../data/run/csvn.pid wrapper.name=csvnwrapper.displayname
      ├─java -XX:MaxPermSize=128m -Djetty.home=../appserver -Djetty.port=3343 -Djetty.ssl.port=4434 -Xms64m -Xmx512m -Djava.library.path=../lib -classpath ../lib/wrapper.jar-Dwrapper
      │   └─56*[{java}]
      └─{wrapper-linux-x}

pstree -l 不截断长行,一般与-a连用,显示完整的命令路径

root@ubuntusvn:~# pstree -al
init
  ├─acpid -c /etc/acpi/events -s /var/run/acpid.socket
  ├─atd
  ├─cron
  ├─dbus-daemon --system --fork --activation=upstart
  ├─getty -8 38400 tty4
  ├─getty -8 38400 tty5
  ├─getty -8 38400 tty2
  ├─getty -8 38400 tty3
  ├─getty -8 38400 tty6
  ├─getty -8 38400 tty1
  ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   ├─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  │   └─httpd -f /opt/csvn/data/conf/httpd.conf -k graceful
  ├─irqbalance
  ├─mysqld
  │   └─76*[{mysqld}]
  ├─nginx
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   ├─nginx                   
  │   └─nginx                   
  ├─php5-fpm      
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   ├─php5-fpm                                         
  │   └─php5-fpm                                         
  ├─rsyslogd -c5
  │   └─3*[{rsyslogd}]
  ├─snmpd -Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid
  ├─sshd -D
  │   └─sshd
  │       ├─bash
  │       └─bash
  │           └─pstree -al
  ├─su - artifactory --shell=/bin/sh -c exec /tar/artifactory-2.5.1.1/bin/artifactory.init /tar/artifactory-2.5.1.1/etc/jetty.xml >>/tar/artifactory-2.5.1.1/logs/consoleout.log 2>&1
  │   └─java -server -Xms1g -Xmx1g -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=64M -XX:MaxPermSize=128M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Djava.awt.headless=true -XX:NewSize=512m -XX:MaxNewSize=512m -XX:-UseConcMarkSweepGC -XX:+UseParNewGC -server -Djetty.home=/tar/artifactory-2.5.1.1 -Dartifactory.home=/tar/artifactory-2.5.1.1 -Dfile.encoding=UTF8 -cp /tar/artifactory-2.5.1.1/artifactory.jar:/tar/artifactory-2.5.1.1/lib/jetty-ajp-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-continuation-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-http-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-io-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-security-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-server-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-servlet-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-util-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-webapp-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/jetty-xml-7.0.2.v20100331.jar:/tar/artifactory-2.5.1.1/lib/servlet-api-2.5.jar:/tar/artifactory-2.5.1.1/lib/wrapper.jar org.artifactory.standalone.main.Main /tar/artifactory-2.5.1.1/etc/jetty.xml
  │       └─66*[{java}]
  ├─udevd --daemon
  │   ├─udevd --daemon
  │   └─udevd --daemon
  ├─upstart-socket- --daemon
  ├─upstart-udev-br --daemon
  ├─vim erp.conf.sav
  ├─vsftpd
  ├─whoopsie
  │   └─{whoopsie}
  └─wrapper-linux-x /opt/csvn/bin/../data/conf/csvn-wrapper.conf wrapper.syslog.ident=csvn wrapper.pidfile=/opt/csvn/bin/../data/run/csvn.pid wrapper.name=csvn wrapper.displayname=CSVN Console wrapper.daemOnize=TRUE wrapper.statusfile=/opt/csvn/bin/../data/run/csvn.status wrapper.java.statusfile=/opt/csvn/bin/../data/run/csvn.java.status
      ├─java -XX:MaxPermSize=128m -Djetty.home=../appserver -Djetty.port=3343 -Djetty.ssl.port=4434 -Xms64m -Xmx512m -Djava.library.path=../lib -classpath ../lib/wrapper.jar -Dwrapper.key=fbjCafq7XJRD2XTW -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.disable_console_input=TRUE -Dwrapper.pid=1295 -Dwrapper.version=3.4.1 -Dwrapper.native_library=wrapper -Dwrapper.service=TRUE -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1 org.tanukisoftware.wrapper.WrapperJarApp ../appserver/start.jar
      │   └─56*[{java}]
      └─{wrapper-linux-x}

pstree -A 用 ASCII 画线符

root@ubuntusvn:~# pstree -A
init-+-acpid
     |-atd
     |-cron
     |-dbus-daemon
     |-6*[getty]
     |-httpd---10*[httpd]
     |-irqbalance
     |-mysqld---86*[{mysqld}]
     |-nginx---6*[nginx]
     |-php5-fpm---5*[php5-fpm]
     |-rsyslogd---3*[{rsyslogd}]
     |-snmpd
     |-sshd---sshd---bash---pstree
     |-su---java---66*[{java}]
     |-udevd---2*[udevd]
     |-upstart-socket-
     |-upstart-udev-br
     |-vim
     |-vsftpd
     |-whoopsie---{whoopsie}
     `-wrapper-linux-x-+-java---56*[{java}]
                       `-{wrapper-linux-x}

pstree -h 高亮显示当前正在使用的进程
技术图片

pstree -H [PID] 高亮显示 "进程号" 指定的进程及其父进程
技术图片

pstree -s [PID] 显示所选进程的父级进程

root@ubuntusvn:~# pstree -s 5707
init───su───java───{java}

pstree -G 使用 VT100 划线符
pstree -U 使用 UTF-8 (Unicode) 划线符

ss获取socket统计信息

它可以显示和netstat类似的内容。能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。
ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。

ss -h ss的使用帮助

root@ubuntusvn:~# ss -h
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help           this message
   -V, --version        output version information
   -n, --numeric        don‘t resolve service names
   -r, --resolve       resolve host names
   -a, --all            display all sockets
   -l, --listening      display listening sockets
   -o, --options       show timer information
   -e, --extended      show detailed socket information
   -m, --memory        show socket memory usage
   -p, --processes      show process using socket
   -i, --info           show internal TCP information
   -s, --summary        show socket usage summary

   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet display PACKET sockets
   -t, --tcp            display only TCP sockets
   -u, --udp            display only UDP sockets
   -d, --dccp           display only DCCP sockets
   -w, --raw            display only RAW sockets
   -x, --unix           display only Unix domain sockets
   -f, --family=FAMILY display sockets of type FAMILY

   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

   -D, --diag=FILE     Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]

ss -V ss版本

root@ubuntusvn:~# ss -V
ss utility, iproute2-ss111117

ss -n 不解析服务名称,显示服务对应的端口号,比如mysql:3306;https:443;ssh:22。Ss命令直接显示服务名称

[root@localhost ~]# ss
状态    接收队列  发送队列    本地地址:端口号           对等地址:端口号
State      Recv-Q        Send-Q      Local Address:Port           Peer Address:Port
ESTAB      0         0           192.168.1.191:https          192.168.5.89:58426
......
[root@localhost ~]# ss -n
State      Recv-Q        Send-Q      Local Address:Port           Peer Address:Port
ESTAB      0         0           192.168.1.191:443           192.168.5.89:58426
......

ss -r 解析主机名

root@ubuntusvn:~# ss -r
State      Recv-Q   Send-Q     Local Address:Port       Peer Address:Port   
ESTAB      0         0          ubuntusvn:https        192.168.5.89:58426
......

ss -l 统计处于监听状态的socket,默认情况下它们是被忽略的

root@ubuntusvn:~# ss -l
State      Recv-Q   Send-Q    Local Address:Port     Peer Address:Port   
LISTEN     0            50        *:3306                    *:*       
LISTEN     0            50        :::3343                   :::*       
LISTEN     0        511       *:http                    *:*       
LISTEN     0            100       :::4434                   :::*       
LISTEN     0        511       *:9876                    *:*       
LISTEN     0        32        *:ftp                 *:*       
LISTEN     0        128       :::ssh                    :::*       
LISTEN     0        128       *:ssh                 *:*       
LISTEN     0        511       *:https                   *:*       
LISTEN     0        511       *:4444                    *:*       
LISTEN     0        1         127.0.0.1:32000           *:*       
LISTEN     0        50        *:8001                    *:*       
LISTEN     0        511       *:9990                    *:*       
LISTEN     0        128       127.0.0.1:9000            *:*       
LISTEN     0        511       *:8008                    *:* 

ss -a 显示所有状态的socket(ESTAB、CLOSE-WAIT、TIME-WAIT、LISTEN等)

ss -o 显示计时器信息,keepalive默认为120min,可以设置;on是重发时间

[root@localhost ~]# ss -o
State      Recv-Q        Send-Q      Local Address:Port           Peer Address:Port
ESTAB      0         0           192.168.1.191:mysql         192.168.5.17:64906         timer:(keepalive,17min,0)
ESTAB      0         52           192.168.1.191:ssh            192.168.5.2:57611         timer:(on,448ms,0)
......

ss -e 显示详细的socket信息

[root@localhost ~]# ss -e
State      Recv-Q     Send-Q      Local Address:Port         Peer Address:Port
ESTAB      0      0        192.168.1.191:3306          192.168.5.82:63573    timer:(keepalive,7min43sec,0) uid:107 ino:13561506 sk:ffff8801135f57c0
ESTAB      0      0           192.168.1.191:3306         192.168.1.203:54196    timer:(keepalive,12min,0) uid:107 ino:13569965 sk:ffff8801b4f16540
ESTAB      0      52          192.168.1.191:ssh            192.168.5.2:57611    timer:(on,440ms,0) ino:12131853 sk:ffff88006b9586c0.
.....

ss -m 显示socket内存使用情况

[root@localhost ~]# ss -m
State      Recv-Q     Send-Q      Local Address:Port         Peer Address:Port
ESTAB      0      0               192.168.1.191:https        192.168.5.240:58565    mem:(r0,w0,f0,t0)
......

ss -p 显示使用socket的进程

[root@localhost ~]# ss -p | grep mysql
State      Recv-Q     Send-Q      Local Address:Port         Peer Address:Port
ESTAB      0      0           192.168.1.122:mysql        192.168.1.121:53969    users:(("mysqld",24205,110))
ESTAB      0      0           192.168.1.122:mysql        192.168.1.121:54783    users:(("mysqld",24205,45))
ESTAB      0      0           192.168.1.122:mysql        192.168.5.204:49995    users:(("mysqld",24205,106))
......

ss -i显示 tcp 内部信息

root@ubuntusvn:~# ss -i
State  Recv-Q Send-Q Local Address:Port      Peer Address:Port
ESTAB  0      0  192.168.1.122:mysql  192.168.1.121:54678   cubic wscale:7,7 rto:207 rtt:7.75/12 ato:40 cwnd:10 send 14.9Mbps rcv_rtt:1 rcv_space:14480
......

ss -s 显示socket使用概况

[root@localhost ~]# ss -s
Total: 509 (kernel 589)
TCP:   368 (estab 249, closed 9, orphaned 0, synrecv 0, timewait 1/0), ports 201

Transport Total     IP        IPv6
*         589       -         -        
RAW       0         0         0        
UDP       0         0         0        
TCP       359       79        280      
INET      359       79        280      
FRAG      0         0         0  

ss -4 仅显示 IPv4
ss -6 仅显示 IPv6

root@ubuntusvn:~# ss -6
State      Recv-Q Send-Q    Local Address:Port           Peer Address:Port   
ESTAB       0   0          ::ffff:127.0.0.1:31000       ::ffff:127.0.0.1:32000   
ESTAB       0   0          ::ffff:192.168.1.191:2100        ::ffff:208.75.196.43:http  

ss -t 仅显示 TCP 套接字
ss -u仅显示 ?UDP套接字
ss -d 仅显示 DCCP 套接字
ss -w 仅显示 ?RAW 套接字
ss -x 仅显示 Unix 套接字

比较netstat和ss的效率,ss比netstat快很多

root@ubuntusvn:~# time ?netstat ?-at
real    0m2.667s
user    0m0.000s
sys     0m0.020s

root@ubuntusvn:~# time ?ss
real    0m0.013s
user    0m0.000s
sys     0m0.008s

pstree和ss命令详解


推荐阅读
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 心理学经典:《思考致富》
    《思考致富》是由美国著名成功学大师拿破仑·希尔撰写的一部重要著作,该书基于希尔长达20年的深入研究和访谈,探讨了个人成功的核心要素。书中不仅揭示了成功的关键,还提供了一系列实用的方法和策略。 ... [详细]
  • 提升工作效率:掌握15个键盘快捷键
    在日常工作中,熟练掌握计算机操作技巧能够显著提升工作效率。本文将介绍15个常用的键盘快捷键,帮助用户更加高效地完成工作任务。 ... [详细]
author-avatar
goxtop
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有