HOWTO INFORMATIQUE
Cette page donne des réponses à diverses questions informatique
Voir aussi
ComputerScience
WIKI
Voir aussi
InformationAboutThisTwiki
Tutoriel :
TWikiTutorial
Niveau Utilisateur
Créer un raccourci vers une icône :
Par exemple, créer

comme raccourci de l'icône TODO :
Editer
TWikiPreferences
* Set TD = http://planetowiki.irap.omp.eu/pub/TWiki/TWikiDocGraphics/todo.gif
* Set DO =
Commentaire
Html comment =
Twiki comment = # comment
Voir ce qui change sur le site
Pour savoir ce qui a changé (en ordre chronologique) sur le web Team, consulter cette page :
WebChanges
Changements survenus sur le web "twiki" :
WebChanges
on peut aussi s'inscrire sur cette page pour recevoir les changements du web Team par email :
WebNotify
Contribuer (enrichir le site)
Vous êtes vivement encouragés à contribuer au contenu de ce site.
Pour modifier n'importe quelle page du site :
- cliquez sur bouton "Edit", faites vos modifs, puis cliquez sur le bouton "Save".
- si vous êtes plus à l'aise avec la souris, cliquez plutot sur le bouton "WYSIWYG"
Faire une copie (de sauvegarde) d'un Web (pour consultation offline) :
- Grace au plugin PublishContrib, on peut obtenir une copie du Web à tout instant (attention, cette copie est READ ONLY, ce n'est plus un wiki, mais juste des pages web).
- Pour publier la version courante du Web, aller sur le topic PublishWeb, et cliquer sur le bouton "Publish" (en milieu de page). Par défaut, c'est l'option "zip" qui est sélectionnée, ce qui crée un zip du Web.
- Il suffit maintenant de cliquer en bas de la page générée par la requete, sur le lien "Published To: NomduWeb.zip", pour télécharger ce zip (L'accès à cette adresse est protégé pour que seuls les personnes enregistrées puissent y acceder)
- Dézipper et cliquer sur la page WebHome.html. Le résultat n'est pas très joli, mais le contenu y est...
- Un historique de la dernière publication se trouve dans le topic PublishContribHistory (utile pour voir si tout s'est bien passé)
Mise à jour d'une pièce attachée (remarque) :
Il vaut mieux utiliser des noms de fichier assez génériques (par exemple FDD.pdf au lieu de FF_v1.4.pdf) ainsi on peut mettre à jour un document sans changer son nom et les liens vers ce fichier
Insérer une icone:
%Y% |
|
%TD% ou %ICONURL{todo}% |
|
%DO% ou %ICONURL{done}% |
|
%CL% ou %ICONURL{closed}% |
|
Pour en savoir plus:
TWikiDocGraphics#Status_flag_LED_tag_icons
RACCOURCIS PRATIQUES
- Liste de tous les users twiki enregistrés : UserList
Niveau Administrateur
Voir aussi
InformationAboutThisTwiki
IDL
OpenGL Direct Hardware Rendering on Linux
The "Direct Rendering Infrastructure" (DRI) or "Direct hardware rendering" is described here :
http://www.ittvis.com/services/techtip.asp?ttid=3524
As it currently does not work on hyperion, we have to deactivate it and activate "software rendering" instead (slower).
How to set IDL to use "software rendering" (IDL 8 issue) ?
Fenêtre/Préférences/IDL/Graphiques :
Méthode de rendu pour les objets graphiques : sélectionner "Logiciel" au lieu de "Matériel"
There are a couple of ways to set IDL to use software rendering, besides from the IDLDE.
If you want to set the entire IDL session to use software rendering, then when you start up IDL, you could use this command:
idl -IDL_GR_WIN_RENDERER 1 (for Windows)
or
idl -IDL_GR_X_RENDERER 1 (for X Windows)
If you want to switch from the default hardware rendering to software rendering in the middle of an IDL session, you could use this command:
PREF_SET, 'IDL_GR_WIN_RENDERER', '1', /COMMIT (for Windows)
or
PREF_SET, 'IDL_GR_X_RENDERER', '1', /COMMIT (for X Windows)
Conseils pour bien documenter son code
- Voir conseils généraux (Michael Galloy) "A style guide" : styleguide.pdf
Je livre ici une synthèse des conseils de Michael Galloy pour bien documenter un code IDL (Lire "A style guide" pour la version complète avec justifications) :
1. General principles
1. Code is for humans.
2. Do not mix styles.
3. Avoid redundancy.
4. Use an easy to maintain style.
2. Layout
1. Layout should enhance the logical structure of the code.
2. Use two spaces (not tabs) per indentation level.
3. Use a maximum line length of 79 characters.
4. Write code in paragraphs.
Example:
function mg_sample, nValues, nIndices, seed=seed
compile_opt strictarr
; get random nIndices by finding the indices of the smallest
; nIndices in an array of random values
values = randomu(seed, nValues)
; our random values are uniformly distributed, so ideally
; the nIndices smallest values are in the first bin of the
; below histogram
nBins = nValues / nIndices
h = histogram(values, nbins=nBins, reverse_indices=ri)
; the candidates for being in the first nIndices will live in
; bins 0..bin
nCandidates = 0L
for bin = 0L, nBins - 1L do begin
nCandidates += h[bin]
if (nCandidates ge nIndices) then break
endfor
; get the candidates and sort them
candidates = ri[ri[0] : ri[bin + 1L] - 1L]
sortedCandidates = sort(values[candidates])
; return the first nIndices of them
return, (candidates[sortedCandidates])[0:nIndices-1L]
end
5. Insert two blank lines between routines.
One blank line separates "paragraphs"; two blank lines separate "sections."
3. Comments
1. Document intent.
2. Keep comments up to date with the code.
3. For a short comment, use a phrase with lowercase first letter and no period. For longer comments, use all
normal grammar rules.
5. Write a complete header for each routine.
Use comments between ;+ and ;- before the routine. Document the purpose of the routine, the return value (if
a function), and side effects of the routine (which you should strive to eliminate). Each parameter should be
documented with whether it is an input and/or output, optional or required, data type expected, default value (if
any) and a description of its purpose.
For example, the below is an IDLdoc formatted header for the routine listed above:
;+
; Get nIndices random indices for an array of size nValues (do
; not repeat an index).
;
; :Returns: lonarr(nIndices)
;
; :Params:
; nValues : in, required, type=long
; size of array to choose indices from
; nIndices : in, required, type=long
; number of indices needed
;
; :Keywords:
; seed : in, out, optional, type=long or lonarr(36)
; seed to use for random number generation, a new seed
; will be output
;-
function mg_sample, nValues, nIndices, seed=seed
6. Indent a comment along with the code it's documenting.
7. Document paragraph by paragraph.
Each paragraph of code may need a comment to document its purpose, but inside a paragraph use only end-of-line
comments to comment particular lines.
It can be helpful to write the comments first, providing an outline of the code to write.
ex of end-of-line comment :
if (event.type eq 2) then begin ; type 2 = motion events
9. Don't repeat the code in the comments.
Don't document the obvious.
10. Don't add extra comments for convoluted code; improve the code.
Don't document bad code—rewrite it. (Kernighan and Plauger, The Elements of Programming Style)
4. Statement formatting
4.1. Use lowercase for reserved words, operators, and compile_opt option names.
For example, use:
compile_opt strictarr
if (not done) then readf, lun, line
4.2. Use only one statement per line.
For example, don't write:
a = 1 & b = 2
4.3. Prefer begin/end blocks unless the entire statements fits on one line.
For a single, long statement, use:
for i = 0, 10 do begin
print, i, format='("The index is ", I0, ".")'
end
But never write:
for i = 0, 10 do $
print, i, format='("The index is ", I0, ".")'
4.5. Define structures one field per line unless the entire definition can fit on one line.
For example, use:
point = { x: 0.0, y:0.0 }
state = { x: 0.0, $
y: 0.0, $
pdata: ptr_new(), $ ; image data
drawId: 0L $ ; window identifier
}
4.6. Add one space around most operators.
ex:
slope = (y0 - y1) / (x0 - x1)
tvscl, im, true=1
bin = arr[r[r[i]:r[i + 1] - 1]]
point = { x: 0.0, y: 0.0 }
Also, don't add extra spaces in order to align values.
4.7. Use single quotes for strings.
Use double single quotes if you need a single quote. For example,
sign = 'Eat at Joe''s'
4.9. Use capital letters to indicate the type of constant, use lowercase to indicate base of integers.
Use 0L not 0l because "l" (lowercase letter el) looks like "1" (integer one). Use '5'o and '5'x, not '5'O and
'5'X.
4.10. Use square brackets for array indices.
Use
compile_opt strictarr
in each routine to prevent issues with IDL confusing arrays and functions calls.
5. Variables
1. Use good variable names.
2. Variable names should be in camel case.
Camel case uppercases the first letter of each word in the name except for the first letter.
Uppercase each letter in an abbreviation that appears in a variable name unless it starts the name:
noaaWeatherURL.
Prefix the name with "n" for variables that hold counts, "o" for object references, "p" for pointers, "id" for
iTools identifiers.
Examples that follow this convention,
nFiles
oModel
pState
idPlot
3. Prefer pointers, objects, and passing local variables over common blocks or system variables.
Occasionally there is a reason to use common blocks or system variables, but you should have a good argument
for it.
When using direct graphics, prefer using graphics keywords of the plotting routines over setting system
variables directly.
4. Define common blocks and named structures in only one location.
Define the variables in a common block only once in a batch file. Include that file where needed.
map_proj_init_commonblock.pro is an example of this.
Define a named structure using automatic structure definition. For example, define MG_Point in a routine
named MG_POINT__DEFINE in a file named mg_point__define.pro.
6. Routines
1. For any file containing IDL code, filenames should always be in lower case and use the ".pro" extension.
2. Each file should include only one routine called from outside the file.
Each file should contain only one routine called from outside that file. Add the ".pro" extension to the routine
name of the externally called routine to get the filename. For example, the routine MG_LINEAR_FUNCTION
should be in a file named mg_linear_function.pro. If there are multiple routines in the file, make sure the
externally called routine is last in the file.
3. Routine names should be lower case, begin with a short organization prefix, and separate words with
underscores.
The prefix indicates the individual or group responsible for the code. It is usually the initials of the individual or
orgranization. Limit to two or three letters. Don't use the "IDL", "RSI", "ITT", "cw", "it", or empty prefixes.
4. Routines should fit on one screen.
5. Keywords should always be optional for the caller; positional parameters should generally be required.
Keywords should either be an optional input with a reasonable default value or an extra output (i.e. not the
main purpose of the routine).
6. Keyword names should be lowercase and separate words with underscores.
For example,
filename
ntests
eye_separation
left_image
7. Always use the full keyword name when calling the routine.
8. If the purpose of a routine is to return a value, use a function, otherwise use a procedure.
9. Status and error codes should be returned via keyword.
7. Object-oriented programming
1. Class names should begin with a prefix indicating organization and a code indicating the class' area of use.
Each word should be capitalized
Use the same prefix as given to normal routine names; avoid "IDL", "ITT", "RSI", and the empty prefix.
Codes already in use by IDL: an (analysis), com (COM), db (database), ex (example), ff (file format), gr
(graphics), it (iTools), sys (system), net (network), and _ (general use). Make use of the existing codes and
make up new ones as necessary.
Use all caps for abbreviations in class names, as in
IDLnetURL.
2. Put all the methods and the routine defining the instance variables for a class into a single file.
For the definition of
MGexClass, the file should be named mgexclass__define.pro. The last routine in this file
should be MGEXCLASS__DEFINE and should define the instance variables for the class (i.e. create a named
structure with name
MGexClass).
Define only one structure/class name in the __DEFINE routine.
3. Method names should be a verb phrase in camel case.
For example, here are some method names following these conventions:
getProperty
setProperty
add
findTestNames
runTest
reportTestResult
Use the conventions that are used by the IDL library classes. For example, use the GETPROPERTY and
SETPROPERTY scheme of procedures to handle getting and setting properties of a class.
4. Begin "protected" methods' names with a underscore.
For example,
MGexSomeClass::_helperMethod
is a helper method called by other methods in
MGexSomeClass, but should not be called from outside of
MGexSomeClass.
5. Beware of multiple inheritance.
Use multiple inheritance as a last resort. Prefer delegation for one of the parent classes i.e. make the new class
contain the secondary parent class as an instance variable.
8. Exemple de commentaires proposé par ITT dans examples/template.pro
;+
; NAME:
; ROUTINE_NAME
;
; PURPOSE:
; Tell what your routine does here. I like to start with the words:
; "This function (or procedure) ..."
; Try to use the active, present tense.
;
; CATEGORY:
; Put a category (or categories) here. For example:
; Widgets.
;
; CALLING SEQUENCE:
; Write the calling sequence here. Include only positional parameters
; (i.e., NO KEYWORDS). For procedures, use the form:
;
; ROUTINE_NAME, Parameter1, Parameter2, Foobar
;
; Note that the routine name is ALL CAPS and arguments have Initial
; Caps. For functions, use the form:
;
; Result = FUNCTION_NAME(Parameter1, Parameter2, Foobar)
;
; Always use the "Result = " part to begin. This makes it super-obvious
; to the user that this routine is a function!
;
; INPUTS:
; Parm1: Describe the positional input parameters here. Note again
; that positional parameters are shown with Initial Caps.
;
; OPTIONAL INPUTS:
; Parm2: Describe optional inputs here. If you don't have any, just
; delete this section.
;
; KEYWORD PARAMETERS:
; KEY1: Document keyword parameters like this. Note that the keyword
; is shown in ALL CAPS!
;
; KEY2: Yet another keyword. Try to use the active, present tense
; when describing your keywords. For example, if this keyword
; is just a set or unset flag, say something like:
; "Set this keyword to use foobar subfloatation. The default
; is foobar superfloatation."
;
; OUTPUTS:
; Describe any outputs here. For example, "This function returns the
; foobar superflimpt version of the input array." This is where you
; should also document the return value for functions.
;
; OPTIONAL OUTPUTS:
; Describe optional outputs here. If the routine doesn't have any,
; just delete this section.
;
; COMMON BLOCKS:
; BLOCK1: Describe any common blocks here. If there are no COMMON
; blocks, just delete this entry.
;
; SIDE EFFECTS:
; Describe "side effects" here. There aren't any? Well, just delete
; this entry.
;
; RESTRICTIONS:
; Describe any "restrictions" here. Delete this section if there are
; no important restrictions.
;
; PROCEDURE:
; You can describe the foobar superfloatation method being used here.
; You might not need this section for your routine.
;
; EXAMPLE:
; Please provide a simple example here. An example from the
; DIALOG_PICKFILE documentation is shown below. Please try to
; include examples that do not rely on variables or data files
; that are not defined in the example code. Your example should
; execute properly if typed in at the IDL command line with no
; other preparation.
;
; Create a DIALOG_PICKFILE dialog that lets users select only
; files with the extension `pro'. Use the `Select File to Read'
; title and store the name of the selected file in the variable
; file. Enter:
;
; file = DIALOG_PICKFILE(/READ, FILTER = '*.pro')
;
; MODIFICATION HISTORY:
; Written by: Your name here, Date.
; July, 1994 Any additional mods get described here. Remember to
; change the stuff above if you add a new keyword or
; something!
;-
PRO TEMPLATE
PRINT, "This is an example header file for documenting IDL routines"
END
Le même bloc de commentaires, mais vide :
;+
; NAME:
;
;
;
; PURPOSE:
;
;
;
; CATEGORY:
;
;
;
; CALLING SEQUENCE:
;
;
;
; INPUTS:
;
;
;
; OPTIONAL INPUTS:
;
;
;
; KEYWORD PARAMETERS:
;
;
;
; OUTPUTS:
;
;
;
; OPTIONAL OUTPUTS:
;
;
;
; COMMON BLOCKS:
;
;
;
; SIDE EFFECTS:
;
;
;
; RESTRICTIONS:
;
;
;
; PROCEDURE:
;
;
;
; EXAMPLE:
;
;
;
; MODIFICATION HISTORY:
;
;-
OUTILS pour documenter le code
doc_library
doc_library affiche seulement "tel quel" le bloc de commentaires complet compris entre ";+" et ";-", et affiche le chemin du fichier.
Pour documenter une fonction ou une procédure :
IDL> doc_library, 'DIST'
----- Documentation for C:\Program Files\ITT\IDL\IDL80\lib\dist.pro
NAME:
DIST
PURPOSE:
Create a rectangular array in which each element is proportional
to its frequency. This array may be used for a variety
of purposes, including frequency-domain filtering and
making pretty pictures.
CATEGORY:
Signal Processing.
CALLING SEQUENCE:
Result = DIST(N [, M])
INPUTS:
N = number of columns in result.
M = number of rows in result. If omitted, N is used to return
a square array.
OUTPUTS:
Returns an (N,M) floating array in which:
R(i,j) = SQRT(F(i)^2 + G(j)^2) where:
F(i) = i IF 0 <= i <= n/2
= n-i IF i > n/2
G(i) = i IF 0 <= i <= m/2
= m-i IF i > m/2
SIDE EFFECTS:
None.
RESTRICTIONS:
None.
PROCEDURE:
Straightforward. The computation is done a row at a time.
MODIFICATION HISTORY:
Very Old.
SMR, March 27, 1991 - Added the NOZERO keyword to increase efficiency.
(Recomended by Wayne Landsman)
DMS, July, 1992. - Added M parameter to make non-square arrays.
CT, RSI, March 2000: Changed i^2 to i^2. to avoid overflow.
IDL> doc_library, 'plot'
----- Documentation for C:\Program Files\ITT\IDL\IDL80\lib\graphics\plot.pro
:Description:
Create IDL Plot graphic.
:Params:
arg1 : optional generic argument
arg2 : optional generic argument
:Keywords:
_REF_EXTRA
Dans ce dernier exemple (plot), on se rend compte que depuis idl 8, les nouvelles fonctions/procédures (telles que la fonction plot) ne sont plus commentées
au format "idl" mais "rst", qui semble donc être le nouveau format à utiliser pour commenter du code idl.
mk_html_help
Cet outil génère une doc html d'un fichier ou même d'un répertoire complet :
ex: documentation du fichier dist.pro:
MK_HTML_HELP, 'C:\Program Files\ITT\IDL\IDL80\lib\dist.pro', 'help_dist.html' ; La doc générée est help_dist.html
ex: documentation d'une arborescence complète:
MK_HTML_HELP, 'C:\Program Files\ITT\IDL\IDL80\lib', 'help.html' ; La doc générée est help.html
IdlDoc
home:
http://idldoc.idldev.com/
download:
http://idldoc.idldev.com/wiki/Downloads
tutoriel:
http://idldoc.idldev.com/wiki/GettingStarted
idldoc est un outil qui permet de générer une doc à partir du code idl
Il propose 3 formats différents :
- rst : le format le plus récent, qui tend à devenir le nouveau standard, il apporte beaucoup de possibilités
- idldoc : le format historique de idldoc, qui ressemble à celui utilisé par des outils plus génériques, tels que Doxygen
- idl : le format utilisé par ITT (et proposé dans examples/template.pro)
Ce dernier format ("idl") a juste le "mérite" d'être un standard pour les routines IDL, mais il est peu et mal exploité par
IdlDoc qui ne reconnait que très peu de balises de commentaires (seulement 6) parmis celles proposées dans template.pro, et les met mal en valeur dans la doc générée.
Les 6 balises exploitées sont :
; PURPOSE:
; SIDE EFFECTS:
; RESTRICTIONS:
; PROCEDURE:
; EXAMPLE:
; MODIFICATION HISTORY:
Cette dernière balise est affichée en tant que "Author information" dans la doc générée
Quant à la balise suivante...
; CALLING SEQUENCE:
... elle n'est pas reconnue, mais elle semble inutile puisque cette information est automatiquement générée par idldoc.
Voir mes commentaires à l'auteur du logiciel et ses réponses:
http://michaelgalloy.com/2010/10/20/idldoc-3-3-released.html
Installation
(NB: sur hyperion, c'est déjà installé sous /usr/local/itt/idldoc/idldoc)
1) Download
2) Copier et dézipper dans un dossier de mon choix (ex : D:/idldoc/idldoc-3.3)
3) Ajouter le chemin vers idldoc dans le IDL_PATH (Fenêtre/Preferences/IDL/Chemins/Insérer (puis Appliquer)
Utilisation
Pour générer la doc avec idldoc :
IDL> idldoc, root='path_vers_mon_repertoire_source', output='path_vers_mon_repertoire_doc'
Puis, 2clic sur index.html
Exemple plus complet:
IDL> idldoc, root='path_vers_mon_repertoire_source', output='path_vers_mon_repertoire_doc', title='DOC pour mon projet', subtitle='generated with idldoc 3.3', format_style='rst', overview='path_vers_mon_fichier_overview'
Remarque: format_style peut prendre les 3 valeurs "rst", "idl" ou "idldoc"
Enregistrer une image dans un fichier
; envoi vers fichier postscript
set_plot, 'ps'
; éventuellement donner un nom
device, filename='toto.ps'
plot, findgen(2)
; retour à l'affichage sur écran
device, /close
set_plot, 'x'
PHP
La syntaxe Heredoc se comporte exactement comme une chaîne à guillemets doubles, sans les guillemets doubles. Cela signifie que vous n'avez pas à échapper les guillemets (simples ou doubles) dans cette syntaxe. Les variables sont remplacées par leur valeur et le même soin doit leur être apporté que dans les chaînes à guillemets doubles.
Exemple de chaîne
HereDoc
<?php
$str = <<<EOD
Exemple de chaîne
s'étalant sur
plusieurs lignes
avec la syntaxe heredoc
EOD;
/* Exemple plus complexe, avec des variables. */
class foo {
var $foo;
var $bar;
function foo() {
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'MonNom';
echo <<<EOT
Mon nom est "$name". J'affiche des $foo->foo.
Maintenant, j'affiche un {$foo->bar[1]}.
Ceci se traduit par un 'A' majuscule : \x41
EOT;
?>
<?php
class foo {
public $bar = <<<EOT
bar
EOT;
}
?>
Fonctions anonymes (exemples d'algo de tri et de somme)
<?php
$t = array (2,3,6,7,9,2,43,5,2,54,65,34,23,54,23,654,43);
print_r ($t);
uasort ($t, function ($x,$y) { return $x > $y;});
print_r ($t);
printf ("somme = %d\n", array_reduce ($t, function ($x,$y) { return $x+$y;}));
?>
Travail sur les chaînes
- Supprimer une partie de la chaîne : str_replace()
- sous-chaîne : substr()
- tester la présence d'une sous-chaine dans la chaine (et récupérer sa position) : strpos()
- parser une chaine de paramètres html, et les placer dans un tableau : parse_str($chaine, $args)
- remplacer une partie de la chaine : $bodytag = str_replace("%body%", "black", "");
Travail sur les arrays
- merge : $GET = array_merge($GET,$args)
- dispatcher contenu array dans n strings (explode) :
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
- regrouper contenu array dans 1 string (implode) :
$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);
echo $comma_separated; // lastname,email,phone
Reflection
print
FUNCTION." in ".__FILE__." at ".__LINE__."\n";
Ou bien (php5) :
$modelReflector = new
ReflectionClass(
CLASS);
$method = $modelReflector->getMethod(
METHOD);
ATTENTION
- echo "cette variable n'existe pas mais ca ne génère aucune erreur !!!!!!!" . $nimportekoi;
- echo "cette propriété (attribut, variable) n'existe pas mais ca ne génère aucune erreur !!!!!!!" . $this->nimportekoi;
Afficher un bloc de code html dans php (ou tout autre texte long) :
http://forum.webrankinfo.com/petite-astuce-pour-afficher-simplement-code-html-t32812.html
LINUX
Utilisation
SSH
Exécuter une commande sur un serveur distant:
# ssh
user@server bash -c "ls -l"
Mode raccourci:
# ssh
user@server "ls -l"
# ssh surfasafe "ls -l"
# ssh
root@surfasafe "ls -l"
# ssh
root@surfasafe bash -c "ls -l"
- Non autorisé vers sauvcesr2:
# ssh
pallier@sauvcesr2 bash -c "ls -l"
This account is restricted by rssh.
Allowed commands: scp sftp rsync
If you believe this is in error, please contact your system administrator.
SED (substitution de texte)
Pleins d'exemples ici :
http://sed.sourceforge.net/sed1line_fr.html
- remplacer tutu par toto, mais seulement des lignes 3 à 6 :
cat monfichier.txt | sed -e 3,6"s/tutu/toto/" >| monfichiertemp.txt
- remplacer tutu par toto, mais seulement entre les lignes "titi" et "toto" :
/titi/,/toto/s/tutu/toto/
ou encore :
sed -e "/$debut/,/$fin/"'s#HostId="t3://.*\n#HostId="t3://'"$WLS_ADM_HOST:$PORT\"/" < "$file1" > "$file2"
GREP (recherche textuelle)
Afficher uniquement les lignes de commentaire:
egrep '^#' fichier
Ne pas afficher les lignes de commentaire:
egrep -v '^#' fichier
N'afficher que les lignes utiles (tout sauf commentaires et lignes vides) :
egrep -v '^(#|$)' fichier
RSYNC
Sauvegarder (de façon incrémentielle) des répertoires du poste A vers le poste B :
1) Depuis A...
A#> rsync -avz /rep/rep1 /rep/rep2 B:/rep/
option -v = verbose
attention aux slashes '/' :
/rep/rep1 écrit un répertoire rep1 sur B
/rep/rep1/ écrit directement le contenu du répertoire rep1 sur B
2) ... ou Depuis B
rsync -avz A:/rep/rep1 A:/rep/rep2 ./rep
FIND
Supprimer tous les répertoires CVS/ dans toute une arborescence (à partir du répertoire courant) :
find . -name "CVS" -exec \rm -r {} \; > /dev/null 2>&1
Combien de fichiers dans un répertoire (y-compris les sous-rep) :
find rep | wc -l
Affecter des droits spécifiques à certains éléments d'un répertoire (tout le contenu, y-compris sous-dossiers) :
dossiers:
find /home/jsmith/awstats/ -type d | xargs chmod 0755
fichiers:
find /home/jsmith/awstats/ -type f | xargs chmod 0644
fichiers perl:
find /home/jsmith/awstats/ -type f -name *.pl | xargs chmod 0755
Forwarder les mails du serveur
Par exemple, je veux forwarder mes mails de
pallier@planetoweb.cesr.fr vers ma boite cesr ou encore ma boite perso :
cd ~
créer un fichier ".forward" contenant mon adresse cesr ou perso
S'il s'agit de forwarder les mails adressés à
root@planetoweb.cesr.fr, on peut utiliser la même solution, mais on peut aussi
ajouter cette ligne tout à la fin du fichier /etc/aliases
root:
etienne.pallier@cesr.fr
Rechercher un fichier (dans une hiérarchie de répertoires)
find . -name filename_searched
Rechercher un mot dans un ou plusieurs fichiers
- rechercher "mot" dans les fichiers idl du répertoire courant
grep "mot" *.pro
- rechercher "mot" dans tous les fichiers du répertoire courant
grep -i "mot" .
L'option "-i" permet de ne pas tenir compte de la casse
- rechercher "mot" dans tous les fichiers du répertoire courant ainsi que dans tous les sous-rep (récursif) :
grep -r -i "mot" .
Faire une action sur un ensemble de dossiers et fichiers
Depuis répertoire courant, supprimer tous les dossiers "CVS" (récursivement) :
find . -name CVS -exec rm -rf {} \;
Créer un alias
Exemple : quand on tape "l" ça fera "ls -l"
alias l="ls -l"
Cette ligne doit être placée dans votre ~/.bashrc
Configurer mon environnement
Pour les configurations perso, les placer dans son ~/.bash_profile (ce script appelle ~/.bashrc qui doit contenir les alias et fonctions)
Mettre les configurations générales dans /etc/profile.d/profile_etienne.sh (elles seront ainsi valables pour TOUS les users du serveur)
Ce fichier est automatiquement lu par /etc/profile au démarrage d'une session
Imprimer sur linux
Pour installer l'imprimante "sprinter", voir
SprinterPrinter
Pour faire de cette imprimante l'imprimante par défaut, ajouter cette ligne dans votre ~/.bash_profile :
export PRINTER=sprinter (mettre le nom de votre imprimante à la place de "sprinter")
Pour imprimer du texte, on peut utiliser les utilitaires "a2ps" ou "enscript"
Visualiser des images (jpeg, ps, ...) en mode console
display
Note : display permet aussi de convertir une image d'un format vers un autre (enregistrer sous...)
Voir aussi "xv" et "gthumb"
Convertir une image d'un format vers un autre
PS to PDF : ps2pdf
Voir aussi l'utilitaire convert
En mode interactif, On peut aussi utiliser display (voir ci-dessus)
Administration
BOOT LINUX
I - Le boot : tryptique noyau, arguments, et ramdisk
Synthèse du workflow :
bootloader ==> noyau + initramfs + arguments ==> montage de la racine
1) Chargeur de boot (bootloader)
C'est le 1er prog à s'exécuter. Différent selon les architectures (pc x86, station Sun, Mac PPC...)
Rôle: mettre en RAM le noyau (kernel), lui passer des arguments, copier un ramdisk en RAM, et passer la main au noyau
Ex: lilo, grup, outils syslinux (bien adapté à partifion FAT, clé usb, cd)
Etapes :
- allumage électrique
- POST (Power On Self Test)
- BIOS (dans lequel le periph d'amorçage est défini)
- lancement bootloader installé sur periph amorcé
Ex: noyau grub, /boot/bzImage-2.6
Ex: ramdisk grub, /boot/initrd.img
2) Le noyau
Rôle : monter la racine et lancer /sbin/init situé dessus
Au boot, le noyau décourvre son environnement (ram, cpu, disque...). Ces périph sont gérés par des pilotes (drivers), des "modules" qui sont compilés dans le noyau ou dans des fichiers externes (souvent dans /lib/modules/). Les fichiers modules sont situés sur une partition qui n'est pas encore montée, et donc les périph correspondants ne peuvent pas être utilisés.
Le noyau monte sa racine avec /bin/mount
ex: montage de /dev/sda1 en lecture seule avec sys de fichier ext4
$ mount -t ext4 -o ro /dev/sda1 /
Les arguments passés au noyau peuvent être relus après boot :
$ cat /proc/cmdline
On peut aussi passer l'argument "init=/bin/bash" pour accéder au système au démarrage avec un shell bash.
3) Le ramdisk initial : initramfs
Rôle : permettre une détection plus intelligente de la racine ainsi qu'une facilité de configuration.
S'appelait initrd, mais est de plus en plus remplacé par initramfs
L'initramsf est un ensemble de fichiers qui vont être directement copiés dans le cache de système de fichiers sous la racine (tous les sys 2.6 utilisent un rootfs, cf "cat /proc/mounts"). Il doit au moins contenir un programme /init exécutable que le noyau va lancer pour qu'il trouve la racine et la monte. C'est un microsystème linux à part entière. Le prog /init est souvent un script shell, simple à lire.
Avec un initramfs, il devient possible de conserver un noyau minimal et de mettre les modules essentiels au boot dans l'initramfs (évite de devoir recompiler le noyau). Il contient aussi l'image qui permet un affichage graphique pendant le boot.
/init parse donc la ligne /proc/cmdline, cherche la racine, et la monte pour ensuite basculer le noyau dessus, et enfin s'autoremplace par le vrai binaire /sbin/init.
II - init et inittab
Arrivé à ce point, la noyau tourne, la racine de la distrib est montée (souvent en "ro") et le binaire /sbin/init est lancé, premier processus.
Si ce processus meurt (pid=1), le noyau fait un kernel panic. Il est aussi responsable de l'extinction de la machine.
Si on passe au noyau l'argument "init=/bin/bash", seul "bash" est lancé (à la place de /sbin/init) et on a ainsi un accès root sur la racine (utile pour réparer une distrib, ou modifier mot passe root dans /etc/shadow)
/sbin/init a pour fichier de conf, /etc/inittab : décrit les processus lancés au démarrage et à surveiller durant le fonctionnement normal du système.
Init à 7 runlevels (0=stop, ..., 6=reboot). Runlevel 1 est pour la maintenance (nb minimum de processus et user root only).
Chaque ligne est composée de 4 paramètres :
référence:runlevel:manière de lancer la commande:commande
Runlevel par défaut (ici, le 3):
id:3:initdefault:
On peut modifier ça avec un argument au noyau, par ex:
root=/dev/hda2 ro 1
Runlevel courant ?
$ runlevel
Changer de runlevel ?
$ init n
sysinit est lancé au boot, mais avant les cdes boot:
si::sysinit:/etc/rc.d/rc.sysinit
reset:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
wait, lance un process et attend sa fin pour continuer:
l5:5:wait:/etc/rc.d/rc 5
respawn, relance le process quand il se termine (ex: les gettys texte, alt-F1... relancés dès qu'on se délogue)
5:2345:respawn:/sbin/mingetty tty5
Relecture de inittab après modif ?
kill -HUP 1
inittab lance des script rc (run command) de 2 façons selon les familles de systèmes linux :
- façon systemV (RedHat et Debian)
- façon BSD (slackware)
Voyons ici la façon
SystemV (plus élaborée que BSD)
en fait, inittab lance le script rc général et lui passe le runlevel en argument:
l5:5:wait:/etc/rc.d/rc 5
rc va lancer les scripts du runlevel associé, dans l'ordre alpha.
/etc/rc.d/ contient un dossier rcN.d/ par runlevel (N)
ex: /etc/rc.d/rc5.d/
Ce dossier contient simplement des liens vers les scripts de /etc/init.d/ (qui doivent accepter au moins les arguments "start" et "stop")
Ces liens sont préfixés par S (Start) ou K (Kill).
Quand on entre dans un runlevel, tous les liens S* de ce runlevel sont exécutés (dans l'ordre alpha)
Quand on sort d'un runlevel, tous les liens K* de ce runlevel sont exécutés
Ex:
S85httpd lancera "/etc/init.d/httpd start"
Un lien /etc/rc.d/rc5.d/S42foobar sera exécuté à l'entrée du runlevel 5, et appellera /etc/init.d/foobar start
Il sera exécuté avant l'appel de S95barqux
Sur
RedHat, seul le runlevel 5 lance X :
x:5:respawn:/etc/X11/prefdm -nodaemon
Le dernier script à être lancé est /etc/rc.d/rc.local
(on peut y mettre tout ce qu'on veut voir exécuter au boot)
Le prog update-rc.d peut être utilisé pour activer/désactiver des scripts au démarrage.
Ubuntu propose Upstart en remplacement du couple init/inittab
MacOS propose un "super-daemon" launchd qui regroupe les fonctionnalités de init (lance démon lors du démarrage), crond (lance démon lors de top horaires), et (x)inetd (lance démon lors de requêtes réseaux)
FTP
ex: installation ftp pour l'expérience RAMAN (sur
ExoMars)
http://www.obs-mip.fr/index.php/fre/recherche/techniques-missions-spatiales/Exomars-RAMAN
La mission
ExoMars, de l’Agence Spatiale Européenne (ESA), est une mission du programme Aurora. Son objectif est de caractériser l’environnement biologique martien pour préparer l’exploration humaine de la planète rouge.
EXLIBRIS serait capable d’effectuer une ablation des roches puis l’analyse de la composition de cette roche à la fois en chimie élémentaire (ultra-violet), en minéraux et composés organiques (Raman). Le CESR serait responsable de la partie LIBS (ultra-violet) et de la calibration de l’instrument. F. Rull Pérez (Centro de Astrobiologia , Espagne) serait en charge de la partie Raman.
Contexte de réalisation
Mission ESA : Tir prévu en 2013.
Voir en ligne (Site Officiel d’ExoMars à l’ESA) :
http://www.esa.int/esaSC/SEMGB7MJ74G_index_0.html
Ajout 2 users ftpread et ftpw (groupe ftpgroup) dans /etc/passwd (et /etc/shadow), et leur donner pour home /projects/raman/ftp/files
Leur attribuer un pass via "password"
Leur donner un accès exclusif a leur home:
chown ftpw:ftpgroup /projects/raman/ftp/files/
Faire en sorte que ftpread n'est qu'un accès en lecture seule (via son groupe ftpgroup) :
chmod 755 /projects/raman/ftp/files/ --> "rwxr-xr-x"
Les autoriser en les ajoutant dans dans /etc/vsftpd/user_list
(chroot doit être activé par défaut pour tous les users internes)
/etc/init.d/vsftpd restart
LOGS
/var/log
auth.log ou secure (sur Redhat)
Outil de visualisation graphique des logs : gnome-system-log
logrotate
/etc/logrotate.conf
/etc/logrotate.d/
Forcer une rotation :
sudo logrotate -f /etc/logrotate.conf
==> new file "messages", "messages" devient "messages1", "messages1" devient "messages2"...
logwatch
by default, runs daily on yesterday's logs (/etc/cron.daily/0logwatch qui pointe sur /usr/share/logwatch/scripts/logwatch.pl), includes all services, and sends a mail to root
Configuration locale :
- Générale : /usr/share/logwatch/default.conf/logwatch.conf
- Locale : /etc/logwatch/conf/logwatch.conf
Exemples :
info sur l'activité sshd d'aujourd'hui :
logwatch --service sshd --range=Today
Plus de détails :
logwatch --service sshd --range=Today --detail=Medium (ou High)
Pour créer un fichier au lieu d'un mail : --save=logwatch.today
Bonne config de logwatch.conf :
Range=All (au lieu de "Yesterday")
Detail=High
Archives=Yes (ajoute les logs des semaines précédentes, pas seulement le log en cours)
Equivalent commande : --range=All --archives
Exemple de config sur planetoweb (aug 2010) :
Création d'une config locale /etc/logwatch/conf/logwatch.conf :
Range = All
Detail = High
Archives = Yes
Output = html
Save = /var/www/html/servers/planetoweb/logwatch.html
Résultat sur
http://planetoweb/servers/planetoweb/logwatch.html
swatch
http://www.linux-mag.com/id/7807
yum install swatch
[root@planetoweb planetoweb]# rpm -ql swatch
/usr/bin/swatch
/usr/lib/perl5/vendor_perl/5.8.8/Swatch
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Actions.pm
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Threshold.pm
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Throttle.pm
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch/Actions
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch/Actions/autosplit.ix
/usr/share/doc/swatch-3.2.1
/usr/share/doc/swatch-3.2.1/CHANGES
/usr/share/doc/swatch-3.2.1/COPYING
/usr/share/doc/swatch-3.2.1/COPYRIGHT
/usr/share/doc/swatch-3.2.1/KNOWN_BUGS
/usr/share/doc/swatch-3.2.1/README
/usr/share/doc/swatch-3.2.1/examples
/usr/share/doc/swatch-3.2.1/examples/SendMail.pm
/usr/share/doc/swatch-3.2.1/tools
/usr/share/doc/swatch-3.2.1/tools/reswatch
/usr/share/doc/swatch-3.2.1/tools/swatch_oldrc2newrc
/usr/share/man/man1/swatch.1.gz
/usr/share/man/man3/Swatch::Actions.3pm.gz
/usr/share/man/man3/Swatch::Threshold.3pm.gz
/usr/share/man/man3/Swatch::Throttle.3pm.gz
/usr/share/doc/swatch
Créer un startup script : vi /etc/init.d/swatch
#!/bin/sh
# Simple Log Watcher Program
case "$1" in
'start')
/usr/bin/swatch --daemon --config-file=/etc/swatch.conf --tail-file=/var/log/auth.log --pid-file=/var/run/swatch.pid
;;
'stop')
PID=`cat /var/run/swatch.pid`
kill $PID
;;
*)
echo "Usage: $0 { start | stop }"
;;
esac
exit 0
chmod 755 /etc/init.d/swatch
Make sure swatch starts automatically at my runlevels :
# ln -s /etc/init.d/swatch /etc/rc2.d/S99swatch
# ln -s /etc/init.d/swatch /etc/rc3.d/S99swatch
# ln -s /etc/init.d/swatch /etc/rc5.d/S99swatch
Créer un fichier de conf /etc/swatch.conf :
watchfor /invalid|repeated|incomplete/
echo
write khess
mail addresses=khess@localhost, subject=Authentication Problems
/etc/init.d/swatch start ==> créer un pid dans /var/run/swatch.pid et un fichier /root/.swatch_script.xxxx (avec xxxx = pid - 2)
SSH, config plus stricte
vi /etc/ssh/sshd_config
Port 22 : on pourrait mettre ici un autre port, genre 2010, histoire de brouiller les pirates...
PermitRootLogin? no
LoginGraceTime? 2m
changed to :
LoginGraceTime? 30
/etc/init.d/sshd restart
Surveiller un serveur
last reboot
lastlog
dmesg
lspci
/var/log/messages
/var/log/boot.log
Voir aussi section suivante (test des disques)
Tester les disques durs
Occupation disques : df -h
[root@hyperion home]# df -h
Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur
/dev/sda3 178G 63G 106G 38% /
/dev/sdb1 2,7T 1,4T 1,3T 52% /data
/dev/sda1 99M 29M 65M 31% /boot
tmpfs 24G 4,0K 24G 1% /dev/shm
cat /proc/partitions
cat /etc/mtab
cat /proc/mounts (equivalent de la commande "mount")
cat /proc/scsi/scsi
Voir aussi si messages d'erreur disques dans /var/log/messsages
Tester aussi la commande dmesg (equivalent à /var/log/dmesg)
Yum
Annuler l'information sur les updates disponibles :
/etc/init.d/yum-updatesd stop
su -c 'chkconfig --level 2345 yum-updatesd off'
Every other workaround seems to only kill yum-updatesd for runlevel 5.
Try yum update after that.
Keep in mind that you will no longer be informed that there updates available and as such you will need to check periodically with
yum check-update
Quels sont les packages commençant par "mesa-" installés + à installer ? --> yum list mesa-*
Samba
Créer un new user "toto" : sbmpasswd -a toto
Mettre à jour le pass de "toto" : smbpasswd toto
Est-ce que samba est à l'écoute ? : service smb status
Redémarrer samba : service smb restart
Depuis le poste client windows :
clic droit sur Poste de Travail / Créer un lecteur réseau / "\\nom_du_serveur\mon_nom"
Corriger un bug sur Mac Leopard (pas sur Tiger) : samba ne suit pas les liens qui vont vers un disque différent
Pour corriger ce bug, il suffit d'ajouter cette ligne dans la partie "[global]" du smb.conf :
unix extensions = no
WINDOWS
Visualiser les fichiers Postscript
Installer GhostScript (engine) puis GhostView (frontend)
http://pages.cs.wisc.edu/~ghost/
Convertir un fichier Postscript en JPEG (ou autre) avec GhostScript (en mode batch)
Pour info, sur Linux, c'est très simple, il suffit d'utiliser la commande "convert" (ou plus spécifique "ps2...")
Sous Windows, c'est un peu plus compliqué.
GhostScript converts PS to PNG, JPEG, PNM, TIFF, BMP, PCX, PSD, PDF, EPS, PCL-XL.
1) Télécharger la version Windows de GhostScript et l'installer
http://pages.cs.wisc.edu/~ghost/
ou encore:
http://ghostscript.com/releases/
2) Ajouter le dossier exécutable de
GhosScript dans votre PATH windows
set PATH=%PATH%;C:\Program Files\gs\gs9.00\bin
3) Exemple de conversion d'un fichier PS en JPG:
Aller dans le dossier qui contient le fichier PS (somefile.ps) à convertir (cd ...)
L'instruction suivante créera un fichier somefile.jpg dans c:\temp :
gswin32c -sDEVICE=jpeg -o c:\temp\somefile.jpg somefile.ps
Pour plus d'information sur les possibilités de GhostScript :
http://pages.cs.wisc.edu/~ghost/doc/cvs/Use.htm
REMARQUE : pour faire la même chose en mode graphique,
il existe une interface graphique qui s'installe par-dessus GhostScript (en frontend),
c'est GhostView (gsview) :
http://pages.cs.wisc.edu/~ghost/gsview/index.htm
Migrer de Windows XP vers Windows 7
Il faut acheter la licence Microsoft. La démarche dépend de la marque du PC.
Pour un hp : aller sur le site hp et rechercher "windows upgrade"
Modèles éligibles :
http://h41112.www4.hp.com/promo/win7web/fr/fr/eligmodels.html
http://welcome.hp.com/country/fr/fr/mda/windows7/upgrade/which_version.html?jumpid=reg_R1002_FRFR
http://h41112.www4.hp.com/promo/win7web/fr/fr/
Envoyer des mails avec Outlook quand on n'est pas au CESR
1) "Creuser" un tunnel avec Putty
Créer une nouvelle session que vous appelerez par exemple "tunnel_mail_cesr",
et qui créera un tunnel entre le port local 9025 et le port SMTP (25) du serveur de mail cesr (fw-in.cesr.fr).
La procédure est décrite sur la faq informatique du cesr :
http://www1.cesr.fr/intranet/informatique/faq/ssh-tunnels/ssh.htm#_Toc150503764
(Exemple 1, cas numéro 2)
Il faudra lancer cette session (et la garder ouverte en tâche de fond) avant d'envoyer un mail
2) Configurer votre client mail Outlook
- Menu Outils/Paramètres du compte
- Clic sur bouton "Modifier"
- Dans le champ "Serveur de courrier sortant (SMTP)", remplacer "mailhost.cesr.fr" par "localhost"
- Clic sur bouton "Paramètres supplémentaires...", clic sur onglet "Options avancées"
- Dans le champ "Serveur Sortant (SMTP)", remplacer "25" par "9025"
Bien sûr, il faut tout remettre en place quand on revient au cesr (en fait, on pourrait aussi fonctionner en permanence avec le tunnel, même au CESR...)
Synchroniser Outlook 2007 Calendar et Google Calendar
http://content.techrepublic.com.com/2346-10877_11-191016.html
Installer un serveur X sur Windows pour afficher les fenêtres graphiques de linux
On propose d'utiliser Xming qui est un serveur X gratuit pour Windows
Il suffit d'éxécuter Xming avant de lancer une session graphique via putty (ou autre shell)
Installation :
http://sourceforge.net/projects/xming
Cliquer sur Download
1) Installer Xming
2) Installer Xming-fonts (surtout nécessaire pour Emacs)
--
EtiennePallier - 25 Dec 2009