首页 文章 精选 留言 我的

精选列表

搜索[linux],共10013篇文章
优秀的个人博客,低调大师

linux命令:sudo浅谈

sudo命令简介: 使得某一个用户作为另一个用户执行命令 1.配置文件为:/etc/sudoers 配置文件格式: 格式: who which_hosts=(runas) command who:表示哪一个用户 which_hosts:哪一个主机 runas:以什么用户身份执行 command:执行什么命令 查看sudo相关执行的日志文件为:/var/log/secure 对于多个用户,登陆多台服务器,以多个身份执行,多个命令,需定义别名: who:User_Alias 用户别名 which_hosts:Host_Alias 主机别名 runas:Runas_Alias 以什么用户身别名 command:Cmnd_Alias 命令别名 别名必须全部并且只能使用大写英文字母的组合: 用户别名定义格式: User_Alias USERADMIN = 系统用户名,%组名,还可以包含其它已经定义的用户别名 用户别名:可以包含:系统用户名,组名(格式:%组名),其它已定义的用户别名 中间以,隔开 主机别名定义格式: Host_Alias HOSTADMIN = 主机名,ip地址,网络地址段,其它已定义的主机别名 Runas_Alias别名格式: Runas_Alias RUNASNAME = 用户名,%组名,其它的已定义的Runas别名 Cmnd_Alias命令别名格式: Cmnd_Alias COMMANDNAME = 命令路径,目录(此目录内的所有命令),其它事先定义过的命令别名 Usage:使得hadoop用户可以执行所有主机的useradd usermod命令 vim /etc/sudoers 编辑sudo配置文档,在最后一行添加以下内容: hadoop ALL=(root) /usr/sbin/useradd,/usr/sbin/usermod 2.命令功能: 使得某一个用户作为另一个用户执行某台主机上的命令 3.命令参数: -l:列出当前用户可以使用的所有sudo类命令 -k:让认证信息失效 (默认sudo会记住密码5分钟) 添加标签: NOPASSWD: PASSWD: 4.命令实例: 1、使得hadoop用户可以执行所有主机的useradd usermod命令 vim /etc/sudoers 编辑sudo配置文档,在最后一行添加以下内容: hadoop ALL=(root) NOPASSWD: /usr/sbin/useradd,/usr/sbin/usermod NOPASSWD: 表示标签后的所有命令都不需要用密码 hadoop ALL=(root) NOPASSWD: /usr/sbin/useradd, PASSWD: /usr/sbin/usermod PASSWD:表示需要用密码, 2、使用别名方式启用sudoers配置文件 vim /etc/sudoers User_Alias USERADMIN = hadoop,%hadoop,%useradmin#表示hadoop用户,hadoop组,useradmin组 Cmnd_Alias USERADMINCMND = /usr/sbin/useradd,/usr/sbin/usermod,/user/bin/passwd [A-Za-z]*,! /usr/bin/passwd root#命令别名,表示可以通过sudo执行useradd usermod /user/bin/passwd [A-Za-z]* 表示执行passwd命令后面必须带至少一个字母 !/usr/bin/passwd root 表示不能执行passwd root 命令(!为取反)修改root用户密码 USERADMIN ALL=(root) NOPASSWD: USERADMINCMND [john@localhost root]$ sudo /usr/sbin/passwd root 口令: john is not in the sudoers file. This incident will be reported. [john@localhost ~]$ sudo /usr/bin/passwd Sorry, user john is not allowed to execute '/usr/bin/passwd' as root on localhost.localdomain. [john@localhost ~]$ sudo /usr/bin/passwd donggen Changing password for user donggen. New UNIX password: BAD PASSWORD: it is WAY too short Retype new UNIX password: passwd: all authentication tokens updated successfully. 本文转自wang650108151CTO博客,原文链接:http://blog.51cto.com/woyaoxuelinux/1887356,如需转载请自行联系原作者

优秀的个人博客,低调大师

Linux服务简单优化

硬件优化 处理器:核心数、主频、制程工艺、线程数、缓存等 核心数:1、2、4、6、8、12、24、32等 主频:2.0GHz、2.3GHz等等 制程工艺:22nm、14nm、10nm等等 线程数:1、2 缓存:L1、L2、L3 建议:尽量选择核心数越多、主频越高、制程工艺更新、支持超线程、缓存容量越大,且上市已过半年左右的 处理器。 内存:容量、频率、代数 容量:1G、2G、4G、8G、16G、32G 频率:1600、1866、2133、2400MHz等 代数:1、2、3、4代 建议:尽量选择单条容量16G或32G的DDR4 2133MHz及以上频率的内存条。 硬盘:类型、转速、接口类型、RAID 类型:机械和SSD固态 转速:5400、7200、10000、15000 转/分(机械硬盘) 接口类型:SATA、SAS、PCI-E RAID:0、1、5、6、10、50、60 建议:尽量选择支持PCI-E的SSD固态硬盘,尤其数据库、搜索引擎。 网卡:速率、接口类型 速率:10Mbps、100Mbps、1Gbps、4Gbps、10Gbps 接口类型:以太网、光纤等 建议:大部分服务器默认提供的1Gbps以太网卡够用。 如有需大数据量高并发访问的服务器遇到网络流量高峰跑满的情况,可以改用支持4Gbps或10Gbps的光纤接口网卡。 其他建议: 一般服务器集成显卡即可,除非有大量视频图像处理或异构计算等特殊需求。 操作系统优化 系统服务:关闭不用服务,提高性能同时,提高安全。grep -q '7.' /etc/redhat-release if [ $? -ne 0 ]; then Services=$(chkconfig --list | grep '0' | awk '{print $1}' | grep -Ev 'sshd|network|crond|syslog|ntpd') for Service in $Services do service $Service stop chkconfig --level 0123456 $Service off done else Services=(atd avahi-daemon cups dmraid-activation firewalld irqbalance kdump mdmonitor postfix) for Service in ${Services[*]} do systemctl disable ${Service} systemctl stop ${Service} done systemctl enable rc-local fi 内核参数: cat >> /etc/sysctl.conf << EOF vm.swappiness = 0 vm.overcommit_memory = 1 net.core.rmem_default = 262144 net.core.rmem_max = 16777216 net.core.wmem_default = 262144 net.core.wmem_max = 16777216 net.core.somaxconn = 60000 net.core.netdev_max_backlog = 60000 net.ipv4.tcp_max_orphans = 60000 net.ipv4.tcp_orphan_retries = 3 net.ipv4.tcp_max_syn_backlog = 60000 net.ipv4.tcp_max_tw_buckets = 10000 net.ipv4.ip_local_port_range = 1024 65500 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_mem = 786432 1048576 1572864 fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.sem = 250 32000 100 10000 kernel.pid_max = 65536 fs.inotify.max_user_watches = 1048576 kernel.kptr_restrict = 1 kernel.ctrl-alt-del = 1 EOF sysctl -p 提高系统打开文件数、打开进程数限制,减小默认栈空间大小限制: echo '* - nofile 1048576' >> /etc/security/limits.conf echo '* - nproc 65536' >> /etc/security/limits.conf echo '* - stack 1024' >> /etc/security/limits.conf 提高Shell打开文件数、打开进程数限制,减小默认栈空间大小限制:cat >> /etc/profile << EOF ulimit -n 1048576 ulimit -u 65536 ulimit -s 1024 EOF 服务优化 配置: 尽量开启缓存、缓冲,如:Nginx的fastcgi_cache、open_file_cache,PHP的opcache,MySQL的innodb buffer等等。 解锁资源限制,如:提高打开文件数、增加服务工作进程数、CPU绑定等等。 减小磁盘和网络IO,如:使用批量读写数据,tmpfs文件系统代替磁盘,关闭日志,开启http服务的keepalive属性、gzip压缩等等。 代码: 直接修改应用服务自身源代码或者使用第三方应用,如:Tengine代替Nginx、MairaDB代替MySQL。 借助性能分析调试工具,如:xdebug、xhprof分析业务PHP代码,慢日志和explain工具分析SQL语句等等。 编译: 添加优化参数,如:gcc编译优化级别-O参数。 去除多余模块,如:Nginx几乎很少用到的pop3模块。 借助其它加速模块或补丁,如:谷歌出品的内存分配库tcmalloc,阿里巴巴出品的合并静态文件Nginx补丁Concat。 架构优化 域名解析负载均衡:通过单个域名解析成多个IP地址,将用户的请求分发到不同的机房。 优点:简单,维护比较方便,适合网站镜像。 缺点:请求分布不均匀,域名解析缓存影响高可用。 动静分离:将图片、视频、js、css等静态文件单独抽离,减小动态请求和静态请求服务器之间互相影响。 优点:服务器功能更加简单,排查问题更加容易。 缺点:开发前期人力物力成本较高。 CDN:将静态资源部署到离用户更近的网络,减小用户请求的网络传输时间。 优点:大大提高用户访问静态资源的速度。 缺点:涉及到国内的复杂环境,管理维护成本较高。 负载均衡:分发请求至后端服务器。 优点:大大提高了后端服务器集群的性能和扩展性。 缺点:硬件负载均衡太贵。 分布式内容缓存:将数据库不经常修改的数据保存至内容缓存服务器。 优点:可以很大程度上减小数据库的读压力。 缺点:需解决数据缓存失效和数据库更新的数据一致性问题,包含令人头疼的雪崩效应。 消息队列:不仅可以做消息服务器,还可以将大量的消耗资源操作转换成顺序异步操作。 优点:减小瞬间高并发请求和服务器及数据库负载。 缺点:消息队列的高可用实现比较复杂,维护难度较高。 数据库代理:按照设定规则将不同的SQL发送至不同的数据库,然后聚合数据返回。 优点:减少了业务代码层读写数据库的逻辑复杂度,提高了数据库集群的扩展性。 缺点:数据库代理软件需重新实现对SQL语句的解析,同时还需支持分库分表,从而影响性能和维护。 总结 网站性能经常出在数据库瓶颈。 数据库耗CPU、耗内存、耗IO,优化架构常用的最简单办法就是尽量减小数据库的读写操作。 大部分公司的做法都是将请求尽量截留在数据库之前的服务器响应,越靠前越好。 可以将一部分动态内容转换成静态内容,进一步减小动态语言服务器和数据库读压力。 还可以将一部分读写数据库请求转成消息队列实现批量操作。 通过分库分表分区和数据库代理扩展数据库集群的性能。 当然,SQL语句的优化工作需一直坚持。 其余的服务如遇到性能不足时可以直接通过前置LVS、Haproxy、Nginx+TCP模块等方法扩展集群规模。 缓存: 架构: 本文转自dongsong1117 51CTO博客,原文链接:http://blog.51cto.com/dongsong/2048309,如需转载请自行联系原作者

优秀的个人博客,低调大师

linux下安装python

Android服务被设计用来执行很多操作,比如说,可以执行运行时间长的耗时操作,比较耗时的网络操作,甚至是在一个单独进程中的永不会结束的操作。实现这些操作之一是通过Android接口定义语言(AIDL)来完成的。AIDL被设计用来执行进程间通信,另一种实现方式见博文Android进程间的通信之Messenger。本文我们将学习如何创建AIDL文件实现Android进程间通信。在正式学习之前,我们先澄清一些“事实”。 关于Android Service 1、Android服务不是后台任务,它们默认只运行在你的app的主线程中 2、Android服务可以通过设置来运行在不同进程中 3、如果Android服务在不同进程中启动,你将不能使用通常的IBinder接口与其通信 AIDL:Android Interface Definition Language 为了在Android应用中实现进程间通信,我们需要在远端进程中定义一系列可被当前进程访问的方法。通过AIDL我们可以定义这样的一系列方法。AIDL就好像Java中的其它接口一样可以在其中定义一些抽象方法。我们首先需要创建一个以.aidl为后缀的文件并在里面定义所需的抽象方法。 AIDL的一个主要特征是,通过使用AIDL,我们可以在两个不同的应用中进行通信(其实Messenger也可以实现同样的操作,两者区别请见博文Android进程间的通信之Messenger);当然,如果你的应用不需要跟另外一个应用进行通信,那就尽量避免使用AIDL机制吧。aidl文件中定义的抽象方法中,只有一些原始数据类型以及一些基本数据类型如String,lists,maps等可以作为这些方法的参数,如果你想使用一个自定义类作为参数,那么你的自定义类必须实现Parcelable接口,并且该类要被导入AIDL文件中,这一点应该在单独的课程中进行讲解。本文只学习简单的AIDL用法。 AIDL实现思路 AIDL通过定义服务端暴露的接口,以提供给客户端来调用,AIDL使服务端可以并行处理(因此你可能需要考虑多线程并发访问的线程安全性问题)。通过编写aidl文件来设计想要暴露的接口,编译后会自动生成相应的Java文件,服务端将接口的具体实现写入Stub中,通过IBinder对象传递给客户端,客户端bindService时,通过asInterface方法将IBinder还原成接口,供客户端调用其中的方法。 简单示例 AndroidManifest.xml <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <serviceandroid:name=".BoundService"android:process=":custom_process"/> </application> IBoundService.aidl packageyf.exam.service.aidl; interfaceIBoundService{ intgetResult(inta,intb); } BoundService.java publicclassBoundServiceextendsService{ privateIBoundService.StubmBinder=newIBoundService.Stub(){ @Override publicintgetResult(inta,intb)throwsRemoteException{ returna+b; } }; @Override publicIBinderonBind(Intentintent){ returnmBinder; } } MainActivity.java publicclassMainActivityextendsActivity{ privateButtonbtn=null; privateIBoundServicemIBoundService; privatebooleanmServiceConnected=false; privateServiceConnectionconn=newServiceConnection(){ @Override publicvoidonServiceDisconnected(ComponentNamename){ mServiceConnected=false; } @Override publicvoidonServiceConnected(ComponentNamename,IBinderservice){ mIBoundService=IBoundService.Stub.asInterface(service); mServiceConnected=true; } }; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.button1); Intentintent=newIntent(this,BoundService.class); bindService(intent,conn,Context.BIND_AUTO_CREATE); btn.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ if(mServiceConnected){ try{ intresult=mIBoundService.getResult(2,4); Toast.makeText(MainActivity.this,"result="+result, Toast.LENGTH_SHORT).show(); }catch(RemoteExceptione){ e.printStackTrace(); } } } }); } @Override protectedvoidonDestroy(){ super.onDestroy(); if(mServiceConnected){ unbindService(conn); mServiceConnected=false; } } } 本文转自 zddnd 51CTO博客,原文链接:http://blog.51cto.com/13013666/1939696

优秀的个人博客,低调大师

docker linux redis 安装

1.docker redis 查询 docker search redis 2.下载 reids docker pull redis 3.启动 redis docker run -d -v /docker/redis/data:/data --name baoyou-redis -p 6379:6379 redis redis-server --appendonly yes -v /docker/redis/data:/data 存储aof 文件位置 持久化文件目录 --name baoyou-redis 容器名称 -p 6379:6379 暴露端口 --appendonly yes 持久化 4.启动redis-cli docker run -it --link baoyou-redis:redis --rm redis redis-cli -h redis -p 6379 --link baoyou-redis:redis 链接到自己的容器 5.重启容器 docker restart baoyou-redis 重启后持久化还存在 捐助开发者 在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信 以及扣扣群),没钱捧个人场,谢谢各位。 个人主页:http://knight-black-bob.iteye.com/ 谢谢您的赞助,我会做的更好!

优秀的个人博客,低调大师

Linux环境变量

环境变量作用:切换文件夹,查找执行文件等等 查看环境变量 env 和 set 命令,区别set查找的变量包括自定义变量和bash接口 export 将自定义变量转化为环境变量,环境变量可以被继承 malan@malan-Lenovo-G470 ~ $ name=Bell malan@malan-Lenovo-G470 ~ $ echo $name Bell malan@malan-Lenovo-G470 ~ $ bash malan@malan-Lenovo-G470 ~ $ echo $name malan@malan-Lenovo-G470 ~ $ exit exit malan@malan-Lenovo-G470 ~ $ export name malan@malan-Lenovo-G470 ~ $ bash malan@malan-Lenovo-G470 ~ $ echo $name Bell malan@malan-Lenovo-G470 ~ $ 注:bash表示开启一个新的bash进程 exit表示退出当前bash 环境变量是从一些环境变量的配置文件里读取出来的,那我门上面通过export设置的环境变量在shell一旦重启后就没有了. 要想永久的改变环境变量,那就要在配置文件中来设置环境变量 环境变量配置文件修改后必须要重启shell后才会重新读取,而source命令可以使配置文件立即生效 malan@malan-Lenovo-G470 ~ $ source 配置文件 配置文件详解 #先区别login shell 和non-login shell login shell non-login shell 需要登录 不需要登录 /etc/profile 系统整体配置 ~/.bashrc ~/.bash_profile ~/.bash_login ~/.profile <用户个人文件> 以上三个文件只读取一个,从前到后的优先级 所以综上所属:以后在用户个人文件中来更改环境变量,然后使用source立即生效即可使用,对于login shell 和non-login shell注意配置文件的不同 malan@malan-Lenovo-G470 ~ $ cat .bashrc malan@malan-Lenovo-G470 ~ $ echo $name malan@malan-Lenovo-G470 ~ $ echo "export name=Bell" > .bashrc malan@malan-Lenovo-G470 ~ $ source .bashrc malan@malan-Lenovo-G470 ~ $ echo $name Bell 重启终端,依旧生效

优秀的个人博客,低调大师

解决linux中文乱码

今天突然发现有个服务器上面的php输出的日志乱码,然后我查看php也是乱码,我下载windows本地,显示正常,我ctrl+c然后ctrl+v到服务器,还是乱码,各种转换,都不行, 查看xshell编码,utf-8的 查看系统编码echo $LANG,显示是en_US.UTF-8 再用file命令查看php,提示是个php script文件,然后机智的我直接删掉了<?php >,只保留php内容,然后file查看,提示是utf8的,这么就尴尬了, 后来发现有个修改系统编码的博文是这么说的 vi /etc/profile export LC_ALL="zh_CN.GBK" export LANG="zh_CN.GBK" 然后我赶紧查看了下echo $LC_ALL 显示en_US 根据网上的另一个帖子是这么说的 locale的设定: LC_ALL和LANG优先级的关系: LC_ALL > LC_* >LANG 1、如果需要一个纯中文的系统的话,设定LC_ALL= zh_CN.XXXX,或者LANG=zh_CN.XXXX都可以。 2、如果只想要一个可以输入中文的环境,而保持菜单、标题,系统信息等等为英文界面,那么只需要设定 LC_CTYPE=zh_CN.XXXX,LANG=en_US.XXXX就可以了。 3、假如什么也不做的话,也就是LC_ALL,LANG和LC_*均不指定特定值的话,系统将采用POSIX作为lcoale,也就是C locale。 所以这个系统根本不支持中文, 虽然$LANG=en_US.UTF-8 把LC_ALL设置为空或者设置为en_US.UTF-8,不过看了下其他系统,我还是设置为了空

优秀的个人博客,低调大师

Linux关机重启命令

关机重启命令: shutdown [选项] 时间 选项: -c 取消前一个关机命令 -h 关机 -r 重启 例子: shutdown -r 05:30 & (&表示后台准备指定时间重启) #没法远程关机 可以远程重启 shutdown -hnow 立即关机 其它关机(都不安全):(halt) (poweroff) (init 0) 其它重启(reboot相对安全):(reboot) (init 6) 系统运行级别(0(关机)-6(重启)) 1、单用户 2、不完全多用户,不含有NSF服务 3、完全多用户 4、未分配 5、启动图形界面(前提装了图形界面) runlevel 查看当前系统上级运行级别和当前运行级别 #上一级别 当前级别 退出登录: logout(每次退出远程最好执行,不然会影响最大连接数目)

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册