diff --git a/Linux/基础篇/第0章 概述.md b/Linux/基础篇/第0章 概述.md deleted file mode 100644 index 5117a77b..00000000 --- a/Linux/基础篇/第0章 概述.md +++ /dev/null @@ -1,37 +0,0 @@ -# 概述 - -## 1 帮助命令 - -### 查看简要说明 -查看简单讲解。 - -``` -//简要说明命令的作用 -whais command - - -``` - -### man - -查看完整帮助手册。 -* command -* -k 能够搜索不完整命令 - - - -### info -查看详细内容 -* command -* -w name pattern contains shell style wildcard - -### which -查看命令位置(一半为系统环境下命令的可执行文件的位置) -* command - - -### whereis keyword -查看所有搜索路径下关键词的位置。 -* command - - diff --git a/Linux/基础篇/第0章 系统概述.md b/Linux/基础篇/第0章 系统概述.md new file mode 100644 index 00000000..2aed2bbb --- /dev/null +++ b/Linux/基础篇/第0章 系统概述.md @@ -0,0 +1,143 @@ +# 系统概述 + +> whatis info man which whereis + +## 1 目录结构 + +* /bin: +bin是Binary的缩写, 这个目录存放着最经常使用的命令。 + +* /boot: +这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 + +* /dev : +dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。 + +* /etc: +这个目录用来存放所有的系统管理所需要的配置文件和子目录。 + +* /home: +用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 + +* /lib: +这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 + +* /lost+found: +这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。 + +* /media: +linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。 + +* /mnt: +系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。 + +* /opt: + 这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。 + +* /proc: +这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件. + +* /root: +该目录为系统管理员,也称作超级权限者的用户主目录。 + +* /sbin: +s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。 + +* /srv: + 该目录存放一些服务启动之后需要提取的数据。 + +* /sys: +这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。 + +* /tmp: +这个目录是用来存放一些临时文件的。 + +* /usr: + 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。 + + * /usr/bin: +系统用户使用的应用程序。 + + * /usr/sbin: +超级用户使用的比较高级的管理程序和系统守护程序。 + + * /usr/src: +内核源代码默认的放置目录。 + +* /var: +这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 + +* /run: +是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。 + +## 2 帮助命令 +在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档; linux系统内置的帮助文档很详细,通常能解决我们的问题,我们需要掌握如何正确的去使用它们; + +在只记得部分命令关键字的场合,我们可通过man -k来搜索; +需要知道某个命令的简要说明,可以使用whatis;而更详细的介绍,则可用info命令; +查看命令在哪个位置,我们需要使用which; +而对于命令的具体参数及使用方法,我们需要用到强大的man; +下面介绍这些命令; + +### whatis +查看命令的简要说明 +``` +$whatis command +``` +正则匹配: +``` +$whatis -w "loca*" +``` +更加详细的说明文档: +``` +$info command +``` + +### man +查询命令command的说明文档: +``` +$man command +eg:man date +``` + +在man的帮助手册中,将帮助文档分为了9个类别,对于有的关键字可能存在多个类别中, 我们就需要指定特定的类别来查看;(一般我们查询bash命令,归类在1类中); + +man页面所属的分类标识(常用的是分类1和分类3) + +1. 用户可以操作的命令或者是可执行文件 +2. 系统核心可调用的函数与工具等 +3. 一些常用的函数与数据库 +4. 设备文件的说明 +5. 设置文件或者某些文件的格式 +6. 游戏 +7. 惯例与协议等。例如Linux标准文件系统、网络协议、ASCⅡ,码等说明内容 +8. 系统管理员可用的管理条令 +9. 与内核有关的文件 + +当whatis下的命令有多个分类时。使用数字表示某个分类下的帮助手册。 +``` +$man 3 printf +``` + +``` +$man -k keyword +``` +查询关键字 根据命令中部分关键字来查询命令,适用于只记住部分命令的场合; + +查找GNOME的config配置工具命令,对于某个单词搜索,可直接使用/word来使用: +``` +$man -k GNOME config| grep 1 +``` + +### which & whereis +查看程序的binary文件所在路径: +``` +$which command +``` + +查看程序的搜索路径: +``` +$whereis command +``` +当系统中安装了同一软件的多个版本时,不确定使用的是哪个版本时,这个命令就能派上用场; + diff --git a/Linux/基础篇/第10章 性能管理.md b/Linux/基础篇/第10章 性能管理.md index e69de29b..40af6edb 100644 --- a/Linux/基础篇/第10章 性能管理.md +++ b/Linux/基础篇/第10章 性能管理.md @@ -0,0 +1,49 @@ +# 性能管理 + +> top / sar / free / watch + + +## 1 监控CPU +查看CPU使用率 +``` +$sar -u +``` + +查看CPU平均负载 +``` +$sar -q 1 2 +``` +sar指定-q后,就能查看运行队列中的进程数、系统上的进程大小、平均负载等; + +## 2 查询内存 +查看内存使用状况 sar指定-r之后,可查看内存使用状况; +``` +$sar -r 1 2 +``` +查看内存使用量 +``` +$free -m +``` + + +## 3 查询页面交换 +查看页面交换发生状况 页面发生交换时,服务器的吞吐量会大幅下降;服务器状况不良时,如果怀疑因为内存不足而导致了页面交换的发生,可以使用sar -W这个命令来确认是否发生了大量的交换; +``` +$sar -W 1 3 +``` + + +6.5. 综合应用 +当系统中sar不可用时,可以使用以下工具替代:linux下有 vmstat、Unix系统有prstat + +eg: 查看cpu、内存、使用情况: vmstat n m (n 为监控频率、m为监控次数) + +[/home/weber#]vmstat 1 3 + +使用watch 工具监控变化 当需要持续的监控应用的某个数据变化时,watch工具能满足要求; 执行watch命令后,会进入到一个界面,输出当前被监控的数据,一旦数据变化,便会高亮显示变化情况; + +eg:操作redis时,监控内存变化: +``` +$watch -d -n 1 './redis-cli info | grep memory' +``` +以下为watch工具中的界面内容,一旦内存变化,即实时高亮显示变化 diff --git a/Linux/基础篇/第1章 文件管理.md b/Linux/基础篇/第1章 文件管理.md index ed83316a..6681fb46 100644 --- a/Linux/基础篇/第1章 文件管理.md +++ b/Linux/基础篇/第1章 文件管理.md @@ -1,256 +1,156 @@ -# 文件管理 -## 1 文件目录操作 +# 文件及目录管理 -### touch -创建文件 -* filename +> * 文件管理,目录的创建、删除、查询、管理: mkdir rm mv +> * 文件的查询和检索: find locate +> * 查看文件内容:cat vi tail more +> * 管道和重定向: ; | && > +> * 写出命令以及主要的参数说明,具体内容查看参考手册。 -### mkdir -创建目录 -* dirname - -### mv -移动 -* sourcefile destfile -* -r 递归 - -### cp -复制 -* sourcefile destfile -* -r 递归 - -### rm -删除 -* dirname/filename -* -r 递归删除 -* -f 强制删除不弹出确认步骤 - -### cd -切换目录 -* pathname - -### pwd -显示当前绝对路径 - -### ls -查看目录 -* [filename*] 能够使用通配符 -* -a 所有文件,包括隐藏文件 -* -l 长格式输出 - -### alias -别名 -* newname=aimname - -### wc -print newline, word, and byte counts for each file.输出文件内容的统计数。 -* file or files name -* -c byte counts -* -m character counts -* -l newline counts -* -w word counts - -## 2 查看文件内容 -### cat -查看文件内容 -* filename -* -n 显示行号 - -### more -查看文件内容 -* filename - -### head -查看文件前几行内容 -* filename -* -10 显示前十行 - -### tail -查看文件后几行 -* filename -* -10 显示文件后10行 - -## diff -对比两个文件之间的差别。 -* file1 file2 - -## 3 查找文件名称 - -### find -搜索目录,查找文件名。 -* dirname -* -name keyword 指定字符串查找文件名,支持通配符。 - -> 这个命令还有很多更高级的用法,日后用到再说。直接man查看用法,这是个程序或者说软件。 - -### locate -搜索包含字符串的目录。 -* stringname - -### 4 查找文件内容 - -### grep -查找文件内容,根据文件内容进行匹配。 -Global search Regular Expression and Print the line. -* pattern filename -* -i 不区分大小写 -* -n 显示行号 -* --color 高亮显示 -* -c 只统计目标行数 -* -o 只显示目标行的命中关键词 -* -B 显示目标行之前的行 -* -A 显示目标航之后的行 -* -w 硬匹配到目标单词。 -* -e 能够添加多个匹配项 -* -E 表示支持扩展正则表达式 -> 同find也是一个复杂的程序软件,日后用到查看说明文档。 +## 1 创建、删除、移动、复制 ``` -grep -e "am" hello.txt +创建:mkdir +删除:rm +删除非空目录:rm -rf file目录 +删除日志 rm *log (等价: $find ./ -name “*log” -exec rm {} ;) +移动:mv +复制:cp (复制目录:cp -r ) +复制目录:$cp -r source_dir dest_dir ``` -## 5 文件权限操作 - -### 查看文件属性 +## 2 目录切换 ``` -ls-al --rw-r--r-- l root root 42304 Sep 4 18:26 install.log +找到文件/目录位置:cd +切换到上一个工作目录: cd - +切换到home目录: cd or cd ~ +显示当前路径: pwd +更改当前工作路径为path: $cd path ``` -* 文件类型 [-]普通文件[d]目录[l]连接文件[b]接口设备[c]串行端口设备 -* 文件权限[rwx]分别代表拥有者、用户组、其他人的操作权限 -* 表示多少文件名连接到这个节点 -* 表示拥有者名字 -* 表示用户组 -* 文件容量 -* 创建或者修改日期 -* 文件名字 - -### chgrp -改变文件属性 - +## 3 列出目录项 ``` -chgrp [-R] groupname dirname/filename -chgrp users install.log +显示当前目录下的文件 ls +按时间排序,以列表的方式显示目录项 ls -lrt +给每项文件前面增加一个id编号(看上去更加整洁):>ls | cat -n ``` -* -R 递归更改组 - -### chwon +## 4 查找目录及文件 find/locate +搜寻文件或目录: ``` -chown [-R] ownername dirname/filename -chwon estom install.log +$find ./ -name "core*" | xargs file ``` -* -R 递归更改拥有者 - - -### chmod +查找目标文件夹中是否有obj文件: ``` -chmod [-R] xyz dirname/filename -chmod 777 install.log -chmod u/g/o/a +/-/= r/w/x dirname/filename +$find ./ -name '*.o' +``` +递归当前目录及子目录删除所有.o文件: +``` +$find ./ -name "*.o" -exec rm {} \; +``` +查看当前目录下文件个数: +``` +$find ./ | wc -l +``` +find是实时查找,如果需要更快的查询,可试试locate;locate会为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库: +``` +$locate string +$updatedb ``` -* -R 递归更改文件内容 -* 1~7分别对应二进制文件权限 -* ugoa 分别设置user,group,other,all的权限。 -## 6 符号连接/硬连接 +2.5. 查看文件内容 +查看文件: +``` +cat vi head tail more +``` +显示时同时显示行号: +``` +$cat -n +``` +按页显示列表内容: +``` +$ls -al | more +``` +只看前10行: +``` +$head - 10 ** +``` +显示文件第一行: +``` +$head -1 filename +``` +显示文件倒数第五行: +``` +$tail -5 filename +``` +查看两个文件间的差别: +``` +$diff file1 file2 +``` +动态显示文本最新信息: +``` +$tail -f crawler.log +``` -### ln -创建一个指向目标的连接。 -* filename destname -* -s 符号连接 +2.6. 查找文件内容 +使用egrep查询文件内容: +``` +egrep '03.1\/CO\/AE' TSF_STAT_111130.log.012 +egrep 'A_LMCA777:C' TSF_STAT_111130.log.035 > co.out2 +``` + +## 7 文件与目录权限修改 +``` +改变文件的拥有者 chown +改变文件读、写、执行等属性 chmod +递归子目录修改: chown -R tuxapp source/ +增加脚本可执行权限: chmod a+x myscript +``` +## 8 快捷方式 +创建符号链接/硬链接: ``` ln cc ccAgain :硬连接;删除一个,将仍能找到; ln -s cc ccTo :符号链接(软链接);删除源,另一个无法使用;(后面一个ccTo 为新建的文件) ``` - -## 7 目录配置说明 - -### 目录配置标准FHS - -* /:根目录,与开机、还原、系统修复有关 -* /bin:单用户维护模式下还能被操作的命令。 -* /sbin:system系统用来开机修复还原系统所需要的命令 -* /boot:开机会使用到的文件 -* /dev:任何设备与接口设备都是以文件的形势存在于这个目录当中。 -* /etc:系统主要配置文件目录。 -* /home:用户文件夹 -* /lib:放置系统运行过程中用到的函数库。 -* /media:用于挂在可删除的设备DVD光盘等。 -* /mnt:暂时挂在额外的设备 -* /opt:第三方软件安装的目录。第三方软件习惯上放到/usr/local/目录下。 -* /root:系统管理员的主文件夹 -* /srv:service网络服务启动后用来存取数据的目录 -* /tmp:一般用户或正在执行的程序暂时防止文件的地方,任何人都能访问,可以情理。 -* /proc:虚拟文件系统,是内存的虚拟文件对应,能够查看内存装填,包括系统内核、进程、外部设备的状态以及网络状态。其对应内存空间,本身不占用任何硬盘空间。 -* /sys:虚拟的文件系统,记录与内核相关的信息。包括目前已经加载到内核的模块与内核检测到的硬件设备信息。 - -### 特殊的目录配置 -* /usr:可分享的不可变动的数据。UNIX Software Resource的缩写。所有的软件存在在这个目录下。 -* /usr/bin:绝大部分用户可以直接使用的命令 -* /usr/include:C/C++等程序语言的头文件与包含文件 -* /usr/lib:包含软件的函数库、目标文件,以及一般用户惯用的执行文件和脚本 - - -## 8 管道和重定向 - -* 批处理命令连接执行,使用 | -* 串联: 使用分号 ; -* 前面成功,则执行后面一条,否则,不执行:&& -* 前面失败,则后一条执行: || - +## 9 管道和重定向 +``` +批处理命令连接执行,使用 | +串联: 使用分号 ; +前面成功,则执行后面一条,否则,不执行:&& +前面失败,则后一条执行: || +ls /proc && echo suss! || echo failed. +能够提示命名是否执行成功or失败; +``` + +与上述相同效果的是: ``` -ls /proc && echo suss! || echo failed if ls /proc; then echo suss; else echo fail; fi ``` -### 管道 | - -表示第一个命令的输出可以作为第二个命令的输入。可以利用管道对前一个命令的输出进行处理、过滤、统计等。 - +重定向: ``` -find ./ | wc -l -``` -wc 会把前一个命令的输出看做一个文件,然后输出这个文件的行数。所以能够显示./文件下的目录个数。 - -``` -ls | cat -n -``` -cat也会把前一个命令的输出,看做一个文件,然后对文件进行操作。 - -### 重定向> >> -将标准输出和标准错误重定向到一个文件当中。 -``` -> 覆盖文件内容 ->> 添加新内容到结尾 ls proc/*.c > list 2> &l 将标准输出和标准错误重定向到同一文件; ``` - -## 9 设置环境变量 - -1. 在/etc/profile文件中添加变量【对所有用户生效(永久的)】 -用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。 - -例如:编辑/etc/profile文件,添加CLASSPATH变量 - +等价的是: ``` -# vi /etc/profile -export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib +ls proc/*.c &> list +``` +清空文件: +``` +:> a.txt +``` +重定向到文件的末尾 +``` +echo aa >> a.txt ``` -注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。 -2. 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】 -用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。 +## 10 Bash快捷输入或删除 +快捷键: +``` +Ctl-U 删除光标到行首的所有字符,在某些设置下,删除全行 +Ctl-W 删除当前光标到前边的最近一个空格之间的字符 +Ctl-H backspace,删除光标前边的字符 +Ctl-R 匹配最相近的一个文件,然后输出 +``` +2.12. 综合应用 +查找record.log中包含AAA,但不包含BBB的记录的总数: -例如:编辑guok用户目录(/home/guok)下的.bash_profile - -vi/home/guok/.bash.profile添加如下内容:exportCLASSPATH=./JAVAHOME/lib;JAVA_HOME/jre/lib - -注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。 - -3. 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】 -在shell的命令行下直接使用[export 变量名=变量值] 定义变量, - -该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的, - -shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。 \ No newline at end of file +cat -v record.log | grep AAA | grep -v BBB | wc -l \ No newline at end of file diff --git a/Linux/基础篇/第2章 用户管理.md b/Linux/基础篇/第2章 用户管理.md index e6727e8a..77f95a4e 100644 --- a/Linux/基础篇/第2章 用户管理.md +++ b/Linux/基础篇/第2章 用户管理.md @@ -1,26 +1,146 @@ -# 文件与目录管理 +# 用户管理 -## 目录与路径 -## 文件与目录管理 -## 文件内容查阅 -## 文件与目录的默认权限与隐藏权限 -## 命令与文件查询 -## 权限与命令的关系 +> useradd passwd userdel usermod chmod chown .bashrc .bash_profile +## 1 添加删除 + +添加用户,为用户创建相应的帐号和用户目录/home/username; +``` +$useradd -m username +``` + +用户添加之后,设置密码,密码以交互方式创建: +``` +$passwd username +``` + +删除用户 +``` +$userdel -r username +``` +不带选项使用 userdel,只会删除用户。用户的家目录将仍会在/home目录下。要完全的删除用户信息,使用-r选项; + +帐号切换 登录帐号为userA用户状态下,切换到userB用户帐号工作: +``` +$su userB +``` +进入交互模型,输入密码授权进入; -## 1 用户与用户组 -### 用户 -* owner -* 可以属于多个不同group -### 用户组 -* 包含一组用户 -* 一组用户拥有相同的权限。 +## 2 用户的组 +将用户加入到组 +默认情况下,添加用户操作也会相应的增加一个同名的组,用户属于同名组; 查看当前用户所属的组: +``` +$groups +``` +一个用户可以属于多个组,将用户加入到组: +``` +$usermod -G groupNmame username +``` +变更用户所属的根组(将用户加入到新的组,并从原有的组中除去): +``` +$usermod -g groupName username +``` +查看系统所有组,系统的所有用户及所有组信息分别记录在两个文件中:/etc/passwd , /etc/group 默认情况下这两个文件对所有用户可读。查看所有用户及权限: +``` +$more /etc/passwd +``` +查看所有的用户组及权限: +``` +$more /etc/group +``` -### others -* 其他人,不属于用户组。 +## 3 用户权限 +使用ls -l可查看文件的属性字段,文件属性字段总共有10个字母组成,第一个字母表示文件类型,如果这个字母是一个减号”-”,则说明该文件是一个普通文件。字母”d”表示该文件是一个目录,字母”d”,是dirtectory(目录)的缩写。 后面的9个字母为该文件的权限标识,3个为一组,分别表示文件所属用户、用户所在组、其它用户的读写和执行权限; 例如: +``` +[/home/weber#]ls -l /etc/group +-rwxrw-r-- colin king 725 2013-11-12 15:37 /home/colin/a +``` +表示这个文件对文件拥有者colin这个用户可读写、可执行;对colin所在的组(king)可读可写;对其它用户只可读; -### 记录位置 -* 用户内容-/etc/passwd -* 密码内容-/etc/shadow -* 组内容-/etc/group +更改读写权限 +使用chmod命令更改文件的读写权限,更改读写权限有两种方法,一种是字母方式,一种是数字方式 +字母方式: +``` +$chmod userMark(+|-)PermissionsMark +``` +userMark取值: +``` +u:用户 +g:组 +o:其它用户 +a:所有用户 +``` +PermissionsMark取值: +``` +r:读 +w:写 +x:执行 +``` +例如: +``` +$chmod a+x main 对所有用户给文件main增加可执行权限 +$chmod g+w blogs 对组用户给文件blogs增加可写权限 +``` + +数字方式: + +数字方式直接设置所有权限,相比字母方式,更加简洁方便; + +使用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。 + +例如: +``` +$chmod 740 main 将main的用户权限设置为rwxr----- +``` +更改文件或目录的拥有者 +``` +$chown username dirOrFile +``` +使用-R选项递归更改该目下所有文件的拥有者: +``` +$chown -R weber server/ +``` + +# 4 环境变量 + +### bashrc & profile +bashrc与profile都用于保存用户的环境信息,bashrc用于交互式non-loginshell,而profile用于交互式login shell。 + +``` +/etc/profile,/etc/bashrc 是系统全局环境变量设定 +~/.profile,~/.bashrc用户目录下的私有环境变量设定 +``` + +### login过程 +当登入系统获得一个shell进程时,其读取环境设置脚本分为三步: + +* 首先读入的是全局环境变量设置文件/etc/profile,然后根据其内容读取额外的文档,如/etc/profile.d和/etc/inputrc +* 读取当前登录用户Home目录下的文件~/.bash_profile,其次读取~/.bash_login,最后读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系 +* 读取~/.bashrc。 + +### ~/.profile与~/.bashrc的区别 + +这两者都具有个性化定制功能 +* ~/.profile可以设定本用户专有的路径,环境变量,等,它只能登入的时候执行一次 +* ~/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次 + + +例如,我们可以在这些环境变量中设置自己经常进入的文件路径,以及命令的快捷方式: +``` +.bashrc +alias m='more' +alias cp='cp -i' +alias mv='mv -i' +alias ll='ls -l' +alias lsl='ls -lrt' +alias lm='ls -al|more' + +log=/opt/applog/common_dir +unit=/opt/app/unittest/common + +.bash_profile +. /opt/app/tuxapp/openav/config/setenv.prod.sh.linux +export PS1='$PWD#' +``` +通过上述设置,我们进入log目录就只需要输入cd $log即可; \ No newline at end of file diff --git a/Linux/基础篇/第3章 磁盘管理.md b/Linux/基础篇/第3章 磁盘管理.md index e69de29b..04ac3f86 100644 --- a/Linux/基础篇/第3章 磁盘管理.md +++ b/Linux/基础篇/第3章 磁盘管理.md @@ -0,0 +1,91 @@ +# 磁盘管理 + + +> * 查看磁盘空间 df -h +> * 查看目录大小 du -sh +> * 打包 tar -cvf +> * 解包 tar -xvf +> * 压缩 gzip bzip +> * 解亚索 gunzip,bunzip,unzip + +解压缩 gunzip bzip + +## 1 查看磁盘空间 +查看磁盘空间利用大小: +``` +df -h +``` +-h: human缩写,以易读的方式显示结果 +查看当前目录所占空间大小: +``` +du -sh +-h 人性化显示 +-s 递归整个目录的大小 +$du -sh +653M +``` +查看当前目录下所有子文件夹排序后的大小: +``` +for i in `ls`; do du -sh $i; done | sort +或者: +du -sh `ls` | sort +``` + +4.2. 打包/ 压缩 +在linux中打包和压缩和分两步来实现的; + +* 打包是将多个文件归并到一个文件: +``` +tar -cvf etc.tar /etc <==仅打包,不压缩! +-c :打包选项 +-v :显示打包进度 +-f :使用档案文件 +注:有的系统中指定参数时不需要在前面加上-,直接使用tar xvf +``` + +用tar实现文件夹同步,排除部分文件不同步: + +``` +tar --exclude '*.svn' -cvf - /path/to/source | ( cd /path/to/target; tar -xf -) +``` + +* 压缩,生成 demo.txt.gz +``` +$gzip demo.txt +``` + +## 3 解包/解压缩 +解包 +``` +tar -xvf demo.tar +-x 解包选项 +``` + +解压后缀为 .tar.gz的文件 + +1. 解压缩 +``` +$gunzip demo.tar.gz +``` +2. 解包: +``` +$tar -xvf demo.tar +``` + +bz2解压解包: +``` +tar jxvf demo.tar.bz2 +``` +如果tar 不支持j,则同样需要分两步来解包解压缩,使用bzip2来解压,再使用tar解包: +``` +bzip2 -d demo.tar.bz2 +tar -xvf demo.tar +-d decompose,解压缩 +``` + +tar解压参数说明: +``` +-z 解压gz文件 +-j 解压bz2文件 +-J 解压xz文件 +``` diff --git a/Linux/基础篇/第4章 进程管理.md b/Linux/基础篇/第4章 进程管理.md index e69de29b..d32c8b4c 100644 --- a/Linux/基础篇/第4章 进程管理.md +++ b/Linux/基础篇/第4章 进程管理.md @@ -0,0 +1,97 @@ +# 进程管理 + +> ps top lsof kill pmap + +## 1 查询进程 +查询正在运行的进程信息 +``` +$ps -ef +``` +eg:查询归属于用户colin115的进程 +``` +$ps -ef | grep colin115 +$ps -lu colin115 +``` +查询进程ID(适合只记得部分进程字段) +``` +$pgrep 查找进程 +``` +eg:查询进程名中含有re的进程 +``` +[/home/weber#]pgrep -l re +``` + +以完整的格式显示所有的进程 +``` +$ps -ajx +``` +显示进程信息,并实时更新 +``` +$top +``` +查看端口占用的进程状态: +``` +lsof -i:3306 +``` +查看用户username的进程所打开的文件 +``` +$lsof -u username +``` +查询init进程当前打开的文件 +``` +$lsof -c init +``` +查询指定的进程ID(23295)打开的文件: +``` +$lsof -p 23295 +`` +查询指定目录下被进程开启的文件(使用+D 递归目录): +``` +$lsof +d mydir1/ +``` +## 2 终止进程 +杀死指定PID的进程 (PID为Process ID) +``` +$kill PID +``` +杀死相关进程 +``` +kill -9 3434 +``` +杀死job工作 (job为job number) +``` +$kill %job +``` + +## 3 进程监控 +查看系统中使用CPU、使用内存最多的进程; +``` +$top +(->)P +``` +输入top命令后,进入到交互界面;接着输入字符命令后显示相应的进程状态: + +对于进程,平时我们最常想知道的就是哪些进程占用CPU最多,占用内存最多。以下两个命令就可以满足要求: +``` +P:根据CPU使用百分比大小进行排序。 +M:根据驻留内存大小进行排序。 +i:使top不显示任何闲置或者僵死进程。 +``` +这里介绍最使用的几个选项,对于更详细的使用,详见 top linux下的任务管理器 ; + +## 4 分析线程栈 +使用命令pmap,来输出进程内存的状况,可以用来分析线程堆栈; +``` +$pmap PID +``` + +5.5. 综合运用 +将用户colin115下的所有进程名以av_开头的进程终止: +``` +ps -u colin115 | awk '/av_/ {print "kill -9 " $1}' | sh +``` +将用户colin115下所有进程名中包含HOST的进程终止: +``` +ps -fe| grep colin115|grep HOST |awk '{print $2}' | xargs kill -9; +``` + diff --git a/Linux/基础篇/第8章 网络管理.md b/Linux/基础篇/第8章 网络管理.md index e69de29b..b63e18cd 100644 --- a/Linux/基础篇/第8章 网络管理.md +++ b/Linux/基础篇/第8章 网络管理.md @@ -0,0 +1,111 @@ +# 网络管理 +> netstat lsof route ping host wget sftp scp +## 1 查询网络服务和端口 +netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。 + +列出所有端口 (包括监听和未监听的): +``` +netstat -a +``` +列出所有 tcp 端口: +``` +netstat -at +``` +列出所有有监听的服务状态: +``` +netstat -l +``` +使用netstat工具查询端口: +``` +$netstat -antp | grep 6379 +``` + + +查询7902端口现在运行什么程序: + +1. 查询使用该端口的进程的PID +``` + $lsof -i:7902 + COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME + WSL 30294 tuapp 4u IPv4 447684086 TCP 10.6.50.37:tnos-dp (LISTEN) +``` +2. 查到30294,使用ps工具查询进程详情: +``` +$ps -fe | grep 30294 +tdev5 30294 26160 0 Sep10 ? 01:10:50 tdesl -k 43476 +root 22781 22698 0 00:54 pts/20 00:00:00 grep 11554 +``` + + +## 2 网络路由 +查看路由状态: +``` +$route -n +``` +发送ping包到地址IP: +``` +$ping IP +``` +探测前往地址IP的路由路径: +``` +$traceroute IP +``` +DNS查询,寻找域名domain对应的IP: +``` +$host domain +``` +反向DNS查询: +``` +$host IP +``` + +## 3 镜像下载 +直接下载文件或者网页: +``` +wget url +``` +常用选项: +``` +–limit-rate :下载限速 +-o:指定日志文件;输出都写入日志; +-c:断点续传 +``` + +axel工具真好用 + + +## 4 ftp sftp lftp ssh +SSH登陆: +``` +$ssh ID@host +``` +ssh登陆远程服务器host,ID为用户名。 + +ftp/sftp文件传输: +``` +$sftp ID@host +``` +登陆服务器host,ID为用户名。sftp登陆后,可以使用下面的命令进一步操作: +``` +get filename # 下载文件 +put filename # 上传文件 +ls # 列出host上当前路径的所有文件 +cd # 在host上更改当前路径 +lls # 列出本地主机上当前路径的所有文件 +lcd # 在本地主机更改当前路径 +``` +lftp同步文件夹(类似rsync工具): +``` +lftp -u user:pass host +lftp user@host:~> mirror -n +``` + +## 5 网络复制 +将本地localpath指向的文件上传到远程主机的path路径: +``` +$scp localpath ID@host:path +``` +以ssh协议,遍历下载path路径下的整个文件系统,到本地的localpath: +``` +$scp -r ID@site:path localpath +``` \ No newline at end of file diff --git a/Linux/工具篇/Shell脚本.md b/Linux/工具篇/Shell脚本.md index e69de29b..c2abefce 100644 --- a/Linux/工具篇/Shell脚本.md +++ b/Linux/工具篇/Shell脚本.md @@ -0,0 +1,215 @@ +## 变量 + +### 变量操作 + +* 定义变量 + +country="china" +number = 10 + +* 使用变量 + +$country +${country} +echo "i love you ${country}abcd" + +* 重新定义变量 + +country="hello" + +* 只读变量 + +readonly country = "china" + +* 删除变量 + +unset variable_name + +### 变量类型 + +* 局部变量:在脚本中定义,在当前shell中有效 +* 环境变量:所有程序有效 +* shell变量:shell设置的特殊变量,有一部分是环境变量 + +### 特殊变量 +``` +$0 当前脚本文件名 + +$n 传递参数:第n个参数 + +$# 传递参数:参数个数 + +$* 传递参数:所有参数 + +$@ 传递参数:所有参数 + +$? 上个命令的返回至 + +$$ 当前shell的进程ID +``` +### 转义字符 + +\\ + +\a + +\b + +\f + +\n + +\r + +\t + +\v + +### 命令替换 + +把一个命令的输出赋值给另一个变量 + +directory = `pwd` + +### 变量替换 + +... ... + +## Shell 运算符 + +### 算术运算 + +不支持数学运算,但可以通过shell命令awk expr进行数学运算。 + ++ - * / % = == != + +### 关系运算 + +-eq + +-ne + +-gt + +-lt + +-ge + +-le + +### 布尔运算 + +! + +-o + +-a + +### 字符串运算 + += 检测两个字符串是否相等 +!= 字符串不相等 +-z 长度是否为零 +-n 是否不为零 +str 是否为空 + +## shell字符串 + +### 单引号限制 + +单引号内的任何字符原样输出,变量无效,转义字符无效 + +单引号不允许嵌套 + +### 双引号 + +内部可以有变量和转义字符 + +允许嵌套 + +### 字符串拼接 + +"hello $country" + +### 字符串长度 + +${#string} + +### 字符串切片 + +${string:1:4} + +### 字符串查找 + +## shell 数组 + +### 定义数组 + +array_name[value0 value1 value2] + +array_name[0]=value0 + +### 使用数组 + +${array_name[index]} +${array_name[@]} + +### 获取数组信息 + +length = ${#array_name[@]} + +## printf 格式化输出函数 + +$ printf "%d %s\n" 1 "abc" + +## 条件语句 + +### if +if +then +else +fi + +### case + +case a in + ;; + ;; +esac + +### for + +for a in list +do + +done + +### while + +whle [$a -lt 5] +do + +done + +### until + +util command +do + +done + +## 函数 + +function_name(){ + list of commands + return value +} + +## 文件包含 + +. filename + +source filename + + + diff --git a/Linux/工具篇/Vim编辑器.md b/Linux/工具篇/Vim编辑器.md index e69de29b..ef735382 100644 --- a/Linux/工具篇/Vim编辑器.md +++ b/Linux/工具篇/Vim编辑器.md @@ -0,0 +1,156 @@ +# vim编辑器 + +![](image/vi-vim-cheat-sheet-sch.gif) + +## 1 vi/vim三种模式 +基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是: + +### 命令模式: +用户刚刚启动 vi/vim,便进入了命令模式。 + +此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。 + +以下是常用的几个命令: + +* i 切换到输入模式,以输入字符。 +* x 删除当前光标所在处的字符。 +* : 切换到底线命令模式,以在最底一行输入命令。 + +若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。 + +命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。 + +### 输入模式 +在命令模式下按下i就进入了输入模式。 + +在输入模式中,可以使用以下按键: + +* 字符按键以及Shift组合,输入字符 +* ENTER,回车键,换行 +* BACK SPACE,退格键,删除光标前一个字符 +* DEL,删除键,删除光标后一个字符 +* 方向键,在文本中移动光标 +* HOME/END,移动光标到行首/行尾 +* Page Up/Page Down,上/下翻页 +* Insert,切换光标为输入/替换模式,光标将变成竖线/下划线 +* ESC,退出输入模式,切换到命令模式 + +### 底线命令模式 +在命令模式下按下:(英文冒号)就进入了底线命令模式。 + +底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。 + +在底线命令模式中,基本的命令有(已经省略了冒号): + +* q 退出程序 +* w 保存文件 +* 按ESC键可随时退出底线命令模式。 + +简单的说,我们可以将这三个模式想成底下的图标来表示: + +![](image/vim-vi-workmodel.png) + + +## 2 命令模式 + +一般模式可用的光标移动、复制粘贴、搜索替换等 + +### 移动光标 +|操作|效果| +|-|-| +|h 或 向左箭头键(←) |光标向左移动一个字符| +|j 或 向下箭头键(↓) |光标向下移动一个字符| +|k 或 向上箭头键(↑) |光标向上移动一个字符| +|l 或 向右箭头键(→) |光标向右移动一个字符| + +如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可! + +|操作|效果| +|-|-| +|[Ctrl] + [f]| 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)| +|[Ctrl] + [b]| 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)| +|[Ctrl] + [d]| 屏幕『向下』移动半页| +|[Ctrl] + [u]| 屏幕『向上』移动半页| +|+ |光标移动到非空格符的下一行| +|- |光标移动到非空格符的上一行| +|n |那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。| +0 或功能键[Home] |这是数字『 0 』:移动到这一行的最前面字符处 (常用)| +$ 或功能键[End] |移动到这一行的最后面字符处(常用)| +|H |光标移动到这个屏幕的最上方那一行的第一个字符| +|M |光标移动到这个屏幕的中央那一行的第一个字符| +|L |光标移动到这个屏幕的最下方那一行的第一个字符| +|G |移动到这个档案的最后一行(常用)| +nG |n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)| +|gg |移动到这个档案的第一行,相当于 1G 啊! (常用)| +|n |n 为数字。光标向下移动 n 行(常用)| + +### 搜索替换 +|操作|效果| +|-|-| +|/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用) +|?word 向光标之上寻找一个字符串名称为 word 的字符串。 +|n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串! +|N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。 +|使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词! +|:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则: +『:100,200s/vbird/VBIRD/g』。(常用) +:1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) +:1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用) +删除、复制与贴上 +x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用) +nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。 +dd 删除游标所在的那一整行(常用) +ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用) +d1G 删除光标所在到第一行的所有数据 +dG 删除光标所在到最后一行的所有数据 +d$ 删除游标所在处,到该行的最后一个字符 +d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 +yy 复制游标所在的那一行(常用) +nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用) +y1G 复制游标所在行到第一行的所有数据 +yG 复制游标所在行到最后一行的所有数据 +y0 复制光标所在的那个字符到该行行首的所有数据 +y$ 复制光标所在的那个字符到该行行尾的所有数据 +p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用) +J 将光标所在行与下一行的数据结合成同一行 +c 重复删除多个数据,例如向下删除 10 行,[ 10cj ] +u 复原前一个动作。(常用) +[Ctrl]+r 重做上一个动作。(常用) +这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦! +. 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用) + +## 编辑模式 +第二部分:一般模式切换到编辑模式的可用的按钮说明 +进入输入或取代的编辑模式 +i, I 进入输入模式(Insert mode): +i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用) +a, A 进入输入模式(Insert mode): +a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用) +o, O 进入输入模式(Insert mode): +这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行!(常用) +r, R 进入取代模式(Replace mode): +r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用) +上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔! +[Esc] 退出编辑模式,回到一般模式中(常用) + +## 底线模式 +第三部分:一般模式切换到指令行模式的可用的按钮说明 +指令行的储存、离开等指令 +:w 将编辑的数据写入硬盘档案中(常用) +:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊! +:q 离开 vi (常用) +:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。 +注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~ +:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用) +ZZ 这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开! +:w [filename] 将编辑的数据储存成另一个档案(类似另存新档) +:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面 +:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。 +:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 +『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息! +vim 环境的变更 +:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号 +:set nonu 与 set nu 相反,为取消行号! +特别注意,在 vi/vim 中,数字是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。 + +举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前,如我要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。 \ No newline at end of file diff --git a/Linux/工具篇/image/vi-vim-cheat-sheet-sch.gif b/Linux/工具篇/image/vi-vim-cheat-sheet-sch.gif new file mode 100644 index 00000000..7caed810 Binary files /dev/null and b/Linux/工具篇/image/vi-vim-cheat-sheet-sch.gif differ diff --git a/Linux/工具篇/image/vim-vi-workmodel.png b/Linux/工具篇/image/vim-vi-workmodel.png new file mode 100644 index 00000000..3db4f5f4 Binary files /dev/null and b/Linux/工具篇/image/vim-vi-workmodel.png differ diff --git a/Linux/工具篇/swap缓存.md b/Linux/工具篇/swap缓存.md new file mode 100644 index 00000000..a5971dd7 --- /dev/null +++ b/Linux/工具篇/swap缓存.md @@ -0,0 +1,47 @@ +# swap缓存配置 + + +> swapon、swapoff + +## 配置过程 +1.首先用命令free查看系统内 Swap 分区大小 +``` +  free -m +  total used free shared buffers cached +  Mem: 2012 1960 51 0 748 950 +  -/+ buffers/cache: 260 1751 +  Swap: 255 0 255 +  可以看到 Swap 只有255M,下面我们来扩大到2G。 +``` +2.创建一个 Swap 文件 +``` +  找一个空间足够的目录用来存放swap文件 +  mkdir /swap +  cd /swap +  sudo dd if=/dev/zero of=swapfile bs=1024 count=2000000 +  出现下列提示,上面命令中的 count 即代表swap文件大小。 +  记录了2000000+0 的读入 +  记录了2000000+0 的写出 +  2048000000字节(2.0 GB)已复制,63.3147 秒,32.3 MB/秒 +  把生成的文件转换成 Swap 文件 +  sudo mkswap -f swapfile +  Setting up swapspace version 1, size = 1999996 KiB +  no label, UUID=fee9ab21-9efb-47c9-80f4-57e48142dd69 +``` +3.激活 Swap 文件 +``` +  sudo swapon swapfile +  再次查看 free -m 的结果。 +  total used free shared buffers cached +  Mem: 2012 1971 41 0 572 1156 +  -/+ buffers/cache: 241 1770 +  Swap: 2209 0 2209 +  添加成功。 +``` +4.扩展: +``` +  如果需要卸载这个 swap 文件,可以进入建立的 swap 文件目录。执行下列命令。 +  sudo swapoff swapfile +  如果需要一直保持这个 swap ,可以把它写入 /etc/fstab 文件。 +  /swap/swapfile /swap swap defaults 0 0 +``` \ No newline at end of file diff --git a/Linux/开发篇/gcc路径检索.md b/Linux/开发篇/gcc路径检索.md new file mode 100644 index 00000000..458c6360 --- /dev/null +++ b/Linux/开发篇/gcc路径检索.md @@ -0,0 +1,82 @@ +# linux下gcc默认搜索头文件及库文件的路径 + +## 1 头文件 + +gcc 在编译时如何去寻找所需要的头文件: + +1. 所有header file的搜寻会从-l开始 +2. 然后找gcc的环境变量 + +C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH + +3. 再找内定目录 + +``` +/usr/include +/usr/local/include +/usr/lib/gcc-lib/i386-linux/2.95.2/include +/usr/lib/gcc-lib/i386-linux/2.95.2/……/……/……/……/include/g++-3 +/usr/lib/gcc-lib/i386-linux/2.95.2/……/……/……/……/i386-linux/include +# 库文件但是如果装gcc的时候,是有给定的prefix的话,那么就是 +/usr/include +prefix/include +prefix/xxx-xxx-xxx-gnulibc/include +prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include +``` + +## 2 库文件 +> cos()等函式库的选项要多加 -lm + +编译的时候: + +1. gcc会去找-L +2. 再找gcc的环境变量LIBRARY_PATH +3. 再找内定目录 /lib /usr/lib /usr/local/lib这是当初compile gcc时写在程序内的 + + +## 3 动态库的搜索路径 +1. 在配置文件/etc/ld.so.conf中指定动态库搜索路径 +2. 通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔) +3. 在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径。 + + 这是通过gcc 的参数"-Wl,-rpath,"指定(如例3所示)。当指定多个动态库搜索路径时,路径之间用冒号":"分隔) + + +4. 默认的动态库搜索路径/lib +5. 默认的动态库搜索路径/usr/lib + + +可以通过执行可执行文件pos得到的结果不同获知其搜索到了哪个动态库,从而获得第1个动态库搜索顺序,然后删除该动态库,再执行程序pos,获得第2个动态库搜索路径,再删除第2个被搜索到的动态库,如此往复,将可得到Linux搜索动态库的先后顺序。 +程序pos执行的输出结果和搜索到的动态库的对应关系如表1所示 +程序pos输出结果使用的动态库对应的动态库搜索路径指定方式 +``` +./ ./libpos.so 编译目标代码时指定的动态库搜索路径 +/root/test/env/lib /root/test/env/lib/libpos.so环境变量LD_LIBRARY_PATH指定的动态库搜索路径 +/root/test/conf/lib /root/test/conf/lib/libpos.so配置文件/etc/ld.so.conf中指定的动态库搜索路径 +/lib /lib/libpos.so 默认的动态库搜索路径/lib +/usr/lib /usr/lib/libpos.so 默认的动态库搜索路径/usr/lib +``` + +综合以上结果可知,动态库的搜索路径搜索的先后顺序是: + +1. 编译目标代码时指定的动态库搜索路径; +2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径; +3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径; +4. 默认的动态库搜索路径/lib; +5. 默认的动态库搜索路径/usr/lib. + + + +g++ -std=c++11 con_var.cpp -lpthread + +## 链接过程 +https://www.jianshu.com/p/4510b47ecd8a + +https://blog.csdn.net/caikunbob/article/details/85550000 + + +明白一件事。 + +C/C++ 经过编译汇编,生成二进制文件,只需要搜索头文件,找到函数的相关声明,即可正常编译。 + +C/C++ 经过链接,需要搜索头文件中指定的库文件,编译相关的函数,生成二进制文件,然后进行链接,生成目标文件。 \ No newline at end of file diff --git a/Linux/开发篇/搭建php环境.md b/Linux/开发篇/搭建php环境.md new file mode 100644 index 00000000..eafd4edf --- /dev/null +++ b/Linux/开发篇/搭建php环境.md @@ -0,0 +1,96 @@ +# Apache详解 + +## Apache目录结构说明 +* /etc/httpd/conf/httpd.conf:最主要的配置文件,不过很多其他的distribution都将这个文件拆成数个小文件,分别管理不同的参数。但是最主要配置文件还是以这个文件名为主。 +* /etc/httpd/conf.d/*.conf:这个事CentOS的特色之一,如果你不想修改原始配置文件httpd.conf的话,那么可以将你自己的额外参数独立出来,而启动apache时,这个文件就会被读入到主要配置文件。 + +* /var/www/html:这里是CentOS默认的“首页”所在目录。 +* /var/www/error:如果因为主机设置错误,或者是浏览器端要求的数据错误,在浏览器上出现的错误信息就已这个目录的默认信息为主。 +* /var/www/icons:提供apache的一些小图标 +* /var/www/cgi-bin :默认给一些可执行的CGI程序放置的目录 +* /var/log/httpd:默认apache的日志文件都放在这里,对于流量大的网站来说,这个目录要很小心,因为这个文件很容易变的很大,您需要足够的空间哦 + +* /usr/lib/httpd/modules:apache支持很多的模块,所以您想要使用的模块默认都放置在此目录 +* /usr/sbin/apachectl:这是Apache的主要执行文件,这个执行文件其实是shell script,它可以主动检测系统上的一些设置值,好让您启动Apache时更简单 +* /usr/sbin/httpd:这是主要的apache的二进制文件 +* /usr/bin/htpasswd:当您想登陆某些网页时,需要输入账号与密码。那么Apache本身就提供一个最基本的密码保护方式。该密码的产生就是通过这个命令实现的 + + +## MySQL目录与文件说明 + + +* /etc/my.cnf:这是Mysql的配置文件,包括您想要进行mysql数据库的最佳化,或者是正对mysql进行一些额外的参数指定,都可以在这个文件里实现 +* /usr/lib/mysql:这个目录是MySQL数据库放置的位置,当启动任何MySQL的服务器时,请务必记得在备份时,将此目录完整的备份下来。 + +## PHP文件说明 + +* /usr/lib/httpd/modules/libphp4.so:PHP提供给apache使用的模块,这个关系我们能否在apache网页上面设计php程序语言的最重要文件 +* /etc/httpd/conf.d/php.conf:你要不要手动将该模块写入Httpd.conf中呢?不需要,因为系统已经主动将php设置参数写入到这个文件中了,而这个文件会在apache重新启动时被读入。 +* /etc/php.ini:这是PHP的主要配置文件,包括PHP能不能允许用户上传文件,能不能允许某些低安全性的标志等,都在这个配置文件中设置。 +* /etc/php.d/mysql.ini /usr/lib/php4/mysql.so:PHP能否可以支持MySQL接口就看这两个文件了。这两个文件是由php-mysql软件提供的 +* /usr/bin/phpize /usr/include/php:如果您以后想要安装类似PHP加速器可以让浏览速度加快的话,那么这个文件与目录就需要存在,否则加速器软件没法用。 + +## Apache的配置说明 +* httpd.conf的基本设置是这样的: +``` +<设置项目> + 次设置项目内的相关参数 + 。。。。 + +``` + +* ServerTokens OS +这个项目在告诉客户端WWW服务器的版本和操作系统,不需要改编它 +如果你不想告诉太多的主机信息,将这个项目的OS改成Minor + +* ServerRoot "/etc/httpd" +这个是设置文件的最顶层目录,通常使用绝对路径,下面某些数据设置使用相对路径时. +就是与这个目录设置值有关的下层目录,不需要更改它 + +* TimeOut +设定 服务器接收至完成的最长等待时间 + +* KeepAlive +设定服务器是否开启连续请求功能,真实服务器一般都要开启 +* Port +设定http服务的默认端口。 +* User/Group +设定 服务器程序的执行者与属组,这个一般是Apache + +* Listen 80 +端口Listen 12.34.56.78:80 + +* DocumentRoot "/var/www/html" +文档目录 + +* 对 /var/www目录访问限制 +``` + + AllowOverride None + # Allow open access: + Require all granted + +对/var/www/html目录访问限制 + +   Options Indexes FollowSymLinks +   AllowOverride None +    Require all granted + +``` +* 默认编码 +``` +AddDefaultCharset UTF-8 +EnableMMAP off +EnableSendfile on +include进来其它配置文件 +IncludeOptional conf.d/*.conf +``` + +## Mysql服务安装 + +安装成功,傻瓜安装,一键配置。 + +## FTP服务的安装 + + +## 工程项目的导入和配置 \ No newline at end of file