4. 命令行参数和环境变量

命令行参数

[gsm@VM-4-3-centos lesson13]$ ls -l
total 16
-rwxrwxr-x 1 gsm gsm 8360 Oct 28 22:35 a.out
-rw-rw-r-- 1 gsm gsm  258 Oct 28 22:35 test.c
[gsm@VM-4-3-centos lesson13]$ ls
a.out  test.c
[gsm@VM-4-3-centos lesson13]$ ls -l -a -n
total 24
drwxrwxr-x  2 1001 1001 4096 Oct 28 22:35 .
drwxrwxr-x 12 1001 1001 4096 Oct 28 22:32 ..
-rwxrwxr-x  1 1001 1001 8360 Oct 28 22:35 a.out
-rw-rw-r--  1 1001 1001  258 Oct 28 22:35 test.c
[gsm@VM-4-3-centos lesson13]$ rm a.out
[gsm@VM-4-3-centos lesson13]$ ll
total 4
-rw-rw-r-- 1 gsm gsm 258 Oct 28 22:35 test.c
[gsm@VM-4-3-centos lesson13]$ mv test.c code.c
[gsm@VM-4-3-centos lesson13]$ ll
total 4
-rw-rw-r-- 1 gsm gsm 258 Oct 28 22:35 code.c
[gsm@VM-4-3-centos lesson13]$ ls > Makefile
[gsm@VM-4-3-centos lesson13]$ ll
total 8
-rw-rw-r-- 1 gsm gsm 258 Oct 28 22:35 code.c
-rw-rw-r-- 1 gsm gsm  16 Oct 29 11:54 Makefile
[gsm@VM-4-3-centos lesson13]$ vim Makefile 
[gsm@VM-4-3-centos lesson13]$ cat Makefile 
code:code.c
	gcc -o $@ $^
.PHONY:clean
clean:
	rm -f code
[gsm@VM-4-3-centos lesson13]$ vim code.c 
[gsm@VM-4-3-centos lesson13]$ head -12 code.c 
#include <stdio.h>

int main(int argc, char* argv[])
{
    printf("argc: %d\n", argc);

    for (int i = 0; i < argc; i++)
    {
        printf("argv[%d]: %s\n", i, argv[i]);
    }
    return 0;
}
[gsm@VM-4-3-centos lesson13]$ make
gcc -o code code.c
code.c: In function ‘main’:
code.c:7:5: error:for’ loop initial declarations are only allowed in C99 mode
     for (int i = 0; i < argc; i++)
     ^
code.c:7:5: note: use option -std=c99 or -std=gnu99 to compile your code
make: *** [code] Error 1
[gsm@VM-4-3-centos lesson13]$ vim Makefile 
[gsm@VM-4-3-centos lesson13]$ cat Makefile 
code:code.c
	gcc -o $@ $^ -std=c99
.PHONY:clean
clean:
	rm -f code
[gsm@VM-4-3-centos lesson13]$ make
gcc -o code code.c -std=c99
[gsm@VM-4-3-centos lesson13]$ ll
total 20
-rwxrwxr-x 1 gsm gsm 8360 Oct 29 12:09 code
-rw-rw-r-- 1 gsm gsm  508 Oct 29 12:06 code.c
-rw-rw-r-- 1 gsm gsm   67 Oct 29 12:09 Makefile
[gsm@VM-4-3-centos lesson13]$ ./code 
argc: 1
argv[0]: ./code
[gsm@VM-4-3-centos lesson13]$ ./code 1
argc: 2
argv[0]: ./code
argv[1]: 1
[gsm@VM-4-3-centos lesson13]$ ./code 1 2
argc: 3
argv[0]: ./code
argv[1]: 1
argv[2]: 2
[gsm@VM-4-3-centos lesson13]$ ./code 1 2 3
argc: 4
argv[0]: ./code
argv[1]: 1
argv[2]: 2
argv[3]: 3
[gsm@VM-4-3-centos lesson13]$ ./code 1 2 3 4
argc: 5
argv[0]: ./code
argv[1]: 1
argv[2]: 2
argv[3]: 3
argv[4]: 4
[gsm@VM-4-3-centos lesson13]$ ./code 1 2 3 4 5
argc: 6
argv[0]: ./code
argv[1]: 1
argv[2]: 2
argv[3]: 3
argv[4]: 4
argv[5]: 5
[gsm@VM-4-3-centos lesson13]$ ./code abcd xyz
argc: 3
argv[0]: ./code
argv[1]: abcd
argv[2]: xyz
[gsm@VM-4-3-centos lesson13]$ ll
total 20
-rwxrwxr-x 1 gsm gsm 8360 Oct 29 12:09 code
-rw-rw-r-- 1 gsm gsm  508 Oct 29 12:06 code.c
-rw-rw-r-- 1 gsm gsm   67 Oct 29 12:09 Makefile
[gsm@VM-4-3-centos lesson13]$ vim code.c
[gsm@VM-4-3-centos lesson13]$ head -37 code.c
#include <stdio.h>
#include <string.h>

// code -opt1/-opt2/-opt3
int main(int argc, char* argv[])
{
    if (argc != 2)
    {
        printf("Usage: code opt\n");
        return 1;
    }

    if (strcmp(argv[1], "-opt1") == 0)
    {
        printf("功能1\n");
    }
    else if (strcmp(argv[1], "-opt2") == 0)
    {
        printf("功能2\n");
    }
    else if (strcmp(argv[1], "-opt3") == 0)
    {
        printf("功能3\n");
    }
    else
    {
        printf("默认功能\n");
    }

   // printf("argc: %d\n", argc);

   // for (int i = 0; i < argc; i++)
   // {
   //     printf("argv[%d]: %s\n", i, argv[i]);
   // }
    return 0;
}
[gsm@VM-4-3-centos lesson13]$ make
gcc -o code code.c -std=c99
[gsm@VM-4-3-centos lesson13]$ ./code 
Usage: code opt
[gsm@VM-4-3-centos lesson13]$ ./code -opt1
功能1
[gsm@VM-4-3-centos lesson13]$ ./code -opt2
功能2
[gsm@VM-4-3-centos lesson13]$ ./code -opt3
功能3
[gsm@VM-4-3-centos lesson13]$ ./code -opt4
默认功能
[gsm@VM-4-3-centos lesson13]$ ls
code  code.c  Makefile
[gsm@VM-4-3-centos lesson13]$ ls -l
total 20
-rwxrwxr-x 1 gsm gsm 8408 Oct 29 12:26 code
-rw-rw-r-- 1 gsm gsm  957 Oct 29 12:26 code.c
-rw-rw-r-- 1 gsm gsm   67 Oct 29 12:09 Makefile
[gsm@VM-4-3-centos lesson13]$ ls -al
total 28
drwxrwxr-x  2 gsm gsm 4096 Oct 29 12:26 .
drwxrwxr-x 12 gsm gsm 4096 Oct 28 22:32 ..
-rwxrwxr-x  1 gsm gsm 8408 Oct 29 12:26 code
-rw-rw-r--  1 gsm gsm  957 Oct 29 12:26 code.c
-rw-rw-r--  1 gsm gsm   67 Oct 29 12:09 Makefile

环境变量(1)

[gsm@VM-4-3-centos lesson13]$ ll
total 20
-rwxrwxr-x 1 gsm gsm 8408 Oct 29 12:26 code
-rw-rw-r-- 1 gsm gsm  957 Oct 29 12:26 code.c
-rw-rw-r-- 1 gsm gsm   67 Oct 29 12:09 Makefile
[gsm@VM-4-3-centos lesson13]$ vim code.c
[gsm@VM-4-3-centos lesson13]$ head -10 code.c
#include <stdio.h>
#include <string.h>

// code -opt1/-opt2/-opt3
int main(int argc, char* argv[], char* env[])
{
    for (int i = 0; env[i]; i++)
    {
        printf("env[%d]: %s\n", i, env[i]);
    }
[gsm@VM-4-3-centos lesson13]$ make
gcc -o code code.c -std=c99
[gsm@VM-4-3-centos lesson13]$ ./code 
env[0]: XDG_SESSION_ID=44879
env[1]: HOSTNAME=VM-4-3-centos
env[2]: TERM=xterm
env[3]: SHELL=/bin/bash
env[4]: HISTSIZE=3000
env[5]: SSH_CLIENT=101.94.70.61 58413 22
env[6]: SSH_TTY=/dev/pts/0
env[7]: USER=gsm
env[8]: LD_LIBRARY_PATH=:/home/gsm/.VimForCpp/vim/bundle/YCM.so/el7.x86_64
env[9]: LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
env[10]: MAIL=/var/spool/mail/gsm
env[11]: PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin
env[12]: PWD=/home/gsm/linux/112/lesson13
env[13]: LANG=en_US.utf8
env[14]: SHLVL=1
env[15]: HOME=/home/gsm
env[16]: LOGNAME=gsm
env[17]: SSH_CONNECTION=101.94.70.61 58413 10.0.4.3 22
env[18]: LESSOPEN=||/usr/bin/lesspipe.sh %s
env[19]: PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
env[20]: XDG_RUNTIME_DIR=/run/user/1001
env[21]: HISTTIMEFORMAT=%F %T 
env[22]: OLDPWD=/home/gsm/linux/112
env[23]: _=./code

[gsm@VM-4-3-centos lesson13]$ env
XDG_SESSION_ID=44879
HOSTNAME=VM-4-3-centos
TERM=xterm
SHELL=/bin/bash
HISTSIZE=3000
SSH_CLIENT=101.94.70.61 58413 22
SSH_TTY=/dev/pts/0
USER=gsm
LD_LIBRARY_PATH=:/home/gsm/.VimForCpp/vim/bundle/YCM.so/el7.x86_64
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/gsm
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin
PWD=/home/gsm/linux/112/lesson13
LANG=en_US.utf8
SHLVL=1
HOME=/home/gsm
LOGNAME=gsm
SSH_CONNECTION=101.94.70.61 58413 10.0.4.3 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
XDG_RUNTIME_DIR=/run/user/1001
HISTTIMEFORMAT=%F %T 
OLDPWD=/home/gsm/linux/112
_=/usr/bin/env

环境变量(2)

[gsm@VM-4-3-centos lesson13]$ ll
total 8
-rw-rw-r-- 1 gsm gsm 1198 Oct 30 13:41 code.c
-rw-rw-r-- 1 gsm gsm   67 Oct 29 12:09 Makefile
[gsm@VM-4-3-centos lesson13]$ vim code.c 
[gsm@VM-4-3-centos lesson13]$ head -8 code.c 
#include <stdio.h>
#include <unistd.h>
#include <string.h>

// code -opt1/-opt2/-opt3
int main(int argc, char* argv[], char* env[])
{
    printf("我是一个进程,我的pid: %d\n", getpid());
[gsm@VM-4-3-centos lesson13]$ make
gcc -o code code.c -std=c99
[gsm@VM-4-3-centos lesson13]$ ./code 
我是一个进程,我的pid: 18081
[gsm@VM-4-3-centos lesson13]$ ls
code  code.c  Makefile
[gsm@VM-4-3-centos lesson13]$ pwd
/home/gsm/linux/112/lesson13
[gsm@VM-4-3-centos lesson13]$ code 
-bash: code: command not found
[gsm@VM-4-3-centos lesson13]$ echo PATH
PATH
[gsm@VM-4-3-centos lesson13]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin
[gsm@VM-4-3-centos lesson13]$ PATH=/home/gsm/linux/112/lesson13
[gsm@VM-4-3-centos lesson13]$ code
我是一个进程,我的pid: 20879
[gsm@VM-4-3-centos lesson13]$ ls
-bash: ls: command not found
[gsm@VM-4-3-centos lesson13]$ pwd
/home/gsm/linux/112/lesson13
[gsm@VM-4-3-centos lesson13]$ whoami
-bash: whoami: command not found
[gsm@VM-4-3-centos lesson13]$ top
-bash: top: command not found
[gsm@VM-4-3-centos lesson13]$ echo $PATH
/home/gsm/linux/112/lesson13
[gsm@VM-4-3-centos lesson13]$ mkdir
-bash: mkdir: command not found
[gsm@VM-4-3-centos lesson13]$ touch
-bash: touch: command not found

这些环境变量都被加载进了bash进程内部,它是内存级的,命令行中随便改,改错了也不要紧,关闭Xshell重新打开一个就恢复了。

[gsm@VM-4-3-centos ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin
[gsm@VM-4-3-centos ~]$ cd linux/
[gsm@VM-4-3-centos linux]$ cd 112/
[gsm@VM-4-3-centos 112]$ cd lesson13
[gsm@VM-4-3-centos lesson13]$ ll
total 20
-rwxrwxr-x 1 gsm gsm 8408 Oct 30 13:44 code
-rw-rw-r-- 1 gsm gsm 1198 Oct 30 13:44 code.c
-rw-rw-r-- 1 gsm gsm   67 Oct 29 12:09 Makefile
[gsm@VM-4-3-centos lesson13]$ ./code 
我是一个进程,我的pid: 23032
[gsm@VM-4-3-centos lesson13]$ code
-bash: code: command not found
[gsm@VM-4-3-centos lesson13]$ pwd
/home/gsm/linux/112/lesson13
[gsm@VM-4-3-centos lesson13]$ PATH=$PATH:/home/gsm/linux/112/lesson13
[gsm@VM-4-3-centos lesson13]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin:/home/gsm/linux/112/lesson13
[gsm@VM-4-3-centos lesson13]$ code
我是一个进程,我的pid: 23408

[gsm@VM-4-3-centos lesson13]$ cd ~
[gsm@VM-4-3-centos ~]$ pwd
/home/gsm
[gsm@VM-4-3-centos ~]$ ls -al
total 144
drwx------  11 gsm  gsm   4096 Oct 24 20:31 .
drwxr-xr-x.  4 root root  4096 Oct  9 15:32 ..
-rw-------   1 gsm  gsm  61347 Oct 30 14:20 .bash_history
-rw-r--r--   1 gsm  gsm     18 Apr  1  2020 .bash_logout
-rw-r--r--   1 gsm  gsm    193 Apr  1  2020 .bash_profile
-rw-r--r--   1 gsm  gsm    351 Oct 11 20:21 .bashrc
drwxrwxr-x   3 gsm  gsm   4096 Oct  9 15:34 .cache
drwxr-xr-x   2 gsm  gsm   4096 Oct 21 09:36 .cgdb
drwxrwxr-x   3 gsm  gsm   4096 Oct 11 20:21 .config
lrwxrwxrwx   1 gsm  gsm     48 Oct 11 20:21 .cquery -> /home/gsm/.VimForCpp/cquery/config/cquery.config
-rw-rw-r--   1 gsm  gsm     79 Oct 15 23:35 .gitconfig
-rw-rw-r--   1 gsm  gsm    827 Oct 11 20:20 install.sh
-rw-------   1 gsm  gsm     48 Oct 24 20:31 .lesshst
drwxrwxr-x   3 gsm  gsm   4096 Oct 11 20:23 .LfCache
drwxrwxr-x   4 gsm  gsm   4096 Oct 16 21:41 linux
drwx------   3 gsm  gsm   4096 Oct 11 20:23 .local
-rw-rw-r--   1 gsm  gsm      0 Oct 23 20:51 log.txt
drwxrw----   3 gsm  gsm   4096 Oct 11 20:20 .pki
-rw-rw-r--   1 gsm  gsm    104 Oct 11 20:37 test.c
drwxr-xr-x   2 gsm  gsm   4096 Oct 21 09:34 .tgdb
lrwxrwxrwx   1 gsm  gsm     24 Oct 11 20:21 .vim -> /home/gsm/.VimForCpp/vim
drwxrwxr-x   8 gsm  gsm   4096 Oct 11 20:21 .VimForCpp
-rw-------   1 gsm  gsm    913 Oct 11 20:16 .viminfo
lrwxrwxrwx   1 gsm  gsm     33 Oct 11 20:21 .vimrc -> /home/gsm/.VimForCpp/vim/init.vim
-rw-rw-r--   1 gsm  gsm     22 Oct 11 20:27 .vimrc.bak_1011
lrwxrwxrwx   1 gsm  gsm     38 Oct 11 20:21 .ycm_extra_conf.py -> /home/gsm/.VimForCpp/ycm_extra_conf.py
[gsm@VM-4-3-centos ~]$ vim .bashrc 
[gsm@VM-4-3-centos ~]$ vim .bash_
.bash_history  .bash_logout   .bash_profile  
[gsm@VM-4-3-centos ~]$ vim .bash_profile 
[gsm@VM-4-3-centos ~]$ cat .bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

#PATH=$PATH:$HOME/.local/bin:$HOME/bin
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/gsm/linux/112/lesson13

export PATH
[gsm@VM-4-3-centos ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin
[gsm@VM-4-3-centos ~]$ source .bash_profile 
[gsm@VM-4-3-centos ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin:/home/gsm/.local/bin:/home/gsm/bin:/home/gsm/linux/112/lesson13
[gsm@VM-4-3-centos ~]$ code
我是一个进程,我的pid: 27792
[gsm@VM-4-3-centos ~]$ vim .bash_profile 
[gsm@VM-4-3-centos ~]$ cat .bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

环境变量(3)

[gsm@VM-4-3-centos ~]$ echo $HOME
/home/gsm
[gsm@VM-4-3-centos ~]$ su -
Password: 
Last login: Sun Oct 26 20:55:14 CST 2025 from 101.94.69.4 on pts/1
Last failed login: Sat Nov  1 11:22:22 CST 2025 on pts/0
There were 8 failed login attempts since the last successful login.
[root@VM-4-3-centos ~]# whoami
root
[root@VM-4-3-centos ~]# echo $HOME
/root
[root@VM-4-3-centos ~]# pwd
/root
[root@VM-4-3-centos ~]# logout
[gsm@VM-4-3-centos ~]$ ps ajx | grep bash
24141 24142 24142 24142 pts/0    26550 Ss    1001   0:00 -bash
24142 26551 26550 24142 pts/0    26550 S+    1001   0:00 grep --color=auto bash
[gsm@VM-4-3-centos ~]$ pwd
/home/gsm
[gsm@VM-4-3-centos ~]$ ls /proc/24142 -l
total 0
dr-xr-xr-x 2 gsm gsm 0 Nov  1 11:28 attr
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 autogroup
-r-------- 1 gsm gsm 0 Nov  1 11:28 auxv
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 cgroup
--w------- 1 gsm gsm 0 Nov  1 11:28 clear_refs
-r--r--r-- 1 gsm gsm 0 Nov  1 11:17 cmdline
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 comm
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 coredump_filter
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 cpuset
lrwxrwxrwx 1 gsm gsm 0 Nov  1 11:17 cwd -> /home/gsm
-r-------- 1 gsm gsm 0 Nov  1 11:17 environ
lrwxrwxrwx 1 gsm gsm 0 Nov  1 11:17 exe -> /usr/bin/bash
dr-x------ 2 gsm gsm 0 Nov  1 11:17 fd
dr-x------ 2 gsm gsm 0 Nov  1 11:28 fdinfo
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 gid_map
-r-------- 1 gsm gsm 0 Nov  1 11:28 io
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 limits
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 loginuid
dr-x------ 2 gsm gsm 0 Nov  1 11:28 map_files
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 maps
-rw------- 1 gsm gsm 0 Nov  1 11:28 mem
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 mountinfo
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 mounts
-r-------- 1 gsm gsm 0 Nov  1 11:28 mountstats
dr-xr-xr-x 5 gsm gsm 0 Nov  1 11:28 net
dr-x--x--x 2 gsm gsm 0 Nov  1 11:28 ns
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 numa_maps
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 oom_adj
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 oom_score
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 oom_score_adj
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 pagemap
-r-------- 1 gsm gsm 0 Nov  1 11:28 patch_state
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 personality
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 projid_map
lrwxrwxrwx 1 gsm gsm 0 Nov  1 11:17 root -> /
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 sched
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 schedstat
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 sessionid
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 setgroups
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 smaps
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 stack
-r--r--r-- 1 gsm gsm 0 Nov  1 11:17 stat
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 statm
-r--r--r-- 1 gsm gsm 0 Nov  1 11:17 status
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 syscall
dr-xr-xr-x 3 gsm gsm 0 Nov  1 11:17 task
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 timers
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 uid_map
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 wchan
[gsm@VM-4-3-centos linux]$ cd /
[gsm@VM-4-3-centos /]$ pwd
/
[gsm@VM-4-3-centos /]$ ls /proc/24142 -l
total 0
dr-xr-xr-x 2 gsm gsm 0 Nov  1 11:28 attr
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 autogroup
-r-------- 1 gsm gsm 0 Nov  1 11:28 auxv
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 cgroup
--w------- 1 gsm gsm 0 Nov  1 11:28 clear_refs
-r--r--r-- 1 gsm gsm 0 Nov  1 11:17 cmdline
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 comm
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 coredump_filter
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 cpuset
lrwxrwxrwx 1 gsm gsm 0 Nov  1 11:17 cwd -> /
-r-------- 1 gsm gsm 0 Nov  1 11:17 environ
lrwxrwxrwx 1 gsm gsm 0 Nov  1 11:17 exe -> /usr/bin/bash
dr-x------ 2 gsm gsm 0 Nov  1 11:17 fd
dr-x------ 2 gsm gsm 0 Nov  1 11:28 fdinfo
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 gid_map
-r-------- 1 gsm gsm 0 Nov  1 11:28 io
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 limits
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 loginuid
dr-x------ 2 gsm gsm 0 Nov  1 11:28 map_files
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 maps
-rw------- 1 gsm gsm 0 Nov  1 11:28 mem
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 mountinfo
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 mounts
-r-------- 1 gsm gsm 0 Nov  1 11:28 mountstats
dr-xr-xr-x 5 gsm gsm 0 Nov  1 11:28 net
dr-x--x--x 2 gsm gsm 0 Nov  1 11:28 ns
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 numa_maps
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 oom_adj
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 oom_score
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 oom_score_adj
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 pagemap
-r-------- 1 gsm gsm 0 Nov  1 11:28 patch_state
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 personality
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 projid_map
lrwxrwxrwx 1 gsm gsm 0 Nov  1 11:17 root -> /
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 sched
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 schedstat
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 sessionid
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 setgroups
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 smaps
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 stack
-r--r--r-- 1 gsm gsm 0 Nov  1 11:17 stat
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 statm
-r--r--r-- 1 gsm gsm 0 Nov  1 11:17 status
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 syscall
dr-xr-xr-x 3 gsm gsm 0 Nov  1 11:17 task
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 timers
-rw-r--r-- 1 gsm gsm 0 Nov  1 11:28 uid_map
-r--r--r-- 1 gsm gsm 0 Nov  1 11:28 wchan

环境变量(4)

[gsm@VM-4-3-centos /]$ echo $SHELL
/bin/bash
[gsm@VM-4-3-centos /]$ echo $PWD
/
[gsm@VM-4-3-centos /]$ cd ~
[gsm@VM-4-3-centos ~]$ echo $PWD
/home/gsm
[gsm@VM-4-3-centos lesson14]$ touch envtest.c
[gsm@VM-4-3-centos lesson14]$ ll
total 0
-rw-rw-r-- 1 gsm gsm 0 Nov  1 13:31 envtest.c
[gsm@VM-4-3-centos lesson14]$ man getenv
[gsm@VM-4-3-centos lesson14]$ vim envtest.c 
[gsm@VM-4-3-centos lesson14]$ cat envtest.c 
#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("%s\n", getenv("PWD"));

    return 0;
}
[gsm@VM-4-3-centos lesson14]$ gcc -o envtest envtest.c 
[gsm@VM-4-3-centos lesson14]$ ./envtest 
/home/gsm/linux/112/lesson14
[gsm@VM-4-3-centos lesson14]$ pwd
/home/gsm/linux/112/lesson14

区分一个程序/用户是谁,以USER为主:

[gsm@VM-4-3-centos lesson14]$ env
XDG_SESSION_ID=48368
HOSTNAME=VM-4-3-centos
TERM=xterm
SHELL=/bin/bash
HISTSIZE=3000
SSH_CLIENT=114.84.24.124 35348 22
SSH_TTY=/dev/pts/0
USER=gsm
LD_LIBRARY_PATH=:/home/gsm/.VimForCpp/vim/bundle/YCM.so/el7.x86_64
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/gsm
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin
PWD=/home/gsm/linux/112/lesson14
LANG=en_US.utf8
SHLVL=1
HOME=/home/gsm
LOGNAME=gsm
SSH_CONNECTION=114.84.24.124 35348 10.0.4.3 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
XDG_RUNTIME_DIR=/run/user/1001
HISTTIMEFORMAT=%F %T 
_=/usr/bin/env
OLDPWD=/home/gsm/linux/112
[gsm@VM-4-3-centos lesson14]$ su -
Password: 
Last login: Sat Nov  1 11:22:53 CST 2025 on pts/0
Last failed login: Sat Nov  1 17:17:20 CST 2025 from 139.9.210.103 on ssh:notty
There were 431 failed login attempts since the last successful login.
[root@VM-4-3-centos ~]# env
XDG_SESSION_ID=48368
HOSTNAME=VM-4-3-centos
SHELL=/bin/bash
TERM=xterm
HISTSIZE=3000
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=en_US.utf8
SHLVL=1
HOME=/root
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
HISTTIMEFORMAT=%F %T 
_=/bin/env
[root@VM-4-3-centos ~]# logout
[gsm@VM-4-3-centos lesson14]$ su
Password: 
[root@VM-4-3-centos lesson14]# env
XDG_SESSION_ID=48368
HOSTNAME=VM-4-3-centos
SHELL=/bin/bash
TERM=xterm
HISTSIZE=3000
SSH_CLIENT=114.84.24.124 35348 22
SSH_TTY=/dev/pts/0
USER=gsm
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin
MAIL=/var/spool/mail/gsm
PWD=/home/gsm/linux/112/lesson14
LANG=en_US.utf8
HOME=/root
SHLVL=2
LOGNAME=gsm
SSH_CONNECTION=114.84.24.124 35348 10.0.4.3 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
XDG_RUNTIME_DIR=/run/user/1001
HISTTIMEFORMAT=%F %T 
_=/usr/bin/env
[root@VM-4-3-centos lesson14]# exit
exit
[gsm@VM-4-3-centos lesson14]$ ll
total 16
-rwxrwxr-x 1 gsm gsm 8408 Nov  1 13:37 envtest
-rw-rw-r-- 1 gsm gsm  105 Nov  1 13:36 envtest.c
[gsm@VM-4-3-centos lesson14]$ rm envtest
[gsm@VM-4-3-centos lesson14]$ vim envtest.c 
[gsm@VM-4-3-centos lesson14]$ cat envtest.c 
#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("User:%s\n", getenv("USER"));
    //printf("%s\n", getenv("PWD"));

    return 0;
}
[gsm@VM-4-3-centos lesson14]$ gcc -o envtest envtest.c 
[gsm@VM-4-3-centos lesson14]$ ./envtest 
User:gsm
[gsm@VM-4-3-centos lesson14]$ su -
Password: 
Last login: Sat Nov  1 17:33:40 CST 2025 on pts/0
[root@VM-4-3-centos ~]# cd /home/gsm/linux/112/lesson14
[root@VM-4-3-centos lesson14]# ll
total 16
-rwxrwxr-x 1 gsm gsm 8416 Nov  1 18:30 envtest
-rw-rw-r-- 1 gsm gsm  148 Nov  1 18:30 envtest.c
[root@VM-4-3-centos lesson14]# ./envtest 
User:root
[root@VM-4-3-centos lesson14]# logout
[gsm@VM-4-3-centos lesson14]$ ll
total 16
-rwxrwxr-x 1 gsm gsm 8416 Nov  1 18:30 envtest
-rw-rw-r-- 1 gsm gsm  148 Nov  1 18:30 envtest.c
[gsm@VM-4-3-centos lesson14]$ vim envtest.c
[gsm@VM-4-3-centos lesson14]$ cat envtest.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    // 我可以让我的程序,识别用户身份,只让gsm用户进行访问
    const char* who = getenv("USER");

    if (strcmp(who, "gsm") == 0)
    {
        printf("执行程序的正常命令!\n");
        return 0;
    }
    else
    {
        printf("无权访问!\n");
        return 1;
    }


    //printf("User:%s\n", getenv("USER"));
    //printf("%s\n", getenv("PWD"));

    return 0;
}
[gsm@VM-4-3-centos lesson14]$ gcc -o envtest envtest.c 
[gsm@VM-4-3-centos lesson14]$ ./envtest 
执行程序的正常命令!
[gsm@VM-4-3-centos lesson14]$ su -
Password: 
Last login: Sat Nov  1 18:36:34 CST 2025 on pts/0
Last failed login: Sat Nov  1 18:39:45 CST 2025 from 139.9.210.103 on ssh:notty
There was 1 failed login attempt since the last successful login.
[root@VM-4-3-centos ~]# cd /home/gsm/linux/112/lesson14
[root@VM-4-3-centos lesson14]# ll
total 16
-rwxrwxr-x 1 gsm gsm 8464 Nov  1 18:45 envtest
-rw-rw-r-- 1 gsm gsm  485 Nov  1 18:44 envtest.c
[root@VM-4-3-centos lesson14]# ./envtest 
无权访问!

OLDPWD :

[root@VM-4-3-centos lesson14]# env
XDG_SESSION_ID=48368
HOSTNAME=VM-4-3-centos
SHELL=/bin/bash
TERM=xterm
HISTSIZE=3000
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/home/gsm/linux/112/lesson14
LANG=en_US.utf8
SHLVL=1
HOME=/root
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
HISTTIMEFORMAT=%F %T 
OLDPWD=/root
_=/bin/env
[root@VM-4-3-centos lesson14]# cd /
[root@VM-4-3-centos /]# env
XDG_SESSION_ID=48368
HOSTNAME=VM-4-3-centos
SHELL=/bin/bash
TERM=xterm
HISTSIZE=3000
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/
LANG=en_US.utf8
SHLVL=1
HOME=/root
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
HISTTIMEFORMAT=%F %T 
OLDPWD=/home/gsm/linux/112/lesson14
_=/bin/env
[root@VM-4-3-centos /]# cd -
/home/gsm/linux/112/lesson14
[root@VM-4-3-centos lesson14]# env
XDG_SESSION_ID=48368
HOSTNAME=VM-4-3-centos
SHELL=/bin/bash
TERM=xterm
HISTSIZE=3000
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/home/gsm/linux/112/lesson14
LANG=en_US.utf8
SHLVL=1
HOME=/root
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
HISTTIMEFORMAT=%F %T 
OLDPWD=/
_=/bin/env
[root@VM-4-3-centos lesson14]# cd -
/
[root@VM-4-3-centos /]# cd -
/home/gsm/linux/112/lesson14
[root@VM-4-3-centos lesson14]# cd -
/
[root@VM-4-3-centos /]# cd -
/home/gsm/linux/112/lesson14

环境变量(5)

set : 显示本地定义的shell变量和环境变量

[root@VM-4-3-centos lesson14]# ll
total 16
-rwxrwxr-x 1 gsm gsm 8464 Nov  1 18:45 envtest
-rw-rw-r-- 1 gsm gsm  485 Nov  1 18:44 envtest.c
[root@VM-4-3-centos lesson14]# i=10
[root@VM-4-3-centos lesson14]# echo $i
10
[root@VM-4-3-centos lesson14]# for (( ; i < 20; i++ )); do echo $i; done
10
11
12
13
14
15
16
17
18
19
[root@VM-4-3-centos lesson14]# a=100
[root@VM-4-3-centos lesson14]# b=200
[root@VM-4-3-centos lesson14]# c=300
[root@VM-4-3-centos lesson14]# echo $i
20
[root@VM-4-3-centos lesson14]# echo $a
100
[root@VM-4-3-centos lesson14]# echo $b
200
[root@VM-4-3-centos lesson14]# echo $c
300
[root@VM-4-3-centos lesson14]# env
XDG_SESSION_ID=48368
HOSTNAME=VM-4-3-centos
SHELL=/bin/bash
TERM=xterm
HISTSIZE=3000
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/home/gsm/linux/112/lesson14
LANG=en_US.utf8
SHLVL=1
HOME=/root
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
HISTTIMEFORMAT=%F %T 
OLDPWD=/
_=/bin/env
[root@VM-4-3-centos lesson14]# set

export : 设置一个新的环境变量

[root@VM-4-3-centos lesson14]# ll
total 16
-rwxrwxr-x 1 gsm gsm 8464 Nov  1 18:45 envtest
-rw-rw-r-- 1 gsm gsm  485 Nov  1 18:44 envtest.c
[root@VM-4-3-centos lesson14]# env
XDG_SESSION_ID=48999
HOSTNAME=VM-4-3-centos
SHELL=/bin/bash
TERM=xterm
HISTSIZE=3000
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/home/gsm/linux/112/lesson14
LANG=en_US.utf8
SHLVL=1
HOME=/root
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
HISTTIMEFORMAT=%F %T 
OLDPWD=/root
_=/bin/env
[root@VM-4-3-centos lesson14]# echo $a
100
[root@VM-4-3-centos lesson14]# export a
[root@VM-4-3-centos lesson14]# env
XDG_SESSION_ID=48999
HOSTNAME=VM-4-3-centos
SHELL=/bin/bash
TERM=xterm
HISTSIZE=3000
OLDPWD=/root
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
a=100
PWD=/home/gsm/linux/112/lesson14
LANG=en_US.utf8
SHLVL=1
HOME=/root
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
HISTTIMEFORMAT=%F %T 
_=/bin/env
[gsm@VM-4-3-centos ~]$ export b=1000
[gsm@VM-4-3-centos ~]$ env
XDG_SESSION_ID=49079
HOSTNAME=VM-4-3-centos
TERM=xterm
SHELL=/bin/bash
HISTSIZE=3000
SSH_CLIENT=114.84.24.124 34105 22
SSH_TTY=/dev/pts/0
USER=gsm
LD_LIBRARY_PATH=:/home/gsm/.VimForCpp/vim/bundle/YCM.so/el7.x86_64
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/gsm
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin
a=100
PWD=/home/gsm
b=1000
LANG=en_US.utf8
SHLVL=1
HOME=/home/gsm
LOGNAME=gsm
SSH_CONNECTION=114.84.24.124 34105 10.0.4.3 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
XDG_RUNTIME_DIR=/run/user/1001
HISTTIMEFORMAT=%F %T 
_=/usr/bin/env

unset : 清除环境变量

[gsm@VM-4-3-centos lesson14]$ ll
total 4
-rw-rw-r-- 1 gsm gsm 485 Nov  1 18:44 envtest.c
[gsm@VM-4-3-centos lesson14]$ vim envtest.c 
[gsm@VM-4-3-centos lesson14]$ head -21 envtest.c 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main()
{
    char* isrunning = getenv("ISRUNNING");
    
    if (isrunning == NULL)
    {
        while (1)
        {
            printf("当前进程首次启动!\n");
            sleep(1);
        }
    }
    else
    {
        printf("当前进程已经运行了,不要再启动了!\n");
    }
[gsm@VM-4-3-centos lesson14]$ gcc -o envtest envtest.c 
[gsm@VM-4-3-centos lesson14]$ ./envtest 
当前进程首次启动!
当前进程首次启动!
当前进程首次启动!
当前进程首次启动!
^C
[gsm@VM-4-3-centos lesson14]$ ISRUNNING=1
[gsm@VM-4-3-centos lesson14]$ echo $ISRUNNING
1
[gsm@VM-4-3-centos lesson14]$ ./envtest 
当前进程首次启动!
当前进程首次启动!
当前进程首次启动!
当前进程首次启动!
当前进程首次启动!
^C
[gsm@VM-4-3-centos lesson14]$ export ISRUNNING
[gsm@VM-4-3-centos lesson14]$ ./envtest 
当前进程已经运行了,不要再启动了!
[gsm@VM-4-3-centos lesson14]$ env
XDG_SESSION_ID=49079
HOSTNAME=VM-4-3-centos
TERM=xterm
SHELL=/bin/bash
HISTSIZE=3000
SSH_CLIENT=114.84.24.124 34105 22
OLDPWD=/home/gsm/linux/112
SSH_TTY=/dev/pts/0
USER=gsm
LD_LIBRARY_PATH=:/home/gsm/.VimForCpp/vim/bundle/YCM.so/el7.x86_64
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/gsm
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin
a=100
PWD=/home/gsm/linux/112/lesson14
b=1000
LANG=en_US.utf8
ISRUNNING=1
SHLVL=1
HOME=/home/gsm
LOGNAME=gsm
SSH_CONNECTION=114.84.24.124 34105 10.0.4.3 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
XDG_RUNTIME_DIR=/run/user/1001
HISTTIMEFORMAT=%F %T 
_=/usr/bin/env
[gsm@VM-4-3-centos lesson14]$ vim envtest.c
[gsm@VM-4-3-centos lesson14]$ head -22 envtest.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main()
{
    char* isrunning = getenv("ISRUNNING");
    printf("ISRUNNING=%s\n", isrunning);

    if (isrunning == NULL)
    {
        while (1)
        {
            printf("当前进程首次启动!\n");
            sleep(1);
        }
    }
    else
    {
        printf("当前进程已经运行了,不要再启动了!\n");
    }
[gsm@VM-4-3-centos lesson14]$ gcc -o envtest envtest.c 
[gsm@VM-4-3-centos lesson14]$ ./envtest 
ISRUNNING=1
当前进程已经运行了,不要再启动了!
[gsm@VM-4-3-centos lesson14]$ unset ISRUNNING
[gsm@VM-4-3-centos lesson14]$ ./envtest 
ISRUNNING=(null)
当前进程首次启动!
当前进程首次启动!
当前进程首次启动!
^C

[gsm@VM-4-3-centos lesson14]$ man environ
[gsm@VM-4-3-centos lesson14]$ vim envtest.c
[gsm@VM-4-3-centos lesson14]$ head -13 envtest.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

extern char** environ;

int main()
{
    for (int i = 0; environ[i]; i++)
    {
        printf("%s\n", environ[i]);
    }
[gsm@VM-4-3-centos lesson14]$ gcc -o envtest envtest.c -std=c99
[gsm@VM-4-3-centos lesson14]$ ./envtest 
XDG_SESSION_ID=49079
HOSTNAME=VM-4-3-centos
TERM=xterm
SHELL=/bin/bash
HISTSIZE=3000
SSH_CLIENT=114.84.24.124 34105 22
OLDPWD=/home/gsm/linux/112
SSH_TTY=/dev/pts/0
USER=gsm
LD_LIBRARY_PATH=:/home/gsm/.VimForCpp/vim/bundle/YCM.so/el7.x86_64
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/gsm
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gsm/.local/bin:/home/gsm/bin
a=100
PWD=/home/gsm/linux/112/lesson14
b=1000
LANG=en_US.utf8
SHLVL=1
HOME=/home/gsm
LOGNAME=gsm
SSH_CONNECTION=114.84.24.124 34105 10.0.4.3 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=history -a; history -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"
XDG_RUNTIME_DIR=/run/user/1001
HISTTIMEFORMAT=%F %T 
_=./envtest

5. 程序地址空间

程序地址空间(1)

[gsm@VM-4-3-centos lesson14]$ ll
total 4
-rw-rw-r-- 1 gsm gsm 999 Nov  1 22:38 envtest.c
[gsm@VM-4-3-centos lesson14]$ mv envtest.c process.c
[gsm@VM-4-3-centos lesson14]$ ll
total 4
-rw-rw-r-- 1 gsm gsm 999 Nov  1 22:38 process.c
[gsm@VM-4-3-centos lesson14]$ ls > Makefile
[gsm@VM-4-3-centos lesson14]$ vim Makefile 
[gsm@VM-4-3-centos lesson14]$ cat Makefile 
process:process.c
	gcc -o $@ $^
.PHONY:clean
clean:
	rm -f process
[gsm@VM-4-3-centos lesson14]$ vim process.c 
[gsm@VM-4-3-centos lesson14]$ head -34 process.c 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>


int gval = 100;

int main()
{
    printf("我是一个进程,pid: %d, ppid: %d\n", getpid(), getppid());

    pid_t id = fork();

    if (id == 0)
    {
        // child
        while (1)
        {
            printf("我是子进程,pid: %d, ppid: %d, gval: %d, &gval: %p\n", getpid(), getppid(), gval, &gval);
            gval++;
            sleep(1);
        }
    }
    else
    {
        // parent
        while (1)
        {
            printf("我是父进程,pid: %d, ppid: %d, gval: %d, &gval: %p\n", getpid(), getppid(), gval, &gval);
            sleep(1);
        }
    }
}
[gsm@VM-4-3-centos lesson14]$ make
gcc -o process process.c
[gsm@VM-4-3-centos lesson14]$ ./process 
我是一个进程,pid: 32696, ppid: 26618
我是父进程,pid: 32696, ppid: 26618, gval: 100, &gval: 0x601054
我是子进程,pid: 32697, ppid: 32696, gval: 100, &gval: 0x601054
我是父进程,pid: 32696, ppid: 26618, gval: 100, &gval: 0x601054
我是子进程,pid: 32697, ppid: 32696, gval: 101, &gval: 0x601054
我是父进程,pid: 32696, ppid: 26618, gval: 100, &gval: 0x601054
我是子进程,pid: 32697, ppid: 32696, gval: 102, &gval: 0x601054
我是子进程,pid: 32697, ppid: 32696, gval: 103, &gval: 0x601054
我是父进程,pid: 32696, ppid: 26618, gval: 100, &gval: 0x601054
我是父进程,pid: 32696, ppid: 26618, gval: 100, &gval: 0x601054
我是子进程,pid: 32697, ppid: 32696, gval: 104, &gval: 0x601054
我是子进程,pid: 32697, ppid: 32696, gval: 105, &gval: 0x601054
我是父进程,pid: 32696, ppid: 26618, gval: 100, &gval: 0x601054
我是父进程,pid: 32696, ppid: 26618, gval: 100, &gval: 0x601054
我是子进程,pid: 32697, ppid: 32696, gval: 106, &gval: 0x601054
^C

[gsm@VM-4-3-centos lesson14]$ vim process.c
[gsm@VM-4-3-centos lesson14]$ head -21 process.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int unval;
int gval = 100;

int main()
{
   printf("code addr: %p\n", main);
   printf("gval addr: %p\n", &gval);
   printf("unval addr: %p\n", &unval);

   int* mem = (int*)malloc(10 * sizeof(int));
   printf("heap addr: %p\n", mem);

   int a,b,c;
   printf("stack addr: %p\n", &a);
   printf("stack addr: %p\n", &b);
   printf("stack addr: %p\n", &c);
[gsm@VM-4-3-centos lesson14]$ make
gcc -o process process.c
[gsm@VM-4-3-centos lesson14]$ ./process 
code addr: 0x40057d
gval addr: 0x60103c
unval addr: 0x601044
heap addr: 0x890010
stack addr: 0x7ffc8e34df54
stack addr: 0x7ffc8e34df50
stack addr: 0x7ffc8e34df4c

程序地址空间(2)
程序地址空间(3)

[gsm@VM-4-3-centos lesson14]$ ll
total 20
-rw-rw-r-- 1 gsm gsm   67 Nov  3 13:48 Makefile
-rwxrwxr-x 1 gsm gsm 8472 Nov  6 18:15 process
-rw-rw-r-- 1 gsm gsm 2085 Nov  3 22:54 process.c
[gsm@VM-4-3-centos lesson14]$ readelf -S process
There are 30 section headers, starting at offset 0x1998:

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .interp           PROGBITS         0000000000400238  00000238
       000000000000001c  0000000000000000   A       0     0     1
  [ 2] .note.ABI-tag     NOTE             0000000000400254  00000254
       0000000000000020  0000000000000000   A       0     0     4
  [ 3] .note.gnu.build-i NOTE             0000000000400274  00000274
       0000000000000024  0000000000000000   A       0     0     4
  [ 4] .gnu.hash         GNU_HASH         0000000000400298  00000298
       000000000000001c  0000000000000000   A       5     0     8
  [ 5] .dynsym           DYNSYM           00000000004002b8  000002b8
       0000000000000078  0000000000000018   A       6     1     8
  [ 6] .dynstr           STRTAB           0000000000400330  00000330
       0000000000000046  0000000000000000   A       0     0     1
  [ 7] .gnu.version      VERSYM           0000000000400376  00000376
       000000000000000a  0000000000000002   A       5     0     2
  [ 8] .gnu.version_r    VERNEED          0000000000400380  00000380
       0000000000000020  0000000000000000   A       6     1     8
  [ 9] .rela.dyn         RELA             00000000004003a0  000003a0
       0000000000000018  0000000000000018   A       5     0     8
  [10] .rela.plt         RELA             00000000004003b8  000003b8
       0000000000000060  0000000000000018  AI       5    23     8
  [11] .init             PROGBITS         0000000000400418  00000418
       000000000000001a  0000000000000000  AX       0     0     4
  [12] .plt              PROGBITS         0000000000400440  00000440
       0000000000000050  0000000000000010  AX       0     0     16
  [13] .text             PROGBITS         0000000000400490  00000490
       0000000000000212  0000000000000000  AX       0     0     16
  [14] .fini             PROGBITS         00000000004006a4  000006a4
       0000000000000009  0000000000000000  AX       0     0     4
  [15] .rodata           PROGBITS         00000000004006b0  000006b0
       000000000000005d  0000000000000000   A       0     0     8
  [16] .eh_frame_hdr     PROGBITS         0000000000400710  00000710
       0000000000000034  0000000000000000   A       0     0     4
  [17] .eh_frame         PROGBITS         0000000000400748  00000748
       00000000000000f4  0000000000000000   A       0     0     8
  [18] .init_array       INIT_ARRAY       0000000000600e10  00000e10
       0000000000000008  0000000000000008  WA       0     0     8
  [19] .fini_array       FINI_ARRAY       0000000000600e18  00000e18
       0000000000000008  0000000000000008  WA       0     0     8
  [20] .jcr              PROGBITS         0000000000600e20  00000e20
       0000000000000008  0000000000000000  WA       0     0     8
  [21] .dynamic          DYNAMIC          0000000000600e28  00000e28
       00000000000001d0  0000000000000010  WA       6     0     8
  [22] .got              PROGBITS         0000000000600ff8  00000ff8
       0000000000000008  0000000000000008  WA       0     0     8
  [23] .got.plt          PROGBITS         0000000000601000  00001000
       0000000000000038  0000000000000008  WA       0     0     8
  [24] .data             PROGBITS         0000000000601038  00001038
       0000000000000008  0000000000000000  WA       0     0     4
  [25] .bss              NOBITS           0000000000601040  00001040
       0000000000000008  0000000000000000  WA       0     0     4
  [26] .comment          PROGBITS         0000000000000000  00001040
       000000000000002d  0000000000000001  MS       0     0     1
  [27] .symtab           SYMTAB           0000000000000000  00001070
       0000000000000630  0000000000000018          28    46     8
  [28] .strtab           STRTAB           0000000000000000  000016a0
       00000000000001ed  0000000000000000           0     0     1
  [29] .shstrtab         STRTAB           0000000000000000  0000188d
       0000000000000108  0000000000000000           0     0     1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  l (large), p (processor specific)

程序地址空间(4)

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐