第六节——用户和用户组管理 没有用户名,只有密码的认证方式称为token 有用户名(ID)和密码,通常称为认证identity(username/passwd) 用户的主要作用是实现资源的分配 资源的分配有三个层次,也称为3A概念 authentication 认证(识别用户) authorzation 授权 accouting 审计 对于linux来讲,用户有两类: 管理员:root ID:0 普通用户: ID 1-65535 系统用户 ID 1-499守护进程获取资源进行权限分配 登录用户 ID [500+ 交互式登录的用户 linux组:groupname/GID 管理员组:root 0 普通组: 系统组:1-499 centOS7为1-999 普通组:[500+ centOS7为[1000+ 组用以实现将用户和某一类权限建立联系。 linux的安全上下文: 我们操作计算机是依靠运行程序实现的,进程是以发起者的身份运行的,文件的权限位会对进程的发起者限制,这一概念为linux进程的安全上下文,一个进程能够访问多少资源取决于进程发起者的身份。 我们站在用户的角度,linux中的组有两类: 用户的基本组,组名同用户名,仅包含一个组,为私有组。 用户的附加组,额外组。 linux中同用户和组相关的配置文件: /etc/passwd 用户及其属性信息 /etc/group 用户组及其属性信息 /etc/shadow 用户密码及其属性信息 /etc/gshadow 组密码及其相关属性 /etc/passwd下的7个字段: 用户名:密码:UID:GID:GES(用户附加信息):家目录:默认shell /etc/group下的四个字段 组名:组密码占位符:组ID:以当前组为附加组用户的列表 /etc/shadow 9个字段 用户名: 加密密码:使用单项加密原理,MD5算法,记录了加密方式和加入的杂质 最近一次修改密码的时间:从1970.01.01 00:00至今过去的完整天数 密码最小使用期限: 密码最大使用期限: 密码警告时间: 密码禁用期: 账号过期日期: 保留字段 #md5sum file 提取特征码 md5(message digest 5) 输出定长为128bit #sha1sum file 提取特征码 #sha244sum file提取244位的特征码 #sha512sum file 提取512位的特征码 单项加密具有雪崩效应,初始条件的微小改变,将会导致结果的巨大变化 $6$salt$............. 6为加密算法 salt为杂质,为了避免使用相同密码的单项加密结果相同,被猜出密码,所以引入了salt。 密码的复杂策略性: 一是使用大小写字母、数字、特殊字符中的至少三种 二是使用足够的长度 三是不使用易猜测的密码 四是定期更换密码,不要使用曾使用过的密码。 用户和组管理的命令: 用户的创建useradd #useradd [option] login name 创建用户时会自动创建一个和用户同名的组,叫做私有组,linux禁止空密码用户登录,在/etc/shadow第二列表现为有两个感叹号’!!’附加在用户密码串前面。 -u 指定UID,[UID_MIN,UID_MAX],定义在/etc/login.defs中,如果不指定UID,则从已存在的最大UID开始+1自动指定。 -g 指明用户所属的基本组,可为组名,也可为GID -c 添加用户的注释信息,可以为任意字符,有空格时应当用引号引起来。 -d 指明家目录位置,不指定时在/home下创建一个与用户名同名的目录。 如果指定的目录已经存在,则不会从/etc/skel中复制文件(模板文件),每个用户在创建时会在/home目录下创建一个与用户名同名的目录,并从/etc/skel中复制文件,这些模板文件定义了用户的环境。 -s 指明用户的默认shell,不指明则有缺省值,添加用户的缺省值在/etc/default/useradd中定义 -G 为用户指明附加组,可以有多个,使用逗号隔开,需要注意的是,这些组事先都应存在。 -D 修改添加用户的默认值,会修改/etc/defaultuaeradd文件 -s 修改默认shell -g 指定用户的基本组,指定后所有之后创建用户的基本组都一样。 -f 账号禁用期时间,宽限期、非活动期。 -r 创建系统用户,centOS6 ID小于500,centOS7 ID小于1000 #groupadd [option] group_name 创建组 -g 指定GID,范围在/etc/default/useradd中修改 #id username 显示用户的真实的有效的ID和组的信息 -u 显示用户的UID -g 显示用户GID,只显示基本组ID -G 显示用户所有组的组ID(基本组和附加组) -n 显示用户的名称、组名称 #su [option] [-] [user[args]] switch user切换用户或者以另外一个身份执行命令 su USERNAME 非登录式切换,不读取目标用户的配置信息 su – USERNAME 登录式切换,会读取目标用户的配置文件,是完全切换 root用户切换到其他用户不需要密码 #su [-] username –c ‘COMMAND’ -l 相当于‘-’,表示登录式切换,即读取配置文件切换。 用户的属性修改: #usermod [option] [login_name] -u 指定新的UID -g 指定新的GID -G 指定新的附加组,原来的附加组会被覆盖, -a(appead) 追加 -G–a 追加附加组 -s 修改默认shell -c 修改新的注释信息 -d /path/to/home 指定新的家目录,不会创建目录,但是原目录中的文件不移动,且普通用户修改家目录后,原家目录不能进行访问,如果要同时移动文件,需要使用-m选项,创建目录并移动。 -l login_name 指定新的名字 -L lock锁定指定用户,在/etc/passwd文件密码列前加一个感叹号。 -U unlock解锁指定用户 -e 账户被禁用的日期YY-MM-DD格式 给用户添加密码: #passwd username 给指定用户添加密码,如果不指定参数则默认为当前用户修改密码。 -l 锁定用户 -u 解锁用户 -n 密码最短使用期限 -x 密码最长使用期限 -w warndays 提前多少天警告用户修改密码 -i inactivedays非活动期限(密码过期后的宽限期) --stdin 从标准输入接受密码,不再是交互式界面,成功与否都有信息输出,如果不想看可以将信息定向到/dev/null /dev/null 数据黑洞 /dev/zero 零生成器,要多少有多少 root用户能够添加修改其他用户密码 普通用户只能够修改自己的密码 没有密码的用户不能修改密码 passwd命令操作的是/etc/shadow文件 删除用户: #userdel [option]... login_name 删除指定用户 -r 删除用户的家目录 组信息修改: #groupmod [option]... group_name 基础笔记二 2017-03-22 评论 2706 次浏览 自用一键LAMP源码环境(CentOS6.8) ``` echo "LAMP starting...." #先检查光盘是否挂载 VALUE1=$(df -h |grep "/dev/sr0" >/dev/null) VALUE2=$(df -h |grep "/dev/sr1" >/dev/null) if [ -z "$VALUE1" ]; then if [ -b /dev/sr0 ]; then mkdir -p /ISO/cdrom1 mount -t iso9660 /dev/sr0 /ISO/cdrom1 else echo "/dev/sr0 is not exiest!" exit 1 fi fi if [ -z "$VALUE2" ]; then if [ -b /dev/sr1 ]; then mkdir -p /ISO/cdrom2 mount -t iso9660 /dev/sr1 /ISO/cdrom2 else echo "/dev/sr1 is not exiets!" exit 1 fi fi if [ -f /etc/yum.repos.d/CentOS-Base.repo ]; then mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak fi yum clean all yum list if [ "$?" == "0" ]; then echo "yum is ok" else #判断光盘大小,用于指定顺序 CD1=$(df -P |grep "/dev/sr0" |awk -F ' ' '{print $3}') CD2=$(df -P |grep "/dev/sr1" |awk -F ' ' '{print $3}') if [ $CD1 -gt $CD2 ]; then CDROM1="/ISO/cdrom1" CDROM2="/ISO/cdrom2" else CDROM1="/ISO/cdrom2" CDROM2="/ISO/cdrom1" fi echo ' [c6-media] name=CentOS-software-package baseurl=file://$CDROM1 file://$CDROM2 gpgchk=0 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6' >/etc/yum.repos.d/CentOS-Media.repo fi sed -i '7s/enforcing/disabled/g' /etc/selinux/config if [ "$?" == "0" ]; then echo "selinux is close,next reboot come into force!this is Temporary effective." setnforce 0 fi iptables -F #iptables -A INPUT -p tcp -dport 80 -j ACCEPT service iptables stop chkconfig iptables off if [ -d /lamp ]; then cd /lamp else echo "/lamp is not exist!" exit 1 fi for i in $(ls); do [[ "$i" =~ ".tar" ]] && tar -xvf $i [[ "$i" =~ ".zip" ]] && unzip $i done DF1=$(df -Ph |grep "/usr" |awk -F ' ' '{print $4}' |cut -d "G" -f 1) DF2=$(df -Ph |grep "\/$" |awk -F ' ' '{print $4}' |cut -d "G" -f 1) if [ -n "$DF1" ]; then DF3=$(echo "$DF1" |sed "s/[0-9]//g") if [ -z "$DF3" ]; then if [ $DF1 -ge 3 ]; then echo -e "\033[32mcheck disk is ok! \033[0m" else echo -e "\033[31mdisk is full\033[0m" fi fi else echo "Tips:/usr is not alone mount." fi if [ -n "$DF2" ]; then DF4=$(echo "$DF2" |sed 's/[0-9]//g') if [ -z "$DF4" ]; then if [ $DF2 -ge 3 ]; then echo -e "\033[32mcheck disk is ok! \033[0m" else echo -e "\033[31mdisk is full\033[0m"; exit 1 fi fi else echo 'Tips:/ is not alone mount.' fi yum -y install gcc gcc-c++ #[ "$?" == "0" ] && "\033[32;2mgcc is OK!\033[0m" || echo -e "\033[31:2mgcc install fail!" yum -y install libxml2-devel yum -y install python-devel cd /lamp/libxml2-2.9.1 ./configure --prefix=/usr/local/libxml2/ if [ "$?" == "0" ];then make else echo "libxml2 not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "libxml2 not make install" exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2mlibxml2-2.9.1 is not install!\033[0m" && exit 11 cd /lamp/libmcrypt-2.5.8 ./configure --prefix=/usr/local/libmcrypt/ if [ "$?" == "0" ]; then make else echo "libmcrypt is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "libmcrypt is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2mlibmcrypt-2.5.8 is not install!\033[0m" && exit 11 cd /lamp/libmcrypt-2.5.8/libltdl ./configure --enable-ltdl-install if [ "$?" == "0" ]; then make else echo "libltdl is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "libltdl is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2mlibmcrypt-2.5.8/libltdl is not install!\033[0m" && exit 11 cd /lamp/mhash-0.9.9.9 ./configure if [ "$?" == "0" ]; then make else echo "mhssh-0.9.9.9 not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "mhash-0.9.9.9 not make install" exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2mmhash-0.9.9.9 is not install!\033[0m" && exit 11 ############################################################################################################ cd /lamp/mcrypt-2.6.8 #此处变量报错,改为掉后恢复正常。 LD_LIBRARY_PATH=/usr/local/libmcrypt/lib:/usr/local/lib ./configure --with-libmcrypt-prefix=/usr/local/libmcrypt if [ "$?" == "0" ]; then make else echo "mcrypt not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "mcrypt not make install" exit 11 fi ################################################################################################################ [ "$?" != "0" ] && echo -e "\033[31;2mmcrypt-2.6.8 is not install!\033[0m" && exit 11 cd /lamp/zlib-1.2.3 ./configure if [ "$?" == "0" ]; then sed -i '21s/CFLAGS=-O3 -DUSE_MMAP/CFLAGS=-O3 -DUSE_MMAP -fPIC/g' ./Makefile; make else echo "zlib is not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "zlib is not make install" exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m zlib-1.2.3 is not install!\033[0m" && exit 11 cd /lamp/libpng-1.2.31 ./configure --prefix=/usr/local/libpng if [ "$?" == "0" ]; then make else echo "libpng is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "libpng is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m libpng-1.2.31 is not install!\033[0m" && exit 11 mkdir -p /usr/local/jpeg6/{bin,lib,include,/man/man1} yum -y install libtool* cd /lamp/jpeg-6b \cp -f /usr/share/libtool/config/config.sub ./ \cp -f /usr/share/libtool/config/config.guess ./ cd /lamp/jpeg-6b ./configure --prefix=/usr/local/jpeg6/ --enable-shared --enable-static if [ "$?" == "0" ]; then make else echo "jpeg is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "jpeg is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m jpeg-6b is not install!\033[0m" && exit 11 cd /lamp/freetype-2.3.5 ./configure --prefix=/usr/local/freetype/ if [ "$?" == "0" ]; then make else echo "freetype is not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "freetype is make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m freetype-2.3.5 is not install!\033[0m" && exit 11 \cp -rf /lamp/apr-1.4.6 /lamp/httpd-2.4.7/srclib/apr \cp -rf /lamp/apr-util-1.4.1 /lamp/httpd-2.4.7/srclib/apr-util cd /lamp/pcre-8.34 ./configure if [ "$?" == "0" ]; then make else echo "pcre-8.34 is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "pcre-8.34 is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m pcre-8.34 is not install!\033[0m" && exit 11 yum -y install openssl-devel cd /lamp/httpd-2.4.7 ./configure --prefix=/usr/local/apache2 --sysconfdir=/usr/local/apache2/etc --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared if [ "$?" == "0" ]; then make else echo "httpd-2.4.7 is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "httpd-2.4.7 is not make install." exit 11 fi #/usr/local/apache2/bin/apachectl start #[ "$?" == "0" ] && echo "test apache start is ok!" || echo "apache start is fail.check selinux."; exit 1 #ps aux |greep --color "httpd" #sleep 1 #netstat -tlun |grep --color ":80" #sleep 1 echo ' #!/bin/bash #Version:0.0.0 #Author:stone #Discription:apache start scripts # chkconfig: 2345 66 33 # discription:apache start httpd="/usr/local/apache2/bin/apachectl" case $1 in start) $httpd start ;; stop) $httpd stop ;; status) $httpd status ;; restart) $httpd stop sleep 1 $httpd start ;; --help) echo "use start|stop|restart|status" ;; *) echo "use start|stop|restart|status" ;; esac' >/etc/init.d/httpd chmod +x /etc/init.d/httpd chkconfig --add httpd chkconfig httpd on service httpd start yum -y install ncurses-devel cd /lamp/ncurses-5.9 ./configure --with-shared --without-debug --without-ada --enable-overwrite if [ "$?" == "0" ]; then make else echo "ncurses-5.9 is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "ncurses-5.9 is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m ncurses-5.9 is not install!\033[0m" && exit 11 yum -y install cmake yum -y install bison useradd -r -s /sbin/nologin mysql cd /lamp/mysql-5.5.48 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 if [ "$?" == "0" ]; then make else echo "mysql is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "mysql is not make install;" exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m mysql-5.5.48 is not install!\033[0m" && exit 11 cd /usr/local/mysql/ chown -R root . chown -R mysql data \cp -rf support-files/my-medium.cnf /etc/my.cnf cd /usr/local/mysql /usr/local/mysql/scripts/mysql_install_db --user=mysql & service mysqld start /usr/local/mysql/bin/mysqld_safe --user=mysql & \cp -a /lamp/mysql-5.5.48/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld #给脚本执行权限 chkconfig --add mysqld chkconfig mysqld on service mysqld restart #数据库必须启动起来才可以设置密码 /usr/local/mysql/bin/mysqladmin -uroot password 123456 service mysqld stop #echo ' #show database; #use test; #show tables; #\s #exit #' | /usr/local/mysql/bin/mysql -u root -p123 yum -y install libtool* cd /lamp/php-7.0.7 ./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/ --with-apxs2=/usr/local/apache2/bin/apxs --with-libxml-dir=/usr/local/libxml2/ --with-jpeg-dir=/usr/local/jpeg6/ --with-png-dir=/usr/local/libpng/ --with-freetype-dir=/usr/local/freetype/ --with-mcrypt=/usr/local/libmcrypt/ --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-soap --enable-mbstring=all --enable-sockets --with-pdo-mysql=/usr/local/mysql --with-gd --without-pear if [ "$?" == "0" ]; then make else echo "php is not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "php is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m php-7.0.7 is not install!\033[0m" && exit 11 sed -i '/AddType.*tgz/i\AddType application/x-httpd-php .php .phtml' /usr/local/apache2/etc/httpd.conf sed -i '/AddType.*tgz/i\AddType application/x-httpd-php-source .phps' /usr/local/apache2/etc/httpd.conf yum -y install openssl-devel cd /lamp/php-7.0.7/ext/openssl mv config0.m4 config.m4 /usr/local/php/bin/phpize ./configure --with-openssl --with-php-config=/usr/local/php/bin/php-config if [ "$?" == "0" ]; then make else echo "php/ext/openssl is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "php/ext/openssl is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m php-7.0.7/ext/openssl is not install!\033[0m" && exit 11 cd /lamp/pecl-memcache-php7 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config if [ "$?" == "0" ]; then make else echo "pecl-memcache is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "pecl-memcache is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m pecl-memcache-php7 is not install!\033[0m" && exit 11 sed -i 's@extension_dir.*@extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20151012@g"' /usr/local/php/etc/php.ini sed -i 's@; extension="openssl.so";@extension="openssl.so";@g' /usr/local/php/etc/php.ini sed -i 's@; extension="memcache.so";@extension="memcache.so";@g' /usr/local/php/etc/php.ini yum -y install libevent-devel cd /lamp/memcached-1.4.17 ./configure --prefix=/usr/local/memcache if [ "$?" == "0" ]; then make else echo "memcache is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "memcache is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m memcached-1.4.17 is not install!\033[0m" && exit 11 useradd -r -s /sbin/nologin memcache /usr/local/memcache/bin/memcached -umemcache & ln -s /usr/local/memcache/bin/memcached /usr/local/memcached \cp /lamp/memcached-1.4.17/scripts/memcached.sysv /etc/init.d/memcached sed -i 's@daemon memcached@daemon /usr/local/memcache/bin/memcached@' /etc/init.d/memcached sed -i 's@killproc memcached@killproc /usr/local/memcache/bin/memcached@' /etc/init.d/memcached #phpmyadmin 的版本会影响登录时的显示,此版本会在登录时弹出对话框。 \cp -fr /lamp/phpMyAdmin-4.1.4-all-languages /usr/local/apache2/htdocs/phpmyadmin cd /usr/local/apache2/htdocs/phpmyadmin \cp -fr config.sample.inc.php config.inc.php sed -i '29s/cookie/http/' /usr/local/apache2/htdocs/phpmyadmin/config.inc.php #添加用户,并修改apache主配置文件内容 groupadd www useradd -r -g www -s /sbin/nologin www sed -i '160s@User.*@User www@g' /usr/local/apache2/etc/httpd.conf sed -i '161s@Group.*@Group www@g' /usr/local/apache2/etc/httpd.conf sed -i '249s@$@& index.php@' /usr/local/apache2/etc/httpd.conf service httpd restart #重启服务 echo -e "\033[32;2mLAMP is OK!\033[0m" ``` shell脚本 2017-03-21 评论 2578 次浏览 第五节——bash的基础特性 命令历史#history 相关的环境变量: $HISTSIZE 命令的历史条数 $HISTFILE 命令历史文件目录~/.bash_history $HISTFILESIZE 命令历史文件记录历史命令最大值 #history –d OFFSET(命令历史编号) -c 清空命令历史 -a 手动追加ache中的命令至缓存文件 ##(数字) 显示命令历史中最近##条命令 #!## 执行命令历史中第##条命令 #!! 执行上一次执行的命令 #!string 执行最近一个以指定字符串开始的命令 #!$ 调用上一条命令的最后一个参数 #ESC,. 在当前光标处调用上一条命令的参数 #Alt+. 调用上一条命令的参数在当前光标处 控制命令历史的记录方式: 环境变量:HISTCONTROL ignoredups 忽略重复的命令,所谓的重复就是指连续且相同 ignorespace 忽略以空白开头的命令 ignoreboth 以上两项都生效 #export HISTCONTROL=“ignorespace” 变量的声明方式,只对当前shell及其子shell生效 命令补全: 当我们在命令行总键入命令的时候,有一种简便的方式自动补全需要的命令,就是使用Tab键,当命令唯一时直接补全命令,当命令不唯一时列出所有相关的命令。 Tab键连续敲两次 为什么命令行下能够实现命令的补全?这与bash执行命令的方式有关。 内部命令就是shell程序自带的命令。 外部命令:bash会根据PATH环境变量定义的路径,自左而右在每个目录下搜索给定命令名称命名的文件,第一次找到的即为要执行的命令,找到以后会以hash的方式存储起来,如果将某个命令执行后移除,而又添加到了PATH环境变量中,但是命令就是执行失败,这时候就需要清空hash。hash –r 清空所有命令缓存。 路径补全: bash将用户给出的字符串作为路径的开头,并在其指定上级目录下进行搜索,如果搜索结果唯一则补全,如果不唯一则给出列表。 命令行展开: ~ 展开为用户的主目录 ~USERNAME 展开为指定用户的主目录 {} 可承载一个以逗号分隔的列表,并将其展开为多个路径。 /tmp/{a,b}=/tmp/a,/tmp/b 命令的执行状态结果: 成功 0 失败 1-255 失败的原因有很多 bash使用特殊变量$?,保存最近一条命令的执行状态结果。 程序的返回值:执行结果 程序的执行状态结果:成功,失败。 别名: #alias [name=’value’] 对命令进行别名 name为新定义的命令名称 value为定义的命令 命令别名只对当前shell进程有效,永久有效需要写入配置文件 ~/.bashrc 写入对应用户的家目录下的.bashrc文件 /etc/bashrc 写入对所有用户生效。 写入配置文件不会立即生效,需要重新读取或者重启。 source /path/to/config_file . /path/to/config_file 撤销别名: #unalias [-a] name(别名) -a 撤销所有别名 当我们不想执行别名,而想执行命令的原有意思时使用反斜线 #\COMMAND(alias) 执行命令原有的意思 bash的快捷键: ctrl + L 清屏操作 #clear 清屏操作 ctrl + a 将光标跳至首部 ctrl + e 将光标跳至尾部 ctrl + c 取消命令的执行,终止命令的执行 ctrl + u 删除命令行行首至光标处的内容 ctrl + k 删除光标所在处至命令行行尾的内容 bash的I/O重定向以及管道: 我们知道,程序是由指令+数据组成的 读入数据:input 输出数据:output 标准输入:缺省(默认)从键盘读取,描述符:数字0 计算机识别文件、用户进程都是靠ID号来识别的,我们用户看到的是文件名,但是在打开文件,内核内部为了实现文件追踪,会给打开的文件分配ID号,这个ID号称为文件描述符。 打开的文件都有一个fd(file descriptor文件描述符)。 程序运行结束时有数据输出,数据输出可以是到文件、到屏幕、到打印机等等,这么多位置应当有一个默认的输出位置。 标准输出:输出到显示器monitor,描述符为数字1 标准错误输出:输出到显示器monitor,描述符为数字2 I/O的重定向: 不从标准输入读取数据 不从标准输出输出数据 改变默认位置即为重定向。 输出重定向: COMMAND > NEW_POS,单个‘>’为覆盖重定向 COMMAND >> NEW_POS 两个‘>’为追加重定向 为了防止意外将文件内容覆盖,我们可以使用命令限制对文件的覆盖: #set –C 禁止将内容覆盖输出到已有文件中,但是我们确实需要覆盖怎么办?难道取消覆盖后在设置回来? #cat /etc/issue > |/tmp/test 强制覆盖文件 #set +C 允许将内容覆盖输出到文件。 错误输出是单独的数据流,使用2>进行重定向。 &>:合并数据流,定向至同一文件。 &>>:追加重定向,合并两个数据流,定向至同一文件。 #COMMAND >/path/to/file.out2>&1 将2定向到1 #COMMAND >>/path/to/file.out2>>&1 将2定向到1 输入重定向: < /path/to/filename #tr [option] SET1(字符集1) [SET2](字符集2) 不支持跟文件,作用是转换或者删除字符 -d 如果只有一个字符集,则删除出现在字符集中的内容。 如果有两个字符集,则将SET1 中的字符集按位替换成SET2中的字符。 #tr abc ABC < /etc/fstab 一般只使用一个参数,多个使用循环实现 ‘<<’表示此处生成文档 #cat<< EOF >abc >ABC >xyz >XYZ >EOF 保存键盘上键入的数据,此处是输出到屏幕,EOF为指定的结束符,我们可以指定其他字符。 #cat >>/tmp/test<<EOF >a >b >A >EOF 定向到文件中 EOF为特定字符串,End Of File #tee[option] file 一路输入两路输出,一路定向到文件,一路打印到屏幕。 tee是覆盖输出,可以在管道中截取数据。 管道:COMMAND1 |COMMAND2 |COMMAND3.... 管道的符号为‘|’,表示将前面一个命令的执行结果送入后一个命令,随后一个命令会在当前shell的子shell中执行。 shell下的编程: bash为我们提供了编程环境,依靠调用系统所提供的命令(已存在的二进制程序),组织成一定形式解释执行。 说道解释执行,我们就需要说一说程序的变成风格和编程语言分类。 程序的变成风格: 面向过程:以指令为中心,数据服务于指令。 面向对象:以数据为中心,指令服务于数据。 我们之前说过,程序是由指令和数据组成的。计算机只能识别二进制的指令,所以无论我们使用什么编程语言,最终都要转换为二进制指令才可以。 编程语言按接近人类语言的程度分为高级语言和低级语言,高级并不是说很厉害,高级指的是接近人类语言习惯,还有一些语言接近底层硬件,但是对人却不友好,所以称为低级语言。 编程语言按照执行方式可以分为编译型语言和解释性语言: 编译类型的语言:高级语言-->编译器-->目标代码 C语言、C++、JAVA等等 编译类型语言编写好代码后,需要通过编译器将代码转换成静态的二进制程序,可以独立执行。 解释类型的语言:高级语言-->解释器—>目标代码 shell、perl 基础笔记二 2017-03-21 评论 2664 次浏览 nginx自启动脚本 ``` #!/bin/bash #chkconfig: 2345 99 33 #description: nginx server control tools ngxc="/usr/local/nginx/sbin/nginx" pidf="usr/local/nginx/logs/nginx.pid" ngxc_fpm="/usr/local/php/sbin/php-fpm" pidf_fpm="/usr/local/php/var/run/php-fpm.pid" case "$1" in start) $ngxc -t &> /dev/null if [ $? -eq 0 ];then $ngxc $ngxc_fpm echo "nginx service start success!" else $ngxc -t fi ;; stop) kill -s QUIT $(cat $pidf) kill -s QUIT $(cat $pidf_fpm) echo "nginx service stop success!" ;; restart) $0 stop $0 start ;; reload) $ngxc -t &> /dev/null if [ $? -eq 0 ];then kill -s HUP $(cat $pidf) kill -s HUP $(cat $pidf_fpm) echo "reload nginx config success!" else $ngxc -t fi ;; *) echo "please input stop|start|restart|reload." exit 1 esac ``` shell脚本 2017-03-20 评论 2676 次浏览 第四节——linux相关 文件系统: 在linux上所有的文件想要被访问到,必须要通过一个叫做根文件系统的位置开始,但是这并不意味着linux就不需要分区了。为了实现文件系统或者实现多个文件系统独立管理,linux下也需要分区,但是任何一个分区在完成分区之后是不能够实现自我独立访问的,二是只能与现有的根一同被访问。 所有的分区都会被关联到根上。 根文件系统(rootfs) FHS定义的linux文件系统的标准 /boot 引导文件存放目录,内核文件vmlinuz、引导加载器bootloader、grub都在此目录中。 /bin 共所有用户使用的基本命令,不能关联到独立的分区,这是系统启动时就会使用到的命令。 /sbin 管理类命令,不能关联到独立分区,系统启动时会用到的程序。 /lib 基本的共享库文件,以及内核模块文件/lib/modules /lib64 这是在64位操作系统上才有的目录,库文件基本上都位于此目录下,为了向下兼容,原/lib目录下也有相应的库文件。 /etc 应用程序的配置文件存放目录,大多为纯文本文件。 /etc/opt 早些时候程序安装在此路径下 /etc/X11 图形的现实规范,为xwindow提供配置文件(x协议,11位版本号) /home 用户的家目录 /home/username 普通用户的家目录 /root 管理员的家目录 /media 便携式设备的挂载目录 /mnt 临时文件系统的挂载目录 /dev 设备文件目录(特殊文件或者特殊文件存放目录) b:block device随机访问 c:character device 线性访问 /opt 第三方应用程序安装位置 /srv 系统上运行的服务用到的数据放于此 /tmp 临时文件存放目录 以上目录除了/boot、/home外都不能独立分区 /usr usr is shareable read-only date全局只读数据,通常建议此目录单独分区挂载。 /usr/bin 普通用户可执行的命令 /usr/sbin 管理员可执行的命令 /usr/lib 库文件 /usr/lib64 库文件 /usr/share 放置共享文件的目录 /usr/local 取代/opt目录的第三方程序的安装位置 /usr/include c程序的头文件,调用库文件的接口 /usr/src 源代码的存放目录 除了启动外的基本应用程序都放在/usr目录下,保证系统拥有完整的功能提供服务。 /var 存放经常发生变动的文件 /var/cache 应用程序的date缓存目录 /var/lib 应用程序状态信息数据 /var/local 专用于为/usr/local下的应用程序提供存储可变date /var/lock 锁文件的存放目录 /var/log 日志目录及文件存于此目录下 /var/opt 为/opt下的程序存储可变数据 /var/run 与运行中进程相关的数据,通常存放进程的PID文件 /var/spool 缓冲池 /var/tmp 存储系统两次重启之间产生的数据 /proc 伪文件系统,用于输出内核与进程信息相关的虚拟文件系统。 /sys 伪文件系统,输出当前系统上的硬件设备相关信息的虚拟文件系统。 /misc 用于存放杂项man7 /selinux security enhanced linux 内核中实现安全策略等信息的存放位置 /lost+found 是由ext文件系统产生 linux上应用程序的组成部分以及可能存放的位置: 二进制程序:/bin /sbin /usr/bin /usr/sbin /usr/local/bin/usr/local/sbin 库文件:/bin /sbin /usr/{bin,sbin}/usr/local/{bin,sbin} 配置文件:/etc /etc/DIRECTORY /usr/local/etc 帮助文件:/usr/share/man /usr/share/doc/usr/local/share/{man,doc} linux下的文件类型,从磁盘上的组织形式区分: -(f) 普通文件 d 目录文件,在目录文件中的数据为,通过这个目录能访问到的文件或者目录的路径。即从文件名到文件元数据的映射关系。 b 块设备文件,只有元数据 c 字符设备文件,只有元数据 l 符号链接文件 p 管道文件 s 套接字文件,socker(接口),是IP:端口的形式,实现主机内通信,跨主机通信使用协议。 文件名通配:glob(globbing) what is glob? glob是bash中用于实现文件名通配的机制。 通配符:* ? [] *表示任意长度的任意字符 ?表示任意单个字符 [list] 匹配指定范围内[list]任意单个字符 [0-9] 表示所有的数字 [a-z] 表示不区分大小写字母 [A-Z] 表示大写字母 如果我们需要匹配连字符‘-’,需要使用反斜线转义。 专用字符集:不包括通配符[] [:alnum:] 任意数字或者字母 [:alpha:] 任意字母 [:space:] 空格 [:lower:] 小写字母 [:digit:] 任意数字,相当于0-9,此处没有匹配符[] [:punct:] 标点符号 #ls /tmp/l*[0-9]*[[:lower:]] 以字母l开头,中间有一个数字,并以小写字母结尾的文件。 基础笔记二 2017-03-20 评论 2677 次浏览 第三节——基础命令 #date 显示或者设置系统时间 #date [option]... [+format] 以指定的格式显示时间 [option]选项很少使用,这里就不多讲 [+format] 这是格式的指定方式,前面有一个’+’ %A,%a 显示星期几 #date +%A %D 以月/日/年的格式显示时间 #date+%D %F 以年-月-日的格式显示时间 #date+%F %T 获取当前系统时间 #date +T %H 时 %M 分 %S 秒 #date [MMDDhhmmYY[cc]][.ss] 设置时间 MM两位的月份 DD 两位的日期 hh 两位的小时 mm 两位的分钟 YY 两位的年份(末尾两位) cc 四位的年份 .ss 两位的秒使用点‘.’分离 在linux中有两个时钟: 一是系统时钟:linux内核通过CPU工作频率进行计时。 二是硬件时钟:实时时钟,使用#clock,#hwclock查看硬件时钟。 #hwclock 查询硬件时钟 -s,--hctosys把系统时间设置为硬件时钟相同 -w,—systohc 将硬件时钟设置为系统时钟相同 #cal 显示日历 文件时间戳管理工具: #touch [option]/path/to/filename 修改文件的时间戳,当文件不存在时创建文件 -a 修改访问时间 -m 修改修改时间 -t 指明时间戳,同-a/-m共用 [[cc]YYMMDDhhmm[ss]时间格式 -c 不创建文件 当touch一个文件时,文件不存在则默认创建该文件,当文件存在时只修改其时间戳。 一个文件的组成部分有两个:metadata元数据,date数据。 #stat /path/to/filename 查看文件的状态。 文件有三个时间戳: access time 访问时间atime 读取文件内容叫访问 modify time 修改时间 mtime 修改文件内容叫修改 change time 改变时间 ctime 元数据的改变叫做改变,即上面两项任何一项变化都会修改改变时间。 目录相关的命令: 每一个用户都有自己的家目录,在bash中家目录使用特殊的展开符代替’~’ #cd 进行目录的切换 #cd ~切换到当前用户的家目录 #cd – 短横线代表上一级目录,可以快速实现在两个目录间切换。 root用户,即管理员可以切换到主机上任意用户的家目录 #cd ~USER linux操作系统中,所有文件都在根目录下,所以一个文件的绝对路径都是由根目录开始的,但是在目录结构中有这么两个概念: 一个是绝对路径,上面提到过了,绝对路径就是由根开始的路径。 一个是相对路径,相对路径是以当前位置为起始的路径。 当前目录(current directory),也称作working directory。 #pwd(printing working directory) 打印当前路径。 pwd是内建的环境变量,保存了当前目录路径,为什么pwd命令能够实现当前位置的显示?因为有pwd变量 $OLDPWD 上一次所在目录路径,这也就是为什么能够实现目录的切换。因此cd –相当于cd $OLDPWD #ls list,列出指定目录(路径)下的文件列表 -a,--all显示所有文件,包括隐藏文件 -A 除了. ..即当前目录,上一级目录外都显示。 -l 使用长列表信息显示 -R(--recursive)递归显示 -h人性化显示,即文件大小单位的换算 -d 显示当前目录的信息(目录本身),常与-l一同使用 -r逆序的格式显示 长列表显示的时候有很多列 第一列第一个字符为文件类型,余下的九个字符为权限的表示位。 第二列表示文件被硬链接的次数 第三列为文件的属主 第四列为文件的属组 第五列为文件的大小(默认单位为字节) 第六列为时间,为最近一次被修改的时间 第七列为文件名 文件的类型: - 普通文件 d 目录文件 l 链接文件 b 块设备 c 字符设备 p 管道 s 套接字文件 时间戳: atime(access time)访问时间 mtime(modify time)修改时间,指的是修改内容,只要修改文件就会改变,修改时间属于元信息 ctime(change time)改变时间,指的是元信息的改变,改变不一定会修改。 #statfilename 显示文件或者文件系统的状态,获取指定文件的元数据信息 #ls /path/to/dir 查看指定目录下的文件,ls命令默认启用了别名,别名中包含了颜色显示的规则。 黑色 普通文件 蓝色 目录文件 绿色 拥有可执行权限的文件 #mkdir [option] /path/to/somewhere -p 如果创建目录重复则不再报错,且目标目录的父目录不存在时创建,为递归创建,从右到左查找路径,不存在则创建。 -v 喜爱你是详细信息 -m创建目录的同时直接指定权限 #rmdir [option]/path/too/somewhere 只能删除空目录 -v 显示过程 -p 递归删除 #tree 列出目录的层级结构 -L # 限制显示层级 -d 只显示目录 -P pattern模式,只显示由指定pattern匹配到的路径。 文件查看命令: #cat /path/to/filename(concatenate)连接文件并且显示出来,cat命令不会翻屏,是一次性贴入屏幕。 -E 显示行结束符(换行符‘$’) -T 显示制表符 -n 对行进行编号,只是显示时间编号,对文件内容无影响。 当cat命令没有跟任何参数时,会默认从键盘读取,这也就是我们键入cat命令后为什么退不出来。 cat命令还可以将两个或者两个以上的文件连接起来显示 #tac /path/to/filename 将文件反向显示,即最后一行成为第一行,第一行成为最后一行。 有的时候我们并不知道文件的类型,是不是可执行文件,是不是文本文件等等,我们总不能瞎猜对吧? #file /path/to/filename 查看文件内容类型,顺便回顾一下,type是查看命令的类型,是内建命令还是外部命令。 #more [option] filename 查看文件内容 -d 显示翻页及退出提示 +n 定位显示,从第几行开始 #less [option] filename 查看文件内容 man命令调用的便是less,不再赘述其使用方法。 #head [option] filename 查看文件指定内容 -n # 指定查看文件前#行 -c # 指定查看文件前#个字节 #tail [option] filename 查看文件指定内容 -n #显示文件后#行内容 -c # 基础笔记二 2017-03-19 评论 2641 次浏览 « 前一页1...10111213141516...33后一页 » 关于博主 几人行 纸上谈来终觉浅,绝知此事要躬行。 了解更多 文章分类 OpenStack+Ceph(5) Python笔记(0) CI/CD(4) Ansible(1) Docker笔记(3) shell脚本(24) Linux_quession&answer(2) 调优文档(4) 服务(6) 随手笔记(21) 妄尘集(20) 基础笔记二(8) 基础笔记综合整理(20) 给自己讲linux(114) 最受欢迎的文章 博客停更通知( 21,641 人看过 ) OpenStack(一)( 13,772 人看过 ) 情书( 12,816 人看过 ) 我的青春里没有爱情( 11,092 人看过 ) 操作系统原理--Linux篇(摘录)( 10,199 人看过 ) OpenStack+Ceph云平台卷清理操作( 10,092 人看过 ) OpenStack+Ceph磁盘解锁( 9,778 人看过 ) Docker container 修改MAC( 9,640 人看过 ) JumpServer简介( 8,702 人看过 ) 防火墙规则笔记整理( 8,472 人看过 ) 最近回复 wuzetian: alert("你好,我是一个警告框!"); wuzetian: function myFunction() { alert("你好,我是一个警告框!"); } wuzetian: http://fxme.top/index.php/page/2/ wuzetian: http://fxme.top/index.php/page/2/ wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习
自用一键LAMP源码环境(CentOS6.8) ``` echo "LAMP starting...." #先检查光盘是否挂载 VALUE1=$(df -h |grep "/dev/sr0" >/dev/null) VALUE2=$(df -h |grep "/dev/sr1" >/dev/null) if [ -z "$VALUE1" ]; then if [ -b /dev/sr0 ]; then mkdir -p /ISO/cdrom1 mount -t iso9660 /dev/sr0 /ISO/cdrom1 else echo "/dev/sr0 is not exiest!" exit 1 fi fi if [ -z "$VALUE2" ]; then if [ -b /dev/sr1 ]; then mkdir -p /ISO/cdrom2 mount -t iso9660 /dev/sr1 /ISO/cdrom2 else echo "/dev/sr1 is not exiets!" exit 1 fi fi if [ -f /etc/yum.repos.d/CentOS-Base.repo ]; then mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak fi yum clean all yum list if [ "$?" == "0" ]; then echo "yum is ok" else #判断光盘大小,用于指定顺序 CD1=$(df -P |grep "/dev/sr0" |awk -F ' ' '{print $3}') CD2=$(df -P |grep "/dev/sr1" |awk -F ' ' '{print $3}') if [ $CD1 -gt $CD2 ]; then CDROM1="/ISO/cdrom1" CDROM2="/ISO/cdrom2" else CDROM1="/ISO/cdrom2" CDROM2="/ISO/cdrom1" fi echo ' [c6-media] name=CentOS-software-package baseurl=file://$CDROM1 file://$CDROM2 gpgchk=0 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6' >/etc/yum.repos.d/CentOS-Media.repo fi sed -i '7s/enforcing/disabled/g' /etc/selinux/config if [ "$?" == "0" ]; then echo "selinux is close,next reboot come into force!this is Temporary effective." setnforce 0 fi iptables -F #iptables -A INPUT -p tcp -dport 80 -j ACCEPT service iptables stop chkconfig iptables off if [ -d /lamp ]; then cd /lamp else echo "/lamp is not exist!" exit 1 fi for i in $(ls); do [[ "$i" =~ ".tar" ]] && tar -xvf $i [[ "$i" =~ ".zip" ]] && unzip $i done DF1=$(df -Ph |grep "/usr" |awk -F ' ' '{print $4}' |cut -d "G" -f 1) DF2=$(df -Ph |grep "\/$" |awk -F ' ' '{print $4}' |cut -d "G" -f 1) if [ -n "$DF1" ]; then DF3=$(echo "$DF1" |sed "s/[0-9]//g") if [ -z "$DF3" ]; then if [ $DF1 -ge 3 ]; then echo -e "\033[32mcheck disk is ok! \033[0m" else echo -e "\033[31mdisk is full\033[0m" fi fi else echo "Tips:/usr is not alone mount." fi if [ -n "$DF2" ]; then DF4=$(echo "$DF2" |sed 's/[0-9]//g') if [ -z "$DF4" ]; then if [ $DF2 -ge 3 ]; then echo -e "\033[32mcheck disk is ok! \033[0m" else echo -e "\033[31mdisk is full\033[0m"; exit 1 fi fi else echo 'Tips:/ is not alone mount.' fi yum -y install gcc gcc-c++ #[ "$?" == "0" ] && "\033[32;2mgcc is OK!\033[0m" || echo -e "\033[31:2mgcc install fail!" yum -y install libxml2-devel yum -y install python-devel cd /lamp/libxml2-2.9.1 ./configure --prefix=/usr/local/libxml2/ if [ "$?" == "0" ];then make else echo "libxml2 not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "libxml2 not make install" exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2mlibxml2-2.9.1 is not install!\033[0m" && exit 11 cd /lamp/libmcrypt-2.5.8 ./configure --prefix=/usr/local/libmcrypt/ if [ "$?" == "0" ]; then make else echo "libmcrypt is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "libmcrypt is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2mlibmcrypt-2.5.8 is not install!\033[0m" && exit 11 cd /lamp/libmcrypt-2.5.8/libltdl ./configure --enable-ltdl-install if [ "$?" == "0" ]; then make else echo "libltdl is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "libltdl is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2mlibmcrypt-2.5.8/libltdl is not install!\033[0m" && exit 11 cd /lamp/mhash-0.9.9.9 ./configure if [ "$?" == "0" ]; then make else echo "mhssh-0.9.9.9 not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "mhash-0.9.9.9 not make install" exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2mmhash-0.9.9.9 is not install!\033[0m" && exit 11 ############################################################################################################ cd /lamp/mcrypt-2.6.8 #此处变量报错,改为掉后恢复正常。 LD_LIBRARY_PATH=/usr/local/libmcrypt/lib:/usr/local/lib ./configure --with-libmcrypt-prefix=/usr/local/libmcrypt if [ "$?" == "0" ]; then make else echo "mcrypt not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "mcrypt not make install" exit 11 fi ################################################################################################################ [ "$?" != "0" ] && echo -e "\033[31;2mmcrypt-2.6.8 is not install!\033[0m" && exit 11 cd /lamp/zlib-1.2.3 ./configure if [ "$?" == "0" ]; then sed -i '21s/CFLAGS=-O3 -DUSE_MMAP/CFLAGS=-O3 -DUSE_MMAP -fPIC/g' ./Makefile; make else echo "zlib is not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "zlib is not make install" exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m zlib-1.2.3 is not install!\033[0m" && exit 11 cd /lamp/libpng-1.2.31 ./configure --prefix=/usr/local/libpng if [ "$?" == "0" ]; then make else echo "libpng is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "libpng is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m libpng-1.2.31 is not install!\033[0m" && exit 11 mkdir -p /usr/local/jpeg6/{bin,lib,include,/man/man1} yum -y install libtool* cd /lamp/jpeg-6b \cp -f /usr/share/libtool/config/config.sub ./ \cp -f /usr/share/libtool/config/config.guess ./ cd /lamp/jpeg-6b ./configure --prefix=/usr/local/jpeg6/ --enable-shared --enable-static if [ "$?" == "0" ]; then make else echo "jpeg is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "jpeg is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m jpeg-6b is not install!\033[0m" && exit 11 cd /lamp/freetype-2.3.5 ./configure --prefix=/usr/local/freetype/ if [ "$?" == "0" ]; then make else echo "freetype is not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "freetype is make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m freetype-2.3.5 is not install!\033[0m" && exit 11 \cp -rf /lamp/apr-1.4.6 /lamp/httpd-2.4.7/srclib/apr \cp -rf /lamp/apr-util-1.4.1 /lamp/httpd-2.4.7/srclib/apr-util cd /lamp/pcre-8.34 ./configure if [ "$?" == "0" ]; then make else echo "pcre-8.34 is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "pcre-8.34 is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m pcre-8.34 is not install!\033[0m" && exit 11 yum -y install openssl-devel cd /lamp/httpd-2.4.7 ./configure --prefix=/usr/local/apache2 --sysconfdir=/usr/local/apache2/etc --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared if [ "$?" == "0" ]; then make else echo "httpd-2.4.7 is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "httpd-2.4.7 is not make install." exit 11 fi #/usr/local/apache2/bin/apachectl start #[ "$?" == "0" ] && echo "test apache start is ok!" || echo "apache start is fail.check selinux."; exit 1 #ps aux |greep --color "httpd" #sleep 1 #netstat -tlun |grep --color ":80" #sleep 1 echo ' #!/bin/bash #Version:0.0.0 #Author:stone #Discription:apache start scripts # chkconfig: 2345 66 33 # discription:apache start httpd="/usr/local/apache2/bin/apachectl" case $1 in start) $httpd start ;; stop) $httpd stop ;; status) $httpd status ;; restart) $httpd stop sleep 1 $httpd start ;; --help) echo "use start|stop|restart|status" ;; *) echo "use start|stop|restart|status" ;; esac' >/etc/init.d/httpd chmod +x /etc/init.d/httpd chkconfig --add httpd chkconfig httpd on service httpd start yum -y install ncurses-devel cd /lamp/ncurses-5.9 ./configure --with-shared --without-debug --without-ada --enable-overwrite if [ "$?" == "0" ]; then make else echo "ncurses-5.9 is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "ncurses-5.9 is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m ncurses-5.9 is not install!\033[0m" && exit 11 yum -y install cmake yum -y install bison useradd -r -s /sbin/nologin mysql cd /lamp/mysql-5.5.48 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 if [ "$?" == "0" ]; then make else echo "mysql is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "mysql is not make install;" exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m mysql-5.5.48 is not install!\033[0m" && exit 11 cd /usr/local/mysql/ chown -R root . chown -R mysql data \cp -rf support-files/my-medium.cnf /etc/my.cnf cd /usr/local/mysql /usr/local/mysql/scripts/mysql_install_db --user=mysql & service mysqld start /usr/local/mysql/bin/mysqld_safe --user=mysql & \cp -a /lamp/mysql-5.5.48/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld #给脚本执行权限 chkconfig --add mysqld chkconfig mysqld on service mysqld restart #数据库必须启动起来才可以设置密码 /usr/local/mysql/bin/mysqladmin -uroot password 123456 service mysqld stop #echo ' #show database; #use test; #show tables; #\s #exit #' | /usr/local/mysql/bin/mysql -u root -p123 yum -y install libtool* cd /lamp/php-7.0.7 ./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc/ --with-apxs2=/usr/local/apache2/bin/apxs --with-libxml-dir=/usr/local/libxml2/ --with-jpeg-dir=/usr/local/jpeg6/ --with-png-dir=/usr/local/libpng/ --with-freetype-dir=/usr/local/freetype/ --with-mcrypt=/usr/local/libmcrypt/ --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-soap --enable-mbstring=all --enable-sockets --with-pdo-mysql=/usr/local/mysql --with-gd --without-pear if [ "$?" == "0" ]; then make else echo "php is not make" exit 11 fi if [ "$?" == "0" ]; then make install else echo "php is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m php-7.0.7 is not install!\033[0m" && exit 11 sed -i '/AddType.*tgz/i\AddType application/x-httpd-php .php .phtml' /usr/local/apache2/etc/httpd.conf sed -i '/AddType.*tgz/i\AddType application/x-httpd-php-source .phps' /usr/local/apache2/etc/httpd.conf yum -y install openssl-devel cd /lamp/php-7.0.7/ext/openssl mv config0.m4 config.m4 /usr/local/php/bin/phpize ./configure --with-openssl --with-php-config=/usr/local/php/bin/php-config if [ "$?" == "0" ]; then make else echo "php/ext/openssl is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "php/ext/openssl is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m php-7.0.7/ext/openssl is not install!\033[0m" && exit 11 cd /lamp/pecl-memcache-php7 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config if [ "$?" == "0" ]; then make else echo "pecl-memcache is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "pecl-memcache is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m pecl-memcache-php7 is not install!\033[0m" && exit 11 sed -i 's@extension_dir.*@extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20151012@g"' /usr/local/php/etc/php.ini sed -i 's@; extension="openssl.so";@extension="openssl.so";@g' /usr/local/php/etc/php.ini sed -i 's@; extension="memcache.so";@extension="memcache.so";@g' /usr/local/php/etc/php.ini yum -y install libevent-devel cd /lamp/memcached-1.4.17 ./configure --prefix=/usr/local/memcache if [ "$?" == "0" ]; then make else echo "memcache is not make." exit 11 fi if [ "$?" == "0" ]; then make install else echo "memcache is not make install." exit 11 fi [ "$?" != "0" ] && echo -e "\033[31;2m memcached-1.4.17 is not install!\033[0m" && exit 11 useradd -r -s /sbin/nologin memcache /usr/local/memcache/bin/memcached -umemcache & ln -s /usr/local/memcache/bin/memcached /usr/local/memcached \cp /lamp/memcached-1.4.17/scripts/memcached.sysv /etc/init.d/memcached sed -i 's@daemon memcached@daemon /usr/local/memcache/bin/memcached@' /etc/init.d/memcached sed -i 's@killproc memcached@killproc /usr/local/memcache/bin/memcached@' /etc/init.d/memcached #phpmyadmin 的版本会影响登录时的显示,此版本会在登录时弹出对话框。 \cp -fr /lamp/phpMyAdmin-4.1.4-all-languages /usr/local/apache2/htdocs/phpmyadmin cd /usr/local/apache2/htdocs/phpmyadmin \cp -fr config.sample.inc.php config.inc.php sed -i '29s/cookie/http/' /usr/local/apache2/htdocs/phpmyadmin/config.inc.php #添加用户,并修改apache主配置文件内容 groupadd www useradd -r -g www -s /sbin/nologin www sed -i '160s@User.*@User www@g' /usr/local/apache2/etc/httpd.conf sed -i '161s@Group.*@Group www@g' /usr/local/apache2/etc/httpd.conf sed -i '249s@$@& index.php@' /usr/local/apache2/etc/httpd.conf service httpd restart #重启服务 echo -e "\033[32;2mLAMP is OK!\033[0m" ``` shell脚本 2017-03-21 评论 2578 次浏览
第五节——bash的基础特性 命令历史#history 相关的环境变量: $HISTSIZE 命令的历史条数 $HISTFILE 命令历史文件目录~/.bash_history $HISTFILESIZE 命令历史文件记录历史命令最大值 #history –d OFFSET(命令历史编号) -c 清空命令历史 -a 手动追加ache中的命令至缓存文件 ##(数字) 显示命令历史中最近##条命令 #!## 执行命令历史中第##条命令 #!! 执行上一次执行的命令 #!string 执行最近一个以指定字符串开始的命令 #!$ 调用上一条命令的最后一个参数 #ESC,. 在当前光标处调用上一条命令的参数 #Alt+. 调用上一条命令的参数在当前光标处 控制命令历史的记录方式: 环境变量:HISTCONTROL ignoredups 忽略重复的命令,所谓的重复就是指连续且相同 ignorespace 忽略以空白开头的命令 ignoreboth 以上两项都生效 #export HISTCONTROL=“ignorespace” 变量的声明方式,只对当前shell及其子shell生效 命令补全: 当我们在命令行总键入命令的时候,有一种简便的方式自动补全需要的命令,就是使用Tab键,当命令唯一时直接补全命令,当命令不唯一时列出所有相关的命令。 Tab键连续敲两次 为什么命令行下能够实现命令的补全?这与bash执行命令的方式有关。 内部命令就是shell程序自带的命令。 外部命令:bash会根据PATH环境变量定义的路径,自左而右在每个目录下搜索给定命令名称命名的文件,第一次找到的即为要执行的命令,找到以后会以hash的方式存储起来,如果将某个命令执行后移除,而又添加到了PATH环境变量中,但是命令就是执行失败,这时候就需要清空hash。hash –r 清空所有命令缓存。 路径补全: bash将用户给出的字符串作为路径的开头,并在其指定上级目录下进行搜索,如果搜索结果唯一则补全,如果不唯一则给出列表。 命令行展开: ~ 展开为用户的主目录 ~USERNAME 展开为指定用户的主目录 {} 可承载一个以逗号分隔的列表,并将其展开为多个路径。 /tmp/{a,b}=/tmp/a,/tmp/b 命令的执行状态结果: 成功 0 失败 1-255 失败的原因有很多 bash使用特殊变量$?,保存最近一条命令的执行状态结果。 程序的返回值:执行结果 程序的执行状态结果:成功,失败。 别名: #alias [name=’value’] 对命令进行别名 name为新定义的命令名称 value为定义的命令 命令别名只对当前shell进程有效,永久有效需要写入配置文件 ~/.bashrc 写入对应用户的家目录下的.bashrc文件 /etc/bashrc 写入对所有用户生效。 写入配置文件不会立即生效,需要重新读取或者重启。 source /path/to/config_file . /path/to/config_file 撤销别名: #unalias [-a] name(别名) -a 撤销所有别名 当我们不想执行别名,而想执行命令的原有意思时使用反斜线 #\COMMAND(alias) 执行命令原有的意思 bash的快捷键: ctrl + L 清屏操作 #clear 清屏操作 ctrl + a 将光标跳至首部 ctrl + e 将光标跳至尾部 ctrl + c 取消命令的执行,终止命令的执行 ctrl + u 删除命令行行首至光标处的内容 ctrl + k 删除光标所在处至命令行行尾的内容 bash的I/O重定向以及管道: 我们知道,程序是由指令+数据组成的 读入数据:input 输出数据:output 标准输入:缺省(默认)从键盘读取,描述符:数字0 计算机识别文件、用户进程都是靠ID号来识别的,我们用户看到的是文件名,但是在打开文件,内核内部为了实现文件追踪,会给打开的文件分配ID号,这个ID号称为文件描述符。 打开的文件都有一个fd(file descriptor文件描述符)。 程序运行结束时有数据输出,数据输出可以是到文件、到屏幕、到打印机等等,这么多位置应当有一个默认的输出位置。 标准输出:输出到显示器monitor,描述符为数字1 标准错误输出:输出到显示器monitor,描述符为数字2 I/O的重定向: 不从标准输入读取数据 不从标准输出输出数据 改变默认位置即为重定向。 输出重定向: COMMAND > NEW_POS,单个‘>’为覆盖重定向 COMMAND >> NEW_POS 两个‘>’为追加重定向 为了防止意外将文件内容覆盖,我们可以使用命令限制对文件的覆盖: #set –C 禁止将内容覆盖输出到已有文件中,但是我们确实需要覆盖怎么办?难道取消覆盖后在设置回来? #cat /etc/issue > |/tmp/test 强制覆盖文件 #set +C 允许将内容覆盖输出到文件。 错误输出是单独的数据流,使用2>进行重定向。 &>:合并数据流,定向至同一文件。 &>>:追加重定向,合并两个数据流,定向至同一文件。 #COMMAND >/path/to/file.out2>&1 将2定向到1 #COMMAND >>/path/to/file.out2>>&1 将2定向到1 输入重定向: < /path/to/filename #tr [option] SET1(字符集1) [SET2](字符集2) 不支持跟文件,作用是转换或者删除字符 -d 如果只有一个字符集,则删除出现在字符集中的内容。 如果有两个字符集,则将SET1 中的字符集按位替换成SET2中的字符。 #tr abc ABC < /etc/fstab 一般只使用一个参数,多个使用循环实现 ‘<<’表示此处生成文档 #cat<< EOF >abc >ABC >xyz >XYZ >EOF 保存键盘上键入的数据,此处是输出到屏幕,EOF为指定的结束符,我们可以指定其他字符。 #cat >>/tmp/test<<EOF >a >b >A >EOF 定向到文件中 EOF为特定字符串,End Of File #tee[option] file 一路输入两路输出,一路定向到文件,一路打印到屏幕。 tee是覆盖输出,可以在管道中截取数据。 管道:COMMAND1 |COMMAND2 |COMMAND3.... 管道的符号为‘|’,表示将前面一个命令的执行结果送入后一个命令,随后一个命令会在当前shell的子shell中执行。 shell下的编程: bash为我们提供了编程环境,依靠调用系统所提供的命令(已存在的二进制程序),组织成一定形式解释执行。 说道解释执行,我们就需要说一说程序的变成风格和编程语言分类。 程序的变成风格: 面向过程:以指令为中心,数据服务于指令。 面向对象:以数据为中心,指令服务于数据。 我们之前说过,程序是由指令和数据组成的。计算机只能识别二进制的指令,所以无论我们使用什么编程语言,最终都要转换为二进制指令才可以。 编程语言按接近人类语言的程度分为高级语言和低级语言,高级并不是说很厉害,高级指的是接近人类语言习惯,还有一些语言接近底层硬件,但是对人却不友好,所以称为低级语言。 编程语言按照执行方式可以分为编译型语言和解释性语言: 编译类型的语言:高级语言-->编译器-->目标代码 C语言、C++、JAVA等等 编译类型语言编写好代码后,需要通过编译器将代码转换成静态的二进制程序,可以独立执行。 解释类型的语言:高级语言-->解释器—>目标代码 shell、perl 基础笔记二 2017-03-21 评论 2664 次浏览 nginx自启动脚本 ``` #!/bin/bash #chkconfig: 2345 99 33 #description: nginx server control tools ngxc="/usr/local/nginx/sbin/nginx" pidf="usr/local/nginx/logs/nginx.pid" ngxc_fpm="/usr/local/php/sbin/php-fpm" pidf_fpm="/usr/local/php/var/run/php-fpm.pid" case "$1" in start) $ngxc -t &> /dev/null if [ $? -eq 0 ];then $ngxc $ngxc_fpm echo "nginx service start success!" else $ngxc -t fi ;; stop) kill -s QUIT $(cat $pidf) kill -s QUIT $(cat $pidf_fpm) echo "nginx service stop success!" ;; restart) $0 stop $0 start ;; reload) $ngxc -t &> /dev/null if [ $? -eq 0 ];then kill -s HUP $(cat $pidf) kill -s HUP $(cat $pidf_fpm) echo "reload nginx config success!" else $ngxc -t fi ;; *) echo "please input stop|start|restart|reload." exit 1 esac ``` shell脚本 2017-03-20 评论 2676 次浏览 第四节——linux相关 文件系统: 在linux上所有的文件想要被访问到,必须要通过一个叫做根文件系统的位置开始,但是这并不意味着linux就不需要分区了。为了实现文件系统或者实现多个文件系统独立管理,linux下也需要分区,但是任何一个分区在完成分区之后是不能够实现自我独立访问的,二是只能与现有的根一同被访问。 所有的分区都会被关联到根上。 根文件系统(rootfs) FHS定义的linux文件系统的标准 /boot 引导文件存放目录,内核文件vmlinuz、引导加载器bootloader、grub都在此目录中。 /bin 共所有用户使用的基本命令,不能关联到独立的分区,这是系统启动时就会使用到的命令。 /sbin 管理类命令,不能关联到独立分区,系统启动时会用到的程序。 /lib 基本的共享库文件,以及内核模块文件/lib/modules /lib64 这是在64位操作系统上才有的目录,库文件基本上都位于此目录下,为了向下兼容,原/lib目录下也有相应的库文件。 /etc 应用程序的配置文件存放目录,大多为纯文本文件。 /etc/opt 早些时候程序安装在此路径下 /etc/X11 图形的现实规范,为xwindow提供配置文件(x协议,11位版本号) /home 用户的家目录 /home/username 普通用户的家目录 /root 管理员的家目录 /media 便携式设备的挂载目录 /mnt 临时文件系统的挂载目录 /dev 设备文件目录(特殊文件或者特殊文件存放目录) b:block device随机访问 c:character device 线性访问 /opt 第三方应用程序安装位置 /srv 系统上运行的服务用到的数据放于此 /tmp 临时文件存放目录 以上目录除了/boot、/home外都不能独立分区 /usr usr is shareable read-only date全局只读数据,通常建议此目录单独分区挂载。 /usr/bin 普通用户可执行的命令 /usr/sbin 管理员可执行的命令 /usr/lib 库文件 /usr/lib64 库文件 /usr/share 放置共享文件的目录 /usr/local 取代/opt目录的第三方程序的安装位置 /usr/include c程序的头文件,调用库文件的接口 /usr/src 源代码的存放目录 除了启动外的基本应用程序都放在/usr目录下,保证系统拥有完整的功能提供服务。 /var 存放经常发生变动的文件 /var/cache 应用程序的date缓存目录 /var/lib 应用程序状态信息数据 /var/local 专用于为/usr/local下的应用程序提供存储可变date /var/lock 锁文件的存放目录 /var/log 日志目录及文件存于此目录下 /var/opt 为/opt下的程序存储可变数据 /var/run 与运行中进程相关的数据,通常存放进程的PID文件 /var/spool 缓冲池 /var/tmp 存储系统两次重启之间产生的数据 /proc 伪文件系统,用于输出内核与进程信息相关的虚拟文件系统。 /sys 伪文件系统,输出当前系统上的硬件设备相关信息的虚拟文件系统。 /misc 用于存放杂项man7 /selinux security enhanced linux 内核中实现安全策略等信息的存放位置 /lost+found 是由ext文件系统产生 linux上应用程序的组成部分以及可能存放的位置: 二进制程序:/bin /sbin /usr/bin /usr/sbin /usr/local/bin/usr/local/sbin 库文件:/bin /sbin /usr/{bin,sbin}/usr/local/{bin,sbin} 配置文件:/etc /etc/DIRECTORY /usr/local/etc 帮助文件:/usr/share/man /usr/share/doc/usr/local/share/{man,doc} linux下的文件类型,从磁盘上的组织形式区分: -(f) 普通文件 d 目录文件,在目录文件中的数据为,通过这个目录能访问到的文件或者目录的路径。即从文件名到文件元数据的映射关系。 b 块设备文件,只有元数据 c 字符设备文件,只有元数据 l 符号链接文件 p 管道文件 s 套接字文件,socker(接口),是IP:端口的形式,实现主机内通信,跨主机通信使用协议。 文件名通配:glob(globbing) what is glob? glob是bash中用于实现文件名通配的机制。 通配符:* ? [] *表示任意长度的任意字符 ?表示任意单个字符 [list] 匹配指定范围内[list]任意单个字符 [0-9] 表示所有的数字 [a-z] 表示不区分大小写字母 [A-Z] 表示大写字母 如果我们需要匹配连字符‘-’,需要使用反斜线转义。 专用字符集:不包括通配符[] [:alnum:] 任意数字或者字母 [:alpha:] 任意字母 [:space:] 空格 [:lower:] 小写字母 [:digit:] 任意数字,相当于0-9,此处没有匹配符[] [:punct:] 标点符号 #ls /tmp/l*[0-9]*[[:lower:]] 以字母l开头,中间有一个数字,并以小写字母结尾的文件。 基础笔记二 2017-03-20 评论 2677 次浏览 第三节——基础命令 #date 显示或者设置系统时间 #date [option]... [+format] 以指定的格式显示时间 [option]选项很少使用,这里就不多讲 [+format] 这是格式的指定方式,前面有一个’+’ %A,%a 显示星期几 #date +%A %D 以月/日/年的格式显示时间 #date+%D %F 以年-月-日的格式显示时间 #date+%F %T 获取当前系统时间 #date +T %H 时 %M 分 %S 秒 #date [MMDDhhmmYY[cc]][.ss] 设置时间 MM两位的月份 DD 两位的日期 hh 两位的小时 mm 两位的分钟 YY 两位的年份(末尾两位) cc 四位的年份 .ss 两位的秒使用点‘.’分离 在linux中有两个时钟: 一是系统时钟:linux内核通过CPU工作频率进行计时。 二是硬件时钟:实时时钟,使用#clock,#hwclock查看硬件时钟。 #hwclock 查询硬件时钟 -s,--hctosys把系统时间设置为硬件时钟相同 -w,—systohc 将硬件时钟设置为系统时钟相同 #cal 显示日历 文件时间戳管理工具: #touch [option]/path/to/filename 修改文件的时间戳,当文件不存在时创建文件 -a 修改访问时间 -m 修改修改时间 -t 指明时间戳,同-a/-m共用 [[cc]YYMMDDhhmm[ss]时间格式 -c 不创建文件 当touch一个文件时,文件不存在则默认创建该文件,当文件存在时只修改其时间戳。 一个文件的组成部分有两个:metadata元数据,date数据。 #stat /path/to/filename 查看文件的状态。 文件有三个时间戳: access time 访问时间atime 读取文件内容叫访问 modify time 修改时间 mtime 修改文件内容叫修改 change time 改变时间 ctime 元数据的改变叫做改变,即上面两项任何一项变化都会修改改变时间。 目录相关的命令: 每一个用户都有自己的家目录,在bash中家目录使用特殊的展开符代替’~’ #cd 进行目录的切换 #cd ~切换到当前用户的家目录 #cd – 短横线代表上一级目录,可以快速实现在两个目录间切换。 root用户,即管理员可以切换到主机上任意用户的家目录 #cd ~USER linux操作系统中,所有文件都在根目录下,所以一个文件的绝对路径都是由根目录开始的,但是在目录结构中有这么两个概念: 一个是绝对路径,上面提到过了,绝对路径就是由根开始的路径。 一个是相对路径,相对路径是以当前位置为起始的路径。 当前目录(current directory),也称作working directory。 #pwd(printing working directory) 打印当前路径。 pwd是内建的环境变量,保存了当前目录路径,为什么pwd命令能够实现当前位置的显示?因为有pwd变量 $OLDPWD 上一次所在目录路径,这也就是为什么能够实现目录的切换。因此cd –相当于cd $OLDPWD #ls list,列出指定目录(路径)下的文件列表 -a,--all显示所有文件,包括隐藏文件 -A 除了. ..即当前目录,上一级目录外都显示。 -l 使用长列表信息显示 -R(--recursive)递归显示 -h人性化显示,即文件大小单位的换算 -d 显示当前目录的信息(目录本身),常与-l一同使用 -r逆序的格式显示 长列表显示的时候有很多列 第一列第一个字符为文件类型,余下的九个字符为权限的表示位。 第二列表示文件被硬链接的次数 第三列为文件的属主 第四列为文件的属组 第五列为文件的大小(默认单位为字节) 第六列为时间,为最近一次被修改的时间 第七列为文件名 文件的类型: - 普通文件 d 目录文件 l 链接文件 b 块设备 c 字符设备 p 管道 s 套接字文件 时间戳: atime(access time)访问时间 mtime(modify time)修改时间,指的是修改内容,只要修改文件就会改变,修改时间属于元信息 ctime(change time)改变时间,指的是元信息的改变,改变不一定会修改。 #statfilename 显示文件或者文件系统的状态,获取指定文件的元数据信息 #ls /path/to/dir 查看指定目录下的文件,ls命令默认启用了别名,别名中包含了颜色显示的规则。 黑色 普通文件 蓝色 目录文件 绿色 拥有可执行权限的文件 #mkdir [option] /path/to/somewhere -p 如果创建目录重复则不再报错,且目标目录的父目录不存在时创建,为递归创建,从右到左查找路径,不存在则创建。 -v 喜爱你是详细信息 -m创建目录的同时直接指定权限 #rmdir [option]/path/too/somewhere 只能删除空目录 -v 显示过程 -p 递归删除 #tree 列出目录的层级结构 -L # 限制显示层级 -d 只显示目录 -P pattern模式,只显示由指定pattern匹配到的路径。 文件查看命令: #cat /path/to/filename(concatenate)连接文件并且显示出来,cat命令不会翻屏,是一次性贴入屏幕。 -E 显示行结束符(换行符‘$’) -T 显示制表符 -n 对行进行编号,只是显示时间编号,对文件内容无影响。 当cat命令没有跟任何参数时,会默认从键盘读取,这也就是我们键入cat命令后为什么退不出来。 cat命令还可以将两个或者两个以上的文件连接起来显示 #tac /path/to/filename 将文件反向显示,即最后一行成为第一行,第一行成为最后一行。 有的时候我们并不知道文件的类型,是不是可执行文件,是不是文本文件等等,我们总不能瞎猜对吧? #file /path/to/filename 查看文件内容类型,顺便回顾一下,type是查看命令的类型,是内建命令还是外部命令。 #more [option] filename 查看文件内容 -d 显示翻页及退出提示 +n 定位显示,从第几行开始 #less [option] filename 查看文件内容 man命令调用的便是less,不再赘述其使用方法。 #head [option] filename 查看文件指定内容 -n # 指定查看文件前#行 -c # 指定查看文件前#个字节 #tail [option] filename 查看文件指定内容 -n #显示文件后#行内容 -c # 基础笔记二 2017-03-19 评论 2641 次浏览 « 前一页1...10111213141516...33后一页 » 关于博主 几人行 纸上谈来终觉浅,绝知此事要躬行。 了解更多 文章分类 OpenStack+Ceph(5) Python笔记(0) CI/CD(4) Ansible(1) Docker笔记(3) shell脚本(24) Linux_quession&answer(2) 调优文档(4) 服务(6) 随手笔记(21) 妄尘集(20) 基础笔记二(8) 基础笔记综合整理(20) 给自己讲linux(114) 最受欢迎的文章 博客停更通知( 21,641 人看过 ) OpenStack(一)( 13,772 人看过 ) 情书( 12,816 人看过 ) 我的青春里没有爱情( 11,092 人看过 ) 操作系统原理--Linux篇(摘录)( 10,199 人看过 ) OpenStack+Ceph云平台卷清理操作( 10,092 人看过 ) OpenStack+Ceph磁盘解锁( 9,778 人看过 ) Docker container 修改MAC( 9,640 人看过 ) JumpServer简介( 8,702 人看过 ) 防火墙规则笔记整理( 8,472 人看过 ) 最近回复 wuzetian: alert("你好,我是一个警告框!"); wuzetian: function myFunction() { alert("你好,我是一个警告框!"); } wuzetian: http://fxme.top/index.php/page/2/ wuzetian: http://fxme.top/index.php/page/2/ wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习
nginx自启动脚本 ``` #!/bin/bash #chkconfig: 2345 99 33 #description: nginx server control tools ngxc="/usr/local/nginx/sbin/nginx" pidf="usr/local/nginx/logs/nginx.pid" ngxc_fpm="/usr/local/php/sbin/php-fpm" pidf_fpm="/usr/local/php/var/run/php-fpm.pid" case "$1" in start) $ngxc -t &> /dev/null if [ $? -eq 0 ];then $ngxc $ngxc_fpm echo "nginx service start success!" else $ngxc -t fi ;; stop) kill -s QUIT $(cat $pidf) kill -s QUIT $(cat $pidf_fpm) echo "nginx service stop success!" ;; restart) $0 stop $0 start ;; reload) $ngxc -t &> /dev/null if [ $? -eq 0 ];then kill -s HUP $(cat $pidf) kill -s HUP $(cat $pidf_fpm) echo "reload nginx config success!" else $ngxc -t fi ;; *) echo "please input stop|start|restart|reload." exit 1 esac ``` shell脚本 2017-03-20 评论 2676 次浏览
第四节——linux相关 文件系统: 在linux上所有的文件想要被访问到,必须要通过一个叫做根文件系统的位置开始,但是这并不意味着linux就不需要分区了。为了实现文件系统或者实现多个文件系统独立管理,linux下也需要分区,但是任何一个分区在完成分区之后是不能够实现自我独立访问的,二是只能与现有的根一同被访问。 所有的分区都会被关联到根上。 根文件系统(rootfs) FHS定义的linux文件系统的标准 /boot 引导文件存放目录,内核文件vmlinuz、引导加载器bootloader、grub都在此目录中。 /bin 共所有用户使用的基本命令,不能关联到独立的分区,这是系统启动时就会使用到的命令。 /sbin 管理类命令,不能关联到独立分区,系统启动时会用到的程序。 /lib 基本的共享库文件,以及内核模块文件/lib/modules /lib64 这是在64位操作系统上才有的目录,库文件基本上都位于此目录下,为了向下兼容,原/lib目录下也有相应的库文件。 /etc 应用程序的配置文件存放目录,大多为纯文本文件。 /etc/opt 早些时候程序安装在此路径下 /etc/X11 图形的现实规范,为xwindow提供配置文件(x协议,11位版本号) /home 用户的家目录 /home/username 普通用户的家目录 /root 管理员的家目录 /media 便携式设备的挂载目录 /mnt 临时文件系统的挂载目录 /dev 设备文件目录(特殊文件或者特殊文件存放目录) b:block device随机访问 c:character device 线性访问 /opt 第三方应用程序安装位置 /srv 系统上运行的服务用到的数据放于此 /tmp 临时文件存放目录 以上目录除了/boot、/home外都不能独立分区 /usr usr is shareable read-only date全局只读数据,通常建议此目录单独分区挂载。 /usr/bin 普通用户可执行的命令 /usr/sbin 管理员可执行的命令 /usr/lib 库文件 /usr/lib64 库文件 /usr/share 放置共享文件的目录 /usr/local 取代/opt目录的第三方程序的安装位置 /usr/include c程序的头文件,调用库文件的接口 /usr/src 源代码的存放目录 除了启动外的基本应用程序都放在/usr目录下,保证系统拥有完整的功能提供服务。 /var 存放经常发生变动的文件 /var/cache 应用程序的date缓存目录 /var/lib 应用程序状态信息数据 /var/local 专用于为/usr/local下的应用程序提供存储可变date /var/lock 锁文件的存放目录 /var/log 日志目录及文件存于此目录下 /var/opt 为/opt下的程序存储可变数据 /var/run 与运行中进程相关的数据,通常存放进程的PID文件 /var/spool 缓冲池 /var/tmp 存储系统两次重启之间产生的数据 /proc 伪文件系统,用于输出内核与进程信息相关的虚拟文件系统。 /sys 伪文件系统,输出当前系统上的硬件设备相关信息的虚拟文件系统。 /misc 用于存放杂项man7 /selinux security enhanced linux 内核中实现安全策略等信息的存放位置 /lost+found 是由ext文件系统产生 linux上应用程序的组成部分以及可能存放的位置: 二进制程序:/bin /sbin /usr/bin /usr/sbin /usr/local/bin/usr/local/sbin 库文件:/bin /sbin /usr/{bin,sbin}/usr/local/{bin,sbin} 配置文件:/etc /etc/DIRECTORY /usr/local/etc 帮助文件:/usr/share/man /usr/share/doc/usr/local/share/{man,doc} linux下的文件类型,从磁盘上的组织形式区分: -(f) 普通文件 d 目录文件,在目录文件中的数据为,通过这个目录能访问到的文件或者目录的路径。即从文件名到文件元数据的映射关系。 b 块设备文件,只有元数据 c 字符设备文件,只有元数据 l 符号链接文件 p 管道文件 s 套接字文件,socker(接口),是IP:端口的形式,实现主机内通信,跨主机通信使用协议。 文件名通配:glob(globbing) what is glob? glob是bash中用于实现文件名通配的机制。 通配符:* ? [] *表示任意长度的任意字符 ?表示任意单个字符 [list] 匹配指定范围内[list]任意单个字符 [0-9] 表示所有的数字 [a-z] 表示不区分大小写字母 [A-Z] 表示大写字母 如果我们需要匹配连字符‘-’,需要使用反斜线转义。 专用字符集:不包括通配符[] [:alnum:] 任意数字或者字母 [:alpha:] 任意字母 [:space:] 空格 [:lower:] 小写字母 [:digit:] 任意数字,相当于0-9,此处没有匹配符[] [:punct:] 标点符号 #ls /tmp/l*[0-9]*[[:lower:]] 以字母l开头,中间有一个数字,并以小写字母结尾的文件。 基础笔记二 2017-03-20 评论 2677 次浏览
第三节——基础命令 #date 显示或者设置系统时间 #date [option]... [+format] 以指定的格式显示时间 [option]选项很少使用,这里就不多讲 [+format] 这是格式的指定方式,前面有一个’+’ %A,%a 显示星期几 #date +%A %D 以月/日/年的格式显示时间 #date+%D %F 以年-月-日的格式显示时间 #date+%F %T 获取当前系统时间 #date +T %H 时 %M 分 %S 秒 #date [MMDDhhmmYY[cc]][.ss] 设置时间 MM两位的月份 DD 两位的日期 hh 两位的小时 mm 两位的分钟 YY 两位的年份(末尾两位) cc 四位的年份 .ss 两位的秒使用点‘.’分离 在linux中有两个时钟: 一是系统时钟:linux内核通过CPU工作频率进行计时。 二是硬件时钟:实时时钟,使用#clock,#hwclock查看硬件时钟。 #hwclock 查询硬件时钟 -s,--hctosys把系统时间设置为硬件时钟相同 -w,—systohc 将硬件时钟设置为系统时钟相同 #cal 显示日历 文件时间戳管理工具: #touch [option]/path/to/filename 修改文件的时间戳,当文件不存在时创建文件 -a 修改访问时间 -m 修改修改时间 -t 指明时间戳,同-a/-m共用 [[cc]YYMMDDhhmm[ss]时间格式 -c 不创建文件 当touch一个文件时,文件不存在则默认创建该文件,当文件存在时只修改其时间戳。 一个文件的组成部分有两个:metadata元数据,date数据。 #stat /path/to/filename 查看文件的状态。 文件有三个时间戳: access time 访问时间atime 读取文件内容叫访问 modify time 修改时间 mtime 修改文件内容叫修改 change time 改变时间 ctime 元数据的改变叫做改变,即上面两项任何一项变化都会修改改变时间。 目录相关的命令: 每一个用户都有自己的家目录,在bash中家目录使用特殊的展开符代替’~’ #cd 进行目录的切换 #cd ~切换到当前用户的家目录 #cd – 短横线代表上一级目录,可以快速实现在两个目录间切换。 root用户,即管理员可以切换到主机上任意用户的家目录 #cd ~USER linux操作系统中,所有文件都在根目录下,所以一个文件的绝对路径都是由根目录开始的,但是在目录结构中有这么两个概念: 一个是绝对路径,上面提到过了,绝对路径就是由根开始的路径。 一个是相对路径,相对路径是以当前位置为起始的路径。 当前目录(current directory),也称作working directory。 #pwd(printing working directory) 打印当前路径。 pwd是内建的环境变量,保存了当前目录路径,为什么pwd命令能够实现当前位置的显示?因为有pwd变量 $OLDPWD 上一次所在目录路径,这也就是为什么能够实现目录的切换。因此cd –相当于cd $OLDPWD #ls list,列出指定目录(路径)下的文件列表 -a,--all显示所有文件,包括隐藏文件 -A 除了. ..即当前目录,上一级目录外都显示。 -l 使用长列表信息显示 -R(--recursive)递归显示 -h人性化显示,即文件大小单位的换算 -d 显示当前目录的信息(目录本身),常与-l一同使用 -r逆序的格式显示 长列表显示的时候有很多列 第一列第一个字符为文件类型,余下的九个字符为权限的表示位。 第二列表示文件被硬链接的次数 第三列为文件的属主 第四列为文件的属组 第五列为文件的大小(默认单位为字节) 第六列为时间,为最近一次被修改的时间 第七列为文件名 文件的类型: - 普通文件 d 目录文件 l 链接文件 b 块设备 c 字符设备 p 管道 s 套接字文件 时间戳: atime(access time)访问时间 mtime(modify time)修改时间,指的是修改内容,只要修改文件就会改变,修改时间属于元信息 ctime(change time)改变时间,指的是元信息的改变,改变不一定会修改。 #statfilename 显示文件或者文件系统的状态,获取指定文件的元数据信息 #ls /path/to/dir 查看指定目录下的文件,ls命令默认启用了别名,别名中包含了颜色显示的规则。 黑色 普通文件 蓝色 目录文件 绿色 拥有可执行权限的文件 #mkdir [option] /path/to/somewhere -p 如果创建目录重复则不再报错,且目标目录的父目录不存在时创建,为递归创建,从右到左查找路径,不存在则创建。 -v 喜爱你是详细信息 -m创建目录的同时直接指定权限 #rmdir [option]/path/too/somewhere 只能删除空目录 -v 显示过程 -p 递归删除 #tree 列出目录的层级结构 -L # 限制显示层级 -d 只显示目录 -P pattern模式,只显示由指定pattern匹配到的路径。 文件查看命令: #cat /path/to/filename(concatenate)连接文件并且显示出来,cat命令不会翻屏,是一次性贴入屏幕。 -E 显示行结束符(换行符‘$’) -T 显示制表符 -n 对行进行编号,只是显示时间编号,对文件内容无影响。 当cat命令没有跟任何参数时,会默认从键盘读取,这也就是我们键入cat命令后为什么退不出来。 cat命令还可以将两个或者两个以上的文件连接起来显示 #tac /path/to/filename 将文件反向显示,即最后一行成为第一行,第一行成为最后一行。 有的时候我们并不知道文件的类型,是不是可执行文件,是不是文本文件等等,我们总不能瞎猜对吧? #file /path/to/filename 查看文件内容类型,顺便回顾一下,type是查看命令的类型,是内建命令还是外部命令。 #more [option] filename 查看文件内容 -d 显示翻页及退出提示 +n 定位显示,从第几行开始 #less [option] filename 查看文件内容 man命令调用的便是less,不再赘述其使用方法。 #head [option] filename 查看文件指定内容 -n # 指定查看文件前#行 -c # 指定查看文件前#个字节 #tail [option] filename 查看文件指定内容 -n #显示文件后#行内容 -c # 基础笔记二 2017-03-19 评论 2641 次浏览 « 前一页1...10111213141516...33后一页 » 关于博主 几人行 纸上谈来终觉浅,绝知此事要躬行。 了解更多 文章分类 OpenStack+Ceph(5) Python笔记(0) CI/CD(4) Ansible(1) Docker笔记(3) shell脚本(24) Linux_quession&answer(2) 调优文档(4) 服务(6) 随手笔记(21) 妄尘集(20) 基础笔记二(8) 基础笔记综合整理(20) 给自己讲linux(114) 最受欢迎的文章 博客停更通知( 21,641 人看过 ) OpenStack(一)( 13,772 人看过 ) 情书( 12,816 人看过 ) 我的青春里没有爱情( 11,092 人看过 ) 操作系统原理--Linux篇(摘录)( 10,199 人看过 ) OpenStack+Ceph云平台卷清理操作( 10,092 人看过 ) OpenStack+Ceph磁盘解锁( 9,778 人看过 ) Docker container 修改MAC( 9,640 人看过 ) JumpServer简介( 8,702 人看过 ) 防火墙规则笔记整理( 8,472 人看过 ) 最近回复 wuzetian: alert("你好,我是一个警告框!"); wuzetian: function myFunction() { alert("你好,我是一个警告框!"); } wuzetian: http://fxme.top/index.php/page/2/ wuzetian: http://fxme.top/index.php/page/2/ wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习 wuzetian: 凯哥哇,继续更新,学习学习